<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>28477</bug_id>
          
          <creation_ts>2009-08-19 17:39:05 -0700</creation_ts>
          <short_desc>WebKit needs a changelogs.py to hold changelog-related code</short_desc>
          <delta_ts>2009-08-20 22:44:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26533</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>141666</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 17:39:05 -0700</bug_when>
    <thetext>WebKit needs a changelogs.py to hold changelog-related code

This is just a first-pass.  We really need full-blown changelog parsing.  I have several partial implementations of changelog parsing in other scripts, including attached to bug 26533.

This module is just moving the bugzilla-tool changelog code to a module and making it testable!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141668</commentid>
    <comment_count>1</comment_count>
      <attachid>35167</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 17:41:02 -0700</bug_when>
    <thetext>Created attachment 35167
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141671</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-19 17:49:03 -0700</bug_when>
    <thetext>I think eventually the ChangeLog class will change to be more stateful.  Right
now it reads the ChangeLog from disk on every command.  Eventually we&apos;ll
probably have explicit read/write commands and keep the ChangeLog in memory in
a parsed form.  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141777</commentid>
    <comment_count>3</comment_count>
      <attachid>35167</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-20 22:36:13 -0700</bug_when>
    <thetext>Comment on attachment 35167
Patch v1

A few things to consider..

&gt; diff --git a/WebKitTools/Scripts/modules/changelogs.py
b/WebKitTools/Scripts/modules/changelogs.py
&gt; +# Copyright (c) 2009, Google Inc. All rights reserved.
(C)

&gt; +import fileinput # inplace file editing for set_reviewer_in_changelog
&gt; +import re
&gt; +

&gt; +# This doesn&apos;t really belong in this file, but we don&apos;t have a better home
for it yet.
FIXME:

&gt; +            if ChangeLog.date_line_regexp.match(line):
&gt; +                return &apos;&apos;.join(entry_lines[0:-1]) # Remove the extra newline
at the end

Indexes at the boundary need not be listed, so it could be
 return &apos;&apos;.join(entry_lines[:-1]) # Remove the extra newline at the end.

However, I feel mildly paranoid about the blank line, so why not be slight more
robust line this?

 if not entry_lines[-1].strip():
     entry_lines = entry_lines[:-1]
 return &apos;&apos;.join(entry_lines) # Remove the extra newline at the end.



&gt; +    def update_for_revert(self, revision):
&gt; +        reviewed_by_regexp = re.compile(&apos;Reviewed by NOBODY \(OOPS!\)\.&apos;)
&gt; +        removing_boilerplate = False
&gt; +        # inplace=1 creates a backup file and re-directs stdout to the file
&gt; +        for line in fileinput.FileInput(self.path, inplace=1):
&gt; +            if re.search(reviewed_by_regexp, line):
reviewed_by_regexp.search(...

&gt; +                print re.sub(reviewed_by_regexp, &quot;No review, rolling out
r%s.&quot; % revision, line),
reviewed_by_regexp.sub(...



&gt; +                print &quot;        %s\n&quot; % view_source_url(revision)
&gt; +                # Remove all the ChangeLog boiler plate between the Reviewed
by line and the first changed file.
s/boiler plate/boilerplate/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141783</commentid>
    <comment_count>4</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-08-20 22:37:38 -0700</bug_when>
    <thetext>Summarizing some lost state (due to bugzilla db corruption):

   Later Eric submitted another patch to address several of the issues which I then r+&apos;ed (but I didn&apos;t find that it was checked in).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>141798</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-20 22:44:33 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/47603</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>35167</attachid>
            <date>2009-08-19 17:41:02 -0700</date>
            <delta_ts>2009-08-20 22:36:12 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-28477-20090819174102.patch</filename>
            <type>text/plain</type>
            <size>17995</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwZjk5MjMwLi5mNTdhYTIxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjAgQEAKIDIwMDktMDgt
MTkgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdCBuZWVkcyBhIGNoYW5nZWxvZ3MucHkg
dG8gaG9sZCBjaGFuZ2Vsb2ctcmVsYXRlZCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODQ3NworCisgICAgICAgIFRoaXMgaXMgbW92aW5nIGNv
ZGUgYW5kIGFkZGluZyB0ZXN0cy4gIFRoZXJlIHdhcyBvbmx5IG9uZSBmdW5jdGlvbmFsCisgICAg
ICAgIGNoYW5nZSAod2hpY2ggd2FzIHJlbW92aW5nIGEgdHJhaWxpbmcgbmV3bGluZSBmcm9tIHRo
ZSBsYXN0X2VudHJ5KCkgcmVzdWx0KS4KKworICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9v
bDoKKyAgICAgICAgKiBTY3JpcHRzL21vZHVsZXMvY2hhbmdlbG9ncy5weTogQWRkZWQuCisgICAg
ICAgICogU2NyaXB0cy9tb2R1bGVzL2NoYW5nZWxvZ3NfdW5pdHRlc3QucHk6IEFkZGVkLgorICAg
ICAgICAqIFNjcmlwdHMvcnVuLXdlYmtpdC11bml0dGVzdHM6CisKKzIwMDktMDgtMTkgIEVyaWMg
U2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFy
dGguCiAKICAgICAgICAgYnVnemlsbGEtdG9vbCBuZWVkcyBhIHdheSB0byBhc2sgYnVpbGQud2Vi
a2l0Lm9yZyBpZiB0aGUgYm90cyBhcmUgcGFzc2luZwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
U2NyaXB0cy9idWd6aWxsYS10b29sIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29s
CmluZGV4IGEzMWZhYzUuLjg3NDg3NTYgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMv
YnVnemlsbGEtdG9vbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKQEAg
LTMwLDcgKzMwLDYgQEAKICMKICMgQSB0b29sIGZvciBhdXRvbWF0aW5nIGRlYWxpbmcgd2l0aCBi
dWd6aWxsYSwgcG9zdGluZyBwYXRjaGVzLCBjb21taXR0aW5nIHBhdGNoZXMsIGV0Yy4KIAotaW1w
b3J0IGZpbGVpbnB1dCAjIGlucGxhY2UgZmlsZSBlZGl0aW5nIGZvciBzZXRfcmV2aWV3ZXJfaW5f
Y2hhbmdlbG9nCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IFN0cmluZ0lPICMgZm9yIGFk
ZF9wYXRjaF90b19idWcgZmlsZSB3cmFwcGVycwpAQCAtNDEsNiArNDAsNyBAQCBmcm9tIG9wdHBh
cnNlIGltcG9ydCBPcHRpb25QYXJzZXIsIEluZGVudGVkSGVscEZvcm1hdHRlciwgU1VQUFJFU1Nf
VVNBR0UsIG1ha2VfbwogCiAjIEltcG9ydCBXZWJLaXQtc3BlY2lmaWMgbW9kdWxlcy4KIGZyb20g
bW9kdWxlcy5idWd6aWxsYSBpbXBvcnQgQnVnemlsbGEKK2Zyb20gbW9kdWxlcy5jaGFuZ2Vsb2dz
IGltcG9ydCBDaGFuZ2VMb2csIHZpZXdfc291cmNlX3VybAogZnJvbSBtb2R1bGVzLmxvZ2dpbmcg
aW1wb3J0IGVycm9yLCBsb2cKIGZyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2Us
IGRldGVjdF9zY21fc3lzdGVtLCBTY3JpcHRFcnJvcgogZnJvbSBtb2R1bGVzLmJ1aWxkYm90IGlt
cG9ydCBCdWlsZEJvdApAQCAtNTcsNDEgKzU3LDYgQEAgZGVmIHBsdXJhbGl6ZShub3VuLCBjb3Vu
dCk6CiAgICAgICAgIG5vdW4gPSBwbHVyYWwobm91bikKICAgICByZXR1cm4gIiVkICVzIiAlIChj
b3VudCwgbm91bikKIAotZGVmIHZpZXdfc291cmNlX3VybChyZXZpc2lvbl9udW1iZXIpOgotICAg
ICByZXR1cm4gImh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LyVzIiAlIHJldmlzaW9u
X251bWJlcgotCi0jIFRoZXNlIGNvdWxkIGJlIHB1dCBpbiBzb21lIHNvcnQgb2YgY2hhbmdlbG9n
cy5weS4KLWRlZiBsYXRlc3RfY2hhbmdlbG9nX2VudHJ5KGNoYW5nZWxvZ19wYXRoKToKLSAgICAj
IGUuZy4gMjAwOS0wNi0wMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+Ci0gICAgY2hh
bmdlbG9nX2RhdGVfbGluZV9yZWdleHAgPSByZS5jb21waWxlKCdeKFxkezR9LVxkezJ9LVxkezJ9
KScgIyBDb25zdW1lIHRoZSBkYXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgJ1xzKyguKylccysnICMgQ29uc3VtZSB0aGUgbmFtZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICArICc8KFtePD5dKyk+JCcpICMgQW5kIGZpbmFsbHkgdGhlIGVtYWlsIGFk
ZHJlc3MuCi0gICAgCi0gICAgZW50cnlfbGluZXMgPSBbXQotICAgIGNoYW5nZWxvZyA9IG9wZW4o
Y2hhbmdlbG9nX3BhdGgpCi0gICAgdHJ5OgotICAgICAgICBsb2coIlBhcnNpbmcgQ2hhbmdlTG9n
OiAiICsgY2hhbmdlbG9nX3BhdGgpCi0gICAgICAgICMgVGhlIGZpcnN0IGxpbmUgc2hvdWxkIGJl
IGEgZGF0ZSBsaW5lLgotICAgICAgICBmaXJzdF9saW5lID0gY2hhbmdlbG9nLnJlYWRsaW5lKCkK
LSAgICAgICAgaWYgbm90IGNoYW5nZWxvZ19kYXRlX2xpbmVfcmVnZXhwLm1hdGNoKGZpcnN0X2xp
bmUpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZW50cnlfbGluZXMuYXBwZW5k
KGZpcnN0X2xpbmUpCi0gICAgICAgIAotICAgICAgICBmb3IgbGluZSBpbiBjaGFuZ2Vsb2c6Ci0g
ICAgICAgICAgICAjIElmIHdlJ3ZlIGhpdCB0aGUgbmV4dCBlbnRyeSwgcmV0dXJuLgotICAgICAg
ICAgICAgaWYgY2hhbmdlbG9nX2RhdGVfbGluZV9yZWdleHAubWF0Y2gobGluZSk6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICcnLmpvaW4oZW50cnlfbGluZXMpCi0gICAgICAgICAgICBlbnRyeV9s
aW5lcy5hcHBlbmQobGluZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBjaGFuZ2Vsb2cuY2xvc2Uo
KQotICAgICMgV2UgbmV2ZXIgZm91bmQgYSBkYXRlIGxpbmUhCi0gICAgcmV0dXJuIE5vbmUKLQot
ZGVmIHNldF9yZXZpZXdlcl9pbl9jaGFuZ2Vsb2coY2hhbmdlbG9nX3BhdGgsIHJldmlld2VyKToK
LSAgICAjIGlucGxhY2U9MSBjcmVhdGVzIGEgYmFja3VwIGZpbGUgYW5kIHJlLWRpcmVjdHMgc3Rk
b3V0IHRvIHRoZSBmaWxlCi0gICAgZm9yIGxpbmUgaW4gZmlsZWlucHV0LkZpbGVJbnB1dChjaGFu
Z2Vsb2dfcGF0aCwgaW5wbGFjZT0xKToKLSAgICAgICAgcHJpbnQgbGluZS5yZXBsYWNlKCJOT0JP
RFkgKE9PUFMhKSIsIHJldmlld2VyLmVuY29kZSgidXRmLTgiKSksICMgVHJhaWxpbmcgY29tbWEg
c3VwcHJlc3NlcyBwcmludGluZyBuZXdsaW5lCi0KIGRlZiBtb2RpZmllZF9jaGFuZ2Vsb2dzKHNj
bSk6CiAgICAgY2hhbmdlbG9nX3BhdGhzID0gW10KICAgICBwYXRocyA9IHNjbS5jaGFuZ2VkX2Zp
bGVzKCkKQEAgLTEwMCw4ICs2NSw3IEBAIGRlZiBtb2RpZmllZF9jaGFuZ2Vsb2dzKHNjbSk6CiAg
ICAgICAgICAgICBjaGFuZ2Vsb2dfcGF0aHMuYXBwZW5kKHBhdGgpCiAgICAgcmV0dXJuIGNoYW5n
ZWxvZ19wYXRocwogCi1kZWYgcGFyc2VfYnVnX2lkKGNvbW1pdF9tZXNzYWdlKToKLSAgICBtZXNz
YWdlID0gY29tbWl0X21lc3NhZ2UubWVzc2FnZSgpCitkZWYgcGFyc2VfYnVnX2lkKG1lc3NhZ2Up
OgogICAgIG1hdGNoID0gcmUuc2VhcmNoKCJodHRwXDovL3dlYmtpdFwub3JnL2IvKD9QPGJ1Z19p
ZD5cZCspIiwgbWVzc2FnZSkKICAgICBpZiBtYXRjaDoKICAgICAgICAgcmV0dXJuIG1hdGNoLmdy
b3VwKCdidWdfaWQnKQpAQCAtMTE4LDEyICs4MiwxMyBAQCBkZWYgY29tbWl0X21lc3NhZ2VfZm9y
X3RoaXNfY29tbWl0KHNjbSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd2Vi
a2l0Lm9yZy9jb2RpbmcvY29udHJpYnV0aW5nLmh0bWwiKQogCiAgICAgY2hhbmdlbG9nX21lc3Nh
Z2VzID0gW10KLSAgICBmb3IgcGF0aCBpbiBjaGFuZ2Vsb2dfcGF0aHM6Ci0gICAgICAgIGNoYW5n
ZWxvZ19lbnRyeSA9IGxhdGVzdF9jaGFuZ2Vsb2dfZW50cnkocGF0aCkKKyAgICBmb3IgY2hhbmdl
bG9nX3BhdGggaW4gY2hhbmdlbG9nX3BhdGhzOgorICAgICAgICBsb2coIlBhcnNpbmcgQ2hhbmdl
TG9nOiAlcyIgJSBjaGFuZ2Vsb2dfcGF0aCkKKyAgICAgICAgY2hhbmdlbG9nX2VudHJ5ID0gQ2hh
bmdlTG9nKGNoYW5nZWxvZ19wYXRoKS5sYXRlc3RfZW50cnkoKQogICAgICAgICBpZiBub3QgY2hh
bmdlbG9nX2VudHJ5OgotICAgICAgICAgICAgZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBDaGFuZ2VM
b2c6ICIgKyBvcy5wYXRoLmFic3BhdGgocGF0aCkpCisgICAgICAgICAgICBlcnJvcigiRmFpbGVk
IHRvIHBhcnNlIENoYW5nZUxvZzogIiArIG9zLnBhdGguYWJzcGF0aChjaGFuZ2Vsb2dfcGF0aCkp
CiAgICAgICAgIGNoYW5nZWxvZ19tZXNzYWdlcy5hcHBlbmQoY2hhbmdlbG9nX2VudHJ5KQotICAg
IAorCiAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHNvcnQgYW5kIGxhYmVsIHRoZSBDaGFuZ2VMb2cg
bWVzc2FnZXMgbGlrZSBjb21taXQtbG9nLWVkaXRvciBkb2VzLgogICAgIHJldHVybiBDb21taXRN
ZXNzYWdlKCcnLmpvaW4oY2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxpdGxpbmVzKCkpCiAKQEAgLTE4
NywxMCArMTUyLDkgQEAgY2xhc3MgQXBwbHlQYXRjaGVzRnJvbUJ1ZyhDb21tYW5kKToKICAgICBk
ZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIG9wdGlvbnMgPSBbCiAgICAgICAgICAgICBtYWtl
X29wdGlvbigiLS1uby11cGRhdGUiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idXBkYXRl
IiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCB1cGRhdGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5
IGJlZm9yZSBhcHBseWluZyBwYXRjaGVzIiksCi0gICAgICAgICAgICBtYWtlX29wdGlvbigiLS1m
b3JjZS1jbGVhbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlX2NsZWFuIiwgZGVm
YXVsdD1GYWxzZSwgaGVscD0iQ2xlYW4gd29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIGFwcGx5aW5n
IHBhdGNoZXMgKHJlbW92ZXMgbG9jYWwgY2hhbmdlcyBhbmQgY29tbWl0cykiKSwKLSAgICAgICAg
ICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9
ImNsZWFuIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCBjaGVjayBpZiB0aGUgd29ya2luZyBk
aXJlY3RvcnkgaXMgY2xlYW4gYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMiKSwKICAgICAgICAgICAg
IG1ha2Vfb3B0aW9uKCItLWxvY2FsLWNvbW1pdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9
ImxvY2FsX2NvbW1pdCIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik1ha2UgYSBsb2NhbCBjb21taXQg
Zm9yIGVhY2ggYXBwbGllZCBwYXRjaCIpLAogICAgICAgICBdCisgICAgICAgIG9wdGlvbnMgKz0g
V2ViS2l0TGFuZGluZ1NjcmlwdHMuY2xlYW5pbmdfb3B0aW9ucygpCiAgICAgICAgIENvbW1hbmQu
X19pbml0X18oc2VsZiwgJ0FwcGxpZXMgYWxsIHBhdGNoZXMgb24gYSBidWcgdG8gdGhlIGxvY2Fs
IHdvcmtpbmcgZGlyZWN0b3J5IHdpdGhvdXQgY29tbWl0dGluZy4nLCAnQlVHSUQnLCBvcHRpb25z
PW9wdGlvbnMpCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC0zMzQsOCArMjk4LDggQEAgY2xhc3Mg
TGFuZEFuZFVwZGF0ZUJ1ZyhDb21tYW5kKToKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAg
IGNoYW5nZWxvZ3MgPSBtb2RpZmllZF9jaGFuZ2Vsb2dzKHRvb2wuc2NtKCkpCi0gICAgICAgIGZv
ciBjaGFuZ2Vsb2cgaW4gY2hhbmdlbG9nczoKLSAgICAgICAgICAgIHNldF9yZXZpZXdlcl9pbl9j
aGFuZ2Vsb2coY2hhbmdlbG9nLCByZXZpZXdlcikKKyAgICAgICAgZm9yIGNoYW5nZWxvZ19wYXRo
IGluIGNoYW5nZWxvZ3M6CisgICAgICAgICAgICBDaGFuZ2VMb2coY2hhbmdlbG9nX3BhdGgpLnNl
dF9yZXZpZXdlcihyZXZpZXdlcikKIAogICAgIGRlZiBleGVjdXRlKHNlbGYsIG9wdGlvbnMsIGFy
Z3MsIHRvb2wpOgogICAgICAgICBidWdfaWQgPSBhcmdzWzBdIGlmIGxlbihhcmdzKSBlbHNlIE5v
bmUKQEAgLTQ5OSw3ICs0NjMsNyBAQCBjbGFzcyBQb3N0Q29tbWl0c0FzUGF0Y2hlc1RvQnVnKENv
bW1hbmQpOgogICAgICAgICAgICAgIyB0aGUgQ2hhbmdlTG9ncyBzaG91bGQgaGF2ZSB0aGUgYnVn
IGlkLCBidXQgdGhlIGxvY2FsIGNvbW1pdCBtZXNzYWdlIG1pZ2h0IG5vdC4KICAgICAgICAgICAg
IGNvbW1pdF9tZXNzYWdlID0gdG9vbC5zY20oKS5jb21taXRfbWVzc2FnZV9mb3JfbG9jYWxfY29t
bWl0KGNvbW1pdF9pZCkKIAotICAgICAgICAgICAgYnVnX2lkID0gb3B0aW9ucy5idWdfaWQgb3Ig
cGFyc2VfYnVnX2lkKGNvbW1pdF9tZXNzYWdlKQorICAgICAgICAgICAgYnVnX2lkID0gb3B0aW9u
cy5idWdfaWQgb3IgcGFyc2VfYnVnX2lkKGNvbW1pdF9tZXNzYWdlLm1lc3NhZ2UoKSkKICAgICAg
ICAgICAgIGlmIG5vdCBidWdfaWQ6CiAgICAgICAgICAgICAgICAgbG9nKCJTa2lwcGluZyAlczog
Tm8gYnVnIGlkIGZvdW5kIGluIGNvbW1pdCBsb2cgb3Igc3BlY2lmaWVkIHdpdGggLS1idWctaWQu
IiAlIGNvbW1pdF9pZCkKICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2NoYW5nZWxvZ3MucHkgYi9XZWJLaXRUb29scy9TY3Jp
cHRzL21vZHVsZXMvY2hhbmdlbG9ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41NzFjMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1
bGVzL2NoYW5nZWxvZ3MucHkKQEAgLTAsMCArMSw5MiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMDks
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIAorIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIyAKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
IworIyBXZWJLaXQncyBQeXRob24gbW9kdWxlIGZvciBwYXJzaW5nIGFuZCBtb2RpZnlpbmcgQ2hh
bmdlTG9nIGZpbGVzCisKK2ltcG9ydCBmaWxlaW5wdXQgIyBpbnBsYWNlIGZpbGUgZWRpdGluZyBm
b3Igc2V0X3Jldmlld2VyX2luX2NoYW5nZWxvZworaW1wb3J0IHJlCisKKyMgVGhpcyBkb2Vzbid0
IHJlYWxseSBiZWxvbmcgaW4gdGhpcyBmaWxlLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIGJldHRlciBo
b21lIGZvciBpdCB5ZXQuCisjIE1heWJlIGV2ZW50dWFsbHkgYSB3ZWJraXRfY29uZmlnLnB5Pwor
ZGVmIHZpZXdfc291cmNlX3VybChyZXZpc2lvbl9udW1iZXIpOgorICAgIHJldHVybiAiaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvJXMiICUgcmV2aXNpb25fbnVtYmVyCisKKworY2xh
c3MgQ2hhbmdlTG9nOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2Vs
Zi5wYXRoID0gcGF0aAorCisgICAgIyBlLmcuIDIwMDktMDYtMDMgIEVyaWMgU2VpZGVsICA8ZXJp
Y0B3ZWJraXQub3JnPgorICAgIGRhdGVfbGluZV9yZWdleHAgPSByZS5jb21waWxlKCdeKFxkezR9
LVxkezJ9LVxkezJ9KScgIyBDb25zdW1lIHRoZSBkYXRlLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICArICdccysoLispXHMrJyAjIENvbnN1bWUgdGhlIG5hbWUuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgJzwoW148Pl0rKT4kJykgIyBBbmQgZmluYWxseSB0aGUg
ZW1haWwgYWRkcmVzcy4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3BhcnNlX2xhdGVz
dF9lbnRyeV9mcm9tX2ZpbGUoY2hhbmdlbG9nX2ZpbGUpOgorICAgICAgICBlbnRyeV9saW5lcyA9
IFtdCisgICAgICAgICMgVGhlIGZpcnN0IGxpbmUgc2hvdWxkIGJlIGEgZGF0ZSBsaW5lLgorICAg
ICAgICBmaXJzdF9saW5lID0gY2hhbmdlbG9nX2ZpbGUucmVhZGxpbmUoKQorICAgICAgICBpZiBu
b3QgQ2hhbmdlTG9nLmRhdGVfbGluZV9yZWdleHAubWF0Y2goZmlyc3RfbGluZSk6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbnRyeV9saW5lcy5hcHBlbmQoZmlyc3RfbGluZSkK
KworICAgICAgICBmb3IgbGluZSBpbiBjaGFuZ2Vsb2dfZmlsZToKKyAgICAgICAgICAgICMgSWYg
d2UndmUgaGl0IHRoZSBuZXh0IGVudHJ5LCByZXR1cm4uCisgICAgICAgICAgICBpZiBDaGFuZ2VM
b2cuZGF0ZV9saW5lX3JlZ2V4cC5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4g
Jycuam9pbihlbnRyeV9saW5lc1swOi0xXSkgIyBSZW1vdmUgdGhlIGV4dHJhIG5ld2xpbmUgYXQg
dGhlIGVuZAorICAgICAgICAgICAgZW50cnlfbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHJl
dHVybiBOb25lICMgV2UgbmV2ZXIgZm91bmQgYSBkYXRlIGxpbmUhCisKKyAgICBkZWYgbGF0ZXN0
X2VudHJ5KHNlbGYpOgorICAgICAgICBjaGFuZ2Vsb2dfZmlsZSA9IG9wZW4oc2VsZi5wYXRoKQor
ICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VfbGF0ZXN0X2VudHJ5
X2Zyb21fZmlsZShjaGFuZ2Vsb2dfZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGNoYW5nZWxvZ19maWxlLmNsb3NlKCkKKworICAgIGRlZiB1cGRhdGVfZm9yX3JldmVydChzZWxm
LCByZXZpc2lvbik6CisgICAgICAgIHJldmlld2VkX2J5X3JlZ2V4cCA9IHJlLmNvbXBpbGUoJ1Jl
dmlld2VkIGJ5IE5PQk9EWSBcKE9PUFMhXClcLicpCisgICAgICAgIHJlbW92aW5nX2JvaWxlcnBs
YXRlID0gRmFsc2UKKyAgICAgICAgIyBpbnBsYWNlPTEgY3JlYXRlcyBhIGJhY2t1cCBmaWxlIGFu
ZCByZS1kaXJlY3RzIHN0ZG91dCB0byB0aGUgZmlsZQorICAgICAgICBmb3IgbGluZSBpbiBmaWxl
aW5wdXQuRmlsZUlucHV0KHNlbGYucGF0aCwgaW5wbGFjZT0xKToKKyAgICAgICAgICAgIGlmIHJl
LnNlYXJjaChyZXZpZXdlZF9ieV9yZWdleHAsIGxpbmUpOgorICAgICAgICAgICAgICAgIHByaW50
IHJlLnN1YihyZXZpZXdlZF9ieV9yZWdleHAsICJObyByZXZpZXcsIHJvbGxpbmcgb3V0IHIlcy4i
ICUgcmV2aXNpb24sIGxpbmUpLAorICAgICAgICAgICAgICAgIHByaW50ICIgICAgICAgICVzXG4i
ICUgdmlld19zb3VyY2VfdXJsKHJldmlzaW9uKQorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGFs
bCB0aGUgQ2hhbmdlTG9nIGJvaWxlciBwbGF0ZSBiZXR3ZWVuIHRoZSBSZXZpZXdlZCBieSBsaW5l
IGFuZCB0aGUgZmlyc3QgY2hhbmdlZCBmaWxlLgorICAgICAgICAgICAgICAgIHJlbW92aW5nX2Jv
aWxlcnBsYXRlID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiByZW1vdmluZ19ib2lsZXJwbGF0ZToK
KyAgICAgICAgICAgICAgICBpZiBsaW5lLmZpbmQoJyonKSA+PSAwIDogIyBlYWNoIGNoYW5nZWQg
ZmlsZSBpcyBwcmVjZWRlZCBieSBhICoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZpbmdfYm9p
bGVycGxhdGUgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgcmVtb3ZpbmdfYm9pbGVycGxh
dGU6CisgICAgICAgICAgICAgICAgcHJpbnQgbGluZSwKKworICAgIGRlZiBzZXRfcmV2aWV3ZXIo
c2VsZiwgcmV2aWV3ZXIpOgorICAgICAgICAjIGlucGxhY2U9MSBjcmVhdGVzIGEgYmFja3VwIGZp
bGUgYW5kIHJlLWRpcmVjdHMgc3Rkb3V0IHRvIHRoZSBmaWxlCisgICAgICAgIGZvciBsaW5lIGlu
IGZpbGVpbnB1dC5GaWxlSW5wdXQoc2VsZi5wYXRoLCBpbnBsYWNlPTEpOgorICAgICAgICAgICAg
cHJpbnQgbGluZS5yZXBsYWNlKCJOT0JPRFkgKE9PUFMhKSIsIHJldmlld2VyLmVuY29kZSgidXRm
LTgiKSksICMgVHJhaWxpbmcgY29tbWEgc3VwcHJlc3NlcyBwcmludGluZyBuZXdsaW5lCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY2hhbmdlbG9nc191bml0dGVzdC5w
eSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvbW9kdWxlcy9jaGFuZ2Vsb2dzX3VuaXR0ZXN0LnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMTRjYjcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvY2hhbmdlbG9nc191bml0dGVzdC5weQpA
QCAtMCwwICsxLDE0NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0Ogor
IworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
IyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisj
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBj
aGFuZ2Vsb2dzIGltcG9ydCAqCisKK2ltcG9ydCBvcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIFN0
cmluZ0lPIGltcG9ydCBTdHJpbmdJTworCitjbGFzcyBDaGFuZ2VMb2dzVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisKKyAgICBfZXhhbXBsZV9lbnRyeSA9ICcnJzIwMDktMDgtMTcgIFBldGVyIEth
c3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZl
IEZhbGtlbmJ1cmcuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI3MzIzCisgICAgICAgIE9ubHkgYWRkIEN5Z3dpbiB0byB0aGUgcGF0aCB3aGVuIGl0
IGlzbid0IGFscmVhZHkgdGhlcmUuICBUaGlzIGF2b2lkcworICAgICAgICBjYXVzaW5nIHByb2Js
ZW1zIGZvciBwZW9wbGUgd2hvIHB1cnBvc2VmdWxseSBoYXZlIG5vbi1DeWd3aW4gdmVyc2lvbnMg
b2YKKyAgICAgICAgZXhlY3V0YWJsZXMgbGlrZSBzdm4gaW4gZnJvbnQgb2YgdGhlIEN5Z3dpbiBv
bmVzIGluIHRoZWlyIHBhdGhzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vSW1hZ2VEaWZm
LnZjcHJvajoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vVGVzdE5ldHNjYXBlUGx1Z2lu
L1Rlc3ROZXRzY2FwZVBsdWdpbi52Y3Byb2o6CisnJycKKworICAgICMgTW9yZSBleGFtcGxlIHRl
eHQgdGhhbiB3ZSBuZWVkLiAgRXZlbnR1YWxseSB3ZSBuZWVkIHRvIHN1cHBvcnQgcGFyc2luZyB0
aGlzIGFsbCBhbmQgd3JpdGUgdGVzdHMgZm9yIHRoZSBwYXJzaW5nLgorICAgIF9leGFtcGxlX2No
YW5nZWxvZyA9ICcnJzIwMDktMDgtMTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNv
bT4KKworICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi8yODM5Mz4gY2hlY2std2Via2l0LXN0
eWxlOiBhZGQgY2hlY2sgZm9yIHVzZSBvZiBzdGQ6Om1heCgpL3N0ZDo6bWluKCkgaW5zdGVhZCBv
ZiBNQVgoKS9NSU4oKQorCisgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgorCisgICAg
ICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHlsZS5weToKKyAgICAgICAgKF9FUlJPUl9DQVRF
R09SSUVTKTogQWRkZWQgJ3J1bnRpbWUvbWF4X21pbl9tYWNyb3MnLgorICAgICAgICAoY2hlY2tf
bWF4X21pbl9tYWNyb3MpOiBBZGRlZC4gIFJldHVybnMgbGV2ZWwgNCBlcnJvciB3aGVuIE1BWCgp
CisgICAgICAgIGFuZCBNSU4oKSBtYWNyb3MgYXJlIHVzZWQgaW4gaGVhZGVyIGZpbGVzIGFuZCBD
Kysgc291cmNlIGZpbGVzLgorICAgICAgICAoY2hlY2tfc3R5bGUpOiBBZGRlZCBjYWxsIHRvIGNo
ZWNrX21heF9taW5fbWFjcm9zKCkuCisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL2NwcF9zdHls
ZV91bml0dGVzdC5weTogQWRkZWQgdW5pdCB0ZXN0cy4KKyAgICAgICAgKHRlc3RfbWF4X21hY3Jv
KTogQWRkZWQuCisgICAgICAgICh0ZXN0X21pbl9tYWNybyk6IEFkZGVkLgorCisyMDA5LTA4LTE2
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CisKKyAgICAgICAgQmFja2VkIG91
dCByNDczNDMgd2hpY2ggd2FzIG1pc3Rha2VubHkgY29tbWl0dGVkCisKKyAgICAgICAgKiBTY3Jp
cHRzL2J1Z3ppbGxhLXRvb2w6CisgICAgICAgICogU2NyaXB0cy9tb2R1bGVzL3NjbS5weToKKwor
MjAwOS0wNi0xOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUnVi
YmVyIHN0YW1wZWQgYnkgTWFyayBSb3dlLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlV2luZG93Lm1tOgorICAgICAgICAoLVtEdW1wUmVuZGVyVHJlZVdpbmRv
dyBjbG9zZV0pOiBSZXNvbHZlZCBjcmFzaGVzIHNlZW4gZHVyaW5nIHJlZ3Jlc3Npb24KKyAgICAg
ICAgdGVzdHMuIFRoZSBjbG9zZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbiBhIHdpbmRvdyB0aGF0
J3MgYWxyZWFkeSBjbG9zZWQKKyAgICAgICAgc28gd2UgY2FuJ3QgYXNzZXJ0IGhlcmUuCisKKz09
IFJvbGxlZCBvdmVyIHRvIENoYW5nZUxvZy0yMDA5LTA2LTE2ID09CisnJycKKworICAgIGRlZiB0
ZXN0X2xhdGVzdF9lbnRyeV9wYXJzZShzZWxmKToKKyAgICAgICAgY2hhbmdlbG9nX2NvbnRlbnRz
ID0gIiVzXG4lcyIgJSAoc2VsZi5fZXhhbXBsZV9lbnRyeSwgc2VsZi5fZXhhbXBsZV9jaGFuZ2Vs
b2cpCisgICAgICAgIGNoYW5nZWxvZ19maWxlID0gU3RyaW5nSU8oY2hhbmdlbG9nX2NvbnRlbnRz
KQorICAgICAgICBsYXRlc3RfZW50cnkgPSBDaGFuZ2VMb2cuX3BhcnNlX2xhdGVzdF9lbnRyeV9m
cm9tX2ZpbGUoY2hhbmdlbG9nX2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYu
X2V4YW1wbGVfZW50cnksIGxhdGVzdF9lbnRyeSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgX3dyaXRlX3RtcF9maWxlX3dpdGhfY29udGVudHMoY29udGVudHMpOgorICAgICAgICAoZmls
ZV9kZXNjcmlwdG9yLCBmaWxlX3BhdGgpID0gdGVtcGZpbGUubWtzdGVtcCgpICMgTmFtZWRUZW1w
b3JhcnlGaWxlIGFsd2F5cyBkZWxldGVzIHRoZSBmaWxlIG9uIGNsb3NlIGluIHB5dGhvbiA8IDIu
NgorICAgICAgICBmaWxlID0gb3MuZmRvcGVuKGZpbGVfZGVzY3JpcHRvciwgJ3cnKQorICAgICAg
ICBmaWxlLndyaXRlKGNvbnRlbnRzKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgcmV0
dXJuIGZpbGVfcGF0aAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfcmVhZF9maWxlX2Nv
bnRlbnRzKGZpbGVfcGF0aCk6CisgICAgICAgIGZpbGUgPSBvcGVuKGZpbGVfcGF0aCkKKyAgICAg
ICAgY29udGVudHMgPSBmaWxlLnJlYWQoKQorICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAg
cmV0dXJuIGNvbnRlbnRzCisKKyAgICBfbmV3X2VudHJ5X2JvaWxlcnBsYXRlID0gJycnMjAwOS0w
OC0xOSAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFu
ZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDoKKycn
JworCisgICAgZGVmIHRlc3Rfc2V0X3Jldmlld2VyKHNlbGYpOgorICAgICAgICBjaGFuZ2Vsb2df
Y29udGVudHMgPSAiJXNcbiVzIiAlIChzZWxmLl9uZXdfZW50cnlfYm9pbGVycGxhdGUsIHNlbGYu
X2V4YW1wbGVfY2hhbmdlbG9nKQorICAgICAgICBjaGFuZ2Vsb2dfcGF0aCA9IHNlbGYuX3dyaXRl
X3RtcF9maWxlX3dpdGhfY29udGVudHMoY2hhbmdlbG9nX2NvbnRlbnRzKQorICAgICAgICByZXZp
ZXdlcl9uYW1lID0gJ1Rlc3QgUmV2aWV3ZXInCisgICAgICAgIENoYW5nZUxvZyhjaGFuZ2Vsb2df
cGF0aCkuc2V0X3Jldmlld2VyKHJldmlld2VyX25hbWUpCisgICAgICAgIGFjdHVhbF9jb250ZW50
cyA9IHNlbGYuX3JlYWRfZmlsZV9jb250ZW50cyhjaGFuZ2Vsb2dfcGF0aCkKKyAgICAgICAgZXhw
ZWN0ZWRfY29udGVudHMgPSBjaGFuZ2Vsb2dfY29udGVudHMucmVwbGFjZSgnTk9CT0RZIChPT1BT
ISknLCByZXZpZXdlcl9uYW1lKQorICAgICAgICBvcy5yZW1vdmUoY2hhbmdlbG9nX3BhdGgpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGFjdHVhbF9jb250ZW50cywgZXhwZWN0ZWRfY29udGVu
dHMpCisKKyAgICBfZXhwZWN0ZWRfcmV2ZXJ0X2VudHJ5ID0gJycnMjAwOS0wOC0xOSAgRXJpYyBT
ZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTm8gcmV2aWV3LCByb2xsaW5nIG91
dCByMTIzNDUuCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEyMzQ1
CisKKyAgICAgICAgKiBTY3JpcHRzL2J1Z3ppbGxhLXRvb2w6CisnJycKKworICAgIGRlZiB0ZXN0
X3VwZGF0ZV9mb3JfcmV2ZXJ0KHNlbGYpOgorICAgICAgICBjaGFuZ2Vsb2dfY29udGVudHMgPSAi
JXNcbiVzIiAlIChzZWxmLl9uZXdfZW50cnlfYm9pbGVycGxhdGUsIHNlbGYuX2V4YW1wbGVfY2hh
bmdlbG9nKQorICAgICAgICBjaGFuZ2Vsb2dfcGF0aCA9IHNlbGYuX3dyaXRlX3RtcF9maWxlX3dp
dGhfY29udGVudHMoY2hhbmdlbG9nX2NvbnRlbnRzKQorICAgICAgICBjaGFuZ2Vsb2cgPSBDaGFu
Z2VMb2coY2hhbmdlbG9nX3BhdGgpCisgICAgICAgIGNoYW5nZWxvZy51cGRhdGVfZm9yX3JldmVy
dCgxMjM0NSkKKyAgICAgICAgYWN0dWFsX2VudHJ5ID0gY2hhbmdlbG9nLmxhdGVzdF9lbnRyeSgp
CisgICAgICAgIG9zLnJlbW92ZShjaGFuZ2Vsb2dfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoYWN0dWFsX2VudHJ5LCBzZWxmLl9leHBlY3RlZF9yZXZlcnRfZW50cnkpCisKK2lmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdW5pdHRlc3RzIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy9ydW4td2Via2l0LXVuaXR0ZXN0cwppbmRleCAyYTdmNjZkLi5iZjcyZDMxIDEwMDc1NQot
LS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3J1bi13ZWJraXQtdW5pdHRlc3RzCisrKyBiL1dlYktp
dFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC11bml0dGVzdHMKQEAgLTMxLDYgKzMxLDcgQEAgaW1w
b3J0IHVuaXR0ZXN0CiAKIGZyb20gbW9kdWxlcy5idWd6aWxsYV91bml0dGVzdCBpbXBvcnQgKgog
ZnJvbSBtb2R1bGVzLmJ1aWxkYm90X3VuaXR0ZXN0IGltcG9ydCAqCitmcm9tIG1vZHVsZXMuY2hh
bmdlbG9nc191bml0dGVzdCBpbXBvcnQgKgogZnJvbSBtb2R1bGVzLmNvbW1pdHRlcnNfdW5pdHRl
c3QgaW1wb3J0ICoKIGZyb20gbW9kdWxlcy5jcHBfc3R5bGVfdW5pdHRlc3QgaW1wb3J0ICoKIGZy
b20gbW9kdWxlcy5kaWZmX3BhcnNlcl91bml0dGVzdCBpbXBvcnQgKg==
</data>
<flag name="review"
          id="19358"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>