From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Juanma Barranquero" Newsgroups: gmane.emacs.devel Subject: Crash on Windows Date: Wed, 3 Oct 2007 10:26:51 +0200 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_21251_16460878.1191400011880" X-Trace: sea.gmane.org 1191400042 4214 80.91.229.12 (3 Oct 2007 08:27:22 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Wed, 3 Oct 2007 08:27:22 +0000 (UTC) To: "Emacs development discussions" Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Oct 03 10:27:18 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1IczZU-0000vw-VU for ged-emacs-devel@m.gmane.org; Wed, 03 Oct 2007 10:27:17 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IczZO-0002pz-Ql for ged-emacs-devel@m.gmane.org; Wed, 03 Oct 2007 04:27:02 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IczZJ-0002nV-20 for emacs-devel@gnu.org; Wed, 03 Oct 2007 04:26:57 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IczZG-0002lg-IH for emacs-devel@gnu.org; Wed, 03 Oct 2007 04:26:56 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IczZG-0002lO-BK for emacs-devel@gnu.org; Wed, 03 Oct 2007 04:26:54 -0400 Original-Received: from wx-out-0506.google.com ([66.249.82.237]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IczZF-000304-4v for emacs-devel@gnu.org; Wed, 03 Oct 2007 04:26:54 -0400 Original-Received: by wx-out-0506.google.com with SMTP id s7so3661318wxc for ; Wed, 03 Oct 2007 01:26:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type; bh=DycLQtBxaa9a2e/ayEGeZ6GfMm6jXnJrT/sGdAIX574=; b=AHD9hDxSXPCagMn1GBbjzSEoMHzYZ4jXc/WSrK6wlPTbvLNRFBJ6Ye2JxXewvnd4+Qas7ZLHJdJwu1kQWiavD0P1TmoBLi+k5sHQte2yudkAMNMQY7gq7P7abrCQRHDvY6yyiUq0ULIQdIw4+V/8nInE++MaV7e44Nxi28rPnIE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:mime-version:content-type; b=kjEx5AEeOUMlZbiLFg1ly2pcTFk15iD7Sb+bUNJS2tvKZKmKjivHWJteqt1Y6G57GvyuPkyTAvK6WjwWX3fz08FqWiwB0JdvyI+daJsbSkXinGMehevcsc8jX5luRKrqJifkg6gxrU91UYWG1J86nES1p54JxAqSkpojNAEaNlA= Original-Received: by 10.70.80.6 with SMTP id d6mr14061585wxb.1191400011892; Wed, 03 Oct 2007 01:26:51 -0700 (PDT) Original-Received: by 10.90.103.8 with HTTP; Wed, 3 Oct 2007 01:26:51 -0700 (PDT) X-Detected-Kernel: Linux 2.6 (newer, 2) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:80170 Archived-At: ------=_Part_21251_16460878.1191400011880 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline After the recent bunch of changes in alloc.c, etc., I'm getting a mighty crash on Windows XP. This is the trunk, updated a few minutes ago, (dist|real|maintainer-)clean'ed and bootstrapped. Compiled with gcc (GCC) 3.4.5 (mingw special), with no unusual warnings (i.e., the same warnings that the previous successful bootstrap). I'm attaching the DrMingw log instead of including it in the text because it's almost 99 KiB. Juanma ------=_Part_21251_16460878.1191400011880 Content-Type: text/plain; name="drmingw.log" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="drmingw.log"; filename="drmingw.log" X-Attachment-Id: f_f7bkrowd ZW1hY3MuZXhlIGNhdXNlZCBhbiBBY2Nlc3MgVmlvbGF0aW9uIGF0IGxvY2F0aW9uIDAxMDYzZDFh IGluIG1vZHVsZSBlbWFjcy5leGUgUmVhZGluZyBmcm9tIGxvY2F0aW9uIDAwMDAxMjAwLgoKUmVn aXN0ZXJzOgplYXg9MDAwMDAwMDEgZWJ4PTAwMDAxMjAwIGVjeD0wMDAwMTIwMSBlZHg9MDAwMDEy MDAgZXNpPTAwMDAwMDE2IGVkaT0wMTE2MGFjMAplaXA9MDEwNjNkMWEgZXNwPTAwODI2YmIwIGVi cD0wMDgyNmMwOCBpb3BsPTAgICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBwbyBuYwpjcz0wMDFi ICBzcz0wMDIzICBkcz0wMDIzICBlcz0wMDIzICBmcz0wMDNiICBncz0wMDAwICAgICAgICAgICAg IGVmbD0wMDAwMDIwNgoKQ2FsbCBzdGFjazoKMDEwNjNEMUEgIGVtYWNzLmV4ZTowMTA2M0QxQSAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzMQoJLi4uCglzdHJ1Y3QgTGlzcF9TeW1ib2wgKnB0cng7 Cgo+CWlmIChwdHItPmdjbWFya2JpdCkgYnJlYWs7CglDSEVDS19BTExPQ0FURURfQU5EX0xJVkUg KGxpdmVfc3ltYm9sX3ApOwoJcHRyLT5nY21hcmtiaXQgPSAxOwoJLi4uCgowMTA2NDUwMSAgZW1h Y3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAg IFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNl cyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0 cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBt YXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsK CSAgcmV0dXJuIDE7CgkuLi4KCjAxMDY0MjcxICBlbWFjcy5leGU6MDEwNjQyNzEgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU1ODQKCS4uLgoJewoJICByZWdpc3RlciBzdHJ1Y3QgZnJhbWUgKnB0ciA9 IFhGUkFNRSAob2JqKTsKPgkgIGlmIChtYXJrX3ZlY3Rvcmxpa2UgKFhWRUNUT1IgKG9iaikpKQoJ ICAgIHsKCSAgICAgIG1hcmtfZmFjZV9jYWNoZSAocHRyLT5mYWNlX2NhY2hlKTsKCS4uLgoKMDEw NjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzNQoJLi4u CglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4JbWFya19v YmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCS4uLgoK MDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0 NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2Vz cyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUg ZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykg LyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5j b250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0MCAgZW1hY3MuZXhlOjAxMDYz RDQwICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM2CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnZh bHVlKTsKCW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsKPgltYXJrX29iamVjdCAocHRyLT5w bGlzdCk7CgoJaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJLi4u CgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4 CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJ Y2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4u LgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5j OjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJv Y2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0 aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkr KykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRy LT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAx MDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3Qg KHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2Nv dW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTow MTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRy LT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkK CSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJF RSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3Mu ZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19v YmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAo Y2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNz LmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtf b2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYg KGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFj cy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmpl Y3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhu YW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVS VkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYg IGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0K CW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsr OwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDM1 ICBlbWFjcy5leGU6MDEwNjNEMzUgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzUKCS4uLgoJcHRy LT5nY21hcmtiaXQgPSAxOwoJbWFya19vYmplY3QgKHB0ci0+dmFsdWUpOwo+CW1hcmtfb2JqZWN0 IChwdHItPmZ1bmN0aW9uKTsKCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCgkuLi4KCjAxMDYz QzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJ ICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291 bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2 NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJ Li4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdo aWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQg b2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBh bmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRl bnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5j YXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0g bWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRC ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0 KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJL X1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJ TkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEw NjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAo cHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291 bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0QzNSAgZW1hY3MuZXhlOjAx MDYzRDM1ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM1CgkuLi4KCXB0ci0+Z2NtYXJrYml0ID0g MTsKCW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKPgltYXJrX29iamVjdCAocHRyLT5mdW5jdGlv bik7CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhl OjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmpl Y3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2Ry X2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4 ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2Jq ZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNk cl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5l eGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29i amVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChj ZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3Mu ZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0 IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFt ZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZB TF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBl bWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9Cglt YXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsK CWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAg ZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtf b2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRy LT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19J TlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNh cik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBt YXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDQwICBlbWFjcy5leGU6MDEwNjNENDAg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzYKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+dmFsdWUp OwoJbWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwo+CW1hcmtfb2JqZWN0IChwdHItPnBsaXN0 KTsKCglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkuLi4KCjAx MDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUw CgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mg d2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVu ZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8q IGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29u dGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0 QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlz dCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFS S19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RS SU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAx MDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3Qg KHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2Nv dW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTow MTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlz dGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEK CSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUu ICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMg ZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVy biAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHIt PnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3Bf aGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9Q T0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRy LT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rv cmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUu Zy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmpl Y3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAw OyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1h cmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRC ICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFy a19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChw dHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJL X0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEw NjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4u CgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9j b3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1 MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNz IHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBl bmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAv KiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNv bnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjND MEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRy LT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQg PT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYz RDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBs aXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBN QVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChT VFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6 MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRp c3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJh CgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJl LiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRz IGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1 cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9Q T0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRy LT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmog PSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0 X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0 b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBl LmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2Jq ZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBt YXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNE NEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCglt YXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1B UktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgow MTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4Cgku Li4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2Ry X2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoK MDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzNQoJ Li4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4JbWFy a19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCS4u LgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0 OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsK CWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgku Li4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3 NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7 CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJ Li4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1 NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2Ry OwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkK CS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6 NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVS X1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+ eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFt ZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHIt PnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3Bf aGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9Q T0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRy LT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmog PSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0 X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0 b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBl LmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2Jq ZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0g MDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBt YXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNE NEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCglt YXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1B UktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgow MTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4Cgku Li4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2Ry X2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoK MDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzNQoJ Li4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4JbWFy a19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCS4u LgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5j OjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJv Y2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0 aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkr KykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRy LT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAx MDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHIt PnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJ ICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVF IChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0NTAxICBlbWFjcy5l eGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhl IGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4 dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0 dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsg aXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICBy ZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3Qg IGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0g cHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9s b29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBV UkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RS SU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMg KHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192 ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNl ZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3Bf T2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAg ICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2 M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4K CW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklO RyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJ TUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4K CjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1 NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nl c3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhl IGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKysp IC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+ Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2 NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGlu Y3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAg ICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAq Lwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxl bWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAx OwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUu Y2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFs dCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9j LmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lO VEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0 ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54 bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBw dHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xv b3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3Js aWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcu IGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0 IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJr X29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAg ZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJ bWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7 CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIg IGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJr X29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0 ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktf SU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2 NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJ Li4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdo aWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQg b2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBh bmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRl bnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3Qp OwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktf U1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklO R19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2 NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGlu Y3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAg ICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAq Lwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxl bWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAx OwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5U RVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRy LT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhu YW1lKSk7CgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlr ZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBi eSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBm aWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19v YmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVt YWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29i amVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+ eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5U RVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjND MEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkg IH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3Vu dCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNh cik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBt YXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3Qp OwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktf U1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklO R19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2 M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChw dHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3Vu dCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEw NjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+ cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkg IE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUg KFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4 ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2Jq ZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNk cl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5l eGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29i amVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChj ZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3Mu ZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19v YmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAo Y2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNz LmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtf b2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYg KGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFj cy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJr X29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlm IChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1h Y3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2Jq ZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54 bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRF UlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBG ICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9 CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQr KzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjND MEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkg IH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3Vu dCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYz RDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJ bWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5H IChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglN QVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoK MDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0 NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2Vz cyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUg ZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykg LyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5j b250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYz QzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0 ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50 ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2 M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5w bGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAg TUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAo U1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhl OjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBk aXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRy YQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVy ZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0 cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0 dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBh bGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0 ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9v cF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJF X1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklO RyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChw dHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9i aiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmpl Y3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19v YmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlm ICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcg KFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVS VkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2Fy KTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1h cmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0 NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5j dGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAg ICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICov Cj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVt ZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7 CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRF Ul9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHIt PnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5h bWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRy LT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29w X2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBh bGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0 ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9v cF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxp a2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4g YnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3Qg ZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBp IDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtf b2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBl bWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9Cglt YXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsK CWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAg ZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtf b2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRy LT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19J TlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYz QzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0 ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50 ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2 M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChw dHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3Vu dCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEw NjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3Rp bmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkg ICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAg Ki8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVs ZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4g MTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9j LmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51 LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hh bHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9J TlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChw dHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+ eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3Js aWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcu IGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0 IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsg aSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJr X29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAg ZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtf b2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRy LT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19J TlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0 NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5j dGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAg ICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICov Cj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVt ZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7 CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRF Ul9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHIt PnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5h bWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRy LT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29w X2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlr ZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBi eSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBm aWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19v YmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjQ1MDEgIGVt YWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAg ICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFj ZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBz dHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4g bWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7 CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19v YmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlm ICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcg KFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVS VkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0Q0MCAgZW1hY3MuZXhlOjAxMDYzRDQwICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NjM2CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsK CW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsKPgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 CgoJaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJLi4uCgowMTA2 M0Q0MCAgZW1hY3MuZXhlOjAxMDYzRDQwICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM2CgkuLi4K CW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKCW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsK PgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklO RyAocHRyLT54bmFtZSkpKQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJr X3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1 c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlz cF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJ ICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2M0QzNSAgZW1hY3MuZXhlOjAxMDYzRDM1ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM1Cgku Li4KCXB0ci0+Z2NtYXJrYml0ID0gMTsKCW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKPgltYXJr X29iamVjdCAocHRyLT5mdW5jdGlvbik7CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJLi4u CgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6 NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9j ZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRo ZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHIt PmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEw NjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+ cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkg IE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUg KFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4 ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2Jq ZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNk cl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5l eGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29i amVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChj ZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3Mu ZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRo ZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBl eHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVj dHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJr IGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAg cmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9 IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3Rf bG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQ VVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNU UklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxT IChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtf dmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVz ZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNw X09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkg ICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEw NjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4u CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsK CU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4u CgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4 CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJ Y2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4u LgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0 OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsK CWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgku Li4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2Mu Yzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1By b2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQg dGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0 ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTow MTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0 IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9j b3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6 MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0 ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkp CgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RS RUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNz LmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBU aGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMg ZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1 Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFy ayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7Cgkg IHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQ VVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNU UklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxT IChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtf b2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+ CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19v YmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJr X3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1 c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlz cF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJ ICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4Cgku Li4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNU UklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkp OwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7Cgku Li4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3 NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7 CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJ Li4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1 NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJf UCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54 bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1l KSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+ dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9o YWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2Ug IGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkg TGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmll bGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwg c2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2Jq ZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFj cy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJr X29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlm IChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1h Y3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2Jq ZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54 bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRF UlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0NTAx ICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4K CSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2gg cGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0 aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0 aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNb aV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFy a19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+ CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJ TkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lO VEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBG ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+ Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09 IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0Mw RiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHIt PmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9 PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1 MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0 aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAg IG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8K PgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1l bnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsK CS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6 NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNk cjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQp CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRF Ul9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHIt PnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5h bWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRy LT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29w X2hhbHQpCgkuLi4KCjAxMDYzQUUzICBlbWFjcy5leGU6MDEwNjNBRTMgIG1hcmtfYnVmZmVyICBh bGxvYy5jOjU4MDEKCS4uLgoJICAgIH0KCj4JICBmb3IgKHB0ciA9ICZidWZmZXItPm5hbWU7Cgkg ICAgICAgKGNoYXIgKilwdHIgPCAoY2hhciAqKWJ1ZmZlciArIHNpemVvZiAoc3RydWN0IGJ1ZmZl cik7CgkgICAgICAgcHRyKyspCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1h cmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlz IHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1M aXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICov CgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoK MDEwNjQyRjIgIGVtYWNzLmV4ZTowMTA2NDJGMiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTU5NgoJ Li4uCgkgIHJlZ2lzdGVyIHN0cnVjdCBMaXNwX1ZlY3RvciAqcHRyID0gWFZFQ1RPUiAob2JqKTsK CSAgc3RydWN0IHdpbmRvdyAqdyA9IFhXSU5ET1cgKG9iaik7Cj4JICBpZiAobWFya192ZWN0b3Js aWtlIChwdHIpKQoJICAgIHsKCSAgICAgIC8qIE1hcmsgZ2x5cGhzIGZvciBsZWFmIHdpbmRvd3Mu ICBNYXJraW5nIHdpbmRvdyBtYXRyaWNlcyBpcwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAx MDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0 aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJ ICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4g ICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBl bGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJu IDE7CgkuLi4KCjAxMDY0MkYyICBlbWFjcy5leGU6MDEwNjQyRjIgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU1OTYKCS4uLgoJICByZWdpc3RlciBzdHJ1Y3QgTGlzcF9WZWN0b3IgKnB0ciA9IFhWRUNU T1IgKG9iaik7CgkgIHN0cnVjdCB3aW5kb3cgKncgPSBYV0lORE9XIChvYmopOwo+CSAgaWYgKG1h cmtfdmVjdG9ybGlrZSAocHRyKSkKCSAgICB7CgkgICAgICAvKiBNYXJrIGdseXBocyBmb3IgbGVh ZiB3aW5kb3dzLiAgTWFya2luZyB3aW5kb3cgbWF0cmljZXMgaXMKCS4uLgoKMDEwNjQ1MDEgIGVt YWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAg ICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFj ZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBz dHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4g bWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7 CgkgIHJldHVybiAxOwoJLi4uCgowMTA2NDI3MSAgZW1hY3MuZXhlOjAxMDY0MjcxICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NTg0CgkuLi4KCXsKCSAgcmVnaXN0ZXIgc3RydWN0IGZyYW1lICpwdHIg PSBYRlJBTUUgKG9iaik7Cj4JICBpZiAobWFya192ZWN0b3JsaWtlIChYVkVDVE9SIChvYmopKSkK CSAgICB7CgkgICAgICBtYXJrX2ZhY2VfY2FjaGUgKHB0ci0+ZmFjZV9jYWNoZSk7CgkuLi4KCjAx MDYzRUQ0ICBlbWFjcy5leGU6MDEwNjNFRDQgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2NzcKCS4u LgoJICAgIG1hcmtfb2JqZWN0IChwdHItPmJ1ZmZlcik7CgkgICAgbWFya19vYmplY3QgKHB0ci0+ ZnJhbWUpOwo+CSAgICBvYmogPSBwdHItPmNkcjsKCSAgICBnb3RvIGxvb3A7CgkgIH0KCS4uLgoK MDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzNQoJ Li4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4JbWFy a19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCS4u LgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0 OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsK CWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgku Li4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2 MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9Q IChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhu YW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUp KTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBh bGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExp c3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxk cyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNp emU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVj dCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3Mu ZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0 IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFt ZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZB TF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBl bWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9Cglt YXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsK CWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAg ZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkg ICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBs YWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhl IHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhl biBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ld KTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtf b2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+ CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19v YmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJr X29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4J aWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklO RyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5U RVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzRDQwICBlbWFjcy5leGU6MDEwNjNENDAg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzYKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+dmFsdWUp OwoJbWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwo+CW1hcmtfb2JqZWN0IChwdHItPnBsaXN0 KTsKCglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1 MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNz IHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBl bmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAv KiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNv bnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjND MEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRy LT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQg PT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYz RDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBs aXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBN QVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChT VFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6 MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVj dCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJf Y291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhl OjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChw dHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkp KQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9U UkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFj cy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJr X29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlm IChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1h Y3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFy a19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7Cglp ZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVt YWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAg ICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFj ZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBz dHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4g bWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7 CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19v YmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlm ICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcg KFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVS VkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2Fy KTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1h cmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAg bWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24g aXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9u LUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAg Zm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMg Ki8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4u CgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4 CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJ Y2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4u LgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYz OAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1Ag KFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5h bWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkp OwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUu Y2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFs dCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9j LmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lO VEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0 ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54 bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxp a2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4g YnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3Qg ZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBp IDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtf b2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRCICBl bWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19v YmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHIt PnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lO VEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjND MEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkg IH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3Vu dCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNh cik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBt YXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3Qp OwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktf U1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklO R19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2 M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChw dHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3Vu dCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEw NjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3Rp bmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkg ICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAg Ki8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVs ZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4g MTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9j LmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lO VEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0 ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54 bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBw dHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xv b3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3Qg IGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0g cHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9s b29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9y bGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5n LiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVj dCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7 IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFy a19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYg IGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0K CW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsr OwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRC ICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFy a19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChw dHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJL X0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEw NjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAK CS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3 aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5k IG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyog YW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250 ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRC ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0 KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJL X1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJ TkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEw NjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAo cHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291 bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAx MDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0 aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJ ICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4g ICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBl bGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJu IDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+ dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9o YWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BP SU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAo cHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHIt PnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9 IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3Rf bG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQ VVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNU UklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxT IChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtf b2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+ CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19v YmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJr X3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1 c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlz cF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJ ICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4Cgku Li4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNU UklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkp OwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7Cgku Li4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2Mu Yzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1By b2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQg dGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0 ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTow MTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRy LT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkK CSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJF RSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3Mu ZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19v YmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAo Y2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNz LmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtf b2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYg KGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFj cy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAg VGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2Vz IGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3Ry dWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1h cmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJ ICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmpl Y3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2Jq ID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVj dF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAo IVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChY U1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZB TFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFy a192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMg dXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxp c3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9y IChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8K CSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgow MTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4Cgku Li4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNU UklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkp OwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7Cgku Li4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3 NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7 CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJ Li4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1 NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2Ry OwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkK CS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxv Yy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3Bf UHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBh dCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7 IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAo cHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhl OjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmpl Y3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2Ry X2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4 ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAo cHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUp KSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxf VFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1h Y3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFy a19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7Cglp ZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVt YWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29i amVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+ eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5U RVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1 MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4u LgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGlj aCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9m IHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5k IHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50 c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2Fy KTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1h cmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0QzNSAgZW1hY3MuZXhlOjAxMDYz RDM1ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM1CgkuLi4KCXB0ci0+Z2NtYXJrYml0ID0gMTsK CW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKPgltYXJrX29iamVjdCAocHRyLT5mdW5jdGlvbik7 CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAx MDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3Qg KHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2Nv dW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTow MTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlz dGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEK CSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUu ICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMg ZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVy biAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHIt PnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3Bf aGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9Q T0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcg KHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRy LT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmog PSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0 X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENDAgIGVtYWNzLmV4ZTowMTA2M0Q0MCAgbWFya19vYmpl Y3QgIGFsbG9jLmM6NTYzNgoJLi4uCgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7CgltYXJrX29i amVjdCAocHRyLT5mdW5jdGlvbik7Cj4JbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCWlmICgh UFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCS4uLgoKMDEwNjQ1MDEgIGVt YWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAg ICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFj ZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBz dHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4g bWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7 CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19v YmplY3QgIGFsbG9jLmM6NTYzNQoJLi4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVj dCAocHRyLT52YWx1ZSk7Cj4JbWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmpl Y3QgKHB0ci0+cGxpc3QpOwoKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFy a19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7 Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJr X29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1h cmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIp Owo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFy a19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsK Cj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NU UklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdf SU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjND MEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRy LT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQg PT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0QzNSAgZW1hY3MuZXhlOjAxMDYz RDM1ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM1CgkuLi4KCXB0ci0+Z2NtYXJrYml0ID0gMTsK CW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKPgltYXJrX29iamVjdCAocHRyLT5mdW5jdGlvbik7 CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAx MDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3Qg KHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2Nv dW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTow MTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRy LT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkK CSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJF RSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3Mu ZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRo ZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBl eHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVj dHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJr IGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAg cmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9 IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3Rf bG9vcF9oYWx0KQoJLi4uCgowMTA2M0QzNSAgZW1hY3MuZXhlOjAxMDYzRDM1ICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NjM1CgkuLi4KCXB0ci0+Z2NtYXJrYml0ID0gMTsKCW1hcmtfb2JqZWN0IChw dHItPnZhbHVlKTsKPgltYXJrX29iamVjdCAocHRyLT5mdW5jdGlvbik7CgltYXJrX29iamVjdCAo cHRyLT5wbGlzdCk7CgoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3Zl Y3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2Vk IGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9P YmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkg PSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAg IG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYz RDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJ bWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5H IChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglN QVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoK MDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJ Li4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNk cl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4K CjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1 NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nl c3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhl IGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKysp IC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+ Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2 M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChw dHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3Vu dCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEw NjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+ cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkg IE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUg KFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4 ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUg ZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0 cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1 cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBp dHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJl dHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJF X1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklO RyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChw dHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9i aiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmpl Y3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192 ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNl ZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3Bf T2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAg ICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2 M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4K CSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2Nv dW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEw NjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4u CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsK CU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4u CgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4 CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJ Y2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4u LgoKMDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYz NQoJLi4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4J bWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoK CS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6 NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNk cjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQp CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5j ZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0 KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5U RVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRy LT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhu YW1lKSk7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBh bGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVf UE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5H IChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0 ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmpl Y3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2Jq ID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVj dF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDM1ICBlbWFjcy5leGU6MDEwNjNEMzUgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU2MzUKCS4uLgoJcHRyLT5nY21hcmtiaXQgPSAxOwoJbWFya19vYmplY3Qg KHB0ci0+dmFsdWUpOwo+CW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsKCW1hcmtfb2JqZWN0 IChwdHItPnBsaXN0KTsKCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtf dmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVz ZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNw X09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkg ICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEw NjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4u CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsK CU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4u CgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4 CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJ Y2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4u LgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0 OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsK CWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgku Li4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2Mu Yzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1By b2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQg dGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0 ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTow MTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0 IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9j b3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6 MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0 ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkp CgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RS RUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNz LmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtf b2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYg KGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFj cy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJr X29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlm IChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1h Y3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAg IFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNl cyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0 cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBt YXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsK CSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9i aiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmpl Y3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYg KCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAo WFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJW QUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1h cmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIp Owo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFy a19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2Fy KTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1h cmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0 NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5j dGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAg ICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICov Cj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVt ZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7 CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRF Ul9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHIt PnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5h bWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRy LT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29w X2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBh bGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0 ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9v cF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxp a2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4g YnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3Qg ZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBp IDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtf b2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzQzBGICBl bWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9Cglt YXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsK CWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAg ZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtf b2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRy LT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19J TlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7 Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19T VFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5H X0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYz QzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0 ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50 ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2 NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGlu Y3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAg ICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAq Lwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxl bWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAx OwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUu Y2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFs dCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9j LmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lO VEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0 ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54 bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBw dHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xv b3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3Qg IGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVS RV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAo cHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192 ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNl ZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3Bf T2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChp ID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAg ICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2 M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4K CSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2Nv dW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEw NjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4u CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsK CU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4u CgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6 NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9j ZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRo ZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsr KSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHIt PmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEw NjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+ cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkg IE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUg KFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4 ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2Jq ZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNk cl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5l eGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29i amVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChj ZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0QzNSAgZW1hY3Mu ZXhlOjAxMDYzRDM1ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM1CgkuLi4KCXB0ci0+Z2NtYXJr Yml0ID0gMTsKCW1hcmtfb2JqZWN0IChwdHItPnZhbHVlKTsKPgltYXJrX29iamVjdCAocHRyLT5m dW5jdGlvbik7CgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7CgoJLi4uCgowMTA2NDUwMSAgZW1h Y3MuZXhlOjAxMDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAg IFRoZSBkaXN0aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNl cyBleHRyYQoJICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0 cnVjdHVyZS4gICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBt YXJrIGl0cyBlbGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsK CSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAo IVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChY U1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZB TFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFy a19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7 Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJr X29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1h cmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlz IHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1M aXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICov CgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoK MDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJ Li4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNk cl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4K CjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgK CS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChY U1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1l KSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsK CS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6 NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNk cjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQp CgkuLi4KCjAxMDYzRDM1ICBlbWFjcy5leGU6MDEwNjNEMzUgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzUKCS4uLgoJcHRyLT5nY21hcmtiaXQgPSAxOwoJbWFya19vYmplY3QgKHB0ci0+dmFsdWUp Owo+CW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsKCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0 KTsKCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAg YWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBM aXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVs ZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBz aXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmpl Y3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNz LmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVj dCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5h bWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJW QUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAg ZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJ bWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7 CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEg IGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJ ICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBw bGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRo ZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRo ZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tp XSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJr X29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsK PglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtf b2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFy a19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+ CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJ TkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lO VEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBG ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+ Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09 IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0 QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlz dCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFS S19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RS SU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAx MDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0 aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJ ICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4g ICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBl bGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJu IDE7CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9J TlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChw dHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+ eG5hbWUpKTsKCS4uLgoKMDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2M0QzNSAgbWFya19vYmplY3Qg IGFsbG9jLmM6NTYzNQoJLi4uCglwdHItPmdjbWFya2JpdCA9IDE7CgltYXJrX29iamVjdCAocHRy LT52YWx1ZSk7Cj4JbWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24pOwoJbWFya19vYmplY3QgKHB0 ci0+cGxpc3QpOwoKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmpl Y3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2Jq ID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVj dF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVj dG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQg ZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09i amVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9 IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAg bWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjND MEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkg IH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3Vu dCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYz RDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJ bWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5H IChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglN QVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoK MDEwNjQ1MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0 NTAKCS4uLgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2Vz cyB3aGljaCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUg ZW5kIG9mIHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykg LyogYW5kIHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5j b250ZW50c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYz RDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBs aXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBN QVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChT VFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6 MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVj dCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJf Y291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhl OjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmpl Y3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2Ry X2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4 ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUg ZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0 cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1 cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBp dHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJl dHVybiAxOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAg YWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBw dHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xv b3BfaGFsdCkKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3Qg IGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVS RV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJ TkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAo cHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29i amVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglv YmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2Jq ZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19v YmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4J b2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29i amVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtf dmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVz ZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNw X09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAo aSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkg ICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEw NjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4u CgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9j b3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAx MDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4u LgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RS SU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7 CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4u LgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0 OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsK CWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgku Li4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2Mu Yzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1By b2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQg dGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0 ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTow MTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRy LT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkK CSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJF RSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3Mu ZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19v YmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAo Y2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNz LmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtf b2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYg KGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFj cy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAg VGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2Vz IGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3Ry dWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1h cmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJ ICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmpl Y3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2Jq ID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVj dF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAo IVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChY U1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZB TFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFy a19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7 Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJr X29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1h cmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoK PglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RS SU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19J TlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0Mw RiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHIt PmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9 PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1 MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0 aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAg IG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8K PgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1l bnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsK CS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6 NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNk cjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQp CgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRF Ul9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHIt PnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5h bWUpKTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFs bG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRy LT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29w X2hhbHQpCgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlr ZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBi eSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBm aWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19v YmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVt YWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1h cmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJ aWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBl bWFjcy5leGU6MDEwNjNENEIgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19v YmplY3QgKHB0ci0+cGxpc3QpOwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHIt PnhuYW1lKSkpCgkgIE1BUktfU1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lO VEVSVkFMX1RSRUUgKFNUUklOR19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjQ1 MDEgIGVtYWNzLmV4ZTowMTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4u LgoJICAgICBUaGUgZGlzdGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGlj aCBwbGFjZXMgZXh0cmEKCSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9m IHRoZSBzdHJ1Y3R1cmUuICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5k IHRoZW4gbWFyayBpdHMgZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50 c1tpXSk7CgkgIHJldHVybiAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBt YXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsK Cj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NU UklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdf SU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjND MEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRy LT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQg PT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhlOjAxMDYz QzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmplY3QgKHB0 ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2RyX2NvdW50 ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNEMzUgIGVtYWNzLmV4ZTowMTA2 M0QzNSAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzNQoJLi4uCglwdHItPmdjbWFya2JpdCA9IDE7 CgltYXJrX29iamVjdCAocHRyLT52YWx1ZSk7Cj4JbWFya19vYmplY3QgKHB0ci0+ZnVuY3Rpb24p OwoJbWFya19vYmplY3QgKHB0ci0+cGxpc3QpOwoKCS4uLgoKMDEwNjQ1MDEgIGVtYWNzLmV4ZTow MTA2NDUwMSAgbWFya192ZWN0b3JsaWtlICBhbGxvYy5jOjU0NTAKCS4uLgoJICAgICBUaGUgZGlz dGluY3Rpb24gaXMgdXNlZCBlLmcuIGJ5IExpc3BfUHJvY2VzcyB3aGljaCBwbGFjZXMgZXh0cmEK CSAgICAgbm9uLUxpc3BfT2JqZWN0IGZpZWxkcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUu ICAqLwo+CSAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgLyogYW5kIHRoZW4gbWFyayBpdHMg ZWxlbWVudHMgKi8KCSAgICBtYXJrX29iamVjdCAocHRyLT5jb250ZW50c1tpXSk7CgkgIHJldHVy biAxOwoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BP SU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAo cHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHIt PnhuYW1lKSk7CgkuLi4KCjAxMDYzRDM1ICBlbWFjcy5leGU6MDEwNjNEMzUgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU2MzUKCS4uLgoJcHRyLT5nY21hcmtiaXQgPSAxOwoJbWFya19vYmplY3QgKHB0 ci0+dmFsdWUpOwo+CW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsKCW1hcmtfb2JqZWN0IChw dHItPnBsaXN0KTsKCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2Jq ZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9i aiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmpl Y3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJrX3Zl Y3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1c2Vk IGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlzcF9P YmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3IgKGkg PSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJICAg IG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAxMDYz QzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJ ICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291 bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2 M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4CgkuLi4K CW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNUUklO RyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkpOwoJ TUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7CgkuLi4K CjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgK CS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7Cglj ZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4u CgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4 CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAo WFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFt ZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7 CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5j OjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5j ZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0 KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2Mu Yzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5U RVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRy LT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhu YW1lKSk7CgkuLi4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlr ZSAgYWxsb2MuYzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBi eSBMaXNwX1Byb2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBm aWVsZHMgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkg PCBzaXplOyBpKyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19v YmplY3QgKHB0ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNENEIgIGVt YWNzLmV4ZTowMTA2M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29i amVjdCAocHRyLT5wbGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+ eG5hbWUpKSkKCSAgTUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5U RVJWQUxfVFJFRSAoU1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0Mw RiAgZW1hY3MuZXhlOjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAg fQoJbWFya19vYmplY3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50 Kys7CglpZiAoY2RyX2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjND MEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkg IH0KCW1hcmtfb2JqZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3Vu dCsrOwoJaWYgKGNkcl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDY0 NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2MuYzo1NDUwCgku Li4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1Byb2Nlc3Mgd2hp Y2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQgdGhlIGVuZCBv ZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIC8qIGFu ZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0ci0+Y29udGVu dHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4ZTowMTA2M0MwRiAg bWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2JqZWN0IChwdHItPmNh cik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNkcl9jb3VudCA9PSBt YXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDRCICBlbWFjcy5leGU6MDEwNjNENEIg IG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzgKCS4uLgoJbWFya19vYmplY3QgKHB0ci0+cGxpc3Qp OwoKPglpZiAoIVBVUkVfUE9JTlRFUl9QIChYU1RSSU5HIChwdHItPnhuYW1lKSkpCgkgIE1BUktf U1RSSU5HIChYU1RSSU5HIChwdHItPnhuYW1lKSk7CglNQVJLX0lOVEVSVkFMX1RSRUUgKFNUUklO R19JTlRFUlZBTFMgKHB0ci0+eG5hbWUpKTsKCS4uLgoKMDEwNjNENEIgIGVtYWNzLmV4ZTowMTA2 M0Q0QiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTYzOAoJLi4uCgltYXJrX29iamVjdCAocHRyLT5w bGlzdCk7Cgo+CWlmICghUFVSRV9QT0lOVEVSX1AgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKSkKCSAg TUFSS19TVFJJTkcgKFhTVFJJTkcgKHB0ci0+eG5hbWUpKTsKCU1BUktfSU5URVJWQUxfVFJFRSAo U1RSSU5HX0lOVEVSVkFMUyAocHRyLT54bmFtZSkpOwoJLi4uCgowMTA2M0MwRiAgZW1hY3MuZXhl OjAxMDYzQzBGICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NzQ4CgkuLi4KCSAgfQoJbWFya19vYmpl Y3QgKHB0ci0+Y2FyKTsKPglvYmogPSBwdHItPnUuY2RyOwoJY2RyX2NvdW50Kys7CglpZiAoY2Ry X2NvdW50ID09IG1hcmtfb2JqZWN0X2xvb3BfaGFsdCkKCS4uLgoKMDEwNjNDMEYgIGVtYWNzLmV4 ZTowMTA2M0MwRiAgbWFya19vYmplY3QgIGFsbG9jLmM6NTc0OAoJLi4uCgkgIH0KCW1hcmtfb2Jq ZWN0IChwdHItPmNhcik7Cj4Jb2JqID0gcHRyLT51LmNkcjsKCWNkcl9jb3VudCsrOwoJaWYgKGNk cl9jb3VudCA9PSBtYXJrX29iamVjdF9sb29wX2hhbHQpCgkuLi4KCjAxMDYzRDM1ICBlbWFjcy5l eGU6MDEwNjNEMzUgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzUKCS4uLgoJcHRyLT5nY21hcmti aXQgPSAxOwoJbWFya19vYmplY3QgKHB0ci0+dmFsdWUpOwo+CW1hcmtfb2JqZWN0IChwdHItPmZ1 bmN0aW9uKTsKCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCgkuLi4KCjAxMDYzQzBGICBlbWFj cy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJr X29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlm IChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2M0FFMyAgZW1h Y3MuZXhlOjAxMDYzQUUzICBtYXJrX2J1ZmZlciAgYWxsb2MuYzo1ODAxCgkuLi4KCSAgICB9Cgo+ CSAgZm9yIChwdHIgPSAmYnVmZmVyLT5uYW1lOwoJICAgICAgIChjaGFyICopcHRyIDwgKGNoYXIg KilidWZmZXIgKyBzaXplb2YgKHN0cnVjdCBidWZmZXIpOwoJICAgICAgIHB0cisrKQoJLi4uCgow MTA2M0VDOSAgZW1hY3MuZXhlOjAxMDYzRUM5ICBtYXJrX29iamVjdCAgYWxsb2MuYzo1Njc2Cgku Li4KCSAgICBtYXJrX29iamVjdCAocHRyLT5yZWFsdmFsdWUpOwoJICAgIG1hcmtfb2JqZWN0IChw dHItPmJ1ZmZlcik7Cj4JICAgIG1hcmtfb2JqZWN0IChwdHItPmZyYW1lKTsKCSAgICBvYmogPSBw dHItPmNkcjsKCSAgICBnb3RvIGxvb3A7CgkuLi4KCjAxMDYzRDM1ICBlbWFjcy5leGU6MDEwNjNE MzUgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU2MzUKCS4uLgoJcHRyLT5nY21hcmtiaXQgPSAxOwoJ bWFya19vYmplY3QgKHB0ci0+dmFsdWUpOwo+CW1hcmtfb2JqZWN0IChwdHItPmZ1bmN0aW9uKTsK CW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEw NjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAo cHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291 bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAx MDY0NTAxICBtYXJrX3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0 aW5jdGlvbiBpcyB1c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJ ICAgICBub24tTGlzcF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4g ICovCj4JICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBl bGVtZW50cyAqLwoJICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJu IDE7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxv Yy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+ dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9o YWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxs b2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BP SU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAo cHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHIt PnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0 ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9 IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3Rf bG9vcF9oYWx0KQoJLi4uCgowMTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVj dCAgYWxsb2MuYzo1NjM4CgkuLi4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQ VVJFX1BPSU5URVJfUCAoWFNUUklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNU UklORyAocHRyLT54bmFtZSkpOwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxT IChwdHItPnhuYW1lKSk7CgkuLi4KCjAxMDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtf b2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4uLgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+ CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJfY291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19v YmplY3RfbG9vcF9oYWx0KQoJLi4uCgowMTA2NDUwMSAgZW1hY3MuZXhlOjAxMDY0NTAxICBtYXJr X3ZlY3Rvcmxpa2UgIGFsbG9jLmM6NTQ1MAoJLi4uCgkgICAgIFRoZSBkaXN0aW5jdGlvbiBpcyB1 c2VkIGUuZy4gYnkgTGlzcF9Qcm9jZXNzIHdoaWNoIHBsYWNlcyBleHRyYQoJICAgICBub24tTGlz cF9PYmplY3QgZmllbGRzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZS4gICovCj4JICBmb3Ig KGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSAvKiBhbmQgdGhlbiBtYXJrIGl0cyBlbGVtZW50cyAqLwoJ ICAgIG1hcmtfb2JqZWN0IChwdHItPmNvbnRlbnRzW2ldKTsKCSAgcmV0dXJuIDE7CgkuLi4KCjAx MDYzQzBGICBlbWFjcy5leGU6MDEwNjNDMEYgIG1hcmtfb2JqZWN0ICBhbGxvYy5jOjU3NDgKCS4u LgoJICB9CgltYXJrX29iamVjdCAocHRyLT5jYXIpOwo+CW9iaiA9IHB0ci0+dS5jZHI7CgljZHJf Y291bnQrKzsKCWlmIChjZHJfY291bnQgPT0gbWFya19vYmplY3RfbG9vcF9oYWx0KQoJLi4uCgow MTA2M0Q0QiAgZW1hY3MuZXhlOjAxMDYzRDRCICBtYXJrX29iamVjdCAgYWxsb2MuYzo1NjM4Cgku Li4KCW1hcmtfb2JqZWN0IChwdHItPnBsaXN0KTsKCj4JaWYgKCFQVVJFX1BPSU5URVJfUCAoWFNU UklORyAocHRyLT54bmFtZSkpKQoJICBNQVJLX1NUUklORyAoWFNUUklORyAocHRyLT54bmFtZSkp OwoJTUFSS19JTlRFUlZBTF9UUkVFIChTVFJJTkdfSU5URVJWQUxTIChwdHItPnhuYW1lKSk7Cgku Li4KCjAxMDY0NTAxICBlbWFjcy5leGU6MDEwNjQ1MDEgIG1hcmtfdmVjdG9ybGlrZSAgYWxsb2Mu Yzo1NDUwCgkuLi4KCSAgICAgVGhlIGRpc3RpbmN0aW9uIGlzIHVzZWQgZS5nLiBieSBMaXNwX1By b2Nlc3Mgd2hpY2ggcGxhY2VzIGV4dHJhCgkgICAgIG5vbi1MaXNwX09iamVjdCBmaWVsZHMgYXQg dGhlIGVuZCBvZiB0aGUgc3RydWN0dXJlLiAgKi8KPgkgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBp KyspIC8qIGFuZCB0aGVuIG1hcmsgaXRzIGVsZW1lbnRzICovCgkgICAgbWFya19vYmplY3QgKHB0 ci0+Y29udGVudHNbaV0pOwoJICByZXR1cm4gMTsKCS4uLgoKMDEwNjUyMkQgIGVtYWNzLmV4ZTow MTA2NTIyRCAgRmdhcmJhZ2VfY29sbGVjdCAgYWxsb2MuYzo1MTM1CgkuLi4KCSAgLyogTWFyayBh bGwgdGhlIHNwZWNpYWwgc2xvdHMgdGhhdCBzZXJ2ZSBhcyB0aGUgcm9vdHMgb2YgYWNjZXNzaWJp bGl0eS4gICovCgo+CSAgZm9yIChpID0gMDsgaSA8IHN0YXRpY2lkeDsgaSsrKQoJICAgIG1hcmtf b2JqZWN0ICgqc3RhdGljdmVjW2ldKTsKCgkuLi4KCjAxMDBDMTEwICBlbWFjcy5leGU6MDEwMEMx MTAgIEZmdW5jYWxsICBldmFsLmM6Mjk3MAoJLi4uCgkgICAgICB8fAoJICAgICAgKCFOSUxQIChW bWVtb3J5X2Z1bGwpICYmIGNvbnNpbmdfc2luY2VfZ2MgPiBtZW1vcnlfZnVsbF9jb25zX3RocmVz aG9sZCkpCj4JICAgIEZnYXJiYWdlX2NvbGxlY3QgKCk7CgoJICBpZiAoKytsaXNwX2V2YWxfZGVw dGggPiBtYXhfbGlzcF9ldmFsX2RlcHRoKQoJLi4uCgowMTExMEE0MyAgZW1hY3MuZXhlOjAxMTEw QTQzICBGYnl0ZV9jb2RlICBieXRlY29kZS5jOjY3OQoJLi4uCgkgICAgICB9CgkjZW5kaWYKPgkg ICAgVE9QID0gRmZ1bmNhbGwgKG9wICsgMSwgJlRPUCk7CgkgICAgQUZURVJfUE9URU5USUFMX0dD ICgpOwoJICAgIGJyZWFrOwoJLi4uCgowMTAwQkM0NiAgZW1hY3MuZXhlOjAxMDBCQzQ2ICBmdW5j YWxsX2xhbWJkYSAgZXZhbC5jOjMyMjgKCS4uLgoJICAgIH0KCj4JICByZXR1cm4gdW5iaW5kX3Rv IChjb3VudCwgdmFsKTsKCX0KCgkuLi4KCjAxMDBDMTNCICBlbWFjcy5leGU6MDEwMEMxM0IgIEZm dW5jYWxsICBldmFsLmM6MzEwNQoJLi4uCgkgZG9uZToKCSAgQ0hFQ0tfQ09OU19MSVNUICgpOwo+ CSAgbGlzcF9ldmFsX2RlcHRoLS07CgkgIGlmIChiYWNrdHJhY2UuZGVidWdfb25fZXhpdCkKCSAg ICB2YWwgPSBjYWxsX2RlYnVnZ2VyIChGY29ucyAoUWV4aXQsIEZjb25zICh2YWwsIFFuaWwpKSk7 CgkuLi4KCjAxMTEwQTQzICBlbWFjcy5leGU6MDExMTBBNDMgIEZieXRlX2NvZGUgIGJ5dGVjb2Rl LmM6Njc5CgkuLi4KCSAgICAgIH0KCSNlbmRpZgo+CSAgICBUT1AgPSBGZnVuY2FsbCAob3AgKyAx LCAmVE9QKTsKCSAgICBBRlRFUl9QT1RFTlRJQUxfR0MgKCk7CgkgICAgYnJlYWs7CgkuLi4KCjAx MDBCQzQ2ICBlbWFjcy5leGU6MDEwMEJDNDYgIGZ1bmNhbGxfbGFtYmRhICBldmFsLmM6MzIyOAoJ Li4uCgkgICAgfQoKPgkgIHJldHVybiB1bmJpbmRfdG8gKGNvdW50LCB2YWwpOwoJfQoKCS4uLgoK MDEwMEMxM0IgIGVtYWNzLmV4ZTowMTAwQzEzQiAgRmZ1bmNhbGwgIGV2YWwuYzozMTA1CgkuLi4K CSBkb25lOgoJICBDSEVDS19DT05TX0xJU1QgKCk7Cj4JICBsaXNwX2V2YWxfZGVwdGgtLTsKCSAg aWYgKGJhY2t0cmFjZS5kZWJ1Z19vbl9leGl0KQoJICAgIHZhbCA9IGNhbGxfZGVidWdnZXIgKEZj b25zIChRZXhpdCwgRmNvbnMgKHZhbCwgUW5pbCkpKTsKCS4uLgoKMDExMTBBNDMgIGVtYWNzLmV4 ZTowMTExMEE0MyAgRmJ5dGVfY29kZSAgYnl0ZWNvZGUuYzo2NzkKCS4uLgoJICAgICAgfQoJI2Vu ZGlmCj4JICAgIFRPUCA9IEZmdW5jYWxsIChvcCArIDEsICZUT1ApOwoJICAgIEFGVEVSX1BPVEVO VElBTF9HQyAoKTsKCSAgICBicmVhazsKCS4uLgoKMDEwMEJDNDYgIGVtYWNzLmV4ZTowMTAwQkM0 NiAgZnVuY2FsbF9sYW1iZGEgIGV2YWwuYzozMjI4CgkuLi4KCSAgICB9Cgo+CSAgcmV0dXJuIHVu YmluZF90byAoY291bnQsIHZhbCk7Cgl9CgoJLi4uCgowMTAwQzEzQiAgZW1hY3MuZXhlOjAxMDBD MTNCICBGZnVuY2FsbCAgZXZhbC5jOjMxMDUKCS4uLgoJIGRvbmU6CgkgIENIRUNLX0NPTlNfTElT VCAoKTsKPgkgIGxpc3BfZXZhbF9kZXB0aC0tOwoJICBpZiAoYmFja3RyYWNlLmRlYnVnX29uX2V4 aXQpCgkgICAgdmFsID0gY2FsbF9kZWJ1Z2dlciAoRmNvbnMgKFFleGl0LCBGY29ucyAodmFsLCBR bmlsKSkpOwoJLi4uCgowMTExMEE0MyAgZW1hY3MuZXhlOjAxMTEwQTQzICBGYnl0ZV9jb2RlICBi eXRlY29kZS5jOjY3OQoJLi4uCgkgICAgICB9CgkjZW5kaWYKPgkgICAgVE9QID0gRmZ1bmNhbGwg KG9wICsgMSwgJlRPUCk7CgkgICAgQUZURVJfUE9URU5USUFMX0dDICgpOwoJICAgIGJyZWFrOwoJ Li4uCgowMTAwQkM0NiAgZW1hY3MuZXhlOjAxMDBCQzQ2ICBmdW5jYWxsX2xhbWJkYSAgZXZhbC5j OjMyMjgKCS4uLgoJICAgIH0KCj4JICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwgdmFsKTsKCX0K CgkuLi4KCjAxMDBDMTNCICBlbWFjcy5leGU6MDEwMEMxM0IgIEZmdW5jYWxsICBldmFsLmM6MzEw NQoJLi4uCgkgZG9uZToKCSAgQ0hFQ0tfQ09OU19MSVNUICgpOwo+CSAgbGlzcF9ldmFsX2RlcHRo LS07CgkgIGlmIChiYWNrdHJhY2UuZGVidWdfb25fZXhpdCkKCSAgICB2YWwgPSBjYWxsX2RlYnVn Z2VyIChGY29ucyAoUWV4aXQsIEZjb25zICh2YWwsIFFuaWwpKSk7CgkuLi4KCjAxMTEwQTQzICBl bWFjcy5leGU6MDExMTBBNDMgIEZieXRlX2NvZGUgIGJ5dGVjb2RlLmM6Njc5CgkuLi4KCSAgICAg IH0KCSNlbmRpZgo+CSAgICBUT1AgPSBGZnVuY2FsbCAob3AgKyAxLCAmVE9QKTsKCSAgICBBRlRF Ul9QT1RFTlRJQUxfR0MgKCk7CgkgICAgYnJlYWs7CgkuLi4KCjAxMDBCQzQ2ICBlbWFjcy5leGU6 MDEwMEJDNDYgIGZ1bmNhbGxfbGFtYmRhICBldmFsLmM6MzIyOAoJLi4uCgkgICAgfQoKPgkgIHJl dHVybiB1bmJpbmRfdG8gKGNvdW50LCB2YWwpOwoJfQoKCS4uLgoKMDEwMEJFQzMgIGVtYWNzLmV4 ZTowMTAwQkVDMyAgYXBwbHlfbGFtYmRhICBldmFsLmM6MzE0NwoJLi4uCgkgICAgfQoJICBiYWNr dHJhY2VfbGlzdC0+ZXZhbGFyZ3MgPSAwOwo+CSAgdGVtID0gZnVuY2FsbF9sYW1iZGEgKGZ1biwg WElOVCAobnVtYXJncyksIGFyZ192ZWN0b3IpOwoKCSAgLyogRG8gdGhlIGRlYnVnLW9uLWV4aXQg bm93LCB3aGlsZSBhcmdfdmVjdG9yIHN0aWxsIGV4aXN0cy4gICovCgkuLi4KCjAxMDBCNThCICBl bWFjcy5leGU6MDEwMEI1OEIgIEZldmFsICBldmFsLmM6MjQzNAoJLi4uCgkgIENIRUNLX0NPTlNf TElTVCAoKTsKCj4JICBsaXNwX2V2YWxfZGVwdGgtLTsKCSAgaWYgKGJhY2t0cmFjZS5kZWJ1Z19v bl9leGl0KQoJICAgIHZhbCA9IGNhbGxfZGVidWdnZXIgKEZjb25zIChRZXhpdCwgRmNvbnMgKHZh bCwgUW5pbCkpKTsKCS4uLgoKMDEwNTE0MjIgIGVtYWNzLmV4ZTowMTA1MTQyMiAgdG9wX2xldmVs XzIgIGtleWJvYXJkLmM6MTQxMwoJLi4uCgl7CgkgIHJldHVybiBGZXZhbCAoVnRvcF9sZXZlbCk7 Cj4JfQoKCUxpc3BfT2JqZWN0CgkuLi4KCjAxMDBBNEE1ICBlbWFjcy5leGU6MDEwMEE0QTUgIGlu dGVybmFsX2NvbmRpdGlvbl9jYXNlICBldmFsLmM6MTQ5NQoJLi4uCgoJICB2YWwgPSAoKmJmdW4p ICgpOwo+CSAgY2F0Y2hsaXN0ID0gYy5uZXh0OwoJICBoYW5kbGVybGlzdCA9IGgubmV4dDsKCSAg cmV0dXJuIHZhbDsKCS4uLgoKMDEwNTE0NTQgIGVtYWNzLmV4ZTowMTA1MTQ1NCAgdG9wX2xldmVs XzEgIGtleWJvYXJkLmM6MTQyNQoJLi4uCgkgIGVsc2UKCSAgICBtZXNzYWdlICgiQmFyZSBFbWFj cyAoc3RhbmRhcmQgTGlzcCBjb2RlIG5vdCBsb2FkZWQpIik7Cj4JICByZXR1cm4gUW5pbDsKCX0K CgkuLi4KCjAxMDBBM0RBICBlbWFjcy5leGU6MDEwMEEzREEgIGludGVybmFsX2NhdGNoICBldmFs LmM6MTIyOQoJLi4uCgkgIC8qIENhbGwgRlVOQy4gICovCgkgIGlmICghIF9zZXRqbXAgKGMuam1w KSkKPgkgICAgYy52YWwgPSAoKmZ1bmMpIChhcmcpOwoKCSAgLyogVGhyb3cgd29ya3MgYnkgYSBs b25nam1wIHRoYXQgY29tZXMgcmlnaHQgaGVyZS4gICovCgkuLi4KCjAxMDUxMUY5ICBlbWFjcy5l eGU6MDEwNTExRjkgIGNvbW1hbmRfbG9vcCAga2V5Ym9hcmQuYzoxMzgyCgkuLi4KCSAgICAgICAg YW55X2tib2FyZF9zdGF0ZSAoKTsKCSNlbmRpZgo+CWludGVybmFsX2NhdGNoIChRdG9wX2xldmVs LCBjb21tYW5kX2xvb3BfMiwgUW5pbCk7CglleGVjdXRpbmdfa2JkX21hY3JvID0gUW5pbDsKCgku Li4KCjAxMDUxMkFCICBlbWFjcy5leGU6MDEwNTEyQUIgIHJlY3Vyc2l2ZV9lZGl0XzEgIGtleWJv YXJkLmM6OTkyCgkuLi4KCgkgIHZhbCA9IGNvbW1hbmRfbG9vcCAoKTsKPgkgIGlmIChFUSAodmFs LCBRdCkpCgkgICAgRnNpZ25hbCAoUXF1aXQsIFFuaWwpOwoJICAvKiBIYW5kbGUgdGhyb3cgZnJv bSByZWFkX21pbmlidWYgd2hlbiB1c2luZyBtaW5pYnVmZmVyCgkuLi4KCjAxMDUxM0NDICBlbWFj cy5leGU6MDEwNTEzQ0MgIEZyZWN1cnNpdmVfZWRpdCAga2V5Ym9hcmQuYzoxMDU0CgkuLi4KCgkg IHJlY3Vyc2l2ZV9lZGl0XzEgKCk7Cj4JICByZXR1cm4gdW5iaW5kX3RvIChjb3VudCwgUW5pbCk7 Cgl9CgoJLi4uCgowMTAwMkEyNiAgZW1hY3MuZXhlOjAxMDAyQTI2ICBtYWluICBlbWFjcy5jOjE3 ODEKCS4uLgoJICAvKiBOT1RSRUFDSEVEICovCgkgIHJldHVybiAwOwo+CX0KCgkvKiBTb3J0IHRo ZSBhcmdzIHNvIHdlIGNhbiBmaW5kIHRoZSBtb3N0IGltcG9ydGFudCBvbmVzCgkuLi4KCjAxMDAx MjQ3ICBlbWFjcy5leGU6MDEwMDEyNDcKMDEwMDEyOTggIGVtYWNzLmV4ZTowMTAwMTI5OAo3Qzgx NkZENyAga2VybmVsMzIuZGxsOjdDODE2RkQ3ICBSZWdpc3RlcldhaXRGb3JJbnB1dElkbGUK ------=_Part_21251_16460878.1191400011880 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel ------=_Part_21251_16460878.1191400011880--