From owner-freebsd-hackers@FreeBSD.ORG Mon Nov 8 17:47:41 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 798881065673; Mon, 8 Nov 2010 17:47:41 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182]) by mx1.freebsd.org (Postfix) with ESMTP id 870F48FC1F; Mon, 8 Nov 2010 17:47:40 +0000 (UTC) Received: by wya21 with SMTP id 21so11692wya.13 for ; Mon, 08 Nov 2010 09:47:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=N8MH7Rb9LxUWlqapgL6P1dlJE21Jjtwq8J6f8gP31gg=; b=P3WFXO04+kMxlV29CO3VP/4et0FFAbykzn8I9hxD0ApG67d2QImfJns6CNufMhZf57 kZ5bSOlPmDeCrEC9pAy5+BnPIOPtBdWgVvuWxZTSw3MFZFnQaxBPxoUq9rhK4uzFvY23 pJoO5ox8ElfZZOT5t1UVs203dE1ASxyp74BRQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=oAUJQzk5QfoQM/8r8W2BVO7b1yUDhgwzrQB6cCOYenjpt+7kk6BJbVd8mXmUoWxc/G x2ypeSKY/WpChMTYC0E/fMiqn0WNyWb4FgwGzjhjTxV5JUpm/38pjhD56UvMTcLtJDaQ BTgz9FJ4SXh1T6X37/7tBdWjDB4rgUfb5CWUA= MIME-Version: 1.0 Received: by 10.227.207.132 with SMTP id fy4mr5627361wbb.0.1289238458712; Mon, 08 Nov 2010 09:47:38 -0800 (PST) Received: by 10.216.198.27 with HTTP; Mon, 8 Nov 2010 09:47:38 -0800 (PST) In-Reply-To: <201011080958.39156.jhb@freebsd.org> References: <201011080958.39156.jhb@freebsd.org> Date: Mon, 8 Nov 2010 09:47:38 -0800 Message-ID: From: Garrett Cooper To: John Baldwin Content-Type: multipart/mixed; boundary=000e0ce001e65cc53d04948e3869 Cc: freebsd-hackers@freebsd.org Subject: Re: [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: Mon, 08 Nov 2010 17:47:41 -0000 --000e0ce001e65cc53d04948e3869 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Mon, Nov 8, 2010 at 6:58 AM, John Baldwin wrote: > On Saturday, November 06, 2010 4:13:23 am Garrett Cooper wrote: >> =A0 =A0 Similar to r214396, this patch deals with properly capturing err= or >> 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. >> =A0 =A0 If someone could review and help me commit this patch it would b= e >> 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). >> =A0 =A0 I'll submit another patch to fix up style(9) in this app if requ= ested. >> Thanks! > > The explicit 'return (ENOMEM)' calls are fine as-is. =A0I do not think th= ey need > changing. I'll changed back all of the other *alloc calls (I was just thinking about all of the other awesome cases that malloc can fail, but if we break that assumption a lot more of our programs would break too unfortunately :(...). I read up on cam_getccb and I agree based on the description today: "cam_getccb() allocates a CCB using malloc(3) and sets fields in the C= CB header using values from the cam_device structure." But if it called something else in cam_getccb other than malloc it might confuse the end-user if it failed *shrugs*... But whatever, that would have to be a wholesale change if things changed in this area so I'll default to being lazy now :) (I'm almost positive Scott did that because he understands the overall system a lot better than me :D..). > Having static char arrays of '15' rather than '16' is probably pointless.= =A0The > stack is already at least 4-byte aligned on all the architectures we supp= ort, > so a 15-byte char array will actually be 16 bytes. =A0It was chose to be = a good > enough value, not an exact fit. =A0An exact fit is not important here. Yeah, that was stupid micro-optimization on my part. > Moving the 'buf' in mpt_raid_level() is a style bug. =A0It should stay wh= ere it > is. =A0Same with 'buf' in mpt_volstate() and mpt_pdstate(). Same as above. > IOC_STATUS_SUCCESS() returns a boolean, it is appropriate to test it with= ! > rather than =3D=3D 0. =A0It is also easier for a person to read the code = that way. Good point. I didn't catch that part in style(9) before now. Thanks for the review! -Garrett --000e0ce001e65cc53d04948e3869 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_gg9n9sej0 SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2V2dC5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmlu L21wdHV0aWwvbXB0X2V2dC5jCShyZXZpc2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGls L21wdF9ldnQuYwkod29ya2luZyBjb3B5KQpAQCAtOTQsMTggKzk0LDIwIEBACiB7CiAJQ09ORklH X1BBR0VfTE9HXzAgKmxvZzsKIAlNUElfTE9HXzBfRU5UUlkgKiplbnRyaWVzOwotCWludCBjaCwg ZmQsIGksIG51bV9ldmVudHMsIHZlcmJvc2U7CisJaW50IGNoLCBlcnJvciwgZmQsIGksIG51bV9l dmVudHMsIHZlcmJvc2U7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAw KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJy bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsb2cgPSBtcHRfZ2V0X2V2ZW50cyhmZCwg TlVMTCk7CiAJaWYgKGxvZyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZh aWxlZCB0byBnZXQgZXZlbnQgbG9nIGluZm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVy biAoZXJyb3IpOwogCX0KIAogCS8qIERlZmF1bHQgc2V0dGluZ3MuICovCkBAIC0xMjgsNiArMTMw LDggQEAKIAogCS8qIEJ1aWxkIGEgbGlzdCBvZiB2YWxpZCBlbnRyaWVzIGFuZCBzb3J0IHRoZW0g Ynkgc2VxdWVuY2UuICovCiAJZW50cmllcyA9IG1hbGxvYyhzaXplb2YoTVBJX0xPR18wX0VOVFJZ ICopICogbG9nLT5OdW1Mb2dFbnRyaWVzKTsKKwlpZiAoZW50cmllcyA9PSBOVUxMKQorCQlyZXR1 cm4gKEVOT01FTSk7CiAJbnVtX2V2ZW50cyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGxvZy0+TnVt TG9nRW50cmllczsgaSsrKSB7CiAJCWlmIChsb2ctPkxvZ0VudHJ5W2ldLkxvZ0VudHJ5UXVhbGlm aWVyID09CkluZGV4OiB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jYW0uYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB1 c3Iuc2Jpbi9tcHR1dGlsL21wdF9jYW0uYwkocmV2aXNpb24gMjE0OTA3KQorKysgdXNyLnNiaW4v bXB0dXRpbC9tcHRfY2FtLmMJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKIAlzdHJ1 Y3QgYnVzX21hdGNoX3BhdHRlcm4gKmI7CiAJdW5pb24gY2NiIGNjYjsKIAlzaXplX3QgYnVmc2l6 ZTsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoeHB0X29wZW4oKSA8IDApCiAJCXJldHVybiAoRU5YSU8p OwpAQCAtOTEsOSArOTIsMTAgQEAKIAliLT5mbGFncyA9IEJVU19NQVRDSF9OQU1FIHwgQlVTX01B VENIX1VOSVQgfCBCVVNfTUFUQ0hfQlVTX0lEOwogCiAJaWYgKGlvY3RsKHhwdGZkLCBDQU1JT0NP TU1BTkQsICZjY2IpIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQlmcmVlKGNjYi5jZG0ubWF0 Y2hlcyk7CiAJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCXJldHVybiAoZXJybm8pOworCQly ZXR1cm4gKGVycm9yKTsKIAl9CiAJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKIApAQCAtMTI0LDcg KzEyNiw3IEBACiAJdW5pb24gY2NiIGNjYjsKIAlwYXRoX2lkX3QgcGF0aF9pZDsKIAlzaXplX3Qg YnVmc2l6ZTsKLQlpbnQgZXJyb3IsIGk7CisJaW50IGVycm9yOwogCiAJLyogbXB0KDQpIG9ubHkg aGFuZGxlcyBkZXZpY2VzIG9uIGJ1cyAwLiAqLwogCWlmIChWb2x1bWVCdXMgIT0gMCkKQEAgLTE2 NCwxMCArMTY2LDEwIEBACiAJcC0+ZmxhZ3MgPSBQRVJJUEhfTUFUQ0hfUEFUSCB8IFBFUklQSF9N QVRDSF9OQU1FIHwgUEVSSVBIX01BVENIX1RBUkdFVDsKIAogCWlmIChpb2N0bCh4cHRmZCwgQ0FN SU9DT01NQU5ELCAmY2NiKSA8IDApIHsKLQkJaSA9IGVycm5vOworCQllcnJvciA9IGVycm5vOwog CQlmcmVlKGNjYi5jZG0ubWF0Y2hlcyk7CiAJCWZyZWUoY2NiLmNkbS5wYXR0ZXJucyk7Ci0JCXJl dHVybiAoaSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlmcmVlKGNjYi5jZG0ucGF0dGVybnMp OwogCkBAIC0zOTcsOCArMzk5LDggQEAKIAl1bmlvbiBjY2IgY2NiOwogCXBhdGhfaWRfdCBwYXRo X2lkOwogCXNpemVfdCBidWZzaXplOwotCXVfaW50IGk7CiAJaW50IGNvdW50LCBlcnJvcjsKKwl1 aW50MzJfdCBpOwogCiAJaWYgKHhwdF9vcGVuKCkgPCAwKQogCQlyZXR1cm4gKEVOWElPKTsKQEAg LTQzMSwxMCArNDMzLDEwIEBACiAJCXAtPmZsYWdzID0gUEVSSVBIX01BVENIX1BBVEggfCBQRVJJ UEhfTUFUQ0hfTkFNRTsKIAogCQlpZiAoaW9jdGwoeHB0ZmQsIENBTUlPQ09NTUFORCwgJmNjYikg PCAwKSB7Ci0JCQlpID0gZXJybm87CisJCQllcnJvciA9IGVycm5vOwogCQkJZnJlZShjY2IuY2Rt Lm1hdGNoZXMpOwogCQkJZnJlZShjY2IuY2RtLnBhdHRlcm5zKTsKLQkJCXJldHVybiAoaSk7CisJ CQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlmcmVlKGNjYi5jZG0ucGF0dGVybnMpOwogCkBAIC00 ODEsNiArNDgzLDggQEAKIAkgKiBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC4KIAkgKi8KIAlp b2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOworCWlmIChpb2MyID09IE5VTEwp CisJCXJldHVybiAoZXJybm8pOwogCWRpc2tzID0gY2FsbG9jKGNjYi5jZG0ubnVtX21hdGNoZXMs IHNpemVvZigqZGlza3MpKTsKIAljb3VudCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNjYi5jZG0u bnVtX21hdGNoZXM7IGkrKykgewpJbmRleDogdXNyLnNiaW4vbXB0dXRpbC9tcHRfc2hvdy5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X3Nob3cuYwkocmV2aXNpb24gMjE0OTA3 KQorKysgdXNyLnNiaW4vbXB0dXRpbC9tcHRfc2hvdy5jCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3 ICs3OSw3IEBACiAJQ09ORklHX1BBR0VfSU9DXzIgKmlvYzI7CiAJQ09ORklHX1BBR0VfSU9DXzYg KmlvYzY7CiAJVTE2IElPQ1N0YXR1czsKLQlpbnQgZmQsIGNvbW1hOworCWludCBjb21tYSwgZXJy b3IsIGZkOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgYWRhcHRlcjogZXh0cmEg YXJndW1lbnRzIik7CkBAIC04OCwxNyArODgsMTkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1hbjAgPSBt cHRfcmVhZF9tYW5fcGFnZShmZCwgMCwgTlVMTCk7CiAJaWYgKG1hbjAgPT0gTlVMTCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGNvbnRyb2xsZXIgaW5mbyIpOwot CQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChtYW4wLT5IZWFk ZXIuUGFnZUxlbmd0aCA8IHNpemVvZigqbWFuMCkgLyA0KSB7Ci0JCXdhcm4oIkludmFsaWQgY29u dHJvbGxlciBpbmZvIik7CisJCXdhcm54KCJJbnZhbGlkIGNvbnRyb2xsZXIgaW5mbyIpOwogCQly ZXR1cm4gKEVJTlZBTCk7CiAJfQogCXByaW50ZigibXB0JWQgQWRhcHRlcjpcbiIsIG1wdF91bml0 KTsKQEAgLTI4Myw3ICsyODUsNyBAQAogCUNPTkZJR19QQUdFX1JBSURfVk9MXzEgKnZuYW1lczsK IAlDT05GSUdfUEFHRV9SQUlEX1BIWVNfRElTS18wICpwaW5mbzsKIAlzdHJ1Y3QgbXB0X3N0YW5k YWxvbmVfZGlzayAqc2Rpc2tzOwotCWludCBmZCwgaSwgaiwgbnNkaXNrczsKKwlpbnQgZXJyb3Is IGZkLCBpLCBqLCBuc2Rpc2tzOwogCiAJaWYgKGFjICE9IDEpIHsKIAkJd2FybngoInNob3cgY29u ZmlnOiBleHRyYSBhcmd1bWVudHMiKTsKQEAgLTI5MiwyMCArMjk0LDIzIEBACiAKIAlmZCA9IG1w dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAKIAkvKiBHZXQgdGhlIGNvbmZpZyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLwogCWlvYzIgPSBt cHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaW9jNSA9IG1wdF9yZWFkX2lvY19wYWdl KGZkLCA1LCBOVUxMKTsKIAlpZiAoaW9jMiA9PSBOVUxMIHx8IGlvYzUgPT0gTlVMTCkgeworCQll cnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZ2V0IGNvbmZpZyIpOwotCQlyZXR1cm4g KGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWlmIChtcHRfZmV0Y2hfZGlza3MoZmQs ICZuc2Rpc2tzLCAmc2Rpc2tzKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFp bGVkIHRvIGdldCBzdGFuZGFsb25lIGRyaXZlIGxpc3QiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJ CXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIER1bXAgb3V0IHRoZSBjb25maWd1cmF0aW9uLiAq LwpAQCAtMzgxLDcgKzM4Niw3IEBACiAJQ09ORklHX1BBR0VfSU9DXzJfUkFJRF9WT0wgKnZvbDsK IAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICoqdm9sdW1lczsKIAlDT05GSUdfUEFHRV9SQUlEX1ZP TF8xICp2bmFtZXM7Ci0JaW50IGZkLCBpLCBsZW4sIHN0YXRlX2xlbjsKKwlpbnQgZXJyb3IsIGZk LCBpLCBsZW4sIHN0YXRlX2xlbjsKIAogCWlmIChhYyAhPSAxKSB7CiAJCXdhcm54KCJzaG93IHZv bHVtZXM6IGV4dHJhIGFyZ3VtZW50cyIpOwpAQCAtMzkwLDE1ICszOTUsMTcgQEAKIAogCWZkID0g bXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJ d2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwog CX0KIAogCS8qIEdldCB0aGUgdm9sdW1lIGxpc3QgZnJvbSB0aGUgY29udHJvbGxlci4gKi8KIAlp b2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2MyID09IE5VTEwp IHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCB2b2x1bWUgbGlzdCIp OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJLyoKQEAgLTQ2 Niw3ICs0NzMsNyBAQAogewogCXN0cnVjdCBtcHRfZHJpdmVfbGlzdCAqbGlzdDsKIAlzdHJ1Y3Qg bXB0X3N0YW5kYWxvbmVfZGlzayAqc2Rpc2tzOwotCWludCBmZCwgaSwgbGVuLCBuc2Rpc2tzLCBz dGF0ZV9sZW47CisJaW50IGVycm9yLCBmZCwgaSwgbGVuLCBuc2Rpc2tzLCBzdGF0ZV9sZW47CiAK IAlpZiAoYWMgIT0gMSkgewogCQl3YXJueCgic2hvdyBkcml2ZXM6IGV4dHJhIGFyZ3VtZW50cyIp OwpAQCAtNDc1LDE1ICs0ODIsMTcgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlm IChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0 dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIEdldCB0aGUgZHJpdmUg bGlzdC4gKi8KIAlsaXN0ID0gbXB0X3BkX2xpc3QoZmQpOwogCWlmIChsaXN0ID09IE5VTEwpIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGdldCBkcml2ZSBsaXN0Iik7Ci0J CXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBGZXRjaCB0aGUg bGlzdCBvZiBzdGFuZGFsb25lIGRpc2tzIGZvciB0aGlzIGNvbnRyb2xsZXIuICovCkBAIC01Mzgs OCArNTQ3LDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwogCWlmIChmZCA8IDApIHsK KwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJcmV0dXJuIChlcnJubyk7 CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCS8qIFRyeSB0byBmaW5kIGVhY2ggcG9zc2libGUg cGh5cyBkaXNrIHBhZ2UuICovCkluZGV4OiB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jbWQuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jbWQuYwkocmV2aXNpb24gMjE0OTA3KQor KysgdXNyLnNiaW4vbXB0dXRpbC9tcHRfY21kLmMJKHdvcmtpbmcgY29weSkKQEAgLTMxMCwxOCAr MzEwLDE1IEBACiAJCWlkID0gc3RydG9sKGNwICsgMSwgJmNwLCAwKTsKIAkJaWYgKCpjcCA9PSAn XDAnKSB7CiAJCQlpZiAoYnVzIDwgMCB8fCBidXMgPiAweGZmIHx8IGlkIDwgMCB8fCBpZCA+IDB4 ZmYpIHsKLQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQlyZXR1cm4gKC0xKTsKKwkJCQlyZXR1cm4g KEVJTlZBTCk7CiAJCQl9CiAJCQkqVm9sdW1lQnVzID0gYnVzOwogCQkJKlZvbHVtZUlEID0gaWQ7 CiAJCQlyZXR1cm4gKDApOwogCQl9CiAJfSBlbHNlIGlmICgqY3AgPT0gJ1wwJykgewotCQlpZiAo YnVzIDwgMCB8fCBidXMgPiAweGZmKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAo LTEpOwotCQl9CisJCWlmIChidXMgPCAwIHx8IGJ1cyA+IDB4ZmYpCisJCQlyZXR1cm4gKEVJTlZB TCk7CiAJCSpWb2x1bWVCdXMgPSAwOwogCQkqVm9sdW1lSUQgPSBidXM7CiAJCXJldHVybiAoMCk7 CkBAIC0zMjksNyArMzI2LDcgQEAKIAogCWlvYzIgPSBtcHRfcmVhZF9pb2NfcGFnZShmZCwgMiwg TlVMTCk7CiAJaWYgKGlvYzIgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJy bm8pOwogCiAJdm9sID0gaW9jMi0+UmFpZFZvbHVtZTsKIAlmb3IgKGkgPSAwOyBpIDwgaW9jMi0+ TnVtQWN0aXZlVm9sdW1lczsgdm9sKyssIGkrKykgewpAQCAtMzQzLDggKzM0MCw3IEBACiAJCX0K IAl9CiAJZnJlZShpb2MyKTsKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKKwlyZXR1 cm4gKEVJTlZBTCk7CiB9CiAKIGludApAQCAtMzYwLDE1ICszNTYsMTQgQEAKIAlyZXEuaGVhZGVy LlBhZ2VOdW1iZXIgPSBQYWdlTnVtYmVyOwogCXJlcS5wYWdlX2FkZHJlc3MgPSBQYWdlQWRkcmVz czsKIAlpZiAoaW9jdGwoZmQsIE1QVElPX1JFQURfQ0ZHX0hFQURFUiwgJnJlcSkgPCAwKQotCQly ZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJubyk7CiAJaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1Mo cmVxLmlvY19zdGF0dXMpKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkKIAkJCSpJT0NTdGF0 dXMgPSByZXEuaW9jX3N0YXR1czsKIAkJZWxzZQogCQkJd2FybngoIlJlYWRpbmcgY29uZmlnIHBh Z2UgaGVhZGVyIGZhaWxlZDogJXMiLAogCQkJICAgIG1wdF9pb2Nfc3RhdHVzKHJlcS5pb2Nfc3Rh dHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFSU8pOwog CX0KIAkqaGVhZGVyID0gcmVxLmhlYWRlcjsKIAlyZXR1cm4gKDApOwpAQCAtMzgwLDcgKzM3NSw3 IEBACiB7CiAJc3RydWN0IG1wdF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQgKmJ1ZjsKLQlpbnQg c2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJ T0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC00MDQsOSArMzk5LDkgQEAKIAly ZXEuYnVmID0gYnVmOwogCWJjb3B5KCZyZXEuaGVhZGVyLCBidWYsIHNpemVvZihyZXEuaGVhZGVy KSk7CiAJaWYgKGlvY3RsKGZkLCBNUFRJT19SRUFEX0NGR19QQUdFLCAmcmVxKSA8IDApIHsKLQkJ c2F2ZV9lcnJubyA9IGVycm5vOworCQllcnJvciA9IGVycm5vOwogCQlmcmVlKGJ1Zik7Ci0JCWVy cm5vID0gc2F2ZV9lcnJubzsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKIAl9 CiAJaWYgKCFJT0NfU1RBVFVTX1NVQ0NFU1MocmVxLmlvY19zdGF0dXMpKSB7CkBAIC00MjgsNyAr NDIzLDcgQEAKIHsKIAlzdHJ1Y3QgbXB0X2V4dF9jZmdfcGFnZV9yZXEgcmVxOwogCXZvaWQgKmJ1 ZjsKLQlpbnQgc2F2ZV9lcnJubzsKKwlpbnQgZXJyb3I7CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5V TEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVTX1NVQ0NFU1M7CkBAIC00NTMsOSArNDQ4 LDkgQEAKIAlyZXEuYnVmID0gYnVmOwogCWJjb3B5KCZyZXEuaGVhZGVyLCBidWYsIHNpemVvZihy ZXEuaGVhZGVyKSk7CiAJaWYgKGlvY3RsKGZkLCBNUFRJT19SRUFEX0VYVF9DRkdfUEFHRSwgJnJl cSkgPCAwKSB7Ci0JCXNhdmVfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IgPSBlcnJubzsKIAkJZnJl ZShidWYpOwotCQllcnJubyA9IHNhdmVfZXJybm87CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVy biAoTlVMTCk7CiAJfQogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkg ewpAQCAtNDg0LDcgKzQ3OSw3IEBACiAJaGRyID0gYnVmOwogCXJlcS5sZW4gPSBoZHItPlBhZ2VM ZW5ndGggKiA0OwogCWlmIChpb2N0bChmZCwgTVBUSU9fV1JJVEVfQ0ZHX1BBR0UsICZyZXEpIDwg MCkKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJybm8pOwogCWlmICghSU9DX1NUQVRVU19T VUNDRVNTKHJlcS5pb2Nfc3RhdHVzKSkgewogCQlpZiAoSU9DU3RhdHVzICE9IE5VTEwpIHsKIAkJ CSpJT0NTdGF0dXMgPSByZXEuaW9jX3N0YXR1czsKQEAgLTQ5Miw4ICs0ODcsNyBAQAogCQl9CiAJ CXdhcm54KCJXcml0aW5nIGNvbmZpZyBwYWdlIGZhaWxlZDogJXMiLAogCQkgICAgbXB0X2lvY19z dGF0dXMocmVxLmlvY19zdGF0dXMpKTsKLQkJZXJybm8gPSBFSU87Ci0JCXJldHVybiAoLTEpOwor CQlyZXR1cm4gKEVJTyk7CiAJfQogCXJldHVybiAoMCk7CiB9CkBAIC01MDcsMTAgKzUwMSw4IEBA CiAKIAlpZiAoSU9DU3RhdHVzICE9IE5VTEwpCiAJCSpJT0NTdGF0dXMgPSBNUElfSU9DU1RBVFVT X1NVQ0NFU1M7Ci0JaWYgKGRhdGFsZW4gPCAwIHx8ICh1bnNpZ25lZClkYXRhbGVuID4gc2l6ZW9m KHJhaWRfYWN0LmFjdGlvbl9kYXRhKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgt MSk7Ci0JfQorCWlmIChkYXRhbGVuIDwgMCB8fCAodW5zaWduZWQpZGF0YWxlbiA+IHNpemVvZihy YWlkX2FjdC5hY3Rpb25fZGF0YSkpCisJCXJldHVybiAoRUlOVkFMKTsKIAliemVybygmcmFpZF9h Y3QsIHNpemVvZihyYWlkX2FjdCkpOwogCXJhaWRfYWN0LmFjdGlvbiA9IEFjdGlvbjsKIAlyYWlk X2FjdC52b2x1bWVfYnVzID0gVm9sdW1lQnVzOwpAQCAtNTI0LDcgKzUxNiw3IEBACiAJfQogCiAJ aWYgKGlvY3RsKGZkLCBNUFRJT19SQUlEX0FDVElPTiwgJnJhaWRfYWN0KSA8IDApCi0JCXJldHVy biAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAogCWlmICghSU9DX1NUQVRVU19TVUNDRVNTKHJh aWRfYWN0LmlvY19zdGF0dXMpKSB7CiAJCWlmIChJT0NTdGF0dXMgIT0gTlVMTCkgewpAQCAtNTMz LDggKzUyNSw3IEBACiAJCX0KIAkJd2FybngoIlJBSUQgYWN0aW9uIGZhaWxlZDogJXMiLAogCQkg ICAgbXB0X2lvY19zdGF0dXMocmFpZF9hY3QuaW9jX3N0YXR1cykpOwotCQllcnJubyA9IEVJTzsK LQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoRUlPKTsKIAl9CiAKIAlpZiAoQWN0aW9uU3RhdHVz ICE9IE5VTEwpCkBAIC01NDQsOCArNTM1LDcgQEAKIAkJCXJldHVybiAoMCk7CiAJCXdhcm54KCJS QUlEIGFjdGlvbiBmYWlsZWQ6ICVzIiwKIAkJICAgIG1wdF9yYWlkX3N0YXR1cyhyYWlkX2FjdC5h Y3Rpb25fc3RhdHVzKSk7Ci0JCWVycm5vID0gRUlPOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJu IChFSU8pOwogCX0KIAogCWlmIChWb2x1bWVTdGF0dXMgIT0gTlVMTCkKSW5kZXg6IHVzci5zYmlu L21wdHV0aWwvbXB0X2NvbmZpZy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0 X2NvbmZpZy5jCShyZXZpc2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF9jb25m aWcuYwkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTQgQEAKIAlpZiAoZXJyb3IpIHsK IAkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiVW5hYmxlIHRvIGxvb2t1cCB2b2x1bWUgZGV2aWNl IG5hbWUiKTsKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAlzbnByaW50 ZihwYXRoLCBzaXplb2YocGF0aCksICIlcyVzIiwgX1BBVEhfREVWLCBxZC5kZXZuYW1lKTsKIAl2 ZmQgPSBvcGVuKHBhdGgsIE9fUkRXUik7CiAJaWYgKHZmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJu bzsKIAkJd2FybigiVW5hYmxlIHRvIGxvY2sgdm9sdW1lICVzIiwgcWQuZGV2bmFtZSk7Ci0JCXJl dHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTEx OSwxMyArMTIwLDE0IEBACiBtcHRfbG9ja19waHlzZGlzayhzdHJ1Y3QgbXB0X3N0YW5kYWxvbmVf ZGlzayAqZGlzaykKIHsKIAljaGFyIHBhdGhbTUFYUEFUSExFTl07Ci0JaW50IGRmZDsKKwlpbnQg ZGZkLCBlcnJvcjsKIAogCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJXMiLCBfUEFU SF9ERVYsIGRpc2stPmRldm5hbWUpOwogCWRmZCA9IG9wZW4ocGF0aCwgT19SRFdSKTsKIAlpZiAo ZGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJVbmFibGUgdG8gbG9jayBkaXNr ICVzIiwgZGlzay0+ZGV2bmFtZSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsK IAl9CiAJcmV0dXJuICgwKTsKIH0KQEAgLTE0NCw4ICsxNDYsNyBAQAogCQlpZCA9IHN0cnRvbChj cCArIDEsICZjcCwgMCk7CiAJCWlmICgqY3AgPT0gJ1wwJykgewogCQkJaWYgKGJ1cyA8IDAgfHwg YnVzID4gMHhmZiB8fCBpZCA8IDAgfHwgaWQgPiAweGZmKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7 Ci0JCQkJcmV0dXJuICgtMSk7CisJCQkJcmV0dXJuIChFSU5WQUwpOwogCQkJfQogCQkJZm9yIChp ID0gMDsgaSA8IG5kaXNrczsgaSsrKSB7CiAJCQkJaWYgKGRpc2tzW2ldLmJ1cyA9PSAoVTgpYnVz ICYmCkBAIC0xNTQsOCArMTU1LDcgQEAKIAkJCQkJcmV0dXJuICgwKTsKIAkJCQl9CiAJCQl9Ci0J CQllcnJubyA9IEVOT0VOVDsKLQkJCXJldHVybiAoLTEpOworCQkJcmV0dXJuIChFTk9FTlQpOwog CQl9CiAJfQogCkBAIC0xNjYsMTIgKzE2NiwxMCBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJ CX0KLQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7 CiAJfQogCi0JZXJybm8gPSBFSU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5WQUwp OwogfQogCiAvKgpAQCAtMTgyLDE2ICsxODAsMTcgQEAKIHsKIAlDT05GSUdfUEFHRV9IRUFERVIg aGVhZGVyOwogCUNPTkZJR19QQUdFX1JBSURfUEhZU19ESVNLXzAgKmNvbmZpZ19wYWdlOworCWlu dCBlcnJvcjsKIAlVMzIgQWN0aW9uRGF0YTsKIAotCWlmIChtcHRfcmVhZF9jb25maWdfcGFnZV9o ZWFkZXIoZmQsIE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJRF9QSFlTRElTSywKLQkgICAgMCwgMCwg JmhlYWRlciwgTlVMTCkgPCAwKQotCQlyZXR1cm4gKC0xKTsKKwllcnJvciA9IG1wdF9yZWFkX2Nv bmZpZ19wYWdlX2hlYWRlcihmZCwgTVBJX0NPTkZJR19QQUdFVFlQRV9SQUlEX1BIWVNESVNLLAor CSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3Ip OwogCWlmIChoZWFkZXIuUGFnZVZlcnNpb24gPiBNUElfUkFJRFBIWVNESVNLUEFHRTBfUEFHRVZF UlNJT04pIHsKIAkJd2FybngoIlVuc3VwcG9ydGVkIFJBSUQgcGh5c2Rpc2sgcGFnZSAwIHZlcnNp b24gJWQiLAogCQkgICAgaGVhZGVyLlBhZ2VWZXJzaW9uKTsKLQkJZXJybm8gPSBFT1BOT1RTVVBQ OwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKIAl9CQkKIAljb25maWdf cGFnZSA9IGNhbGxvYygxLCBzaXplb2YoQ09ORklHX1BBR0VfUkFJRF9QSFlTX0RJU0tfMCkpOwog CWNvbmZpZ19wYWdlLT5IZWFkZXIuUGFnZVR5cGUgPSBNUElfQ09ORklHX1BBR0VUWVBFX1JBSURf UEhZU0RJU0s7CkBAIC0yMDMsMTAgKzIwMiwxMSBAQAogCWNvbmZpZ19wYWdlLT5QaHlzRGlza0lE ID0gZGlzay0+dGFyZ2V0OwogCiAJLyogWFhYOiBFbmNsb3N1cmUgaW5mbyBmb3IgUGh5c0Rpc2tT ZXR0aW5ncz8gKi8KLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ1JF QVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAorCWVycm9yID0gbXB0X3JhaWRfYWN0aW9uKGZkLCBN UElfUkFJRF9BQ1RJT05fQ1JFQVRFX1BIWVNESVNLLCAwLCAwLCAwLCAwLAogCSAgICBjb25maWdf cGFnZSwgc2l6ZW9mKENPTkZJR19QQUdFX1JBSURfUEhZU19ESVNLXzApLCBOVUxMLAotCSAgICAm QWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBOVUxMLCAxKSA8IDApCi0JCXJl dHVybiAoLTEpOworCSAgICAmQWN0aW9uRGF0YSwgc2l6ZW9mKEFjdGlvbkRhdGEpLCBOVUxMLCBO VUxMLCAxKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOwogCSpQaHlzRGlza051bSA9 IEFjdGlvbkRhdGEgJiAweGZmOwogCXJldHVybiAoMCk7CiB9CkBAIC0yMzIsMTggKzIzMiwyMCBA QAogCUlPQ18zX1BIWVNfRElTSyAqZGlzazsKIAlDT05GSUdfUEFHRV9JT0NfNSAqaW9jNTsKIAlJ T0NfNV9IT1RfU1BBUkUgKnNwYXJlOwotCWludCBjaCwgZmQsIGk7CisJaW50IGNoLCBlcnJvciwg ZmQsIGk7CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVy cm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQly ZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5V TEwpOwogCWlmIChpb2MyID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFp bGVkIHRvIGZldGNoIHZvbHVtZSBsaXN0Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g KGVycm9yKTsKIAl9CiAKIAkvKiBMb2NrIGFsbCB0aGUgdm9sdW1lcyBmaXJzdC4gKi8KQEAgLTI2 OCwxMyArMjcwLDE2IEBACiAJLyogRGVsZXRlIGFsbCB0aGUgdm9sdW1lcy4gKi8KIAl2b2wgPSBp b2MyLT5SYWlkVm9sdW1lOwogCWZvciAoaSA9IDA7IGkgPCBpb2MyLT5OdW1BY3RpdmVWb2x1bWVz OyB2b2wrKywgaSsrKQotCQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05f REVMRVRFX1ZPTFVNRSwKKwkJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9SQUlEX0FD VElPTl9ERUxFVEVfVk9MVU1FLAogCQkgICAgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1lSUQs IDAsCiAJCSAgICBNUElfUkFJRF9BQ1RJT05fQURBVEFfREVMX1BIWVNfRElTS1MgfAogCQkgICAg TVBJX1JBSURfQUNUSU9OX0FEQVRBX1pFUk9fTEJBMCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwK LQkJICAgIE5VTEwsIE5VTEwsIDApIDwgMCkKKwkJICAgIE5VTEwsIE5VTEwsIDApOworCQlpZiAo ZXJyb3IpIHsKKwkJCWVycm5vID0gZXJyb3I7CiAJCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHZv bHVtZSAlcyIsCiAJCQkgICAgbXB0X3ZvbHVtZV9uYW1lKHZvbC0+Vm9sdW1lQnVzLCB2b2wtPlZv bHVtZUlEKSk7CisJCX0KIAlmcmVlKGlvYzIpOwogCiAJLyogRGVsZXRlIGFsbCB0aGUgc3BhcmVz LiAqLwpAQCAtNDExLDggKzQxNiw5IEBACiAJCS8qIFNlZSBpZiBpdCBpcyBhIHN0YW5kYWxvbmUg ZGlzay4gKi8KIAkJaWYgKG1wdF9sb29rdXBfc3RhbmRhbG9uZV9kaXNrKGNwLCBzdGF0ZS0+c2Rp c2tzLAogCQkgICAgc3RhdGUtPm5zZGlza3MsICZpKSA8IDApIHsKKwkJCWVycm9yID0gZXJybm87 CiAJCQl3YXJuKCJVbmFibGUgdG8gbG9va3VwIGRyaXZlICVzIiwgY3ApOwotCQkJcmV0dXJuIChl cnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlkaW5mby0+c2Rpc2sgPSAmc3RhdGUt PnNkaXNrc1tpXTsKIApAQCAtNDMzLDE3ICs0MzksMTggQEAKIHsKIAlzdHJ1Y3QgZHJpdmVfaW5m byAqZGluZm87CiAJVTggUGh5c0Rpc2tOdW07Ci0JaW50IGk7CisJaW50IGVycm9yLCBpOwogCiAJ Zm9yIChpID0gMCwgZGluZm8gPSBpbmZvLT5kcml2ZXM7IGkgPCBpbmZvLT5kcml2ZV9jb3VudDsK IAkgICAgIGkrKywgZGluZm8rKykgewogCQlpZiAoZGluZm8tPmluZm8gPT0gTlVMTCkgewogCQkJ aWYgKG1wdF9jcmVhdGVfcGh5c2Rpc2soZmQsIGRpbmZvLT5zZGlzaywKIAkJCSAgICAmUGh5c0Rp c2tOdW0pIDwgMCkgeworCQkJCWVycm9yID0gZXJybm87CiAJCQkJd2FybigKIAkJCSAgICAiRmFp bGVkIHRvIGNyZWF0ZSBwaHlzaWNhbCBkaXNrIHBhZ2UgZm9yICVzIiwKIAkJCQkgICAgZGluZm8t PnNkaXNrLT5kZXZuYW1lKTsKLQkJCQlyZXR1cm4gKGVycm5vKTsKKwkJCQlyZXR1cm4gKGVycm9y KTsKIAkJCX0KIAkJCWlmICh2ZXJib3NlKQogCQkJCXByaW50ZigiQWRkZWQgZHJpdmUgJXMgd2l0 aCBQaHlzRGlza051bSAldVxuIiwKQEAgLTUwMCwxMSArNTA3LDE0IEBACiAgICAgICAgIFUzMiBN aW5MQkE7CiAJdWludDY0X3QgTWF4TEJBOwogCXNpemVfdCBwYWdlX3NpemU7Ci0JaW50IGk7CisJ aW50IGVycm9yLCBpOwogCi0JaWYgKG1wdF9yZWFkX2NvbmZpZ19wYWdlX2hlYWRlcihmZCwgTVBJ X0NPTkZJR19QQUdFVFlQRV9SQUlEX1ZPTFVNRSwKLQkgICAgMCwgMCwgJmhlYWRlciwgTlVMTCkg PCAwKQorCWVycm9yID0gbXB0X3JlYWRfY29uZmlnX3BhZ2VfaGVhZGVyKGZkLCBNUElfQ09ORklH X1BBR0VUWVBFX1JBSURfVk9MVU1FLAorCSAgICAwLCAwLCAmaGVhZGVyLCBOVUxMKTsKKwlpZiAo ZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJcmV0dXJuIChOVUxMKTsKKwl9CiAJaWYgKGhl YWRlci5QYWdlVmVyc2lvbiA+IE1QSV9SQUlEVk9MUEFHRTBfUEFHRVZFUlNJT04pIHsKIAkJd2Fy bngoIlVuc3VwcG9ydGVkIFJBSUQgdm9sdW1lIHBhZ2UgMCB2ZXJzaW9uICVkIiwKIAkJICAgIGhl YWRlci5QYWdlVmVyc2lvbik7CkBAIC01MTQsNiArNTI0LDggQEAKIAlwYWdlX3NpemUgPSBzaXpl b2YoQ09ORklHX1BBR0VfUkFJRF9WT0xfMCkgKwogCSAgICBzaXplb2YoUkFJRF9WT0wwX1BIWVNf RElTSykgKiAoaW5mby0+ZHJpdmVfY291bnQgLSAxKTsKIAl2b2wgPSBjYWxsb2MoMSwgcGFnZV9z aXplKTsKKwlpZiAodm9sID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CiAKIAkvKiBIZWFkZXIg Ki8KIAl2b2wtPkhlYWRlci5QYWdlVHlwZSA9IE1QSV9DT05GSUdfUEFHRVRZUEVfUkFJRF9WT0xV TUU7CkBAIC02MDcsOCArNjE5LDggQEAKIAlDT05GSUdfUEFHRV9SQUlEX1ZPTF8wICp2b2w7CiAJ c3RydWN0IGNvbmZpZ19pZF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3Qgdm9sdW1lX2luZm8gKmluZm87 Ci0JaW50IGNoLCBlcnJvciwgZmQsIGksIHJhaWRfdHlwZSwgdmVyYm9zZSwgcXVpY2s7CiAJbG9u ZyBzdHJpcGVfc2l6ZTsKKwlpbnQgY2gsIGVycm9yLCBmZCwgaSwgcXVpY2ssIHJhaWRfdHlwZSwg dmVyYm9zZTsKICNpZmRlZiBERUJVRwogCWludCBkdW1wOwogI2VuZGlmCkBAIC02MjAsOCArNjMy LDkgQEAKIAkKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVy cm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQly ZXR1cm4gKGVycm9yKTsKIAl9CiAKIAkvKiBMb29rdXAgdGhlIFJBSUQgdHlwZSBmaXJzdC4gKi8K QEAgLTY3Nyw4ICs2OTAsOSBAQAogCS8qIEZldGNoIGV4aXN0aW5nIGNvbmZpZyBkYXRhLiAqLwog CXN0YXRlLmlvYzIgPSBtcHRfcmVhZF9pb2NfcGFnZShmZCwgMiwgTlVMTCk7CiAJaWYgKHN0YXRl LmlvYzIgPT0gTlVMTCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gcmVh ZCB2b2x1bWUgbGlzdCIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ fQogCXN0YXRlLmxpc3QgPSBtcHRfcGRfbGlzdChmZCk7CiAJaWYgKHN0YXRlLmxpc3QgPT0gTlVM TCkKQEAgLTY5Niw2ICs3MTAsOCBAQAogCQlyZXR1cm4gKEVJTlZBTCk7CiAJfQogCWluZm8gPSBj YWxsb2MoMSwgc2l6ZW9mKCppbmZvKSk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIChF Tk9NRU0pOwogCWVycm9yID0gcGFyc2Vfdm9sdW1lKGZkLCByYWlkX3R5cGUsICZzdGF0ZSwgYXZb MF0sIGluZm8pOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIChlcnJvcik7CkBAIC03MDcsNiArNzIz LDggQEAKIAogCS8qIEJ1aWxkIHRoZSB2b2x1bWUuICovCiAJdm9sID0gYnVpbGRfdm9sdW1lKGZk LCBpbmZvLCByYWlkX3R5cGUsIHN0cmlwZV9zaXplLCAmc3RhdGUsIHZlcmJvc2UpOworCWlmICh2 b2wgPT0gTlVMTCkKKwkJcmV0dXJuIChlcnJubyk7CiAKICNpZmRlZiBERUJVRwogCWlmIChkdW1w KSB7CkBAIC03MTYsMTIgKzczNCwxMyBAQAogI2VuZGlmCiAKIAkvKiBTZW5kIHRoZSBuZXcgdm9s dW1lIHRvIHRoZSBjb250cm9sbGVyLiAqLwotCWlmIChtcHRfcmFpZF9hY3Rpb24oZmQsIE1QSV9S QUlEX0FDVElPTl9DUkVBVEVfVk9MVU1FLCB2b2wtPlZvbHVtZUJ1cywKKwllcnJvciA9IG1wdF9y YWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0NSRUFURV9WT0xVTUUsIHZvbC0+Vm9sdW1l QnVzLAogCSAgICB2b2wtPlZvbHVtZUlELCAwLCBxdWljayA/IE1QSV9SQUlEX0FDVElPTl9BREFU QV9ET19OT1RfU1lOQyA6IDAsCi0JICAgIHZvbCwgdm9sLT5IZWFkZXIuUGFnZUxlbmd0aCAqIDQs IE5VTEwsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDEpIDwKLQkgICAgMCkgeworCSAgICB2b2wsIHZv bC0+SGVhZGVyLlBhZ2VMZW5ndGggKiA0LCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAxKTsK KwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIGFkZCB2 b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogI2lm ZGVmIERFQlVHCkBAIC03NDUsNyArNzY0LDcgQEAKIGRlbGV0ZV92b2x1bWUoaW50IGFjLCBjaGFy ICoqYXYpCiB7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJaW50IGVycm9y LCBmZDsKIAogCWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJkZWxldGU6IHZvbHVtZSByZXF1aXJl ZCIpOwpAQCAtNzU0LDI0ICs3NzMsMjkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwog CWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJ cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAotCWlmIChtcHRfbG9va3Vw X3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCkgPCAwKSB7CisJZXJyb3Ig PSBtcHRfbG9va3VwX3ZvbHVtZShmZCwgYXZbMV0sICZWb2x1bWVCdXMsICZWb2x1bWVJRCk7CisJ aWYgKGVycm9yKSB7CisJCWVycm5vID0gZXJyb3I7CiAJCXdhcm4oIkludmFsaWQgdm9sdW1lICVz IiwgYXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ aWYgKG1wdF9sb2NrX3ZvbHVtZShWb2x1bWVCdXMsIFZvbHVtZUlEKSA8IDApCiAJCXJldHVybiAo ZXJybm8pOwogCi0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9OX0RFTEVU RV9WT0xVTUUsIFZvbHVtZUJ1cywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JB SURfQUNUSU9OX0RFTEVURV9WT0xVTUUsIFZvbHVtZUJ1cywKIAkgICAgVm9sdW1lSUQsIDAsIE1Q SV9SQUlEX0FDVElPTl9BREFUQV9ERUxfUEhZU19ESVNLUyB8CiAJICAgIE1QSV9SQUlEX0FDVElP Tl9BREFUQV9aRVJPX0xCQTAsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDAsIE5VTEwsCi0JICAgIE5V TEwsIDApIDwgMCkgeworCSAgICBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBl cnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIGRlbGV0ZSB2b2x1bWUiKTsKLQkJcmV0dXJuIChlcnJu byk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCW1wdF9yZXNjYW5fYnVzKC0xLCAtMSk7CkBA IC03ODgsMTYgKzgxMiwxOCBAQAogCUNPTkZJR19QQUdFX0lPQ18yICppb2MyOwogCUNPTkZJR19Q QUdFX0lPQ18yX1JBSURfVk9MICp2b2w7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQg aSwgaiwgbmV3X3Bvb2wsIHBvb2xfY291bnRbN107CisJaW50IGVycm9yLCBpLCBqLCBuZXdfcG9v bCwgcG9vbF9jb3VudFs3XTsKIAotCWlmIChtcHRfbG9va3VwX3ZvbHVtZShmZCwgbmFtZSwgJlZv bHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwllcnJvciA9IG1wdF9sb29rdXBfdm9sdW1lKGZk LCBuYW1lLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9 IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZSAlcyIsIG5hbWUpOwotCQlyZXR1cm4gKC0x KTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJaW5mbyA9IG1wdF92b2xfaW5mbyhmZCwgVm9s dW1lQnVzLCBWb2x1bWVJRCwgTlVMTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkKLQkJcmV0dXJuICgt MSk7CisJCXJldHVybiAoZXJybm8pOwogCiAJLyoKIAkgKiBDaGVjayBmb3IgYW4gZXhpc3Rpbmcg cG9vbCBvdGhlciB0aGFuIHBvb2wgMCAodXNlZCBmb3IKQEAgLTgxNywxNSArODQzLDE2IEBACiAJ ICovCiAJaW9jMiA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAyLCBOVUxMKTsKIAlpZiAoaW9jMiA9 PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCB2b2x1 bWUgbGlzdCIpOwotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCWJ6ZXJv KHBvb2xfY291bnQsIHNpemVvZihwb29sX2NvdW50KSk7CQogCXZvbCA9IGlvYzItPlJhaWRWb2x1 bWU7CiAJZm9yIChpID0gMDsgaSA8IGlvYzItPk51bUFjdGl2ZVZvbHVtZXM7IHZvbCsrLCBpKysp IHsKIAkJaW5mbyA9IG1wdF92b2xfaW5mbyhmZCwgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1l SUQsIE5VTEwpOwogCQlpZiAoaW5mbyA9PSBOVUxMKQotCQkJcmV0dXJuICgtMSk7CisJCQlyZXR1 cm4gKGVycm5vKTsKIAkJZm9yIChqID0gMDsgaiA8IDc7IGorKykKIAkJCWlmIChpbmZvLT5Wb2x1 bWVTZXR0aW5ncy5Ib3RTcGFyZVBvb2wgJiAoMSA8PCAoaiArIDEpKSkKIAkJCQlwb29sX2NvdW50 W2pdKys7CkBAIC04NDMsMTQgKzg3MCwxNSBAQAogCS8qIEFkZCB0aGlzIHBvb2wgdG8gdGhlIHZv bHVtZS4gKi8KIAlpbmZvID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBO VUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKKwkJcmV0dXJuIChlcnJv cik7CiAJaW5mby0+Vm9sdW1lU2V0dGluZ3MuSG90U3BhcmVQb29sIHw9ICgxIDw8IG5ld19wb29s KTsKLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fQ0hBTkdFX1ZPTFVN RV9TRVRUSU5HUywKKwllcnJvciA9IG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURfQUNUSU9O X0NIQU5HRV9WT0xVTUVfU0VUVElOR1MsCiAJICAgIFZvbHVtZUJ1cywgVm9sdW1lSUQsIDAsICoo VTMyICopJmluZm8tPlZvbHVtZVNldHRpbmdzLCBOVUxMLCAwLAotCSAgICBOVUxMLCBOVUxMLCAw LCBOVUxMLCBOVUxMLCAwKSA8IDApIHsKKwkgICAgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwg MCk7CisJaWYgKGVycm9yKSB7CiAJCXdhcm54KCJGYWlsZWQgdG8gYWRkIHNwYXJlIHBvb2wgJWQg dG8gJXMiLCBuZXdfcG9vbCwKIAkJICAgIG1wdF92b2x1bWVfbmFtZShWb2x1bWVCdXMsIFZvbHVt ZUlEKSk7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJZnJlZShpbmZv KTsKIApAQCAtODc4LDEzICs5MDYsMTUgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3VuaXQpOwog CWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4iKTsKLQkJ cmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChhYyA9PSAzKSB7 Ci0JCWlmIChmaW5kX3ZvbHVtZV9zcGFyZV9wb29sKGZkLCBhdlsyXSwgJnBvb2wpIDwgMCkKLQkJ CXJldHVybiAoZXJybm8pOworCQllcnJvciA9IGZpbmRfdm9sdW1lX3NwYXJlX3Bvb2woZmQsIGF2 WzJdLCAmcG9vbCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiAoZXJyb3IpOwogCX0gZWxzZQog CQlwb29sID0gTVBJX1JBSURfSE9UX1NQQVJFX1BPT0xfMDsKIApAQCAtOTAyLDE2ICs5MzIsMTgg QEAKIAogCQlpZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soYXZbMV0sIHNkaXNrcywgbnNk aXNrcywgJmkpIDwKIAkJICAgIDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJCQl3YXJuKCJVbmFi bGUgdG8gbG9va3VwIGRyaXZlICVzIiwgYXZbMV0pOwotCQkJcmV0dXJuIChlcnJubyk7CisJCQly ZXR1cm4gKGVycm9yKTsKIAkJfQogCiAJCWlmIChtcHRfbG9ja19waHlzZGlzaygmc2Rpc2tzW2ld KSA8IDApCiAJCQlyZXR1cm4gKGVycm5vKTsKIAogCQlpZiAobXB0X2NyZWF0ZV9waHlzZGlzayhm ZCwgJnNkaXNrc1tpXSwgJlBoeXNEaXNrTnVtKSA8IDApIHsKKwkJCWVycm9yID0gZXJybm87CiAJ CQl3YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHBoeXNpY2FsIGRpc2sgcGFnZSIpOwotCQkJcmV0dXJu IChlcnJubyk7CisJCQlyZXR1cm4gKGVycm9yKTsKIAkJfQogCQlmcmVlKHNkaXNrcyk7CiAJfQpA QCAtOTE5LDggKzk1MSw5IEBACiAKIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVt LCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o IkZhaWxlZCB0byBmZXRjaCBkcml2ZSBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1 cm4gKGVycm9yKTsKIAl9CiAKIAlpbmZvLT5QaHlzRGlza1NldHRpbmdzLkhvdFNwYXJlUG9vbCA9 IHBvb2w7CkBAIC05MjgsOCArOTYxLDkgQEAKIAkgICAgMCwgUGh5c0Rpc2tOdW0sICooVTMyICop JmluZm8tPlBoeXNEaXNrU2V0dGluZ3MsIE5VTEwsIDAsIE5VTEwsCiAJICAgIE5VTEwsIDAsIE5V TEwsIE5VTEwsIDApOwogCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJG YWlsZWQgdG8gYXNzaWduIHNwYXJlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVy cm9yKTsKIAl9CiAKIAlmcmVlKGluZm8pOwpAQCAtOTU0LDggKzk4OCw5IEBACiAKIAlmZCA9IG1w dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAKIAlsaXN0ID0gbXB0X3BkX2xpc3QoZmQpOwpAQCAtOTcyLDggKzEwMDcsOSBAQAogCQogCWlu Zm8gPSBtcHRfcGRfaW5mbyhmZCwgUGh5c0Rpc2tOdW0sIE5VTEwpOwogCWlmIChpbmZvID09IE5V TEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIGRyaXZlIGlu Zm8iKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWlmIChp bmZvLT5QaHlzRGlza1NldHRpbmdzLkhvdFNwYXJlUG9vbCA9PSAwKSB7CkBAIC05ODIsMTEgKzEw MTgsMTQgQEAKIAl9CiAKIAlpZiAobXB0X2RlbGV0ZV9waHlzZGlzayhmZCwgUGh5c0Rpc2tOdW0p IDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHBoeXNp Y2FsIGRpc2sgcGFnZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ fQogCi0JbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNEaXNrSUQp OworCWVycm9yID0gbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNE aXNrSUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CiAJZnJlZShpbmZvKTsKIAlj bG9zZShmZCk7CiAKQEAgLTEwMTEsOCArMTA1MCw5IEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91 bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVu Iik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAllcnJvciA9 IG1wdF9mZXRjaF9kaXNrcyhmZCwgJm5kaXNrcywgJmRpc2tzKTsKQEAgLTEwMjIsMTYgKzEwNjIs MTggQEAKIAl9CiAKIAlpZiAobXB0X2xvb2t1cF9zdGFuZGFsb25lX2Rpc2soYXZbMV0sIGRpc2tz LCBuZGlza3MsICZpKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiVW5hYmxlIHRv IGxvb2t1cCBkcml2ZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ fQogCiAJaWYgKG1wdF9sb2NrX3BoeXNkaXNrKCZkaXNrc1tpXSkgPCAwKQogCQlyZXR1cm4gKGVy cm5vKTsKIAogCWlmIChtcHRfY3JlYXRlX3BoeXNkaXNrKGZkLCAmZGlza3NbaV0sICZQaHlzRGlz a051bSkgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBjcmVhdGUg cGh5c2ljYWwgZGlzayBwYWdlIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9y KTsKIAl9CiAJZnJlZShkaXNrcyk7CiAKQEAgLTEwNDgsNyArMTA5MCw3IEBACiB7CiAJQ09ORklH X1BBR0VfUkFJRF9QSFlTX0RJU0tfMCAqaW5mbzsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxp c3Q7Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAJVTggUGh5c0Rpc2tOdW07CiAKIAlpZiAo YWMgIT0gMikgewpAQCAtMTA1OCw4ICsxMTAwLDkgQEAKIAogCWZkID0gbXB0X29wZW4obXB0X3Vu aXQpOwogCWlmIChmZCA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigibXB0X29wZW4i KTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWxpc3QgPSBt cHRfcGRfbGlzdChmZCk7CkBAIC0xMDY3LDIzICsxMTEwLDI4IEBACiAJCXJldHVybiAoZXJybm8p OwogCiAJaWYgKG1wdF9sb29rdXBfZHJpdmUobGlzdCwgYXZbMV0sICZQaHlzRGlza051bSkgPCAw KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmaW5kIGRyaXZlICVzIiwg YXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCW1wdF9m cmVlX3BkX2xpc3QobGlzdCk7CiAKIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVt LCBOVUxMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4o IkZhaWxlZCB0byBmZXRjaCBkcml2ZSBpbmZvIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1 cm4gKGVycm9yKTsKIAl9CiAKIAlpZiAobXB0X2RlbGV0ZV9waHlzZGlzayhmZCwgUGh5c0Rpc2tO dW0pIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJGYWlsZWQgdG8gZGVsZXRlIHBo eXNpY2FsIGRpc2sgcGFnZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCi0JbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBoeXNEaXNr SUQpOworCWVycm9yID0gbXB0X3Jlc2Nhbl9idXMoaW5mby0+UGh5c0Rpc2tCdXMsIGluZm8tPlBo eXNEaXNrSUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CiAJZnJlZShpbmZvKTsK IAljbG9zZShmZCk7CiAKQEAgLTExMjYsNyArMTE3NCw3IEBACiB7CiAJQ09ORklHX1BBR0VfUkFJ RF9WT0xfMCAqdm9sOwogCVU4IFZvbHVtZUJ1cywgVm9sdW1lSUQ7Ci0JaW50IGZkOworCWludCBl cnJvciwgZmQ7CiAKIAlpZiAoYWMgIT0gMikgewogCQl3YXJueCgiZGVidWc6IHZvbHVtZSByZXF1 aXJlZCIpOwpAQCAtMTEzNSwxOSArMTE4MywyMyBAQAogCiAJZmQgPSBtcHRfb3BlbihtcHRfdW5p dCk7CiAJaWYgKGZkIDwgMCkgeworCQllcnJvciA9IGVycm5vOwogCQl3YXJuKCJtcHRfb3BlbiIp OwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCi0JaWYgKG1wdF9s b29rdXBfdm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlEKSA8IDApIHsKKwll cnJvciA9IG1wdF9sb29rdXBfdm9sdW1lKGZkLCBhdlsxXSwgJlZvbHVtZUJ1cywgJlZvbHVtZUlE KTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2FybigiSW52YWxpZCB2b2x1 bWU6ICVzIiwgYXZbMV0pOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJ fQogCiAJdm9sID0gbXB0X3ZvbF9pbmZvKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBOVUxMKTsK IAlpZiAodm9sID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv IGdldCB2b2x1bWUgaW5mbyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7 CiAJfQogCiAJZHVtcF9jb25maWcodm9sKTsKSW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X3Zv bHVtZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIHVzci5zYmluL21wdHV0aWwvbXB0X3ZvbHVtZS5jCShyZXZp c2lvbiAyMTQ5MDcpCisrKyB1c3Iuc2Jpbi9tcHR1dGlsL21wdF92b2x1bWUuYwkod29ya2luZyBj b3B5KQpAQCAtNjksNyArNjksNyBAQAogewogCUNPTkZJR19QQUdFX1JBSURfVk9MXzEgKnZuYW1l czsKIAlVOCBWb2x1bWVCdXMsIFZvbHVtZUlEOwotCWludCBmZDsKKwlpbnQgZXJyb3IsIGZkOwog CiAJaWYgKGFjICE9IDMpIHsKIAkJd2FybngoIm5hbWU6IHZvbHVtZSBhbmQgbmFtZSByZXF1aXJl ZCIpOwpAQCAtODMsMTkgKzgzLDIzIEBACiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlp ZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJl dHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92 b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0g bXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlm IChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMi LCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAl2 bmFtZXMgPSBtcHRfdm9sX25hbWVzKGZkLCBWb2x1bWVCdXMsIFZvbHVtZUlELCBOVUxMKTsKIAlp ZiAodm5hbWVzID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRv IGZldGNoIHZvbHVtZSBuYW1lcyIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJv cik7CiAJfQogCiAJaWYgKHZuYW1lcy0+SGVhZGVyLlBhZ2VUeXBlICE9IE1QSV9DT05GSUdfUEFH RUFUVFJfQ0hBTkdFQUJMRSkgewpAQCAtMTA5LDggKzExMyw5IEBACiAJc3RyY3B5KHZuYW1lcy0+ TmFtZSwgYXZbMl0pOwogCiAJaWYgKG1wdF93cml0ZV9jb25maWdfcGFnZShmZCwgdm5hbWVzLCBO VUxMKSA8IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIHNldCB2b2x1 bWUgbmFtZSIpOwotCQlyZXR1cm4gKGVycm5vKTsKKwkJcmV0dXJuIChlcnJvcik7CiAJfQogCiAJ ZnJlZSh2bmFtZXMpOwpAQCAtMTI4LDcgKzEzMyw3IEBACiAJdWludDY0X3QgdG90YWwsIHJlbWFp bmluZzsKIAlmbG9hdCBwY3Q7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKLQlpbnQgZmQ7CisJ aW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAyKSB7CiAJCXdhcm54KCJ2b2x1bWUgc3RhdHVz OiAlcyIsIGFjID4gMiA/ICJleHRyYSBhcmd1bWVudHMiIDoKQEAgLTEzOCwyMCArMTQzLDI1IEBA CiAKIAlmZCA9IG1wdF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0g ZXJybm87CiAJCXdhcm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4g KGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1l QnVzLCAmVm9sdW1lSUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2 WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVy cm9yOwogCQl3YXJuKCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJy bm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKLQlpZiAobXB0X3JhaWRfYWN0aW9uKGZkLCBN UElfUkFJRF9BQ1RJT05fSU5ESUNBVE9SX1NUUlVDVCwgVm9sdW1lQnVzLAorCWVycm9yID0gbXB0 X3JhaWRfYWN0aW9uKGZkLCBNUElfUkFJRF9BQ1RJT05fSU5ESUNBVE9SX1NUUlVDVCwgVm9sdW1l QnVzLAogCSAgICBWb2x1bWVJRCwgMCwgMCwgTlVMTCwgMCwgJlZvbHVtZVN0YXR1cywgKFUzMiAq KSZwcm9nLCBzaXplb2YocHJvZyksCi0JICAgIE5VTEwsIE5VTEwsIDApIDwgMCkgeworCSAgICBO VUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBlcnJvcjsKIAkJd2Fybigi RmV0Y2hpbmcgdm9sdW1lIHN0YXR1cyBmYWlsZWQiKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl dHVybiAoZXJyb3IpOwogCX0KIAogCXByaW50ZigiVm9sdW1lICVzIHN0YXR1czpcbiIsIG1wdF92 b2x1bWVfbmFtZShWb2x1bWVCdXMsIFZvbHVtZUlEKSk7CkBAIC0xOTEsMTEgKzIwMSwxMSBAQAog CVUzMiBTZXR0aW5ncywgTmV3U2V0dGluZ3M7CiAJVTggVm9sdW1lQnVzLCBWb2x1bWVJRDsKIAlj aGFyICpzMTsKLQlpbnQgZmQ7CisJaW50IGVycm9yLCBmZDsKIAogCWlmIChhYyAhPSAzKSB7CiAJ CXdhcm54KCJ2b2x1bWUgY2FjaGU6ICVzIiwgYWMgPiAzID8gImV4dHJhIGFyZ3VtZW50cyIgOgot CQkgICAgInZvbHVtZSByZXF1aXJlZCIpOworCQkgICAgIm1pc3NpbmcgYXJndW1lbnRzIik7CiAJ CXJldHVybiAoRUlOVkFMKTsKIAl9CiAKQEAgLTIwOSwxOCArMjE5LDIxIEBACiAKIAlmZCA9IG1w dF9vcGVuKG1wdF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdh cm4oIm1wdF9vcGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9 CiAKLQlpZiAobXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1lQnVzLCAmVm9sdW1l SUQpIDwgMCkgeworCWVycm9yID0gbXB0X2xvb2t1cF92b2x1bWUoZmQsIGF2WzFdLCAmVm9sdW1l QnVzLCAmVm9sdW1lSUQpOworCWlmIChlcnJvcikgeworCQllcnJubyA9IGVycm9yOwogCQl3YXJu KCJJbnZhbGlkIHZvbHVtZTogJXMiLCBhdlsxXSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1 cm4gKGVycm9yKTsKIAl9CiAKIAl2b2x1bWUgPSBtcHRfdm9sX2luZm8oZmQsIFZvbHVtZUJ1cywg Vm9sdW1lSUQsIE5VTEwpOwogCWlmICh2b2x1bWUgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7CisJ CXJldHVybiAoZXJybm8pOwogCiAJU2V0dGluZ3MgPSB2b2x1bWUtPlZvbHVtZVNldHRpbmdzLlNl dHRpbmdzOwogCkBAIC0yMzEsMTggKzI0NCwxOSBAQAogCQlOZXdTZXR0aW5ncyAmPSB+MHgwMTsK IAogCWlmIChOZXdTZXR0aW5ncyA9PSBTZXR0aW5ncykgewotCQl3YXJueCgidm9sdW1lIGNhY2hl IHVuY2hhbmdlZFxuIik7CisJCXdhcm54KCJ2b2x1bWUgY2FjaGUgdW5jaGFuZ2VkIik7CiAJCWNs b3NlKGZkKTsKIAkJcmV0dXJuICgwKTsKIAl9CiAKIAl2b2x1bWUtPlZvbHVtZVNldHRpbmdzLlNl dHRpbmdzID0gTmV3U2V0dGluZ3M7Ci0JaWYgKG1wdF9yYWlkX2FjdGlvbihmZCwgTVBJX1JBSURf QUNUSU9OX0NIQU5HRV9WT0xVTUVfU0VUVElOR1MsCisJZXJyb3IgPSBtcHRfcmFpZF9hY3Rpb24o ZmQsIE1QSV9SQUlEX0FDVElPTl9DSEFOR0VfVk9MVU1FX1NFVFRJTkdTLAogCSAgICBWb2x1bWVC dXMsIFZvbHVtZUlELCAwLCAqKFUzMiAqKSZ2b2x1bWUtPlZvbHVtZVNldHRpbmdzLCBOVUxMLCAw LAotCSAgICBOVUxMLCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKSA8IDApCi0JCXdhcm54KCJ2b2x1 bWUgY2FjaGUgY2hhbmdlIGZhaWxlZCwgZXJybm89ICVkXG4iLCBlcnJubyk7CisJICAgIE5VTEws IE5VTEwsIDAsIE5VTEwsIE5VTEwsIDApOworCWlmIChlcnJvcikKKwkJd2Fybigidm9sdW1lIGNh Y2hlIGNoYW5nZSBmYWlsZWQiKTsKIAogCWNsb3NlKGZkKTsKLQlyZXR1cm4gKDApOworCXJldHVy biAoZXJyb3IpOwogfQogTVBUX0NPTU1BTkQodm9sdW1lLCBjYWNoZSwgdm9sdW1lX2NhY2hlKTsK SW5kZXg6IHVzci5zYmluL21wdHV0aWwvbXB0X2RyaXZlLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gdXNyLnNi aW4vbXB0dXRpbC9tcHRfZHJpdmUuYwkocmV2aXNpb24gMjE0OTA3KQorKysgdXNyLnNiaW4vbXB0 dXRpbC9tcHRfZHJpdmUuYwkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCWxp c3QtPmRyaXZlc1tqICsgMV0gPSBsaXN0LT5kcml2ZXNbal07CiAJbGlzdC0+ZHJpdmVzW2ldID0g bXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVtLCBOVUxMKTsKIAlpZiAobGlzdC0+ZHJpdmVzW2ld ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKGVycm5vKTsKIAlsaXN0LT5uZHJp dmVzKys7CiAJcmV0dXJuICgwKTsKIH0KQEAgLTE0NiwyNiArMTQ2LDMyIEBACiAJQ09ORklHX1BB R0VfSU9DXzUgKmlvYzU7CiAJSU9DXzVfSE9UX1NQQVJFICpzcGFyZTsKIAlzdHJ1Y3QgbXB0X2Ry aXZlX2xpc3QgKmxpc3Q7Ci0JaW50IGNvdW50LCBpLCBqOworCWludCBjb3VudCwgZXJyb3IsIGks IGo7CiAKIAlpb2MyID0gbXB0X3JlYWRfaW9jX3BhZ2UoZmQsIDIsIE5VTEwpOwogCWlmIChpb2My ID09IE5VTEwpIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZldGNoIHZv bHVtZSBsaXN0Iik7CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCiAJ aW9jMyA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCAzLCBOVUxMKTsKIAlpZiAoaW9jMyA9PSBOVUxM KSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBkcml2ZSBsaXN0 Iik7CiAJCWZyZWUoaW9jMik7CisJCWVycm5vID0gZXJyb3I7CiAJCXJldHVybiAoTlVMTCk7CiAJ fQogCiAJaW9jNSA9IG1wdF9yZWFkX2lvY19wYWdlKGZkLCA1LCBOVUxMKTsKIAlpZiAoaW9jNSA9 PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBzcGFy ZSBsaXN0Iik7CiAJCWZyZWUoaW9jMyk7CiAJCWZyZWUoaW9jMik7CisJCWVycm5vID0gZXJyb3I7 CiAJCXJldHVybiAoTlVMTCk7CiAJfQogCkBAIC0xODAsNyArMTg2LDkgQEAKIAkJdm9sdW1lc1tp XSA9IG1wdF92b2xfaW5mbyhmZCwgdm9sLT5Wb2x1bWVCdXMsIHZvbC0+Vm9sdW1lSUQsCiAJCSAg ICBOVUxMKTsKIAkJaWYgKHZvbHVtZXNbaV0gPT0gTlVMTCkgeworCQkJZXJyb3IgPSBlcnJubzsK IAkJCXdhcm4oIkZhaWxlZCB0byByZWFkIHZvbHVtZSBpbmZvIik7CisJCQllcnJubyA9IGVycm9y OwogCQkJcmV0dXJuIChOVUxMKTsKIAkJfQogCQljb3VudCArPSB2b2x1bWVzW2ldLT5OdW1QaHlz RGlza3M7CkBAIC0yNjQsMTMgKzI3MiwxMSBAQAogCQkJCXJldHVybiAoMCk7CiAJCQl9CiAJCX0K LQkJZXJybm8gPSBFTk9FTlQ7Ci0JCXJldHVybiAoLTEpOworCQlyZXR1cm4gKEVOT0VOVCk7CiAJ fQogCiBiYWQ6Ci0JZXJybm8gPSBFSU5WQUw7Ci0JcmV0dXJuICgtMSk7CisJcmV0dXJuIChFSU5W QUwpOwogfQogCiAvKiBCb3Jyb3dlZCBoZWF2aWx5IGZyb20gc2NzaV9hbGwuYzpzY3NpX3ByaW50 X2lucXVpcnkoKS4gKi8KQEAgLTMwNiwxMiArMzEyLDEzIEBACiAJQ09ORklHX1BBR0VfUkFJRF9Q SFlTX0RJU0tfMCAqaW5mbzsKIAlzdHJ1Y3QgbXB0X2RyaXZlX2xpc3QgKmxpc3Q7CiAJVTggUGh5 c0Rpc2tOdW07Ci0JaW50IGZkOworCWludCBlcnJvciwgZmQ7CiAKIAlmZCA9IG1wdF9vcGVuKG1w dF91bml0KTsKIAlpZiAoZmQgPCAwKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIm1wdF9v cGVuIik7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAKIAlsaXN0 ID0gbXB0X3BkX2xpc3QoZmQpOwpAQCAtMzE5LDE2ICszMjYsMTggQEAKIAkJcmV0dXJuIChlcnJu byk7CiAKIAlpZiAobXB0X2xvb2t1cF9kcml2ZShsaXN0LCBkcml2ZSwgJlBoeXNEaXNrTnVtKSA8 IDApIHsKKwkJZXJyb3IgPSBlcnJubzsKIAkJd2FybigiRmFpbGVkIHRvIGZpbmQgZHJpdmUgJXMi LCBkcml2ZSk7Ci0JCXJldHVybiAoZXJybm8pOworCQlyZXR1cm4gKGVycm9yKTsKIAl9CiAJbXB0 X2ZyZWVfcGRfbGlzdChsaXN0KTsKIAogCS8qIEdldCB0aGUgaW5mbyBmb3IgdGhpcyBkcml2ZS4g Ki8KIAlpbmZvID0gbXB0X3BkX2luZm8oZmQsIFBoeXNEaXNrTnVtLCBOVUxMKTsKIAlpZiAoaW5m byA9PSBOVUxMKSB7CisJCWVycm9yID0gZXJybm87CiAJCXdhcm4oIkZhaWxlZCB0byBmZXRjaCBp bmZvIGZvciBkcml2ZSAldSIsIFBoeXNEaXNrTnVtKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJl dHVybiAoZXJyb3IpOwogCX0KIAogCS8qIFRyeSB0byBjaGFuZ2UgdGhlIHN0YXRlLiAqLwpAQCAt MzM3LDEwICszNDYsMTIgQEAKIAkJcmV0dXJuIChFSU5WQUwpOwogCX0KIAotCWlmIChtcHRfcmFp ZF9hY3Rpb24oZmQsIEFjdGlvbiwgMCwgMCwgUGh5c0Rpc2tOdW0sIDAsIE5VTEwsIDAsIE5VTEws Ci0JICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDApIDwgMCkgeworCWVycm9yID0gbXB0X3JhaWRf YWN0aW9uKGZkLCBBY3Rpb24sIDAsIDAsIFBoeXNEaXNrTnVtLCAwLCBOVUxMLCAwLCBOVUxMLAor CSAgICBOVUxMLCAwLCBOVUxMLCBOVUxMLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZXJybm8gPSBl cnJvcjsKIAkJd2FybigiRmFpbGVkIHRvIHNldCBkcml2ZSAldSB0byAlcyIsIFBoeXNEaXNrTnVt LCBuYW1lKTsKLQkJcmV0dXJuIChlcnJubyk7CisJCXJldHVybiAoZXJyb3IpOwogCX0KIAogCWZy ZWUoaW5mbyk7Cg== --000e0ce001e65cc53d04948e3869--