From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jakub Narebski" Subject: [PATCH 3/5] gitweb: Fix and simplify "split patch" detection Date: Fri, 21 Sep 2007 23:38:03 +0200 Message-ID: <8fe92b430709211438h327bbf83g8d6162196acb0d74@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_12867_20475486.1190410683495" To: git@vger.kernel.org X-From: git-owner@vger.kernel.org Fri Sep 21 23:38:19 2007 Return-path: Envelope-to: gcvg-git-2@gmane.org Received: from vger.kernel.org ([209.132.176.167]) by lo.gmane.org with esmtp (Exim 4.50) id 1IYqCU-0006yJ-2h for gcvg-git-2@gmane.org; Fri, 21 Sep 2007 23:38:14 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757330AbXIUViI (ORCPT ); Fri, 21 Sep 2007 17:38:08 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756548AbXIUViI (ORCPT ); Fri, 21 Sep 2007 17:38:08 -0400 Received: from rv-out-0910.google.com ([209.85.198.188]:52470 "EHLO rv-out-0910.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755471AbXIUViE (ORCPT ); Fri, 21 Sep 2007 17:38:04 -0400 Received: by rv-out-0910.google.com with SMTP id k20so903483rvb for ; Fri, 21 Sep 2007 14:38:03 -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=6TraYS92t7nOOY1mk+H+bapLa9i1+n0G5eES7ok+K/w=; b=iyPWM5UEA/F6sjJ+Jlcff0jyJkgqa4T3DmPR6iCHU73J4LQDE2UyZogogPYOZgEvPo67ntfQEnTyUnPnHPDrXbNRS3qta/63iS2tjJzRPMt22Mph9TM4XJXI6UFVy5+98DCchx6RZWocyKSLQ95w961Z0xo1O3R8oAMclJI7hPg= 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=qhBz52DvQiRBiyWl/+WseVuwxZ0F7bLg4lScgOa/6VXH+Jb6q8DodNRxviAcsCSl7/kEoauGZcjL/YCJ53daZ/Z9PSHLReghcs7k/dazGsI0/plmpJdIj0Uqmwf2kcl1bgAY5VnRxE2PdI5ZHNQxaZViGmkDHro2At+cKc84TOk= Received: by 10.114.169.2 with SMTP id r2mr3628807wae.1190410683547; Fri, 21 Sep 2007 14:38:03 -0700 (PDT) Received: by 10.114.202.19 with HTTP; Fri, 21 Sep 2007 14:38:03 -0700 (PDT) Sender: git-owner@vger.kernel.org Precedence: bulk X-Mailing-List: git@vger.kernel.org Archived-At: ------=_Part_12867_20475486.1190410683495 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline There are some cases when one line from "raw" git-diff output (raw format) corresponds to more than one patch in the patchset git-diff output; we call this situation "split patch". Old code misdetected subsequent patches (for different files) with the same pre-image and post-image as fragments of "split patch", leading to mislabeled from-file/to-file diff header etc. Old code used pre-image and post-image SHA-1 identifier ('from_id' and 'to_id') to check if current patch corresponds to old raw diff format line, to find if one difftree raw line coresponds to more than one patch in the patch format. Now we use post-image filename for that. This assumes that post-image filename alone can be used to identify difftree raw line. In the case this changes (which is unlikely considering current diff engine) we can add 'from_id' and 'to_id' to detect "patch splitting" together with 'to_file'. Because old code got pre-image and post-image SHA-1 identifier for the patch from the "index" line in extended diff header, diff header had to be buffered. New code takes post-image filename from "git diff" header, which is first line of a patch; this allows to simplify git_patchset_body code. A side effect of resigning diff header buffering is that there is always "diff extended_header" div, even if extended diff header is empty. Alternate solution would be to check when git splits patches, and do not check if parsed info from current patch corresponds to current or next raw diff format output line. Git splits patches only for 'T' (typechange) status filepair, and there always two patches corresponding to one raw diff line. It was not used because it would tie gitweb code to minute details of git diff output. While at it, use newly introduced parsed_difftree_line wrapper subroutine in git_difftree_body. Noticed-by: Yann Dirson Diagnosed-by: Petr Baudis Signed-off-by: Jakub Narebski --- Junio has decided in Message-ID: <7vmyw4ob7z.fsf@gitster.siamese.dyndns.org> that tying gitweb to minute details of git diff output, namely that we have "split patch" (two patches of patchset diff format for single line of raw ditt format) only for typechange (status 'T') diffs. We make other assumption instead, that post-image filename uniquely defines line of raw git diff output. Currently diffcore is not capable of producing other output; see Junio in Message-ID: <7vtzqcj9ni.fsf@gitster.siamese.dyndns.org> This assumption simplifies git_patchset_body, as we no longer need to cache extended diff header for "split patch" detection. gitweb/gitweb.perl | 152 +++++++++++++++++++++++----------------------------- 1 files changed, 67 insertions(+), 85 deletions(-) ------=_Part_12867_20475486.1190410683495 Content-Type: application/octet-stream; name="0003-gitweb-Fix-and-simplify-split-patch-detection.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0003-gitweb-Fix-and-simplify-split-patch-detection.patch" X-Attachment-Id: f_f6v7qwgv RnJvbSBhNGRjNDVlMGNiMzA3ZDM1MmZkOTExNjUwN2E3ZTEyOGY4ZTBkNTAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KRGF0 ZTogU3VuLCA5IFNlcCAyMDA3IDIxOjM0OjEwICswMjAwClN1YmplY3Q6IFtQQVRDSCAzLzVdIGdp dHdlYjogRml4IGFuZCBzaW1wbGlmeSAic3BsaXQgcGF0Y2giIGRldGVjdGlvbgoKVGhlcmUgYXJl IHNvbWUgY2FzZXMgd2hlbiBvbmUgbGluZSBmcm9tICJyYXciIGdpdC1kaWZmIG91dHB1dCAocmF3 CmZvcm1hdCkgY29ycmVzcG9uZHMgdG8gbW9yZSB0aGFuIG9uZSBwYXRjaCBpbiB0aGUgcGF0Y2hz ZXQgZ2l0LWRpZmYKb3V0cHV0OyB3ZSBjYWxsIHRoaXMgc2l0dWF0aW9uICJzcGxpdCBwYXRjaCIu IE9sZCBjb2RlIG1pc2RldGVjdGVkCnN1YnNlcXVlbnQgcGF0Y2hlcyAoZm9yIGRpZmZlcmVudCBm aWxlcykgd2l0aCB0aGUgc2FtZSBwcmUtaW1hZ2UgYW5kCnBvc3QtaW1hZ2UgYXMgZnJhZ21lbnRz IG9mICJzcGxpdCBwYXRjaCIsIGxlYWRpbmcgdG8gbWlzbGFiZWxlZApmcm9tLWZpbGUvdG8tZmls ZSBkaWZmIGhlYWRlciBldGMuCgpPbGQgY29kZSB1c2VkIHByZS1pbWFnZSBhbmQgcG9zdC1pbWFn ZSBTSEEtMSBpZGVudGlmaWVyICgnZnJvbV9pZCcgYW5kCid0b19pZCcpIHRvIGNoZWNrIGlmIGN1 cnJlbnQgcGF0Y2ggY29ycmVzcG9uZHMgdG8gb2xkIHJhdyBkaWZmIGZvcm1hdApsaW5lLCB0byBm aW5kIGlmIG9uZSBkaWZmdHJlZSByYXcgbGluZSBjb3Jlc3BvbmRzIHRvIG1vcmUgdGhhbiBvbmUK cGF0Y2ggaW4gdGhlIHBhdGNoIGZvcm1hdC4gIE5vdyB3ZSB1c2UgcG9zdC1pbWFnZSBmaWxlbmFt ZSBmb3IgdGhhdC4KVGhpcyBhc3N1bWVzIHRoYXQgcG9zdC1pbWFnZSBmaWxlbmFtZSBhbG9uZSBj YW4gYmUgdXNlZCB0byBpZGVudGlmeQpkaWZmdHJlZSByYXcgbGluZS4gIEluIHRoZSBjYXNlIHRo aXMgY2hhbmdlcyAod2hpY2ggaXMgdW5saWtlbHkKY29uc2lkZXJpbmcgY3VycmVudCBkaWZmIGVu Z2luZSkgd2UgY2FuIGFkZCAnZnJvbV9pZCcgYW5kICd0b19pZCcKdG8gZGV0ZWN0ICJwYXRjaCBz cGxpdHRpbmciIHRvZ2V0aGVyIHdpdGggJ3RvX2ZpbGUnLgoKQmVjYXVzZSBvbGQgY29kZSBnb3Qg cHJlLWltYWdlIGFuZCBwb3N0LWltYWdlIFNIQS0xIGlkZW50aWZpZXIgZm9yIHRoZQpwYXRjaCBm cm9tIHRoZSAiaW5kZXgiIGxpbmUgaW4gZXh0ZW5kZWQgZGlmZiBoZWFkZXIsIGRpZmYgaGVhZGVy IGhhZAp0byBiZSBidWZmZXJlZC4gIE5ldyBjb2RlIHRha2VzIHBvc3QtaW1hZ2UgZmlsZW5hbWUg ZnJvbSAiZ2l0IGRpZmYiCmhlYWRlciwgd2hpY2ggaXMgZmlyc3QgbGluZSBvZiBhIHBhdGNoOyB0 aGlzIGFsbG93cyB0byBzaW1wbGlmeQpnaXRfcGF0Y2hzZXRfYm9keSBjb2RlLiAgQSBzaWRlIGVm ZmVjdCBvZiByZXNpZ25pbmcgZGlmZiBoZWFkZXIKYnVmZmVyaW5nIGlzIHRoYXQgdGhlcmUgaXMg YWx3YXlzICJkaWZmIGV4dGVuZGVkX2hlYWRlciIgZGl2LCBldmVuCmlmIGV4dGVuZGVkIGRpZmYg aGVhZGVyIGlzIGVtcHR5LgoKCkFsdGVybmF0ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBjaGVjayB3 aGVuIGdpdCBzcGxpdHMgcGF0Y2hlcywgYW5kIGRvCm5vdCBjaGVjayBpZiBwYXJzZWQgaW5mbyBm cm9tIGN1cnJlbnQgcGF0Y2ggY29ycmVzcG9uZHMgdG8gY3VycmVudCBvcgpuZXh0IHJhdyBkaWZm IGZvcm1hdCBvdXRwdXQgbGluZS4gIEdpdCBzcGxpdHMgcGF0Y2hlcyBvbmx5IGZvciAnVCcKKHR5 cGVjaGFuZ2UpIHN0YXR1cyBmaWxlcGFpciwgYW5kIHRoZXJlIGFsd2F5cyB0d28gcGF0Y2hlcwpj b3JyZXNwb25kaW5nIHRvIG9uZSByYXcgZGlmZiBsaW5lLiAgSXQgd2FzIG5vdCB1c2VkIGJlY2F1 c2UgaXQgd291bGQKdGllIGdpdHdlYiBjb2RlIHRvIG1pbnV0ZSBkZXRhaWxzIG9mIGdpdCBkaWZm IG91dHB1dC4KCgpXaGlsZSBhdCBpdCwgdXNlIG5ld2x5IGludHJvZHVjZWQgcGFyc2VkX2RpZmZ0 cmVlX2xpbmUgd3JhcHBlcgpzdWJyb3V0aW5lIGluIGdpdF9kaWZmdHJlZV9ib2R5LgoKTm90aWNl ZC1ieTogWWFubiBEaXJzb24gPHlkaXJzb25AYWx0ZXJuLm9yZz4KRGlhZ25vc2VkLWJ5OiBQZXRy IEJhdWRpcyA8cGFza3lAc3VzZS5jej4KU2lnbmVkLW9mZi1ieTogSmFrdWIgTmFyZWJza2kgPGpu YXJlYkBnbWFpbC5jb20+Ci0tLQpKdW5pbyBoYXMgZGVjaWRlZCBpbgogIE1lc3NhZ2UtSUQ6IDw3 dm15dzRvYjd6LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZz4KdGhhdCB0eWluZyBnaXR3 ZWIgdG8gbWludXRlIGRldGFpbHMgb2YgZ2l0IGRpZmYgb3V0cHV0LCBuYW1lbHkgdGhhdAp3ZSBo YXZlICJzcGxpdCBwYXRjaCIgKHR3byBwYXRjaGVzIG9mIHBhdGNoc2V0IGRpZmYgZm9ybWF0IGZv ciBzaW5nbGUKbGluZSBvZiByYXcgZGl0dCBmb3JtYXQpIG9ubHkgZm9yIHR5cGVjaGFuZ2UgKHN0 YXR1cyAnVCcpIGRpZmZzLgoKV2UgbWFrZSBvdGhlciBhc3N1bXB0aW9uIGluc3RlYWQsIHRoYXQg cG9zdC1pbWFnZSBmaWxlbmFtZSB1bmlxdWVseQpkZWZpbmVzIGxpbmUgb2YgcmF3IGdpdCBkaWZm IG91dHB1dC4gQ3VycmVudGx5IGRpZmZjb3JlIGlzIG5vdApjYXBhYmxlIG9mIHByb2R1Y2luZyBv dGhlciBvdXRwdXQ7IHNlZSBKdW5pbyBpbgogIE1lc3NhZ2UtSUQ6IDw3dnR6cWNqOW5pLmZzZkBn aXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZz4KVGhpcyBhc3N1bXB0aW9uIHNpbXBsaWZpZXMgZ2l0 X3BhdGNoc2V0X2JvZHksIGFzIHdlIG5vIGxvbmdlciBuZWVkCnRvIGNhY2hlIGV4dGVuZGVkIGRp ZmYgaGVhZGVyIGZvciAic3BsaXQgcGF0Y2giIGRldGVjdGlvbi4KCiBnaXR3ZWIvZ2l0d2ViLnBl cmwgfCAgMTUyICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5wZXJsIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCmlu ZGV4IDMwNjQyOTguLjFiNTY0MmEgMTAwNzU1Ci0tLSBhL2dpdHdlYi9naXR3ZWIucGVybAorKysg Yi9naXR3ZWIvZ2l0d2ViLnBlcmwKQEAgLTE5OTAsNiArMTk5MCwxOSBAQCBzdWIgcGFyc2VfZGlm ZnRyZWVfcmF3X2xpbmUgewogCXJldHVybiB3YW50YXJyYXkgPyAlcmVzIDogXCVyZXM7CiB9CiAK KyMgd3JhcHBlcjogcmV0dXJuIHBhcnNlZCBsaW5lIG9mIGdpdC1kaWZmLXRyZWUgInJhdyIgb3V0 cHV0CisjICh0aGUgYXJndW1lbnQgbWlnaHQgYmUgcmF3IGxpbmUsIG9yIHBhcnNlZCBpbmZvKQor c3ViIHBhcnNlZF9kaWZmdHJlZV9saW5lIHsKKwlteSAkbGluZV9vcl9yZWYgPSBzaGlmdDsKKwor CWlmIChyZWYoJGxpbmVfb3JfcmVmKSBlcSAiSEFTSCIpIHsKKwkJIyBwcmUtcGFyc2VkIChvciBn ZW5lcmF0ZWQgYnkgaGFuZCkKKwkJcmV0dXJuICRsaW5lX29yX3JlZjsKKwl9IGVsc2UgeworCQly ZXR1cm4gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmVfb3JfcmVmKTsKKwl9Cit9CisKICMg cGFyc2UgbGluZSBvZiBnaXQtbHMtdHJlZSBvdXRwdXQKIHN1YiBwYXJzZV9sc190cmVlX2xpbmUg KCQ7JSkgewogCW15ICRsaW5lID0gc2hpZnQ7CkBAIC0yMDMzLDYgKzIwNDYsNyBAQCBzdWIgcGFy c2VfZnJvbV90b19kaWZmaW5mbyB7CiAJCQl9CiAJCX0KIAl9IGVsc2UgeworCQkjIG9yZGluYXJ5 IChub3QgY29tYmluZWQpIGRpZmYKIAkJJGZyb20tPnsnZmlsZSd9ID0gJGRpZmZpbmZvLT57J2Zy b21fZmlsZSd9IHx8ICRkaWZmaW5mby0+eydmaWxlJ307CiAJCWlmICgkZGlmZmluZm8tPnsnc3Rh dHVzJ30gbmUgIkEiKSB7ICMgbm90IG5ldyAoYWRkZWQpIGZpbGUKIAkJCSRmcm9tLT57J2hyZWYn fSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2hfcGFyZW50LApAQCAtMjc1 Niw2ICsyNzcwLDcgQEAgc3ViIGdpdF9wcmludF90cmVlX2VudHJ5IHsKICMjIC4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4KICMjIGZ1bmN0aW9ucyBwcmludGluZyBsYXJnZSBmcmFnbWVudHMgb2YgSFRNTAogCisjIGdl dCBwcmUtaW1hZ2UgZmlsZW5hbWVzIGZvciBtZXJnZSAoY29tYmluZWQpIGRpZmYKIHN1YiBmaWxs X2Zyb21fZmlsZV9pbmZvIHsKIAlteSAoJGRpZmYsIEBwYXJlbnRzKSA9IEBfOwogCkBAIC0yNzcy LDI4ICsyNzg3LDI1IEBAIHN1YiBmaWxsX2Zyb21fZmlsZV9pbmZvIHsKIAlyZXR1cm4gJGRpZmY7 CiB9CiAKLSMgcGFyYW1ldGVycyBjYW4gYmUgc3RyaW5ncywgb3IgcmVmZXJlbmNlcyB0byBhcnJh eXMgb2Ygc3RyaW5ncwotc3ViIGZyb21faWRzX2VxIHsKLQlteSAoJGEsICRiKSA9IEBfOwotCi0J aWYgKHJlZigkYSkgZXEgIkFSUkFZIiAmJiByZWYoJGIpIGVxICJBUlJBWSIgJiYgQCRhID09IEAk YikgewotCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGE7ICsrJGkpIHsKLQkJCXJldHVybiAwIHVu bGVzcyAoJGEtPlskaV0gZXEgJGItPlskaV0pOwotCQl9Ci0JCXJldHVybiAxOwotCX0gZWxzaWYg KCFyZWYoJGEpICYmICFyZWYoJGIpKSB7Ci0JCXJldHVybiAkYSBlcSAkYjsKLQl9IGVsc2Ugewot CQlyZXR1cm4gMDsKLQl9Ci19Ci0KKyMgaXMgY3VycmVudCByYXcgZGlmZnRyZWUgbGluZSBvZiBm aWxlIGRlbGV0aW9uCiBzdWIgaXNfZGVsZXRlZCB7CiAJbXkgJGRpZmZpbmZvID0gc2hpZnQ7CiAK IAlyZXR1cm4gJGRpZmZpbmZvLT57J3RvX2lkJ30gZXEgKCcwJyB4IDQwKTsKIH0KIAorIyBkb2Vz IHBhdGNoIGNvcnJlc3BvbmQgdG8gW3ByZXZpb3VzXSBkaWZmdHJlZSByYXcgbGluZQorIyAkZGlm ZmluZm8gIC0gaGFzaHJlZiBvZiBwYXJzZWQgcmF3IGRpZmYgZm9ybWF0CisjICRwYXRjaGluZm8g LSBoYXNocmVmIG9mIHBhcnNlZCBwYXRjaCBkaWZmIGZvcm1hdAorIyAgICAgICAgICAgICAgKHRo ZSBzYW1lIGtleXMgYXMgaW4gJGRpZmZpbmZvKQorc3ViIGlzX3BhdGNoX3NwbGl0IHsKKwlteSAo JGRpZmZpbmZvLCAkcGF0Y2hpbmZvKSA9IEBfOworCisJcmV0dXJuIGRlZmluZWQgJGRpZmZpbmZv ICYmIGRlZmluZWQgJHBhdGNoaW5mbworCQkmJiAoJGRpZmZpbmZvLT57J3RvX2ZpbGUnfSB8fCAk ZGlmZmluZm8tPnsnZmlsZSd9KSBlcSAkcGF0Y2hpbmZvLT57J3RvX2ZpbGUnfTsKK30KKworCiBz dWIgZ2l0X2RpZmZ0cmVlX2JvZHkgewogCW15ICgkZGlmZnRyZWUsICRoYXNoLCBAcGFyZW50cykg PSBAXzsKIAlteSAoJHBhcmVudCkgPSAkcGFyZW50c1swXTsKQEAgLTI4MzAsMTMgKzI4NDIsNyBA QCBzdWIgZ2l0X2RpZmZ0cmVlX2JvZHkgewogCW15ICRhbHRlcm5hdGUgPSAxOwogCW15ICRwYXRj aG5vID0gMDsKIAlmb3JlYWNoIG15ICRsaW5lIChAeyRkaWZmdHJlZX0pIHsKLQkJbXkgJGRpZmY7 Ci0JCWlmIChyZWYoJGxpbmUpIGVxICJIQVNIIikgewotCQkJIyBwcmUtcGFyc2VkIChvciBnZW5l cmF0ZWQgYnkgaGFuZCkKLQkJCSRkaWZmID0gJGxpbmU7Ci0JCX0gZWxzZSB7Ci0JCQkkZGlmZiA9 IHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRsaW5lKTsKLQkJfQorCQlteSAkZGlmZiA9IHBhcnNl ZF9kaWZmdHJlZV9saW5lKCRsaW5lKTsKIAogCQlpZiAoJGFsdGVybmF0ZSkgewogCQkJcHJpbnQg Ijx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CkBAIC0zMTA3LDEwICszMTEzLDEyIEBAIHN1YiBnaXRf cGF0Y2hzZXRfYm9keSB7CiAJbXkgKCRmZCwgJGRpZmZ0cmVlLCAkaGFzaCwgQGhhc2hfcGFyZW50 cykgPSBAXzsKIAlteSAoJGhhc2hfcGFyZW50KSA9ICRoYXNoX3BhcmVudHNbMF07CiAKKwlteSAk aXNfY29tYmluZWQgPSAoQGhhc2hfcGFyZW50cyA+IDEpOwogCW15ICRwYXRjaF9pZHggPSAwOwog CW15ICRwYXRjaF9udW1iZXIgPSAwOwogCW15ICRwYXRjaF9saW5lOwogCW15ICRkaWZmaW5mbzsK KwlteSAkdG9fbmFtZTsKIAlteSAoJWZyb20sICV0byk7CiAKIAlwcmludCAiPGRpdiBjbGFzcz1c InBhdGNoc2V0XCI+XG4iOwpAQCAtMzEyNCw3MyArMzEzMiw0NiBAQCBzdWIgZ2l0X3BhdGNoc2V0 X2JvZHkgewogCiAgUEFUQ0g6CiAJd2hpbGUgKCRwYXRjaF9saW5lKSB7Ci0JCW15IEBkaWZmX2hl YWRlcjsKLQkJbXkgKCRmcm9tX2lkLCAkdG9faWQpOwotCi0JCSMgZ2l0IGRpZmYgaGVhZGVyCi0J CSNhc3NlcnQoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKSBpZiBERUJVRzsKLQkJI2Fzc2VydCgk cGF0Y2hfbGluZSAhfiBtISQvJCEpIGlmIERFQlVHOyAjIGlzIGNob21wLWVkCi0JCSRwYXRjaF9u dW1iZXIrKzsKLQkJcHVzaCBAZGlmZl9oZWFkZXIsICRwYXRjaF9saW5lOwotCi0JCSMgZXh0ZW5k ZWQgZGlmZiBoZWFkZXIKLQlFWFRFTkRFRF9IRUFERVI6Ci0JCXdoaWxlICgkcGF0Y2hfbGluZSA9 IDwkZmQ+KSB7Ci0JCQljaG9tcCAkcGF0Y2hfbGluZTsKIAotCQkJbGFzdCBFWFRFTkRFRF9IRUFE RVIgaWYgKCRwYXRjaF9saW5lID1+IG0vXi0tLSB8XmRpZmYgLyk7Ci0KLQkJCWlmICgkcGF0Y2hf bGluZSA9fiBtL15pbmRleCAoWzAtOWEtZkEtRl17NDB9KS4uKFswLTlhLWZBLUZdezQwfSkvKSB7 Ci0JCQkJJGZyb21faWQgPSAkMTsKLQkJCQkkdG9faWQgICA9ICQyOwotCQkJfSBlbHNpZiAoJHBh dGNoX2xpbmUgPX4gbS9eaW5kZXggKCg/OlswLTlhLWZBLUZdezQwfSwpK1swLTlhLWZBLUZdezQw fSkuLihbMC05YS1mQS1GXXs0MH0pLykgewotCQkJCSRmcm9tX2lkID0gWyBzcGxpdCgnLCcsICQx KSBdOwotCQkJCSR0b19pZCAgID0gJDI7Ci0JCQl9Ci0KLQkJCXB1c2ggQGRpZmZfaGVhZGVyLCAk cGF0Y2hfbGluZTsKKwkJIyBwYXJzZSAiZ2l0IGRpZmYiIGhlYWRlciBsaW5lCisJCWlmICgkcGF0 Y2hfbGluZSA9fiBtL15kaWZmIC0tZ2l0IChcIig/OlteXFxcIl0qKD86XFwuW15cXFwiXSopKilc InxbXiAiXSopICguKikkLykgeworCQkJIyAkMSBpcyBmcm9tX25hbWUsIHdoaWNoIHdlIGRvIG5v dCB1c2UKKwkJCSR0b19uYW1lID0gdW5xdW90ZSgkMik7CisJCQkkdG9fbmFtZSA9fiBzIV5iLyEh OworCQl9IGVsc2lmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC0tKGNjfGNvbWJpbmVkKSAoIj8u KiI/KSQvKSB7CisJCQkjICQxIGlzICdjYycgb3IgJ2NvbWJpbmVkJywgd2hpY2ggd2UgZG8gbm90 IHVzZQorCQkJJHRvX25hbWUgPSB1bnF1b3RlKCQyKTsKKwkJfSBlbHNlIHsKKwkJCSR0b19uYW1l ID0gdW5kZWY7CiAJCX0KLQkJbXkgJGxhc3RfcGF0Y2hfbGluZSA9ICRwYXRjaF9saW5lOwogCiAJ CSMgY2hlY2sgaWYgY3VycmVudCBwYXRjaCBiZWxvbmcgdG8gY3VycmVudCByYXcgbGluZQogCQkj IGFuZCBwYXJzZSByYXcgZ2l0LWRpZmYgbGluZSBpZiBuZWVkZWQKLQkJaWYgKGRlZmluZWQgJGRp ZmZpbmZvICYmCi0JCSAgICBkZWZpbmVkICRmcm9tX2lkICYmIGRlZmluZWQgJHRvX2lkICYmCi0J CSAgICBmcm9tX2lkc19lcSgkZGlmZmluZm8tPnsnZnJvbV9pZCd9LCAkZnJvbV9pZCkgJiYKLQkJ ICAgICRkaWZmaW5mby0+eyd0b19pZCd9IGVxICR0b19pZCkgeworCQlpZiAoaXNfcGF0Y2hfc3Bs aXQoJGRpZmZpbmZvLCB7ICd0b19maWxlJyA9PiAkdG9fbmFtZSB9KSkgewogCQkJIyB0aGlzIGlz IGNvbnRpbnVhdGlvbiBvZiBhIHNwbGl0IHBhdGNoCiAJCQlwcmludCAiPGRpdiBjbGFzcz1cInBh dGNoIGNvbnRcIj5cbiI7CiAJCX0gZWxzZSB7CiAJCQkjIGFkdmFuY2UgcmF3IGdpdC1kaWZmIG91 dHB1dCBpZiBuZWVkZWQKIAkJCSRwYXRjaF9pZHgrKyBpZiBkZWZpbmVkICRkaWZmaW5mbzsKIAot CQkJIyBjb21wYWN0IGNvbWJpbmVkIGRpZmYgb3V0cHV0IGNhbiBoYXZlIHNvbWUgcGF0Y2hlcyBz a2lwcGVkCi0JCQkjIGZpbmQgd2hpY2ggcGF0Y2ggKHVzaW5nIHBhdGhuYW1lIG9mIHJlc3VsdCkg d2UgYXJlIGF0IG5vdwotCQkJbXkgJHRvX25hbWU7Ci0JCQlpZiAoJGRpZmZfaGVhZGVyWzBdID1+ IG0hXmRpZmYgLS1jYyAiPyguKikiPyQhKSB7Ci0JCQkJJHRvX25hbWUgPSAkMTsKLQkJCX0KLQot CQkJZG8gewotCQkJCSMgcmVhZCBhbmQgcHJlcGFyZSBwYXRjaCBpbmZvcm1hdGlvbgotCQkJCWlm IChyZWYoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pIGVxICJIQVNIIikgewotCQkJCQkjIHByZS1w YXJzZWQgKG9yIGdlbmVyYXRlZCBieSBoYW5kKQotCQkJCQkkZGlmZmluZm8gPSAkZGlmZnRyZWUt PlskcGF0Y2hfaWR4XTsKLQkJCQl9IGVsc2UgewotCQkJCQkkZGlmZmluZm8gPSBwYXJzZV9kaWZm dHJlZV9yYXdfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7Ci0JCQkJfQorCQkJIyByZWFk IGFuZCBwcmVwYXJlIHBhdGNoIGluZm9ybWF0aW9uCisJCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlm ZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7CiAKLQkJCQkjIGNoZWNrIGlmIGN1 cnJlbnQgcmF3IGxpbmUgaGFzIG5vIHBhdGNoIChpdCBnb3Qgc2ltcGxpZmllZCkKLQkJCQlpZiAo ZGVmaW5lZCAkdG9fbmFtZSAmJiAkdG9fbmFtZSBuZSAkZGlmZmluZm8tPnsndG9fZmlsZSd9KSB7 CisJCQkjIGNvbXBhY3QgY29tYmluZWQgZGlmZiBvdXRwdXQgY2FuIGhhdmUgc29tZSBwYXRjaGVz IHNraXBwZWQKKwkJCSMgZmluZCB3aGljaCBwYXRjaCAodXNpbmcgcGF0aG5hbWUgb2YgcmVzdWx0 KSB3ZSBhcmUgYXQgbm93OworCQkJaWYgKCRpc19jb21iaW5lZCkgeworCQkJCXdoaWxlICgkdG9f bmFtZSBuZSAkZGlmZmluZm8tPnsndG9fZmlsZSd9KSB7CiAJCQkJCXByaW50ICI8ZGl2IGNsYXNz PVwicGF0Y2hcIiBpZD1cInBhdGNoIi4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiIgLgogCQkJCQkg ICAgICBmb3JtYXRfZGlmZl9jY19zaW1wbGlmaWVkKCRkaWZmaW5mbywgQGhhc2hfcGFyZW50cykg LgogCQkJCQkgICAgICAiPC9kaXY+XG4iOyAgIyBjbGFzcz0icGF0Y2giCiAKIAkJCQkJJHBhdGNo X2lkeCsrOwogCQkJCQkkcGF0Y2hfbnVtYmVyKys7CisKKwkJCQkJbGFzdCBpZiAkcGF0Y2hfaWR4 ID4gJCMkZGlmZnRyZWU7CisJCQkJCSRkaWZmaW5mbyA9IHBhcnNlZF9kaWZmdHJlZV9saW5lKCRk aWZmdHJlZS0+WyRwYXRjaF9pZHhdKTsKIAkJCQl9Ci0JCQl9IHVudGlsICghZGVmaW5lZCAkdG9f bmFtZSB8fCAkdG9fbmFtZSBlcSAkZGlmZmluZm8tPnsndG9fZmlsZSd9IHx8Ci0JCQkgICAgICAg ICAkcGF0Y2hfaWR4ID4gJCMkZGlmZnRyZWUpOworCQkJfQogCiAJCQkjIG1vZGlmaWVzICVmcm9t LCAldG8gaGFzaGVzCiAJCQlwYXJzZV9mcm9tX3RvX2RpZmZpbmZvKCRkaWZmaW5mbywgXCVmcm9t LCBcJXRvLCBAaGFzaF9wYXJlbnRzKTsKQEAgLTMyMDAsMzAgKzMxODEsMzYgQEAgc3ViIGdpdF9w YXRjaHNldF9ib2R5IHsKIAkJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hcIiBpZD1cInBhdGNo Ii4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiI7CiAJCX0KIAorCQkjIGdpdCBkaWZmIGhlYWRlcgor CQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXmRpZmYgLykgaWYgREVCVUc7CisJCSNhc3NlcnQo JHBhdGNoX2xpbmUgIX4gbSEkLyQhKSBpZiBERUJVRzsgIyBpcyBjaG9tcC1lZAorCQkkcGF0Y2hf bnVtYmVyKys7CiAJCSMgcHJpbnQgImdpdCBkaWZmIiBoZWFkZXIKLQkJJHBhdGNoX2xpbmUgPSBz aGlmdCBAZGlmZl9oZWFkZXI7CiAJCXByaW50IGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSgk cGF0Y2hfbGluZSwgJGRpZmZpbmZvLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXCVmcm9tLCBcJXRvKTsKIAogCQkjIHByaW50IGV4dGVuZGVkIGRpZmYgaGVhZGVyCi0JCXBy aW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBleHRlbmRlZF9oZWFkZXJcIj5cbiIgaWYgKEBkaWZmX2hl YWRlciA+IDApOworCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgZXh0ZW5kZWRfaGVhZGVyXCI+ XG4iOwogCUVYVEVOREVEX0hFQURFUjoKLQkJZm9yZWFjaCAkcGF0Y2hfbGluZSAoQGRpZmZfaGVh ZGVyKSB7CisJCXdoaWxlICgkcGF0Y2hfbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkcGF0Y2hf bGluZTsKKworCQkJbGFzdCBFWFRFTkRFRF9IRUFERVIgaWYgKCRwYXRjaF9saW5lID1+IG0vXi0t LSB8XmRpZmYgLyk7CisKIAkJCXByaW50IGZvcm1hdF9leHRlbmRlZF9kaWZmX2hlYWRlcl9saW5l KCRwYXRjaF9saW5lLCAkZGlmZmluZm8sCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcJWZyb20sIFwldG8pOwogCQl9Ci0JCXByaW50ICI8L2Rpdj5cbiIgIGlmIChA ZGlmZl9oZWFkZXIgPiAwKTsgIyBjbGFzcz0iZGlmZiBleHRlbmRlZF9oZWFkZXIiCisJCXByaW50 ICI8L2Rpdj5cbiI7ICMgY2xhc3M9ImRpZmYgZXh0ZW5kZWRfaGVhZGVyIgogCiAJCSMgZnJvbS1m aWxlL3RvLWZpbGUgZGlmZiBoZWFkZXIKLQkJJHBhdGNoX2xpbmUgPSAkbGFzdF9wYXRjaF9saW5l OwogCQlpZiAoISAkcGF0Y2hfbGluZSkgewogCQkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0i cGF0Y2giCiAJCQlsYXN0IFBBVENIOwogCQl9CiAJCW5leHQgUEFUQ0ggaWYgKCRwYXRjaF9saW5l ID1+IG0vXmRpZmYgLyk7CiAJCSNhc3NlcnQoJHBhdGNoX2xpbmUgPX4gbS9eLS0tLykgaWYgREVC VUc7Ci0JCSNhc3NlcnQoJHBhdGNoX2xpbmUgZXEgJGxhc3RfcGF0Y2hfbGluZSkgaWYgREVCVUc7 CiAKKwkJbXkgJGxhc3RfcGF0Y2hfbGluZSA9ICRwYXRjaF9saW5lOwogCQkkcGF0Y2hfbGluZSA9 IDwkZmQ+OwogCQljaG9tcCAkcGF0Y2hfbGluZTsKIAkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBt L15cK1wrXCsvKSBpZiBERUJVRzsKQEAgLTMyNDgsMTYgKzMyMzUsMTEgQEAgc3ViIGdpdF9wYXRj aHNldF9ib2R5IHsKIAogCSMgZm9yIGNvbXBhY3QgY29tYmluZWQgKC0tY2MpIGZvcm1hdCwgd2l0 aCBjaHVuayBhbmQgcGF0Y2ggc2ltcGxpY2lhY3Rpb24KIAkjIHBhdGNoc2V0IG1pZ2h0IGJlIGVt cHR5LCBidXQgdGhlcmUgbWlnaHQgYmUgdW5wcm9jZXNzZWQgcmF3IGxpbmVzCi0JZm9yICgkcGF0 Y2hfaWR4KysgaWYgJHBhdGNoX251bWJlciA+IDA7CisJZm9yICgrKyRwYXRjaF9pZHggaWYgJHBh dGNoX251bWJlciA+IDA7CiAJICAgICAkcGF0Y2hfaWR4IDwgQCRkaWZmdHJlZTsKLQkgICAgICRw YXRjaF9pZHgrKykgeworCSAgICAgKyskcGF0Y2hfaWR4KSB7CiAJCSMgcmVhZCBhbmQgcHJlcGFy ZSBwYXRjaCBpbmZvcm1hdGlvbgotCQlpZiAocmVmKCRkaWZmdHJlZS0+WyRwYXRjaF9pZHhdKSBl cSAiSEFTSCIpIHsKLQkJCSMgcHJlLXBhcnNlZCAob3IgZ2VuZXJhdGVkIGJ5IGhhbmQpCi0JCQkk ZGlmZmluZm8gPSAkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XTsKLQkJfSBlbHNlIHsKLQkJCSRkaWZm aW5mbyA9IHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRkaWZmdHJlZS0+WyRwYXRjaF9pZHhdKTsK LQkJfQorCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0 Y2hfaWR4XSk7CiAKIAkJIyBnZW5lcmF0ZSBhbmNob3IgZm9yICJwYXRjaCIgbGlua3MgaW4gZGlm ZnRyZWUgLyB3aGF0Y2hhbmdlZCBwYXJ0CiAJCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hcIiBp ZD1cInBhdGNoIi4gKCRwYXRjaF9pZHgrMSkgLiJcIj5cbiIgLgotLSAKMS41LjMKCg== ------=_Part_12867_20475486.1190410683495--