From owner-freebsd-hackers@FreeBSD.ORG Sat Nov 6 08:13:25 2010 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6976C10656A5; Sat, 6 Nov 2010 08:13:25 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-ww0-f50.google.com (mail-ww0-f50.google.com [74.125.82.50]) by mx1.freebsd.org (Postfix) with ESMTP id 7AF1A8FC18; Sat, 6 Nov 2010 08:13:24 +0000 (UTC) Received: by wwb28 with SMTP id 28so255158wwb.31 for ; Sat, 06 Nov 2010 01:13:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:cc:content-type; bh=jAoTMEpLDUZuS4WToi2rQNNUzpmCnhRSEKPkflmMQJ4=; b=JdiSIDEH5gfWL/XHyblOW0U1DTKY9qX2H8SFxMRMxiKof5Ug/PIRLsQ33J1zjhRgS4 YvX3qsv7cGOoagz0mJQ2P+FRf9Hqm+FMibfN2aaJ4TvAfDbD9AcZcC0kMHU/TAylfaqo IlRq1vx9cUaFgI7i+vDlMSs6dPSpppvpR7Ipk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:cc:content-type; b=VLP4YIOUzbs+D1LzELIs4EBcxzoqx14Nfs1P4NunP2uGDknWtK/lU1AG0KBXpVsV8v VBO5ZxDG3ZQAwHc4A+bwWBVlPvR0oKDCgiQ38pCS6IvI67FX5RW0aKFN0yp/8fk9IefJ zQRWjbZLFTX2yCroIEynlotbzIRxaY+sDE+X8= MIME-Version: 1.0 Received: by 10.216.175.18 with SMTP id y18mr3106361wel.30.1289031203545; Sat, 06 Nov 2010 01:13:23 -0700 (PDT) Received: by 10.216.198.27 with HTTP; Sat, 6 Nov 2010 01:13:23 -0700 (PDT) Date: Sat, 6 Nov 2010 01:13:23 -0700 Message-ID: From: Garrett Cooper To: freebsd-hackers@freebsd.org Content-Type: multipart/mixed; boundary=0016e6567d28fde28604945df687 Cc: Subject: [PATCH] mptutil(8) - capture errors and percolate up to caller X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Nov 2010 08:13:25 -0000 --0016e6567d28fde28604945df687 Content-Type: text/plain; charset=ISO-8859-1 Similar to r214396, this patch deals with properly capturing error and passing it up to the caller in mptutil just in case the errno value gets stomped on by warn*(3); this patch deals with an improper use of warn(3), and also some malloc(3) errors, as well as shrink down some static buffers to fit the data being output. If someone could review and help me commit this patch it would be much appreciated; all I could do is run negative tests on my local box and minor positive tests on my vmware fusion instance because it doesn't fully emulate a fully working mpt(4) device (the vmware instance consistently crashed with a warning about the mpt controller's unimplemented features after I poked at it enough). I'll submit another patch to fix up style(9) in this app if requested. Thanks! -Garrett --0016e6567d28fde28604945df687 Content-Type: text/x-patch; charset=US-ASCII; name="mptutil-capture-errno-values.patch" Content-Disposition: attachment; filename="mptutil-capture-errno-values.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gg67siny1 SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2V2dC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmlu L21wdHV0aWwvbXB0X2V2dC5jCShyZXZpc2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGls L21wdF9ldnQuYwkod29ya2luZyBjb3B5KQpAQCAtOTQsMTggKzk0LDIwIEBACiB7CiAJQ09ORklH X1BBR0VfTE9HXzAgKmxvZzsKIAlNUElfTE9HXzBfRU5UUlkgKiplbnRyaWVzOwotCWludCBjaCwg ZmQsIGksIG51bV9ldmVudHMsIHZlcmJvc2U7CisJaW50IGNoLCBlcnJvciwgZmQsIGksIG51bV9l dmVudHMsIHZlcmJvc2U7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsb2cgPSBtcHRfZ2V0X2V2ZW50cyhmZCwg TlVMTCk7CiAJaWYgKGxvZyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZh aWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy biAoZXJyb3IpOwogCX0KIAogCS8qIERlZmF1bHQgc2V0dGluZ3MuICovCkBAIC0xMjgsNiArMTMw LDggQEAKIAogCS8qIEJ1aWxkIGEgbGlzdCBvZiB2YWxpZCBlbnRyaWVzIGFuZCBzb3J0IHRoZW0g Ynkgc2VxdWVuY2UuICovCiAJZW50cmllcyA9IG1hbGxvYyhzaXplb2YoTVBJX0xPR18wX0VOVFJZ ICopICogbG9nLT5OdW1Mb2dFbnRyaWVzKTsKKwlpZiAoZW50cmllcyA9PSBOVUxMKQorCQlyZXR1 cm4gKGVycm5vKTsKIAludW1fZXZlbnRzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbG9nLT5OdW1M b2dFbnRyaWVzOyBpKyspIHsKIAkJaWYgKGxvZy0+TG9nRW50cnlbaV0uTG9nRW50cnlRdWFsaWZp ZXIgPT0KSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2NhbS5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVz ci5zYmluL21wdHV0aWwvbXB0X2NhbS5jCShyZXZpc2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9t cHR1dGlsL21wdF9jYW0uYwkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogCXN0cnVj dCBidXNfbWF0Y2hfcGF0dGVybiAqYjsKIAl1bmlvbiBjY2IgY2NiOwogCXNpemVfdCBidWZzaXpl OworCWludCBlcnJvcjsKIAogCWlmICh4cHRfb3BlbigpIDwgMCkKIAkJcmV0dXJuIChFTlhJTyk7 CkBAIC05MSw5ICs5MiwxMCBAQAogCWItPmZsYWdzID0gQlVTX01BVENIX05BTUUgfCBCVVNfTUFU Q0hfVU5JVCB8IEJVU19NQVRDSF9CVVNfSUQ7CiAKIAlpZiAoaW9jdGwoeHB0ZmQsIENBTUlPQ09N TUFORCwgJmNjYikgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCWZyZWUoY2NiLmNkbS5tYXRj aGVzKTsKIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl dHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGNjYi5jZG0ucGF0dGVybnMpOwogCkBAIC0xMjQsNyAr MTI2LDcgQEAKIAl1bmlvbiBjY2IgY2NiOwogCXBhdGhfaWRfdCBwYXRoX2lkOwogCXNpemVfdCBi dWZzaXplOwotCWludCBlcnJvciwgaTsKKwlpbnQgZXJyb3I7CiAKIAkvKiBtcHQoNCkgb25seSBo YW5kbGVzIGRldmljZXMgb24gYnVzIDAuICovCiAJaWYgKFZvbHVtZUJ1cyAhPSAwKQpAQCAtMTY0 LDEwICsxNjYsMTAgQEAKIAlwLT5mbGFncyA9IFBFUklQSF9NQVRDSF9QQVRIIHwgUEVSSVBIX01B VENIX05BTUUgfCBQRVJJUEhfTUFUQ0hfVEFSR0VUOwogCiAJaWYgKGlvY3RsKHhwdGZkLCBDQU1J T0NPTU1BTkQsICZjY2IpIDwgMCkgewotCQlpID0gZXJybm87CisJCWVycm9yID0gZXJybm87CiAJ CWZyZWUoY2NiLmNkbS5tYXRjaGVzKTsKIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJcmV0 dXJuIChpKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7 CiAKQEAgLTIzNiw3ICsyMzgsNyBAQAogCiAJY2NiID0gY2FtX2dldGNjYihkZXYpOwogCWlmIChj Y2IgPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9NRU0pOworCQlyZXR1cm4gKGVycm5vKTsKIAogCS8q IFplcm8gdGhlIHJlc3Qgb2YgdGhlIGNjYi4gKi8KIAliemVybygmKCZjY2ItPmNjYl9oKVsxXSwg c2l6ZW9mKHN0cnVjdCBjY2Jfc2NzaWlvKSAtCkBAIC0zNTAsNyArMzUyLDcgQEAKIAogCWNjYiA9 IGNhbV9nZXRjY2IoZGV2KTsKIAlpZiAoY2NiID09IE5VTEwpCi0JCXJldHVybiAoRU5PTUVNKTsK KwkJcmV0dXJuIChlcnJubyk7CiAKIAkvKiBaZXJvIHRoZSByZXN0IG9mIHRoZSBjY2IuICovCiAJ Ynplcm8oJigmY2NiLT5jY2JfaClbMV0sIHNpemVvZihzdHJ1Y3QgY2NiX3Njc2lpbykgLQpAQCAt MzU4LDggKzM2MCw5IEBACiAKIAlpbnFfYnVmID0gY2FsbG9jKDEsIHNpemVvZigqaW5xX2J1Zikp OwogCWlmIChpbnFfYnVmID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJY2FtX2ZyZWVj Y2IoY2NiKTsKLQkJcmV0dXJuIChFTk9NRU0pOworCQlyZXR1cm4gKGVycm5vKTsKIAl9CiAJc2Nz aV9pbnF1aXJ5KCZjY2ItPmNzaW8sIDEsIE5VTEwsIE1TR19TSU1QTEVfUV9UQUcsICh2b2lkICop aW5xX2J1ZiwKIAkgICAgU0hPUlRfSU5RVUlSWV9MRU5HVEgsIDAsIDAsIFNTRF9GVUxMX1NJWkUs IDUwMDApOwpAQCAtMzk3LDggKzQwMCw4IEBACiAJdW5pb24gY2NiIGNjYjsKIAlwYXRoX2lkX3Qg cGF0aF9pZDsKIAlzaXplX3QgYnVmc2l6ZTsKLQl1X2ludCBpOwogCWludCBjb3VudCwgZXJyb3I7 CisJdWludDMyX3QgaTsKIAogCWlmICh4cHRfb3BlbigpIDwgMCkKIAkJcmV0dXJuIChFTlhJTyk7 CkBAIC00MzEsMTAgKzQzNCwxMCBAQAogCQlwLT5mbGFncyA9IFBFUklQSF9NQVRDSF9QQVRIIHwg UEVSSVBIX01BVENIX05BTUU7CiAKIAkJaWYgKGlvY3RsKHhwdGZkLCBDQU1JT0NPTU1BTkQsICZj Y2IpIDwgMCkgewotCQkJaSA9IGVycm5vOworCQkJZXJyb3IgPSBlcnJubzsKIAkJCWZyZWUoY2Ni LmNkbS5tYXRjaGVzKTsKIAkJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCQlyZXR1cm4gKGkp OworCQkJcmV0dXJuIChlcnJvcik7CiAJCX0KIAkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKIApA QCAtNDgxLDYgKzQ4NCw4IEBACiAJICogZXhjbHVkZSB0aGVtIGZyb20gdGhlIGxpc3QuCiAJICov CiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKKwlpZiAoaW9jMiA9PSBO VUxMKQorCQlyZXR1cm4gKGVycm5vKTsKIAlkaXNrcyA9IGNhbGxvYyhjY2IuY2RtLm51bV9tYXRj aGVzLCBzaXplb2YoKmRpc2tzKSk7CiAJY291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjY2Iu Y2RtLm51bV9tYXRjaGVzOyBpKyspIHsKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9zaG93LmMJKHJldmlzaW9uIDIx NDU2OCkKKysrIHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cuYwkod29ya2luZyBjb3B5KQpAQCAt NzksNyArNzksNyBAQAogCUNPTkZJR19QQUdFX0lPQ18yICppb2MyOwogCUNPTkZJR19QQUdFX0lP Q182ICppb2M2OwogCVUxNiBJT0NTdGF0dXM7Ci0JaW50IGZkLCBjb21tYTsKKwlpbnQgY29tbWEs IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IGFkYXB0ZXI6IGV4 dHJhIGFyZ3VtZW50cyIpOwpAQCAtODgsMTcgKzg4LDE5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1w dF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9v cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAltYW4w ID0gbXB0X3JlYWRfbWFuX3BhZ2UoZmQsIDAsIE5VTEwpOwogCWlmIChtYW4wID09IE5VTEwpIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjb250cm9sbGVyIGluZm8i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAobWFuMC0+ SGVhZGVyLlBhZ2VMZW5ndGggPCBzaXplb2YoKm1hbjApIC8gNCkgewotCQl3YXJuKCJJbnZhbGlk IGNvbnRyb2xsZXIgaW5mbyIpOworCQl3YXJueCgiSW52YWxpZCBjb250cm9sbGVyIGluZm8iKTsK IAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIAlwcmludGYoIm1wdCVkIEFkYXB0ZXI6XG4iLCBtcHRf dW5pdCk7CkBAIC0yODMsNyArMjg1LDcgQEAKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8xICp2bmFt ZXM7CiAJQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCAqcGluZm87CiAJc3RydWN0IG1wdF9z dGFuZGFsb25lX2Rpc2sgKnNkaXNrczsKLQlpbnQgZmQsIGksIGosIG5zZGlza3M7CisJaW50IGVy cm9yLCBmZCwgaSwgaiwgbnNkaXNrczsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93 IGNvbmZpZzogZXh0cmEgYXJndW1lbnRzIik7CkBAIC0yOTIsMjAgKzI5NCwyMyBAQAogCiAJZmQg PSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwog CQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCiAJLyogR2V0IHRoZSBjb25maWcgZnJvbSB0aGUgY29udHJvbGxlci4gKi8KIAlpb2My ID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlvYzUgPSBtcHRfcmVhZF9pb2Nf cGFnZShmZCwgNSwgTlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCB8fCBpb2M1ID09IE5VTEwpIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBjb25maWciKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlpZiAobXB0X2ZldGNoX2Rpc2tz KGZkLCAmbnNkaXNrcywgJnNkaXNrcykgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o IkZhaWxlZCB0byBnZXQgc3RhbmRhbG9uZSBkcml2ZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8p OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBEdW1wIG91dCB0aGUgY29uZmlndXJhdGlv bi4gKi8KQEAgLTM4MSw3ICszODYsNyBAQAogCUNPTkZJR19QQUdFX0lPQ18yX1JBSURfVk9MICp2 b2w7CiAJQ09ORklHX1BBR0VfUkFJRF9WT0xfMCAqKnZvbHVtZXM7CiAJQ09ORklHX1BBR0VfUkFJ RF9WT0xfMSAqdm5hbWVzOwotCWludCBmZCwgaSwgbGVuLCBzdGF0ZV9sZW47CisJaW50IGVycm9y LCBmZCwgaSwgbGVuLCBzdGF0ZV9sZW47CiAKIAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hv dyB2b2x1bWVzOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTM5MCwxNSArMzk1LDE3IEBACiAKIAlm ZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87 CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y KTsKIAl9CiAKIAkvKiBHZXQgdGhlIHZvbHVtZSBsaXN0IGZyb20gdGhlIGNvbnRyb2xsZXIuICov CiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBO VUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgdm9sdW1lIGxp c3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qCkBA IC00NjYsNyArNDczLDcgQEAKIHsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxpc3Q7CiAJc3Ry dWN0IG1wdF9zdGFuZGFsb25lX2Rpc2sgKnNkaXNrczsKLQlpbnQgZmQsIGksIGxlbiwgbnNkaXNr cywgc3RhdGVfbGVuOworCWludCBlcnJvciwgZmQsIGksIGxlbiwgbnNkaXNrcywgc3RhdGVfbGVu OwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgZHJpdmVzOiBleHRyYSBhcmd1bWVu dHMiKTsKQEAgLTQ3NSwxNSArNDgyLDE3IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsK IAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0J CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBHZXQgdGhlIGRy aXZlIGxpc3QuICovCiAJbGlzdCA9IG1wdF9wZF9saXN0KGZkKTsKIAlpZiAobGlzdCA9PSBOVUxM KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBnZXQgZHJpdmUgbGlzdCIp OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyogRmV0Y2gg dGhlIGxpc3Qgb2Ygc3RhbmRhbG9uZSBkaXNrcyBmb3IgdGhpcyBjb250cm9sbGVyLiAqLwpAQCAt NTM4LDggKzU0Nyw5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBUcnkgdG8gZmluZCBlYWNoIHBvc3Np YmxlIHBoeXMgZGlzayBwYWdlLiAqLwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMJKHJldmlzaW9uIDIxNDU2 OCkKKysrIHVzci5zYmluL21wdHV0aWwvbXB0X2NtZC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs NyArMjIxLDcgQEAKIGNvbnN0IGNoYXIgKgogbXB0X2lvY19zdGF0dXMoVTE2IElPQ1N0YXR1cykK IHsKLQlzdGF0aWMgY2hhciBidWZmZXJbMTZdOworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxNV07CiAK IAlJT0NTdGF0dXMgJj0gTVBJX0lPQ1NUQVRVU19NQVNLOwogCWlmIChJT0NTdGF0dXMgPCBzaXpl b2YobXB0X2lvY19zdGF0dXNfY29kZXMpIC8gc2l6ZW9mKGNoYXIgKikgJiYKQEAgLTIzNCw3ICsy MzQsNyBAQAogY29uc3QgY2hhciAqCiBtcHRfcmFpZF9zdGF0dXMoVTE2IEFjdGlvblN0YXR1cykK IHsKLQlzdGF0aWMgY2hhciBidWZmZXJbMTZdOworCXN0YXRpYyBjaGFyIGJ1ZmZlclsxNV07CiAK IAlpZiAoQWN0aW9uU3RhdHVzIDwgc2l6ZW9mKG1wdF9yYWlkX2FjdGlvbl9zdGF0dXNfY29kZXMp IC8KIAkgICAgc2l6ZW9mKGNoYXIgKikpCkBAIC0yNDYsNyArMjQ2LDYgQEAKIGNvbnN0IGNoYXIg KgogbXB0X3JhaWRfbGV2ZWwoVTggVm9sdW1lVHlwZSkKIHsKLQlzdGF0aWMgY2hhciBidWZbMTZd OwogCiAJc3dpdGNoIChWb2x1bWVUeXBlKSB7CiAJY2FzZSBNUElfUkFJRF9WT0xfVFlQRV9JUzoK QEAgLTI2MywxMCArMjYyLDEyIEBACiAJCXJldHVybiAoIlJBSUQtMTAiKTsKIAljYXNlIE1QSV9S QUlEX1ZPTF9UWVBFX1JBSURfNTA6CiAJCXJldHVybiAoIlJBSUQtNTAiKTsKLQlkZWZhdWx0Ogor CWRlZmF1bHQ6IHsKKwkJc3RhdGljIGNoYXIgYnVmWzldOwogCQlzcHJpbnRmKGJ1ZiwgIkxWTCAw eCUwMngiLCBWb2x1bWVUeXBlKTsKIAkJcmV0dXJuIChidWYpOwogCX0KKwl9CiB9CiAKIGNvbnN0 IGNoYXIgKgpAQCAtMzEwLDE4ICszMTEsMTUgQEAKIAkJaWQgPSBzdHJ0b2woY3AgKyAxLCAmY3As IDApOwogCQlpZiAoKmNwID09ICdcMCcpIHsKIAkJCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYg fHwgaWQgPCAwIHx8IGlkID4gMHhmZikgewotCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCXJldHVy biAoLTEpOworCQkJCXJldHVybiAoRUlOVkFMKTsKIAkJCX0KIAkJCSpWb2x1bWVCdXMgPSBidXM7 CiAJCQkqVm9sdW1lSUQgPSBpZDsKIAkJCXJldHVybiAoMCk7CiAJCX0KIAl9IGVsc2UgaWYgKCpj cCA9PSAnXDAnKSB7Ci0JCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYpIHsKLQkJCWVycm5vID0g RUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KKwkJaWYgKGJ1cyA8IDAgfHwgYnVzID4gMHhm ZikKKwkJCXJldHVybiAoRUlOVkFMKTsKIAkJKlZvbHVtZUJ1cyA9IDA7CiAJCSpWb2x1bWVJRCA9 IGJ1czsKIAkJcmV0dXJuICgwKTsKQEAgLTMyOSw3ICszMjcsNyBAQAogCiAJaW9jMiA9IG1wdF9y ZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBOVUxMKQotCQlyZXR1cm4g KC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAKIAl2b2wgPSBpb2MyLT5SYWlkVm9sdW1lOwogCWZv ciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVzOyB2b2wrKywgaSsrKSB7CkBAIC0z NDMsOCArMzQxLDcgQEAKIAkJfQogCX0KIAlmcmVlKGlvYzIpOwotCWVycm5vID0gRUlOVkFMOwot CXJldHVybiAoLTEpOworCXJldHVybiAoRUlOVkFMKTsKIH0KIAogaW50CkBAIC0zNjAsMTUgKzM1 NywxNCBAQAogCXJlcS5oZWFkZXIuUGFnZU51bWJlciA9IFBhZ2VOdW1iZXI7CiAJcmVxLnBhZ2Vf YWRkcmVzcyA9IFBhZ2VBZGRyZXNzOwogCWlmIChpb2N0bChmZCwgTVBUSU9fUkVBRF9DRkdfSEVB REVSLCAmcmVxKSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmICghSU9DX1NUQVRVU19TVUNDRVNT KHJlcS5pb2Nfc3RhdHVzKSkgeworCQlyZXR1cm4gKGVycm5vKTsKKwlpZiAoSU9DX1NUQVRVU19T VUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSA9PSAwKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkK IAkJCSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQogCQkJd2FybngoIlJlYWRp bmcgY29uZmlnIHBhZ2UgaGVhZGVyIGZhaWxlZDogJXMiLAogCQkJICAgIG1wdF9pb2Nfc3RhdHVz KHJlcS5pb2Nfc3RhdHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0 dXJuIChFSU8pOwogCX0KIAkqaGVhZGVyID0gcmVxLmhlYWRlcjsKIAlyZXR1cm4gKDApOwpAQCAt MzgwLDcgKzM3Niw3IEBACiB7CiAJc3RydWN0IG1wdF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQg KmJ1ZjsKLQlpbnQgc2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9 IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC0zOTAsNyAr Mzg2LDcgQEAKIAlyZXEucGFnZV9hZGRyZXNzID0gUGFnZUFkZHJlc3M7CiAJaWYgKGlvY3RsKGZk LCBNUFRJT19SRUFEX0NGR19IRUFERVIsICZyZXEpIDwgMCkKIAkJcmV0dXJuIChOVUxMKTsKLQlp ZiAoIUlPQ19TVEFUVVNfU1VDQ0VTUyhyZXEuaW9jX3N0YXR1cykpIHsKKwlpZiAoSU9DX1NUQVRV U19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSA9PSAwKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVM TCkKIAkJCSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQpAQCAtNDA0LDkgKzQw MCw5IEBACiAJcmVxLmJ1ZiA9IGJ1ZjsKIAliY29weSgmcmVxLmhlYWRlciwgYnVmLCBzaXplb2Yo cmVxLmhlYWRlcikpOwogCWlmIChpb2N0bChmZCwgTVBUSU9fUkVBRF9DRkdfUEFHRSwgJnJlcSkg PCAwKSB7Ci0JCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IgPSBlcnJubzsKIAkJZnJlZShi dWYpOwotCQllcnJubyA9IHNhdmVfZXJybm87CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAo TlVMTCk7CiAJfQogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgewpA QCAtNDI4LDcgKzQyNCw3IEBACiB7CiAJc3RydWN0IG1wdF9leHRfY2ZnX3BhZ2VfcmVxIHJlcTsK IAl2b2lkICpidWY7Ci0JaW50IHNhdmVfZXJybm87CisJaW50IGVycm9yOwogCiAJaWYgKElPQ1N0 YXR1cyAhPSBOVUxMKQogCQkqSU9DU3RhdHVzID0gTVBJX0lPQ1NUQVRVU19TVUNDRVNTOwpAQCAt NDM5LDcgKzQzNSw3IEBACiAJcmVxLnBhZ2VfYWRkcmVzcyA9IFBhZ2VBZGRyZXNzOwogCWlmIChp b2N0bChmZCwgTVBUSU9fUkVBRF9FWFRfQ0ZHX0hFQURFUiwgJnJlcSkgPCAwKQogCQlyZXR1cm4g KE5VTEwpOwotCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgeworCWlm IChJT0NfU1RBVFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0 YXR1cyAhPSBOVUxMKQogCQkJKklPQ1N0YXR1cyA9IHJlcS5pb2Nfc3RhdHVzOwogCQllbHNlCkBA IC00NTMsMTIgKzQ0OSwxMiBAQAogCXJlcS5idWYgPSBidWY7CiAJYmNvcHkoJnJlcS5oZWFkZXIs IGJ1Ziwgc2l6ZW9mKHJlcS5oZWFkZXIpKTsKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JFQURfRVhU X0NGR19QQUdFLCAmcmVxKSA8IDApIHsKLQkJc2F2ZV9lcnJubyA9IGVycm5vOworCQllcnJvciA9 IGVycm5vOwogCQlmcmVlKGJ1Zik7Ci0JCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJZXJybm8gPSBl cnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9Ci0JaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1MocmVx LmlvY19zdGF0dXMpKSB7CisJaWYgKElPQ19TVEFUVVNfU1VDQ0VTUyhyZXEuaW9jX3N0YXR1cykg PT0gMCkgewogCQlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCQkqSU9DU3RhdHVzID0gcmVxLmlv Y19zdGF0dXM7CiAJCWVsc2UKQEAgLTQ4NCwxNiArNDgwLDE1IEBACiAJaGRyID0gYnVmOwogCXJl cS5sZW4gPSBoZHItPlBhZ2VMZW5ndGggKiA0OwogCWlmIChpb2N0bChmZCwgTVBUSU9fV1JJVEVf Q0ZHX1BBR0UsICZyZXEpIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JaWYgKCFJT0NfU1RBVFVTX1NV Q0NFU1MocmVxLmlvY19zdGF0dXMpKSB7CisJCXJldHVybiAoZXJybm8pOworCWlmIChJT0NfU1RB VFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0YXR1cyAhPSBO VUxMKSB7CiAJCQkqSU9DU3RhdHVzID0gcmVxLmlvY19zdGF0dXM7CiAJCQlyZXR1cm4gKDApOwog CQl9CiAJCXdhcm54KCJXcml0aW5nIGNvbmZpZyBwYWdlIGZhaWxlZDogJXMiLAogCQkgICAgbXB0 X2lvY19zdGF0dXMocmVxLmlvY19zdGF0dXMpKTsKLQkJZXJybm8gPSBFSU87Ci0JCXJldHVybiAo LTEpOworCQlyZXR1cm4gKEVJTyk7CiAJfQogCXJldHVybiAoMCk7CiB9CkBAIC01MDcsMTAgKzUw Miw4IEBACiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9D U1RBVFVTX1NVQ0NFU1M7Ci0JaWYgKGRhdGFsZW4gPCAwIHx8ICh1bnNpZ25lZClkYXRhbGVuID4g c2l6ZW9mKHJhaWRfYWN0LmFjdGlvbl9kYXRhKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0 dXJuICgtMSk7Ci0JfQorCWlmIChkYXRhbGVuIDwgMCB8fCAodW5zaWduZWQpZGF0YWxlbiA+IHNp emVvZihyYWlkX2FjdC5hY3Rpb25fZGF0YSkpCisJCXJldHVybiAoRUlOVkFMKTsKIAliemVybygm cmFpZF9hY3QsIHNpemVvZihyYWlkX2FjdCkpOwogCXJhaWRfYWN0LmFjdGlvbiA9IEFjdGlvbjsK IAlyYWlkX2FjdC52b2x1bWVfYnVzID0gVm9sdW1lQnVzOwpAQCAtNTI0LDE3ICs1MTcsMTYgQEAK IAl9CiAKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JBSURfQUNUSU9OLCAmcmFpZF9hY3QpIDwgMCkK LQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCi0JaWYgKCFJT0NfU1RBVFVTX1NV Q0NFU1MocmFpZF9hY3QuaW9jX3N0YXR1cykpIHsKKwlpZiAoSU9DX1NUQVRVU19TVUNDRVNTKHJh aWRfYWN0LmlvY19zdGF0dXMpID09IDApIHsKIAkJaWYgKElPQ1N0YXR1cyAhPSBOVUxMKSB7CiAJ CQkqSU9DU3RhdHVzID0gcmFpZF9hY3QuaW9jX3N0YXR1czsKIAkJCXJldHVybiAoMCk7CiAJCX0K IAkJd2FybngoIlJBSUQgYWN0aW9uIGZhaWxlZDogJXMiLAogCQkgICAgbXB0X2lvY19zdGF0dXMo cmFpZF9hY3QuaW9jX3N0YXR1cykpOwotCQllcnJubyA9IEVJTzsKLQkJcmV0dXJuICgtMSk7CisJ CXJldHVybiAoRUlPKTsKIAl9CiAKIAlpZiAoQWN0aW9uU3RhdHVzICE9IE5VTEwpCkBAIC01NDQs OCArNTM2LDcgQEAKIAkJCXJldHVybiAoMCk7CiAJCXdhcm54KCJSQUlEIGFjdGlvbiBmYWlsZWQ6 ICVzIiwKIAkJICAgIG1wdF9yYWlkX3N0YXR1cyhyYWlkX2FjdC5hY3Rpb25fc3RhdHVzKSk7Ci0J CWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFSU8pOwogCX0KIAogCWlm IChWb2x1bWVTdGF0dXMgIT0gTlVMTCkKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2NvbmZp Zy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X2NvbmZpZy5jCShyZXZpc2lv biAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jb25maWcuYwkod29ya2luZyBjb3B5 KQpAQCAtMTA0LDEzICsxMDQsMTQgQEAKIAlpZiAoZXJyb3IpIHsKIAkJZXJybm8gPSBlcnJvcjsK IAkJd2FybigiVW5hYmxlIHRvIGxvb2t1cCB2b2x1bWUgZGV2aWNlIG5hbWUiKTsKLQkJcmV0dXJu ICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0 aCksICIlcyVzIiwgX1BBVEhfREVWLCBxZC5kZXZuYW1lKTsKIAl2ZmQgPSBvcGVuKHBhdGgsIE9f UkRXUik7CiAJaWYgKHZmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiVW5hYmxl IHRvIGxvY2sgdm9sdW1lICVzIiwgcWQuZGV2bmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1 cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTExOSwxMyArMTIwLDE0IEBACiBt cHRfbG9ja19waHlzZGlzayhzdHJ1Y3QgbXB0X3N0YW5kYWxvbmVfZGlzayAqZGlzaykKIHsKIAlj aGFyIHBhdGhbTUFYUEFUSExFTl07Ci0JaW50IGRmZDsKKwlpbnQgZGZkLCBlcnJvcjsKIAogCXNu cHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJXMiLCBfUEFUSF9ERVYsIGRpc2stPmRldm5h bWUpOwogCWRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKIAlpZiAoZGZkIDwgMCkgeworCQllcnJv ciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9jayBkaXNrICVzIiwgZGlzay0+ZGV2bmFt ZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsK IH0KQEAgLTE0NCw4ICsxNDYsNyBAQAogCQlpZCA9IHN0cnRvbChjcCArIDEsICZjcCwgMCk7CiAJ CWlmICgqY3AgPT0gJ1wwJykgewogCQkJaWYgKGJ1cyA8IDAgfHwgYnVzID4gMHhmZiB8fCBpZCA8 IDAgfHwgaWQgPiAweGZmKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7 CisJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJfQogCQkJZm9yIChpID0gMDsgaSA8IG5kaXNrczsg aSsrKSB7CiAJCQkJaWYgKGRpc2tzW2ldLmJ1cyA9PSAoVTgpYnVzICYmCkBAIC0xNTQsOCArMTU1 LDcgQEAKIAkJCQkJcmV0dXJuICgwKTsKIAkJCQl9CiAJCQl9Ci0JCQllcnJubyA9IEVOT0VOVDsK LQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIChFTk9FTlQpOwogCQl9CiAJfQogCkBAIC0xNjYs MTIgKzE2NiwxMCBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJCX0KLQkJZXJybm8gPSBFTk9F TlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7CiAJfQogCi0JZXJybm8gPSBF SU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5WQUwpOwogfQogCiAvKgpAQCAtMTgy LDE2ICsxODAsMTcgQEAKIHsKIAlDT05GSUdfUEFHRV9IRUFERVIgaGVhZGVyOwogCUNPTkZJR19Q QUdFX1JBSURfUEhZU19ESVNLXzAgKmNvbmZpZ19wYWdlOworCWludCBlcnJvcjsKIAlVMzIgQWN0 aW9uRGF0YTsKIAotCWlmIChtcHRfcmVhZF9jb25maWdfcGFnZV9oZWFkZXIoZmQsIE1QSV9DT05G SUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSywKLQkgICAgMCwgMCwgJmhlYWRlciwgTlVMTCkgPCAw KQotCQlyZXR1cm4gKC0xKTsKKwllcnJvciA9IG1wdF9yZWFkX2NvbmZpZ19wYWdlX2hlYWRlcihm ZCwgTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1BIWVNESVNLLAorCSAgICAwLCAwLCAmaGVhZGVy LCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCWlmIChoZWFkZXIuUGFn ZVZlcnNpb24gPiBNUElfUkFJRFBIWVNESVNLUEFHRTBfUEFHRVZFUlNJT04pIHsKIAkJd2Fybngo IlVuc3VwcG9ydGVkIFJBSUQgcGh5c2Rpc2sgcGFnZSAwIHZlcnNpb24gJWQiLAogCQkgICAgaGVh ZGVyLlBhZ2VWZXJzaW9uKTsKLQkJZXJybm8gPSBFT1BOT1RTVVBQOwotCQlyZXR1cm4gKC0xKTsK KwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKIAl9CQkKIAljb25maWdfcGFnZSA9IGNhbGxvYygxLCBz aXplb2YoQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCkpOwogCWNvbmZpZ19wYWdlLT5IZWFk ZXIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1JBSURfUEhZU0RJU0s7CkBAIC0yMDMs MTAgKzIwMiwxMSBAQAogCWNvbmZpZ19wYWdlLT5QaHlzRGlza0lEID0gZGlzay0+dGFyZ2V0Owog CiAJLyogWFhYOiBFbmNsb3N1cmUgaW5mbyBmb3IgUGh5c0Rpc2tTZXR0aW5ncz8gKi8KLQlpZiAo bXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JFQVRFX1BIWVNESVNLLCAwLCAw LCAwLCAwLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JF QVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAogCSAgICBjb25maWdfcGFnZSwgc2l6ZW9mKENPTkZJ R19QQUdFX1JBSURfUEhZU19ESVNLXzApLCBOVUxMLAotCSAgICAmQWN0aW9uRGF0YSwgc2l6ZW9m KEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKSA8IDApCi0JCXJldHVybiAoLTEpOworCSAgICAm QWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKTsKKwlpZiAoZXJy b3IpCisJCXJldHVybiAoZXJyb3IpOwogCSpQaHlzRGlza051bSA9IEFjdGlvbkRhdGEgJiAweGZm OwogCXJldHVybiAoMCk7CiB9CkBAIC0yMzIsMTggKzIzMiwyMCBAQAogCUlPQ18zX1BIWVNfRElT SyAqZGlzazsKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsKIAlJT0NfNV9IT1RfU1BBUkUgKnNw YXJlOwotCWludCBjaCwgZmQsIGk7CisJaW50IGNoLCBlcnJvciwgZmQsIGk7CiAKIAlmZCA9IG1w dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09 IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZvbHVt ZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkv KiBMb2NrIGFsbCB0aGUgdm9sdW1lcyBmaXJzdC4gKi8KQEAgLTI2NywxNCArMjY5LDE4IEBACiAK IAkvKiBEZWxldGUgYWxsIHRoZSB2b2x1bWVzLiAqLwogCXZvbCA9IGlvYzItPlJhaWRWb2x1bWU7 Ci0JZm9yIChpID0gMDsgaSA8IGlvYzItPk51bUFjdGl2ZVZvbHVtZXM7IHZvbCsrLCBpKyspCi0J CWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9ERUxFVEVfVk9MVU1FLAor CWZvciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVzOyB2b2wrKywgaSsrKSB7CisJ CWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVMRVRFX1ZPTFVN RSwKIAkJICAgIHZvbC0+Vm9sdW1lQnVzLCB2b2wtPlZvbHVtZUlELCAwLAogCQkgICAgTVBJX1JB SURfQUNUSU9OX0FEQVRBX0RFTF9QSFlTX0RJU0tTIHwKIAkJICAgIE1QSV9SQUlEX0FDVElPTl9B REFUQV9aRVJPX0xCQTAsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDAsCi0JCSAgICBOVUxMLCBOVUxM LCAwKSA8IDApCisJCSAgICBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQllcnJu byA9IGVycm9yOwogCQkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUgJXMiLAogCQkJICAg IG1wdF92b2x1bWVfbmFtZSh2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCkpOworCQl9CisJ fQogCWZyZWUoaW9jMik7CiAKIAkvKiBEZWxldGUgYWxsIHRoZSBzcGFyZXMuICovCkBAIC00MTEs OCArNDE3LDkgQEAKIAkJLyogU2VlIGlmIGl0IGlzIGEgc3RhbmRhbG9uZSBkaXNrLiAqLwogCQlp ZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soY3AsIHN0YXRlLT5zZGlza3MsCiAJCSAgICBz dGF0ZS0+bnNkaXNrcywgJmkpIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIlVu YWJsZSB0byBsb29rdXAgZHJpdmUgJXMiLCBjcCk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJl dHVybiAoZXJyb3IpOwogCQl9CiAJCWRpbmZvLT5zZGlzayA9ICZzdGF0ZS0+c2Rpc2tzW2ldOwog CkBAIC00MzMsMTcgKzQ0MCwxOCBAQAogewogCXN0cnVjdCBkcml2ZV9pbmZvICpkaW5mbzsKIAlV OCBQaHlzRGlza051bTsKLQlpbnQgaTsKKwlpbnQgZXJyb3IsIGk7CiAKIAlmb3IgKGkgPSAwLCBk aW5mbyA9IGluZm8tPmRyaXZlczsgaSA8IGluZm8tPmRyaXZlX2NvdW50OwogCSAgICAgaSsrLCBk aW5mbysrKSB7CiAJCWlmIChkaW5mby0+aW5mbyA9PSBOVUxMKSB7CiAJCQlpZiAobXB0X2NyZWF0 ZV9waHlzZGlzayhmZCwgZGluZm8tPnNkaXNrLAogCQkJICAgICZQaHlzRGlza051bSkgPCAwKSB7 CisJCQkJZXJyb3IgPSBlcnJubzsKIAkJCQl3YXJuKAogCQkJICAgICJGYWlsZWQgdG8gY3JlYXRl IHBoeXNpY2FsIGRpc2sgcGFnZSBmb3IgJXMiLAogCQkJCSAgICBkaW5mby0+c2Rpc2stPmRldm5h bWUpOwotCQkJCXJldHVybiAoZXJybm8pOworCQkJCXJldHVybiAoZXJyb3IpOwogCQkJfQogCQkJ aWYgKHZlcmJvc2UpCiAJCQkJcHJpbnRmKCJBZGRlZCBkcml2ZSAlcyB3aXRoIFBoeXNEaXNrTnVt ICV1XG4iLApAQCAtNTAwLDExICs1MDgsMTQgQEAKICAgICAgICAgVTMyIE1pbkxCQTsKIAl1aW50 NjRfdCBNYXhMQkE7CiAJc2l6ZV90IHBhZ2Vfc2l6ZTsKLQlpbnQgaTsKKwlpbnQgZXJyb3IsIGk7 CiAKLQlpZiAobXB0X3JlYWRfY29uZmlnX3BhZ2VfaGVhZGVyKGZkLCBNUElfQ09ORklHX1BBR0VU WVBFX1JBSURfVk9MVU1FLAotCSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKSA8IDApCisJZXJyb3Ig PSBtcHRfcmVhZF9jb25maWdfcGFnZV9oZWFkZXIoZmQsIE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJ RF9WT0xVTUUsCisJICAgIDAsIDAsICZoZWFkZXIsIE5VTEwpOworCWlmIChlcnJvcikgeworCQll cnJubyA9IGVycm9yOwogCQlyZXR1cm4gKE5VTEwpOworCX0KIAlpZiAoaGVhZGVyLlBhZ2VWZXJz aW9uID4gTVBJX1JBSURWT0xQQUdFMF9QQUdFVkVSU0lPTikgewogCQl3YXJueCgiVW5zdXBwb3J0 ZWQgUkFJRCB2b2x1bWUgcGFnZSAwIHZlcnNpb24gJWQiLAogCQkgICAgaGVhZGVyLlBhZ2VWZXJz aW9uKTsKQEAgLTUxNCw2ICs1MjUsOCBAQAogCXBhZ2Vfc2l6ZSA9IHNpemVvZihDT05GSUdfUEFH RV9SQUlEX1ZPTF8wKSArCiAJICAgIHNpemVvZihSQUlEX1ZPTDBfUEhZU19ESVNLKSAqIChpbmZv LT5kcml2ZV9jb3VudCAtIDEpOwogCXZvbCA9IGNhbGxvYygxLCBwYWdlX3NpemUpOworCWlmICh2 b2wgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKIAogCS8qIEhlYWRlciAqLwogCXZvbC0+SGVh ZGVyLlBhZ2VUeXBlID0gTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRTsKQEAgLTYwNyw4 ICs2MjAsOCBAQAogCUNPTkZJR19QQUdFX1JBSURfVk9MXzAgKnZvbDsKIAlzdHJ1Y3QgY29uZmln X2lkX3N0YXRlIHN0YXRlOwogCXN0cnVjdCB2b2x1bWVfaW5mbyAqaW5mbzsKLQlpbnQgY2gsIGVy cm9yLCBmZCwgaSwgcmFpZF90eXBlLCB2ZXJib3NlLCBxdWljazsKIAlsb25nIHN0cmlwZV9zaXpl OworCWludCBjaCwgZXJyb3IsIGZkLCBpLCBxdWljaywgcmFpZF90eXBlLCB2ZXJib3NlOwogI2lm ZGVmIERFQlVHCiAJaW50IGR1bXA7CiAjZW5kaWYKQEAgLTYyMCw4ICs2MzMsOSBAQAogCQogCWZk ID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsK IAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3Ip OwogCX0KIAogCS8qIExvb2t1cCB0aGUgUkFJRCB0eXBlIGZpcnN0LiAqLwpAQCAtNjc3LDggKzY5 MSw5IEBACiAJLyogRmV0Y2ggZXhpc3RpbmcgY29uZmlnIGRhdGEuICovCiAJc3RhdGUuaW9jMiA9 IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoc3RhdGUuaW9jMiA9PSBOVUxM KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byByZWFkIHZvbHVtZSBsaXN0 Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJc3RhdGUubGlz dCA9IG1wdF9wZF9saXN0KGZkKTsKIAlpZiAoc3RhdGUubGlzdCA9PSBOVUxMKQpAQCAtNjk2LDYg KzcxMSw4IEBACiAJCXJldHVybiAoRUlOVkFMKTsKIAl9CiAJaW5mbyA9IGNhbGxvYygxLCBzaXpl b2YoKmluZm8pKTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CiAJZXJy b3IgPSBwYXJzZV92b2x1bWUoZmQsIHJhaWRfdHlwZSwgJnN0YXRlLCBhdlswXSwgaW5mbyk7CiAJ aWYgKGVycm9yKQogCQlyZXR1cm4gKGVycm9yKTsKQEAgLTcwNyw2ICs3MjQsOCBAQAogCiAJLyog QnVpbGQgdGhlIHZvbHVtZS4gKi8KIAl2b2wgPSBidWlsZF92b2x1bWUoZmQsIGluZm8sIHJhaWRf dHlwZSwgc3RyaXBlX3NpemUsICZzdGF0ZSwgdmVyYm9zZSk7CisJaWYgKHZvbCA9PSBOVUxMKQor CQlyZXR1cm4gKGVycm5vKTsKIAogI2lmZGVmIERFQlVHCiAJaWYgKGR1bXApIHsKQEAgLTcxNiwx MiArNzM1LDEzIEBACiAjZW5kaWYKIAogCS8qIFNlbmQgdGhlIG5ldyB2b2x1bWUgdG8gdGhlIGNv bnRyb2xsZXIuICovCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NS RUFURV9WT0xVTUUsIHZvbC0+Vm9sdW1lQnVzLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZk LCBNUElfUkFJRF9BQ1RJT05fQ1JFQVRFX1ZPTFVNRSwgdm9sLT5Wb2x1bWVCdXMsCiAJICAgIHZv bC0+Vm9sdW1lSUQsIDAsIHF1aWNrID8gTVBJX1JBSURfQUNUSU9OX0FEQVRBX0RPX05PVF9TWU5D IDogMCwKLQkgICAgdm9sLCB2b2wtPkhlYWRlci5QYWdlTGVuZ3RoICogNCwgTlVMTCwgTlVMTCwg MCwgTlVMTCwgTlVMTCwgMSkgPAotCSAgICAwKSB7CisJICAgIHZvbCwgdm9sLT5IZWFkZXIuUGFn ZUxlbmd0aCAqIDQsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDEpOworCWlmIChlcnJvcikg eworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJGYWlsZWQgdG8gYWRkIHZvbHVtZSIpOwotCQly ZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAjaWZkZWYgREVCVUcKQEAg LTc0NSw3ICs3NjUsNyBAQAogZGVsZXRlX3ZvbHVtZShpbnQgYWMsIGNoYXIgKiphdikKIHsKIAlV OCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYg KGFjICE9IDIpIHsKIAkJd2FybngoImRlbGV0ZTogdm9sdW1lIHJlcXVpcmVkIik7CkBAIC03NTQs MjQgKzc3NCwyOSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkg eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKG1wdF9sb29rdXBfdm9sdW1lKGZkLCBh dlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwllcnJvciA9IG1wdF9sb29rdXBf dm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKTsKKwlpZiAoZXJyb3IpIHsK KwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiSW52YWxpZCB2b2x1bWUgJXMiLCBhdlsxXSk7Ci0J CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0X2xvY2tf dm9sdW1lKFZvbHVtZUJ1cywgVm9sdW1lSUQpIDwgMCkKIAkJcmV0dXJuIChlcnJubyk7CiAKLQlp ZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVMRVRFX1ZPTFVNRSwgVm9s dW1lQnVzLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fREVM RVRFX1ZPTFVNRSwgVm9sdW1lQnVzLAogCSAgICBWb2x1bWVJRCwgMCwgTVBJX1JBSURfQUNUSU9O X0FEQVRBX0RFTF9QSFlTX0RJU0tTIHwKIAkgICAgTVBJX1JBSURfQUNUSU9OX0FEQVRBX1pFUk9f TEJBMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwgTlVMTCwKLQkgICAgTlVMTCwgMCkgPCAwKSB7 CisJICAgIE5VTEwsIDApOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJu KCJGYWlsZWQgdG8gZGVsZXRlIHZvbHVtZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJu IChlcnJvcik7CiAJfQogCiAJbXB0X3Jlc2Nhbl9idXMoLTEsIC0xKTsKQEAgLTc4OCwxNiArODEz LDE4IEBACiAJQ09ORklHX1BBR0VfSU9DXzIgKmlvYzI7CiAJQ09ORklHX1BBR0VfSU9DXzJfUkFJ RF9WT0wgKnZvbDsKIAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBpLCBqLCBuZXdfcG9v bCwgcG9vbF9jb3VudFs3XTsKKwlpbnQgZXJyb3IsIGksIGosIG5ld19wb29sLCBwb29sX2NvdW50 WzddOwogCi0JaWYgKG1wdF9sb29rdXBfdm9sdW1lKGZkLCBuYW1lLCAmVm9sdW1lQnVzLCAmVm9s dW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIG5hbWUsICZWb2x1 bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdh cm4oIkludmFsaWQgdm9sdW1lICVzIiwgbmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4g KGVycm9yKTsKIAl9CiAKIAlpbmZvID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVt ZUlELCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJu IChlcnJubyk7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhbiBleGlzdGluZyBwb29sIG90aGVyIHRo YW4gcG9vbCAwICh1c2VkIGZvcgpAQCAtODE3LDE1ICs4NDQsMTYgQEAKIAkgKi8KIAlpb2MyID0g bXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09IE5VTEwpIHsKKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZvbHVtZSBsaXN0Iik7Ci0J CXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJYnplcm8ocG9vbF9jb3VudCwg c2l6ZW9mKHBvb2xfY291bnQpKTsJCiAJdm9sID0gaW9jMi0+UmFpZFZvbHVtZTsKIAlmb3IgKGkg PSAwOyBpIDwgaW9jMi0+TnVtQWN0aXZlVm9sdW1lczsgdm9sKyssIGkrKykgewogCQlpbmZvID0g bXB0X3ZvbF9pbmZvKGZkLCB2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCwgTlVMTCk7CiAJ CWlmIChpbmZvID09IE5VTEwpCi0JCQlyZXR1cm4gKC0xKTsKKwkJCXJldHVybiAoZXJybm8pOwog CQlmb3IgKGogPSAwOyBqIDwgNzsgaisrKQogCQkJaWYgKGluZm8tPlZvbHVtZVNldHRpbmdzLkhv dFNwYXJlUG9vbCAmICgxIDw8IChqICsgMSkpKQogCQkJCXBvb2xfY291bnRbal0rKzsKQEAgLTg0 MywxNCArODcxLDE1IEBACiAJLyogQWRkIHRoaXMgcG9vbCB0byB0aGUgdm9sdW1lLiAqLwogCWlu Zm8gPSBtcHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmIChp bmZvID09IE5VTEwpCi0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAlpbmZvLT5W b2x1bWVTZXR0aW5ncy5Ib3RTcGFyZVBvb2wgfD0gKDEgPDwgbmV3X3Bvb2wpOwotCWlmIChtcHRf cmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9DSEFOR0VfVk9MVU1FX1NFVFRJTkdTLAor CWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVN RV9TRVRUSU5HUywKIAkgICAgVm9sdW1lQnVzLCBWb2x1bWVJRCwgMCwgKihVMzIgKikmaW5mby0+ Vm9sdW1lU2V0dGluZ3MsIE5VTEwsIDAsCi0JICAgIE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEws IDApIDwgMCkgeworCSAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJy b3IpIHsKIAkJd2FybngoIkZhaWxlZCB0byBhZGQgc3BhcmUgcG9vbCAlZCB0byAlcyIsIG5ld19w b29sLAogCQkgICAgbXB0X3ZvbHVtZV9uYW1lKFZvbHVtZUJ1cywgVm9sdW1lSUQpKTsKLQkJcmV0 dXJuICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGluZm8pOwogCkBAIC04Nzgs MTMgKzkwNywxNSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZkIDwgMCkg eworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4gKGVycm5v KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKGFjID09IDMpIHsKLQkJaWYgKGZpbmRf dm9sdW1lX3NwYXJlX3Bvb2woZmQsIGF2WzJdLCAmcG9vbCkgPCAwKQotCQkJcmV0dXJuIChlcnJu byk7CisJCWVycm9yID0gZmluZF92b2x1bWVfc3BhcmVfcG9vbChmZCwgYXZbMl0sICZwb29sKTsK KwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIChlcnJvcik7CiAJfSBlbHNlCiAJCXBvb2wgPSBNUElf UkFJRF9IT1RfU1BBUkVfUE9PTF8wOwogCkBAIC05MDIsMTYgKzkzMywxOCBAQAogCiAJCWlmICht cHRfbG9va3VwX3N0YW5kYWxvbmVfZGlzayhhdlsxXSwgc2Rpc2tzLCBuc2Rpc2tzLCAmaSkgPAog CQkgICAgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIlVuYWJsZSB0byBsb29rdXAg ZHJpdmUgJXMiLCBhdlsxXSk7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJCXJldHVybiAoZXJyb3Ip OwogCQl9CiAKIAkJaWYgKG1wdF9sb2NrX3BoeXNkaXNrKCZzZGlza3NbaV0pIDwgMCkKIAkJCXJl dHVybiAoZXJybm8pOwogCiAJCWlmIChtcHRfY3JlYXRlX3BoeXNkaXNrKGZkLCAmc2Rpc2tzW2ld LCAmUGh5c0Rpc2tOdW0pIDwgMCkgeworCQkJZXJyb3IgPSBlcnJubzsKIAkJCXdhcm4oIkZhaWxl ZCB0byBjcmVhdGUgcGh5c2ljYWwgZGlzayBwYWdlIik7Ci0JCQlyZXR1cm4gKGVycm5vKTsKKwkJ CXJldHVybiAoZXJyb3IpOwogCQl9CiAJCWZyZWUoc2Rpc2tzKTsKIAl9CkBAIC05MTksOCArOTUy LDkgQEAKIAogCWluZm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlm IChpbmZvID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZl dGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog CX0KIAogCWluZm8tPlBoeXNEaXNrU2V0dGluZ3MuSG90U3BhcmVQb29sID0gcG9vbDsKQEAgLTky OCw4ICs5NjIsOSBAQAogCSAgICAwLCBQaHlzRGlza051bSwgKihVMzIgKikmaW5mby0+UGh5c0Rp c2tTZXR0aW5ncywgTlVMTCwgMCwgTlVMTCwKIAkgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7 CiAJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkZhaWxlZCB0byBhc3Np Z24gc3BhcmUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAog CWZyZWUoaW5mbyk7CkBAIC05NTQsOCArOTg5LDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBt cHRfcGRfbGlzdChmZCk7CkBAIC05NzIsOCArMTAwOCw5IEBACiAJCiAJaW5mbyA9IG1wdF9wZF9p bmZvKGZkLCBQaHlzRGlza051bSwgTlVMTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkgeworCQllcnJv ciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggZHJpdmUgaW5mbyIpOwotCQlyZXR1 cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaWYgKGluZm8tPlBoeXNEaXNr U2V0dGluZ3MuSG90U3BhcmVQb29sID09IDApIHsKQEAgLTk4MiwxMSArMTAxOSwxNCBAQAogCX0K IAogCWlmIChtcHRfZGVsZXRlX3BoeXNkaXNrKGZkLCBQaHlzRGlza051bSkgPCAwKSB7CisJCWVy cm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgcGh5c2ljYWwgZGlzayBwYWdl Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQltcHRfcmVz Y2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJZXJyb3IgPSBt cHRfcmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJaWYg KGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlmcmVlKGluZm8pOwogCWNsb3NlKGZkKTsKIApA QCAtMTAxMSw4ICsxMDUxLDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChm ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJu IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWVycm9yID0gbXB0X2ZldGNoX2Rp c2tzKGZkLCAmbmRpc2tzLCAmZGlza3MpOwpAQCAtMTAyMiwxNiArMTA2MywxOCBAQAogCX0KIAog CWlmIChtcHRfbG9va3VwX3N0YW5kYWxvbmVfZGlzayhhdlsxXSwgZGlza3MsIG5kaXNrcywgJmkp IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9va3VwIGRyaXZl Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0 X2xvY2tfcGh5c2Rpc2soJmRpc2tzW2ldKSA8IDApCiAJCXJldHVybiAoZXJybm8pOwogCiAJaWYg KG1wdF9jcmVhdGVfcGh5c2Rpc2soZmQsICZkaXNrc1tpXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBwaHlzaWNhbCBkaXNr IHBhZ2UiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVl KGRpc2tzKTsKIApAQCAtMTA0OCw3ICsxMDkxLDcgQEAKIHsKIAlDT05GSUdfUEFHRV9SQUlEX1BI WVNfRElTS18wICppbmZvOwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKLQlpbnQgZmQ7 CisJaW50IGVycm9yLCBmZDsKIAlVOCBQaHlzRGlza051bTsKIAogCWlmIChhYyAhPSAyKSB7CkBA IC0xMDU4LDggKzExMDEsOSBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5pdCk7CiAJaWYgKGZk IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJbGlzdCA9IG1wdF9wZF9saXN0KGZk KTsKQEAgLTEwNjcsMjMgKzExMTEsMjggQEAKIAkJcmV0dXJuIChlcnJubyk7CiAKIAlpZiAobXB0 X2xvb2t1cF9kcml2ZShsaXN0LCBhdlsxXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsKKwkJZXJyb3Ig PSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZpbmQgZHJpdmUgJXMiLCBhdlsxXSk7Ci0JCXJl dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJbXB0X2ZyZWVfcGRfbGlzdChs aXN0KTsKIAogCWluZm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlm IChpbmZvID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZl dGNoIGRyaXZlIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog CX0KIAogCWlmIChtcHRfZGVsZXRlX3BoeXNkaXNrKGZkLCBQaHlzRGlza051bSkgPCAwKSB7CisJ CWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBkZWxldGUgcGh5c2ljYWwgZGlzayBw YWdlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQltcHRf cmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJZXJyb3Ig PSBtcHRfcmVzY2FuX2J1cyhpbmZvLT5QaHlzRGlza0J1cywgaW5mby0+UGh5c0Rpc2tJRCk7CisJ aWYgKGVycm9yKQorCQlyZXR1cm4gKGVycm9yKTsKIAlmcmVlKGluZm8pOwogCWNsb3NlKGZkKTsK IApAQCAtMTEyNiw3ICsxMTc1LDcgQEAKIHsKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICp2b2w7 CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAog CWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJkZWJ1Zzogdm9sdW1lIHJlcXVpcmVkIik7CkBAIC0x MTM1LDE5ICsxMTg0LDIzIEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQg PCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAo ZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUo ZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xv b2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJv cikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsx XSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAl2b2wgPSBt cHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmICh2b2wgPT0g TlVMTCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IHZvbHVtZSBp bmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlkdW1w X2NvbmZpZyh2b2wpOwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfdm9sdW1lLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gdXNyLnNiaW4vbXB0dXRpbC9tcHRfdm9sdW1lLmMJKHJldmlzaW9uIDIxNDU2OCkK KysrIHVzci5zYmluL21wdHV0aWwvbXB0X3ZvbHVtZS5jCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3 ICs0Nyw2IEBACiBjb25zdCBjaGFyICoKIG1wdF92b2xzdGF0ZShVOCBTdGF0ZSkKIHsKLQlzdGF0 aWMgY2hhciBidWZbMTZdOwogCiAJc3dpdGNoIChTdGF0ZSkgewogCWNhc2UgTVBJX1JBSURWT0ww X1NUQVRVU19TVEFURV9PUFRJTUFMOgpAQCAtNTgsMTAgKzU3LDEyIEBACiAJCXJldHVybiAoIkZB SUxFRCIpOwogCWNhc2UgTVBJX1JBSURWT0wwX1NUQVRVU19TVEFURV9NSVNTSU5HOgogCQlyZXR1 cm4gKCJNSVNTSU5HIik7Ci0JZGVmYXVsdDoKKwlkZWZhdWx0OiB7CisJCXN0YXRpYyBjaGFyIGJ1 ZiBbMTJdOwogCQlzcHJpbnRmKGJ1ZiwgIlZTVEFURSAweCUwMngiLCBTdGF0ZSk7CiAJCXJldHVy biAoYnVmKTsKIAl9CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC02OSw3ICs3MCw3IEBACiB7CiAJ Q09ORklHX1BBR0VfUkFJRF9WT0xfMSAqdm5hbWVzOwogCVU4IFZvbHVtZUJ1cywgVm9sdW1lSUQ7 Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMykgewogCQl3YXJueCgi bmFtZTogdm9sdW1lIGFuZCBuYW1lIHJlcXVpcmVkIik7CkBAIC04MywxOSArODQsMjMgQEAKIAog CWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJu bzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJy b3IpOwogCX0KIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMs ICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0s ICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7 CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7 CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXZuYW1lcyA9IG1wdF92b2xfbmFtZXMoZmQsIFZv bHVtZUJ1cywgVm9sdW1lSUQsIE5VTEwpOwogCWlmICh2bmFtZXMgPT0gTlVMTCkgeworCQllcnJv ciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIG5hbWVzIik7Ci0JCXJl dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAodm5hbWVzLT5IZWFk ZXIuUGFnZVR5cGUgIT0gTVBJX0NPTkZJR19QQUdFQVRUUl9DSEFOR0VBQkxFKSB7CkBAIC0xMDks OCArMTE0LDkgQEAKIAlzdHJjcHkodm5hbWVzLT5OYW1lLCBhdlsyXSk7CiAKIAlpZiAobXB0X3dy aXRlX2NvbmZpZ19wYWdlKGZkLCB2bmFtZXMsIE5VTEwpIDwgMCkgeworCQllcnJvciA9IGVycm5v OwogCQl3YXJuKCJGYWlsZWQgdG8gc2V0IHZvbHVtZSBuYW1lIik7Ci0JCXJldHVybiAoZXJybm8p OworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlmcmVlKHZuYW1lcyk7CkBAIC0xMjgsNyArMTM0 LDcgQEAKIAl1aW50NjRfdCB0b3RhbCwgcmVtYWluaW5nOwogCWZsb2F0IHBjdDsKIAlVOCBWb2x1 bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwogCiAJaWYgKGFjICE9 IDIpIHsKIAkJd2FybngoInZvbHVtZSBzdGF0dXM6ICVzIiwgYWMgPiAyID8gImV4dHJhIGFyZ3Vt ZW50cyIgOgpAQCAtMTM4LDIwICsxNDQsMjUgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQp OwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsK LQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9v a3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJy b3IgPSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7 CisJaWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1l OiAlcyIsIGF2WzFdKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0K IAotCWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FDVElPTl9JTkRJQ0FUT1JfU1RS VUNULCBWb2x1bWVCdXMsCisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FD VElPTl9JTkRJQ0FUT1JfU1RSVUNULCBWb2x1bWVCdXMsCiAJICAgIFZvbHVtZUlELCAwLCAwLCBO VUxMLCAwLCAmVm9sdW1lU3RhdHVzLCAoVTMyICopJnByb2csIHNpemVvZihwcm9nKSwKLQkgICAg TlVMTCwgTlVMTCwgMCkgPCAwKSB7CisJICAgIE5VTEwsIE5VTEwsIDApOworCWlmIChlcnJvcikg eworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJGZXRjaGluZyB2b2x1bWUgc3RhdHVzIGZhaWxl ZCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJcHJpbnRm KCJWb2x1bWUgJXMgc3RhdHVzOlxuIiwgbXB0X3ZvbHVtZV9uYW1lKFZvbHVtZUJ1cywgVm9sdW1l SUQpKTsKQEAgLTE5MSwxMSArMjAyLDExIEBACiAJVTMyIFNldHRpbmdzLCBOZXdTZXR0aW5nczsK IAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwogCWNoYXIgKnMxOwotCWludCBmZDsKKwlpbnQgZXJy b3IsIGZkOwogCiAJaWYgKGFjICE9IDMpIHsKIAkJd2FybngoInZvbHVtZSBjYWNoZTogJXMiLCBh YyA+IDMgPyAiZXh0cmEgYXJndW1lbnRzIiA6Ci0JCSAgICAidm9sdW1lIHJlcXVpcmVkIik7CisJ CSAgICAibWlzc2luZyBhcmd1bWVudHMiKTsKIAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIApAQCAt MjA5LDE4ICsyMjAsMjEgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8 IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChl cnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShm ZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfbG9v a3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJaWYgKGVycm9y KSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lOiAlcyIsIGF2WzFd KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCXZvbHVtZSA9 IG1wdF92b2xfaW5mbyhmZCwgVm9sdW1lQnVzLCBWb2x1bWVJRCwgTlVMTCk7CiAJaWYgKHZvbHVt ZSA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAKIAlTZXR0aW5n cyA9IHZvbHVtZS0+Vm9sdW1lU2V0dGluZ3MuU2V0dGluZ3M7CiAKQEAgLTIzMSwxOCArMjQ1LDE5 IEBACiAJCU5ld1NldHRpbmdzICY9IH4weDAxOwogCiAJaWYgKE5ld1NldHRpbmdzID09IFNldHRp bmdzKSB7Ci0JCXdhcm54KCJ2b2x1bWUgY2FjaGUgdW5jaGFuZ2VkXG4iKTsKKwkJd2FybngoInZv bHVtZSBjYWNoZSB1bmNoYW5nZWQiKTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gKDApOwogCX0K IAogCXZvbHVtZS0+Vm9sdW1lU2V0dGluZ3MuU2V0dGluZ3MgPSBOZXdTZXR0aW5nczsKLQlpZiAo bXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVNRV9TRVRUSU5H UywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NIQU5HRV9W T0xVTUVfU0VUVElOR1MsCiAJICAgIFZvbHVtZUJ1cywgVm9sdW1lSUQsIDAsICooVTMyICopJnZv bHVtZS0+Vm9sdW1lU2V0dGluZ3MsIE5VTEwsIDAsCi0JICAgIE5VTEwsIE5VTEwsIDAsIE5VTEws IE5VTEwsIDApIDwgMCkKLQkJd2FybngoInZvbHVtZSBjYWNoZSBjaGFuZ2UgZmFpbGVkLCBlcnJu bz0gJWRcbiIsIGVycm5vKTsKKwkgICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7CisJ aWYgKGVycm9yKQorCQl3YXJuKCJ2b2x1bWUgY2FjaGUgY2hhbmdlIGZhaWxlZCIpOwogCiAJY2xv c2UoZmQpOwotCXJldHVybiAoMCk7CisJcmV0dXJuIChlcnJvcik7CiB9CiBNUFRfQ09NTUFORCh2 b2x1bWUsIGNhY2hlLCB2b2x1bWVfY2FjaGUpOwpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRf ZHJpdmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9kcml2ZS5jCShyZXZp c2lvbiAyMTQ1NjgpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9kcml2ZS5jCSh3b3JraW5nIGNv cHkpCkBAIC01MSw3ICs1MSw2IEBACiBjb25zdCBjaGFyICoKIG1wdF9wZHN0YXRlKENPTkZJR19Q QUdFX1JBSURfUEhZU19ESVNLXzAgKmluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzE2XTsKIAog CXN3aXRjaCAoaW5mby0+UGh5c0Rpc2tTdGF0dXMuU3RhdGUpIHsKIAljYXNlIE1QSV9QSFlTRElT SzBfU1RBVFVTX09OTElORToKQEAgLTc2LDkgKzc1LDEyIEBACiAJY2FzZSBNUElfUEhZU0RJU0sw X1NUQVRVU19PVEhFUl9PRkZMSU5FOgogCQlyZXR1cm4gKCJPVEhFUiBPRkZMSU5FIik7CiAJZGVm YXVsdDoKKwl7CisJCXN0YXRpYyBjaGFyIGJ1ZlsxMl07CiAJCXNwcmludGYoYnVmLCAiUFNUQVRF IDB4JTAyeCIsIGluZm8tPlBoeXNEaXNrU3RhdHVzLlN0YXRlKTsKIAkJcmV0dXJuIChidWYpOwog CX0KKwl9CiB9CiAKIC8qCkBAIC0xMjksNyArMTMxLDcgQEAKIAkJbGlzdC0+ZHJpdmVzW2ogKyAx XSA9IGxpc3QtPmRyaXZlc1tqXTsKIAlsaXN0LT5kcml2ZXNbaV0gPSBtcHRfcGRfaW5mbyhmZCwg UGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChsaXN0LT5kcml2ZXNbaV0gPT0gTlVMTCkKLQkJcmV0 dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCWxpc3QtPm5kcml2ZXMrKzsKIAlyZXR1cm4g KDApOwogfQpAQCAtMTQ2LDI2ICsxNDgsMzIgQEAKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsK IAlJT0NfNV9IT1RfU1BBUkUgKnNwYXJlOwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsK LQlpbnQgY291bnQsIGksIGo7CisJaW50IGNvdW50LCBlcnJvciwgaSwgajsKIAogCWlvYzIgPSBt cHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmV0Y2ggdm9sdW1lIGxpc3QiKTsKKwkJ ZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKIAlpb2MzID0gbXB0X3JlYWRf aW9jX3BhZ2UoZmQsIDMsIE5VTEwpOwogCWlmIChpb2MzID09IE5VTEwpIHsKKwkJZXJyb3IgPSBl cnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGxpc3QiKTsKIAkJZnJlZShpb2My KTsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9CiAKIAlpb2M1ID0gbXB0 X3JlYWRfaW9jX3BhZ2UoZmQsIDUsIE5VTEwpOwogCWlmIChpb2M1ID09IE5VTEwpIHsKKwkJZXJy b3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHNwYXJlIGxpc3QiKTsKIAkJZnJl ZShpb2MzKTsKIAkJZnJlZShpb2MyKTsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxM KTsKIAl9CiAKQEAgLTE4MCw3ICsxODgsOSBAQAogCQl2b2x1bWVzW2ldID0gbXB0X3ZvbF9pbmZv KGZkLCB2b2wtPlZvbHVtZUJ1cywgdm9sLT5Wb2x1bWVJRCwKIAkJICAgIE5VTEwpOwogCQlpZiAo dm9sdW1lc1tpXSA9PSBOVUxMKSB7CisJCQllcnJvciA9IGVycm5vOwogCQkJd2FybigiRmFpbGVk IHRvIHJlYWQgdm9sdW1lIGluZm8iKTsKKwkJCWVycm5vID0gZXJyb3I7CiAJCQlyZXR1cm4gKE5V TEwpOwogCQl9CiAJCWNvdW50ICs9IHZvbHVtZXNbaV0tPk51bVBoeXNEaXNrczsKQEAgLTI2NCwx MyArMjc0LDExIEBACiAJCQkJcmV0dXJuICgwKTsKIAkJCX0KIAkJfQotCQllcnJubyA9IEVOT0VO VDsKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoRU5PRU5UKTsKIAl9CiAKIGJhZDoKLQllcnJu byA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKKwlyZXR1cm4gKEVJTlZBTCk7CiB9CiAKIC8qIEJv cnJvd2VkIGhlYXZpbHkgZnJvbSBzY3NpX2FsbC5jOnNjc2lfcHJpbnRfaW5xdWlyeSgpLiAqLwpA QCAtMzA2LDEyICszMTQsMTMgQEAKIAlDT05GSUdfUEFHRV9SQUlEX1BIWVNfRElTS18wICppbmZv OwogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKIAlVOCBQaHlzRGlza051bTsKLQlpbnQg ZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChm ZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJu IChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBtcHRfcGRfbGlzdChm ZCk7CkBAIC0zMTksMTYgKzMyOCwxOCBAQAogCQlyZXR1cm4gKGVycm5vKTsKIAogCWlmIChtcHRf bG9va3VwX2RyaXZlKGxpc3QsIGRyaXZlLCAmUGh5c0Rpc2tOdW0pIDwgMCkgeworCQllcnJvciA9 IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZmluZCBkcml2ZSAlcyIsIGRyaXZlKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAltcHRfZnJlZV9wZF9saXN0KGxp c3QpOwogCiAJLyogR2V0IHRoZSBpbmZvIGZvciB0aGlzIGRyaXZlLiAqLwogCWluZm8gPSBtcHRf cGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChpbmZvID09IE5VTEwpIHsKKwkJ ZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGluZm8gZm9yIGRyaXZlICV1 IiwgUGh5c0Rpc2tOdW0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ fQogCiAJLyogVHJ5IHRvIGNoYW5nZSB0aGUgc3RhdGUuICovCkBAIC0zMzcsMTAgKzM0OCwxMiBA QAogCQlyZXR1cm4gKEVJTlZBTCk7CiAJfQogCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgQWN0 aW9uLCAwLCAwLCBQaHlzRGlza051bSwgMCwgTlVMTCwgMCwgTlVMTCwKLQkgICAgTlVMTCwgMCwg TlVMTCwgTlVMTCwgMCkgPCAwKSB7CisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIEFjdGlv biwgMCwgMCwgUGh5c0Rpc2tOdW0sIDAsIE5VTEwsIDAsIE5VTEwsCisJICAgIE5VTEwsIDAsIE5V TEwsIE5VTEwsIDApOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJG YWlsZWQgdG8gc2V0IGRyaXZlICV1IHRvICVzIiwgUGh5c0Rpc2tOdW0sIG5hbWUpOwotCQlyZXR1 cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJZnJlZShpbmZvKTsK --0016e6567d28fde28604945df687--