<?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>68973</bug_id>
          
          <creation_ts>2011-09-27 23:13:03 -0700</creation_ts>
          <short_desc>watchlist: Add webkit-patch command to run watchlist.</short_desc>
          <delta_ts>2011-09-30 18:14:20 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>68822</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>474520</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-27 23:13:03 -0700</bug_when>
    <thetext>See summary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475075</commentid>
    <comment_count>1</comment_count>
      <attachid>109089</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-28 16:39:06 -0700</bug_when>
    <thetext>Created attachment 109089
WIP

There are many loose ends to clean up (adding a changelog and some form of tests) but I wanted to make sure this is the right approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475076</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-28 16:42:09 -0700</bug_when>
    <thetext>Attachment 109089 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Tools/Scripts/webkitpy/tool/commands/downl...&quot; exit_code: 1

Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:2:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:6:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:16:  trailing whitespace  [pep8/W291] [5]
Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:33:  expected 2 blank lines, found 1  [pep8/E302] [5]
Tools/Scripts/webkitpy/tool/commands/download.py:260:  whitespace before &apos;]&apos;  [pep8/E202] [5]
Total errors found: 5 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475080</commentid>
    <comment_count>3</comment_count>
      <attachid>109089</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-09-28 16:46:45 -0700</bug_when>
    <thetext>Comment on attachment 109089
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=109089&amp;action=review

&gt;&gt; Tools/Scripts/webkitpy/tool/commands/download.py:260
&gt;&gt; +        steps.ApplyWatchListToPatch
&gt; 
&gt; whitespace before &apos;]&apos;  [pep8/E202] [5]

It wants to you add a comma to the end of the line.  Maybe should just be &quot;ApplyWatchlist&quot; ?

&gt; Tools/Scripts/webkitpy/tool/commands/download.py:262
&gt; +    long_help = &quot;&quot;&quot; &quot;&quot;&quot;

Better to have some long help explaining what this does.

Also, you should add a test.  Testing commands is very easy.  :)

&gt;&gt; Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:33
&gt;&gt; +class ApplyWatchListToPatch(AbstractStep):
&gt; 
&gt; expected 2 blank lines, found 1  [pep8/E302] [5]

The class name should also match the file name.

&gt; Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:35
&gt; +        log(&quot;Processing patch %s from bug %s.&quot; % (state[&quot;patch&quot;].id(), state[&quot;patch&quot;].bug_id()))

This shouldn&apos;t log like this.  Something else will do the logging for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475103</commentid>
    <comment_count>4</comment_count>
      <attachid>109089</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-28 17:16:01 -0700</bug_when>
    <thetext>Comment on attachment 109089
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=109089&amp;action=review

&gt; Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:41
&gt; +        self._tool.bugs.post_comment_to_bug(state[&apos;patch&apos;].bug_id(), comment_text, cc_list)

I think you have to use the some sort of getter, and cant&apos; grab at the state directly.  the patch might not be cached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475104</commentid>
    <comment_count>5</comment_count>
      <attachid>109089</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-28 17:18:13 -0700</bug_when>
    <thetext>Comment on attachment 109089
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=109089&amp;action=review

&gt; Tools/Scripts/webkitpy/tool/commands/download.py:255
&gt; +    help_text = &quot;&quot;

I don&apos;t think you need to specify an empty help-text.

&gt; Tools/Scripts/webkitpy/tool/commands/download.py:258
&gt; +    prepare_steps = [
&gt; +    ]

These aren&apos;t needed either.

&gt;&gt; Tools/Scripts/webkitpy/tool/commands/download.py:262
&gt;&gt; +    long_help = &quot;&quot;&quot; &quot;&quot;&quot;
&gt; 
&gt; Better to have some long help explaining what this does.
&gt; 
&gt; Also, you should add a test.  Testing commands is very easy.  :)

testing commands is very easy. :)

&gt;&gt;&gt; Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:33
&gt;&gt;&gt; +class ApplyWatchListToPatch(AbstractStep):
&gt;&gt; 
&gt;&gt; expected 2 blank lines, found 1  [pep8/E302] [5]
&gt; 
&gt; The class name should also match the file name.

This should work from the current diff, which I think you get for free if you do the &quot;patch&quot; lookup from the state correctly.

&gt; Tools/Scripts/webkitpy/tool/steps/processwatchlistforpatch.py:36
&gt; +        watch_list = WatchListLoader(self._tool.filesystem).load()

Probably want this hung off the host (which is the tool).  modify host.py to have a watchlist function, which can lazy-load (and cache, via @memoized) the watchlist when accessed.  Similar to how CommitterList functions (or should function).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475454</commentid>
    <comment_count>6</comment_count>
      <attachid>109089</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-29 09:29:03 -0700</bug_when>
    <thetext>Comment on attachment 109089
WIP

View in context: https://bugs.webkit.org/attachment.cgi?id=109089&amp;action=review

r- due to my comment above

&gt; Tools/Scripts/webkitpy/tool/steps/__init__.py:32
&gt; +from webkitpy.tool.steps.applywatchlisttopatch import ApplyWatchListToPatch

There isn&apos;t applywatchlisttopatch named file, but processwatchlistforpatch.py :(
This change killed the Qt EWS. It wasn&apos;t simple to find the culprit. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475466</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-29 09:40:35 -0700</bug_when>
    <thetext>new bug report filed on this issue: https://bugs.webkit.org/show_bug.cgi?id=69089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475471</commentid>
    <comment_count>8</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-29 09:46:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109089 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109089&amp;action=review
&gt; 
&gt; r- due to my comment above
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/steps/__init__.py:32
&gt; &gt; +from webkitpy.tool.steps.applywatchlisttopatch import ApplyWatchListToPatch
&gt; 
&gt; There isn&apos;t applywatchlisttopatch named file, but processwatchlistforpatch.py :(
&gt; This change killed the Qt EWS. It wasn&apos;t simple to find the culprit. :)

Whoops. Sorry about that.

I knew the patch had issues and it was only a very early work in progress -- to get feedback on the direction being taken. I had simply put r? to make sure it got people&apos;s attention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475579</commentid>
    <comment_count>9</comment_count>
      <attachid>109184</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-29 12:04:17 -0700</bug_when>
    <thetext>Created attachment 109184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475856</commentid>
    <comment_count>10</comment_count>
      <attachid>109184</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-29 20:46:44 -0700</bug_when>
    <thetext>Comment on attachment 109184
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=109184&amp;action=review

I&apos;m not sure I 100% follow.  I think most webkit-patch commands apply to the working directory by default.  It&apos;s interesting that you have a reversed default here, where the &quot;normal&quot; sounding command takes an attachment, and then there is a &quot;local&quot; variant.  I&apos;m not sure if that makes sense for this command or not.  I may have to review this when less tired.  (That should not stop someone else from reviewing it first!)

&gt; Tools/Scripts/webkitpy/tool/steps/applywatchlist.py:56
&gt; +            log_result = _log.debug
&gt; +        else:
&gt; +            _log.info(&apos;No bug was updated because no id was given.&apos;)
&gt; +            log_result = _log.info

Crazy how you&apos;re switching loggers...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475859</commentid>
    <comment_count>11</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-29 20:54:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 109184 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109184&amp;action=review
&gt; 
&gt; I&apos;m not sure I 100% follow.  I think most webkit-patch commands apply to the working directory by default.  It&apos;s interesting that you have a reversed default here, where the &quot;normal&quot; sounding command takes an attachment, and then there is a &quot;local&quot; variant.  I&apos;m not sure if that makes sense for this command or not.  I may have to review this when less tired.  (That should not stop someone else from reviewing it first!)

I think most commands have some intended local affect but a watchlist&apos;s main purpose (in my mind) is to add a note or cc to a bug.

However, I&apos;m not wed to the current way I have things set up. I&apos;m open to other ideas or discussing this more so we can figure out something better. (This just represents my current point of view.)

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/steps/applywatchlist.py:56
&gt; &gt; +            log_result = _log.debug
&gt; &gt; +        else:
&gt; &gt; +            _log.info(&apos;No bug was updated because no id was given.&apos;)
&gt; &gt; +            log_result = _log.info
&gt; 
&gt; Crazy how you&apos;re switching loggers...

I&apos;m not sure what you mean by that :). (I could do this using .log and switch logging level.)

The reason I do this is to let the user see the info if there is no bug being modified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475863</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-29 21:01:30 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Crazy how you&apos;re switching loggers...
&gt; 
&gt; I&apos;m not sure what you mean by that :). (I could do this using .log and switch logging level.)
&gt; 
&gt; The reason I do this is to let the user see the info if there is no bug being modified.

It was more of a &quot;you blew my mind&quot; comment than a &quot;you&apos;re crazy&quot; comment. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475865</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-29 21:04:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (From update of attachment 109184 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109184&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m not sure I 100% follow.  I think most webkit-patch commands apply to the working directory by default.  It&apos;s interesting that you have a reversed default here, where the &quot;normal&quot; sounding command takes an attachment, and then there is a &quot;local&quot; variant.  I&apos;m not sure if that makes sense for this command or not.  I may have to review this when less tired.  (That should not stop someone else from reviewing it first!)
&gt; 
&gt; I think most commands have some intended local affect but a watchlist&apos;s main purpose (in my mind) is to add a note or cc to a bug.

I&apos;m starting to see what you are saying.

Perhaps if I rename them, it will help: apply-watchlist-to-attachment and apply-watchlist</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475867</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-29 21:06:16 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; I think most commands have some intended local affect but a watchlist&apos;s main purpose (in my mind) is to add a note or cc to a bug.
&gt; 
&gt; I&apos;m starting to see what you are saying.
&gt; 
&gt; Perhaps if I rename them, it will help: apply-watchlist-to-attachment and apply-watchlist

I&apos;m not sure I&apos;m right.  I haven&apos;t looked at webkit-patch help --all-commands recently to see if there is a pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476450</commentid>
    <comment_count>15</comment_count>
      <attachid>109184</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-30 17:36:00 -0700</bug_when>
    <thetext>Comment on attachment 109184
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=109184&amp;action=review

whappam!

&gt; Tools/Scripts/webkitpy/tool/commands/applywatchlistlocal.py:35
&gt; +    help_text = &quot;Applies the watchlist to local changes.&quot;

I don&apos;t remember if we use periods/capitals or not in these.  I remember tryign to be consistent with other unix commands at one time, but I don&apos;t remember what I decided on. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476472</commentid>
    <comment_count>16</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-09-30 18:09:32 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/96444.

(In reply to comment #15)
&gt; (From update of attachment 109184 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109184&amp;action=review
&gt; 
&gt; whappam!
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/tool/commands/applywatchlistlocal.py:35
&gt; &gt; +    help_text = &quot;Applies the watchlist to local changes.&quot;
&gt; 
&gt; I don&apos;t remember if we use periods/capitals or not in these.  I remember tryign to be consistent with other unix commands at one time, but I don&apos;t remember what I decided on. :)

Sorry. In my excitement, I forgot to check this. I&apos;ll look it over and submit another patch if what I did is inconsistent (which I suspect it may be).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476477</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-30 18:14:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Committed as http://trac.webkit.org/changeset/96444.
&gt; 
&gt; (In reply to comment #15)
&gt; &gt; I don&apos;t remember if we use periods/capitals or not in these.  I remember tryign to be consistent with other unix commands at one time, but I don&apos;t remember what I decided on. :)
&gt; 
&gt; Sorry. In my excitement, I forgot to check this. I&apos;ll look it over and submit another patch if what I did is inconsistent (which I suspect it may be).

On the list of fish to fry, that&apos;s a minnow.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109089</attachid>
            <date>2011-09-28 16:39:06 -0700</date>
            <delta_ts>2011-09-29 12:04:14 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wip.txt</filename>
            <type>text/plain</type>
            <size>4096</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9h
ZC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZC5weQpp
bmRleCAxOGUyMDM5Li5lNWNjZTNiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5CkBAIC0yNTAsNiArMjUwLDE4IEBAIGNsYXNzIEFwcGx5
RnJvbUJ1ZyhBYnN0cmFjdFBhdGNoQXBwbHlpbmdDb21tYW5kLCBQcm9jZXNzQnVnc01peGluKToK
ICAgICBzaG93X2luX21haW5faGVscCA9IFRydWUKIAogCitjbGFzcyBBcHBseVdhdGNoTGlzdFRv
QXR0YWNobWVudChBYnN0cmFjdFBhdGNoU2VxdWVuY2luZ0NvbW1hbmQsIFByb2Nlc3NBdHRhY2ht
ZW50c01peGluKToKKyAgICBuYW1lID0gImFwcGx5LXdhdGNobGlzdC10by1hdHRhY2htZW50Igor
ICAgIGhlbHBfdGV4dCA9ICIiCisgICAgYXJndW1lbnRfbmFtZXMgPSAiQVRUQUNITUVOVF9JRCBb
QVRUQUNITUVOVF9JRFNdIgorICAgIHByZXBhcmVfc3RlcHMgPSBbCisgICAgXQorICAgIG1haW5f
c3RlcHMgPSBbCisgICAgICAgIHN0ZXBzLkFwcGx5V2F0Y2hMaXN0VG9QYXRjaAorICAgIF0KKyAg
ICBsb25nX2hlbHAgPSAiIiIgIiIiCisKKwogY2xhc3MgQWJzdHJhY3RQYXRjaExhbmRpbmdDb21t
YW5kKEFic3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZCk6CiAgICAgbWFpbl9zdGVwcyA9IFsK
ICAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5nRGlyZWN0b3J5LApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL19faW5pdF9fLnB5CmluZGV4IDIwM2U2OTQuLjYyZGZkYTYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9fX2luaXRfXy5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvX19pbml0X18ucHkKQEAgLTI5
LDYgKzI5LDcgQEAKICMgRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IHdheSB0byBkbyB0aGlzPwog
ZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFwcGx5cGF0Y2ggaW1wb3J0IEFwcGx5UGF0Y2gKIGZy
b20gd2Via2l0cHkudG9vbC5zdGVwcy5hcHBseXBhdGNod2l0aGxvY2FsY29tbWl0IGltcG9ydCBB
cHBseVBhdGNoV2l0aExvY2FsQ29tbWl0Citmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYXBwbHl3
YXRjaGxpc3R0b3BhdGNoIGltcG9ydCBBcHBseVdhdGNoTGlzdFRvUGF0Y2gKIGZyb20gd2Via2l0
cHkudG9vbC5zdGVwcy5hdHRhY2h0b2J1ZyBpbXBvcnQgQXR0YWNoVG9CdWcKIGZyb20gd2Via2l0
cHkudG9vbC5zdGVwcy5idWlsZCBpbXBvcnQgQnVpbGQKIGZyb20gd2Via2l0cHkudG9vbC5zdGVw
cy5jaGVja3N0eWxlIGltcG9ydCBDaGVja1N0eWxlCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvc3RlcHMvcHJvY2Vzc3dhdGNobGlzdGZvcnBhdGNoLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3Byb2Nlc3N3YXRjaGxpc3Rmb3JwYXRjaC5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZjMzg1Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL3Byb2Nlc3N3YXRjaGxpc3Rm
b3JwYXRjaC5weQpAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyAKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMg
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3
ZWJraXRweS5jb21tb24ud2F0Y2hsaXN0LndhdGNobGlzdGxvYWRlciBpbXBvcnQgV2F0Y2hMaXN0
TG9hZGVyCitmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYWJzdHJhY3RzdGVwIGltcG9ydCBBYnN0
cmFjdFN0ZXAKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5kZXByZWNhdGVkX2xvZ2dpbmcg
aW1wb3J0IGxvZworCitjbGFzcyBBcHBseVdhdGNoTGlzdFRvUGF0Y2goQWJzdHJhY3RTdGVwKToK
KyAgICBkZWYgcnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgbG9nKCJQcm9jZXNzaW5nIHBhdGNo
ICVzIGZyb20gYnVnICVzLiIgJSAoc3RhdGVbInBhdGNoIl0uaWQoKSwgc3RhdGVbInBhdGNoIl0u
YnVnX2lkKCkpKQorICAgICAgICB3YXRjaF9saXN0ID0gV2F0Y2hMaXN0TG9hZGVyKHNlbGYuX3Rv
b2wuZmlsZXN5c3RlbSkubG9hZCgpCisKKyAgICAgICAgY2Nfc2V0X2FuZF9tZXNzYWdlcyA9IHdh
dGNoX2xpc3QuZGV0ZXJtaW5lX2NjX3NldF9hbmRfbWVzc2FnZXMoc3RhdGVbInBhdGNoIl0uY29u
dGVudHMoKSkKKyAgICAgICAgY2NfbGlzdCA9IGNjX3NldF9hbmRfbWVzc2FnZXNbJ2NjX3NldCdd
CisgICAgICAgIGNvbW1lbnRfdGV4dCA9ICdcblxuJy5qb2luKGNjX3NldF9hbmRfbWVzc2FnZXNb
J21lc3NhZ2VzJ10pCisgICAgICAgIHNlbGYuX3Rvb2wuYnVncy5wb3N0X2NvbW1lbnRfdG9fYnVn
KHN0YXRlWydwYXRjaCddLmJ1Z19pZCgpLCBjb21tZW50X3RleHQsIGNjX2xpc3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109184</attachid>
            <date>2011-09-29 12:04:17 -0700</date>
            <delta_ts>2011-09-30 17:36:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68973-20110929120416.patch</filename>
            <type>text/plain</type>
            <size>25706</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzMDUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYWM3ZjIxNTgyNjQwYjY0YmY2N2RkZjc3MjFjMDYzOThl
NDNmNTE0Li5mYzUyYjA3ZWRkMWUwNGFhZTJhNmUyOGFjNjUzYWM0ODg1ZDI3Y2NkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTEtMDktMjkgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIHdhdGNobGlzdDogQWRkIHdlYmtpdC1wYXRjaCBjb21tYW5kIHRvIHJ1biB3YXRjaGxpc3Qu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk3Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vaG9zdC5weTogRXhwb3NlZCB0aGUgd2F0Y2hfbGlzdC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3Qvd2F0Y2hsaXN0LnB5OiBDaGFu
Z2VkIHRvIHJldHVybgorICAgICAgICB0aGUgY2MgYW5kIG1lc3NhZ2VzIGFzIHNvcnRlZCBsaXN0
cy4gVG8gYWxsb3cgZm9yIGRldGVybWluaXN0aWMgb3JkZXJpbmcuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9jb21tb24vd2F0Y2hsaXN0L3dhdGNobGlzdF91bml0dGVzdC5weTogRGl0dG8u
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5OiBB
ZGQgQXBwbHlXYXRjaExpc3RMb2NhbCBzbworICAgICAgICB0aGF0IGl0IHdpbGwgYmUgZXhwb3Nl
ZCBhcyBhIGNvbW1hbmQgYnkgd2Via2l0LXBhdGNoLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9hcHBseXdhdGNobGlzdGxvY2FsLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvYXBwbHl3YXRjaGxpc3Rsb2NhbF91bml0
dGVzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRz
L2Rvd25sb2FkLnB5OiBBZGRlZCBBcHBseVdhdGNoTGlzdCB3aGljaCBtaW1pY3MgQ2hlY2tTdHls
ZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5p
dHRlc3QucHk6IEFkZGVkIGFuIGFwcHJvcHJpYXRlIHRlc3QuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS90b29sL21vY2t0b29sLnB5OiBNb2NrIG91dCB0aGUgd2F0Y2ggbGlzdC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvX19pbml0X18ucHk6IEFkZGVkIEFwcGx5
V2F0Y2hMaXN0LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9hcHBseXdh
dGNobGlzdC5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBz
L2FwcGx5d2F0Y2hsaXN0X3VuaXR0ZXN0LnB5OiBBZGRlZC4KKwogMjAxMS0wOS0yOCAgWGlhbnpo
dSBXYW5nICA8d2FuZ3hpYW56aHVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJ1biBUZXN0V2Vi
S2l0QVBJIG9uIENocm9taXVtIGJ1aWxkYm90cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vaG9zdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL2hv
c3QucHkKaW5kZXggNjUxZDFmMTNkYTljYTY3N2NhOTk0NzM5ZjdkNzExYzRiYTg0MDlmZS4uYjJm
ZGQyZjNmYzdkMGZjNjVmMmNlYmNmMjk5NjkwZmMxNWYzYTM2MiAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vaG9zdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9ob3N0LnB5CkBAIC0zNiw2ICszNiw3IEBAIGZyb20gd2Via2l0cHkuY29tbW9u
Lm5ldCBpbXBvcnQgYnVnemlsbGEsIGJ1aWxkYm90LCBzdGF0dXNzZXJ2ZXIsIHdlYgogZnJvbSB3
ZWJraXRweS5jb21tb24ubmV0LmJ1aWxkYm90LmNocm9taXVtYnVpbGRib3QgaW1wb3J0IENocm9t
aXVtQnVpbGRCb3QKIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5pcmMgaW1wb3J0IGlyY3Byb3h5
CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGV4ZWN1dGl2ZSwgZmlsZXN5c3Rl
bSwgcGxhdGZvcm1pbmZvLCB1c2VyLCB3b3Jrc3BhY2UKK2Zyb20gd2Via2l0cHkuY29tbW9uLndh
dGNobGlzdC53YXRjaGxpc3Rsb2FkZXIgaW1wb3J0IFdhdGNoTGlzdExvYWRlcgogZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydC5mYWN0b3J5IGltcG9ydCBQb3J0RmFjdG9yeQogCiAKQEAg
LTc2LDYgKzc3LDEwIEBAIGNsYXNzIEhvc3Qob2JqZWN0KToKICAgICBkZWYgY2hyb21pdW1fYnVp
bGRib3Qoc2VsZik6CiAgICAgICAgIHJldHVybiBDaHJvbWl1bUJ1aWxkQm90KCkKIAorICAgIEBt
ZW1vaXplZAorICAgIGRlZiB3YXRjaF9saXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gV2F0Y2hM
aXN0TG9hZGVyKHNlbGYuZmlsZXN5c3RlbSkubG9hZCgpCisKICAgICBkZWYgZW5zdXJlX2lyY19j
b25uZWN0ZWQoc2VsZiwgaXJjX2RlbGVnYXRlKToKICAgICAgICAgaWYgbm90IHNlbGYuX2lyYzoK
ICAgICAgICAgICAgIHNlbGYuX2lyYyA9IGlyY3Byb3h5LklSQ1Byb3h5KGlyY19kZWxlZ2F0ZSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdC93YXRj
aGxpc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3Qvd2F0Y2hs
aXN0LnB5CmluZGV4IDhhMDZjNTgzNDZiMmUyNjhiMzBlZTAwMjlhZmVmYmQ1YmViMGQ0ZjIuLjBj
YTQxOGU2YTY2YjE3MjQ0M2IwOTdiNGUxMTI5MmYyZGVlN2MzN2EgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdC93YXRjaGxpc3QucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F0Y2hsaXN0L3dhdGNobGlzdC5weQpAQCAtNjcs
MTcgKzY3LDE4IEBAIGNsYXNzIFdhdGNoTGlzdChvYmplY3QpOgogICAgICAgICBmb3IgcnVsZSBp
biBydWxlczoKICAgICAgICAgICAgIGlmIHJ1bGUubWF0Y2gobWF0Y2hpbmdfZGVmaW5pdGlvbnMp
OgogICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy51cGRhdGUocnVsZS5pbnN0cnVjdGlvbnMo
KSkKLSAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucworICAgICAgICAjIFNvcnQgdGhlIHJlc3Vs
dHMgdG8gbWFrZSB0aGUgb3JkZXIgZGV0ZXJtaW5pc3RpYyAoZm9yIGNvbnNpc3RlbmN5IGFuZCBl
YXNpZXIgdGVzdGluZykuCisgICAgICAgIHJldHVybiBzb3J0ZWQoaW5zdHJ1Y3Rpb25zKQogCi0g
ICAgZGVmIGRldGVybWluZV9jY19zZXQoc2VsZiwgbWF0Y2hpbmdfZGVmaW5pdGlvbnMpOgorICAg
IGRlZiBkZXRlcm1pbmVfY2NfbGlzdChzZWxmLCBtYXRjaGluZ19kZWZpbml0aW9ucyk6CiAgICAg
ICAgIHJldHVybiBzZWxmLl9kZXRlcm1pbmVfaW5zdHJ1Y3Rpb25zKG1hdGNoaW5nX2RlZmluaXRp
b25zLCBzZWxmLl9jY19ydWxlcykKIAogICAgIGRlZiBkZXRlcm1pbmVfbWVzc2FnZXMoc2VsZiwg
bWF0Y2hpbmdfZGVmaW5pdGlvbnMpOgogICAgICAgICByZXR1cm4gc2VsZi5fZGV0ZXJtaW5lX2lu
c3RydWN0aW9ucyhtYXRjaGluZ19kZWZpbml0aW9ucywgc2VsZi5fbWVzc2FnZV9ydWxlcykKIAot
ICAgIGRlZiBkZXRlcm1pbmVfY2Nfc2V0X2FuZF9tZXNzYWdlcyhzZWxmLCBkaWZmKToKKyAgICBk
ZWYgZGV0ZXJtaW5lX2NjX2FuZF9tZXNzYWdlcyhzZWxmLCBkaWZmKToKICAgICAgICAgZGVmaW5p
dGlvbnMgPSBzZWxmLmZpbmRfbWF0Y2hpbmdfZGVmaW5pdGlvbnMoZGlmZikKICAgICAgICAgcmV0
dXJuIHsKLSAgICAgICAgICAgICdjY19zZXQnOiBzZWxmLmRldGVybWluZV9jY19zZXQoZGVmaW5p
dGlvbnMpLAorICAgICAgICAgICAgJ2NjX2xpc3QnOiBzZWxmLmRldGVybWluZV9jY19saXN0KGRl
ZmluaXRpb25zKSwKICAgICAgICAgICAgICdtZXNzYWdlcyc6ICBzZWxmLmRldGVybWluZV9tZXNz
YWdlcyhkZWZpbml0aW9ucyksCi0gICAgICAgICAgICB9CisgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdC93YXRjaGxpc3RfdW5pdHRl
c3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi93YXRjaGxpc3Qvd2F0Y2hsaXN0
X3VuaXR0ZXN0LnB5CmluZGV4IDU5ODc0NmM1ZmE5ZDYwZWUyZGUzMDFjNjc1YTUyMTUxYTAyNmEw
MGUuLmEyNjI3ZmI1NzRmMzJhMTdjZTFhZTIyMGU4NTY3MjY2NjRhNzA5YzggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdC93YXRjaGxpc3RfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F0Y2hsaXN0L3dhdGNo
bGlzdF91bml0dGVzdC5weQpAQCAtNzQsMTEgKzc0LDExIEBAIGNsYXNzIFdhdGNoTGlzdFRlc3Qo
dW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgJyAgICAgICAgXSwnCiAgICAgICAgICAg
ICcgICAgfSwnCiAgICAgICAgICAgICAnfScpCi0gICAgICAgIGNjX3NldF9hbmRfbWVzc2FnZXMg
PSB3YXRjaF9saXN0LmRldGVybWluZV9jY19zZXRfYW5kX21lc3NhZ2VzKERJRkZfVEVTVF9EQVRB
KQorICAgICAgICBjY19hbmRfbWVzc2FnZXMgPSB3YXRjaF9saXN0LmRldGVybWluZV9jY19hbmRf
bWVzc2FnZXMoRElGRl9URVNUX0RBVEEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsKLSAg
ICAgICAgICAgICAgICAnY2Nfc2V0Jzogc2V0KFsnbGV2aW5AY2hyb21pdW0ub3JnJ10pLAotICAg
ICAgICAgICAgICAgICdtZXNzYWdlcyc6IHNldCgpLAotICAgICAgICAgICAgICAgIH0sIGNjX3Nl
dF9hbmRfbWVzc2FnZXMpCisgICAgICAgICAgICAgICAgJ2NjX2xpc3QnOiBbJ2xldmluQGNocm9t
aXVtLm9yZyddLAorICAgICAgICAgICAgICAgICdtZXNzYWdlcyc6IFtdLAorICAgICAgICAgICAg
ICAgIH0sIGNjX2FuZF9tZXNzYWdlcykKIAogICAgIGRlZiB0ZXN0X2NjX3J1bGVzX2NvbXBsZXgo
c2VsZik6CiAgICAgICAgIHdhdGNoX2xpc3QgPSBzZWxmLl93YXRjaF9saXN0X3BhcnNlci5wYXJz
ZSgKQEAgLTkyLDExICs5MiwxMSBAQCBjbGFzcyBXYXRjaExpc3RUZXN0KHVuaXR0ZXN0LlRlc3RD
YXNlKToKICAgICAgICAgICAgICcgICAgICAgICJXYXRjaExpc3QyfFdhdGNoTGlzdDF8V2F0Y2hM
aXN0MyI6IFsgImxldmluQGNocm9taXVtLm9yZyIsIF0sJwogICAgICAgICAgICAgJyAgICB9LCcK
ICAgICAgICAgICAgICd9JykKLSAgICAgICAgY2Nfc2V0X2FuZF9tZXNzYWdlcyA9IHdhdGNoX2xp
c3QuZGV0ZXJtaW5lX2NjX3NldF9hbmRfbWVzc2FnZXMoRElGRl9URVNUX0RBVEEpCisgICAgICAg
IGNjX2FuZF9tZXNzYWdlcyA9IHdhdGNoX2xpc3QuZGV0ZXJtaW5lX2NjX2FuZF9tZXNzYWdlcyhE
SUZGX1RFU1RfREFUQSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoewotICAgICAgICAgICAg
ICAgICdjY19zZXQnOiBzZXQoWydsZXZpbkBjaHJvbWl1bS5vcmcnXSksCi0gICAgICAgICAgICAg
ICAgJ21lc3NhZ2VzJzogc2V0KCksCi0gICAgICAgICAgICAgICAgfSwgY2Nfc2V0X2FuZF9tZXNz
YWdlcykKKyAgICAgICAgICAgICAgICAnY2NfbGlzdCc6IFsnbGV2aW5AY2hyb21pdW0ub3JnJ10s
CisgICAgICAgICAgICAgICAgJ21lc3NhZ2VzJzogW10sCisgICAgICAgICAgICAgICAgfSwgY2Nf
YW5kX21lc3NhZ2VzKQogCiAgICAgZGVmIHRlc3RfY2NfYW5kX21lc3NhZ2VfcnVsZXNfY29tcGxl
eChzZWxmKToKICAgICAgICAgd2F0Y2hfbGlzdCA9IHNlbGYuX3dhdGNoX2xpc3RfcGFyc2VyLnBh
cnNlKApAQCAtMTEzLDExICsxMTMsMTEgQEAgY2xhc3MgV2F0Y2hMaXN0VGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgICAgICAnICAgICAgICAiV2F0Y2hMaXN0MnxXYXRjaExpc3QxfFdh
dGNoTGlzdDMiOiBbICJtc2cxIiwgIm1zZzIiLCBdLCcKICAgICAgICAgICAgICcgICAgfSwnCiAg
ICAgICAgICAgICAnfScpCi0gICAgICAgIGNjX3NldF9hbmRfbWVzc2FnZXMgPSB3YXRjaF9saXN0
LmRldGVybWluZV9jY19zZXRfYW5kX21lc3NhZ2VzKERJRkZfVEVTVF9EQVRBKQorICAgICAgICBj
Y19hbmRfbWVzc2FnZXMgPSB3YXRjaF9saXN0LmRldGVybWluZV9jY19hbmRfbWVzc2FnZXMoRElG
Rl9URVNUX0RBVEEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHsKLSAgICAgICAgICAgICAg
ICAnY2Nfc2V0Jzogc2V0KFsnbGV2aW5AY2hyb21pdW0ub3JnJ10pLAotICAgICAgICAgICAgICAg
ICdtZXNzYWdlcyc6IHNldChbJ21zZzEnLCAnbXNnMiddKSwKLSAgICAgICAgICAgICAgICB9LCBj
Y19zZXRfYW5kX21lc3NhZ2VzKQorICAgICAgICAgICAgICAgICdjY19saXN0JzogWydsZXZpbkBj
aHJvbWl1bS5vcmcnXSwKKyAgICAgICAgICAgICAgICAnbWVzc2FnZXMnOiBbJ21zZzEnLCAnbXNn
MiddLAorICAgICAgICAgICAgICAgIH0sIGNjX2FuZF9tZXNzYWdlcykKIAogICAgIGRlZiB0ZXN0
X2NjX2FuZF9tZXNzYWdlX3J1bGVzX25vX21hdGNoZXMoc2VsZik6CiAgICAgICAgIHdhdGNoX2xp
c3QgPSBzZWxmLl93YXRjaF9saXN0X3BhcnNlci5wYXJzZSgKQEAgLTEzNCwxMSArMTM0LDExIEBA
IGNsYXNzIFdhdGNoTGlzdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgJyAg
ICAgICAgIldhdGNoTGlzdDJ8V2F0Y2hMaXN0MXxXYXRjaExpc3QzIjogWyAibXNnMSIsICJtc2cy
IiwgXSwnCiAgICAgICAgICAgICAnICAgIH0sJwogICAgICAgICAgICAgJ30nKQotICAgICAgICBj
Y19zZXRfYW5kX21lc3NhZ2VzID0gd2F0Y2hfbGlzdC5kZXRlcm1pbmVfY2Nfc2V0X2FuZF9tZXNz
YWdlcyhESUZGX1RFU1RfREFUQSkKKyAgICAgICAgY2NfYW5kX21lc3NhZ2VzID0gd2F0Y2hfbGlz
dC5kZXRlcm1pbmVfY2NfYW5kX21lc3NhZ2VzKERJRkZfVEVTVF9EQVRBKQogICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyh7Ci0gICAgICAgICAgICAgICAgJ2NjX3NldCc6IHNldCgpLAotICAgICAg
ICAgICAgICAgICdtZXNzYWdlcyc6IHNldCgpLAotICAgICAgICAgICAgICAgIH0sIGNjX3NldF9h
bmRfbWVzc2FnZXMpCisgICAgICAgICAgICAgICAgJ2NjX2xpc3QnOiBbXSwKKyAgICAgICAgICAg
ICAgICAnbWVzc2FnZXMnOiBbXSwKKyAgICAgICAgICAgICAgICB9LCBjY19hbmRfbWVzc2FnZXMp
CiAKICAgICBkZWYgdGVzdF9hZGRlZF9tYXRjaChzZWxmKToKICAgICAgICAgd2F0Y2hfbGlzdCA9
IHNlbGYuX3dhdGNoX2xpc3RfcGFyc2VyLnBhcnNlKApAQCAtMTU2LDExICsxNTYsMTEgQEAgY2xh
c3MgV2F0Y2hMaXN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAnICAgICAg
ICAiV2F0Y2hMaXN0MiI6IFsgImFiYXJ0aEB3ZWJraXQub3JnIiwgXSwnCiAgICAgICAgICAgICAn
ICAgIH0sJwogICAgICAgICAgICAgJ30nKQotICAgICAgICBjY19zZXRfYW5kX21lc3NhZ2VzID0g
d2F0Y2hfbGlzdC5kZXRlcm1pbmVfY2Nfc2V0X2FuZF9tZXNzYWdlcyhESUZGX1RFU1RfREFUQSkK
KyAgICAgICAgY2NfYW5kX21lc3NhZ2VzID0gd2F0Y2hfbGlzdC5kZXRlcm1pbmVfY2NfYW5kX21l
c3NhZ2VzKERJRkZfVEVTVF9EQVRBKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7Ci0gICAg
ICAgICAgICAgICAgJ2NjX3NldCc6IHNldChbJ2VyaWNAd2Via2l0Lm9yZyddKSwKLSAgICAgICAg
ICAgICAgICAnbWVzc2FnZXMnOiBzZXQoKSwKLSAgICAgICAgICAgICAgICB9LCBjY19zZXRfYW5k
X21lc3NhZ2VzKQorICAgICAgICAgICAgICAgICdjY19saXN0JzogWydlcmljQHdlYmtpdC5vcmcn
XSwKKyAgICAgICAgICAgICAgICAnbWVzc2FnZXMnOiBbXSwKKyAgICAgICAgICAgICAgICB9LCBj
Y19hbmRfbWVzc2FnZXMpCiAKICAgICBkZWYgdGVzdF9kZWxldGVkX21hdGNoKHNlbGYpOgogICAg
ICAgICB3YXRjaF9saXN0ID0gc2VsZi5fd2F0Y2hfbGlzdF9wYXJzZXIucGFyc2UoCkBAIC0xNzgs
MTEgKzE3OCwxMSBAQCBjbGFzcyBXYXRjaExpc3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAg
ICAgICAgICAgICcgICAgICAgICJXYXRjaExpc3QyIjogWyAiYWJhcnRoQHdlYmtpdC5vcmciLCBd
LCcKICAgICAgICAgICAgICcgICAgfSwnCiAgICAgICAgICAgICAnfScpCi0gICAgICAgIGNjX3Nl
dF9hbmRfbWVzc2FnZXMgPSB3YXRjaF9saXN0LmRldGVybWluZV9jY19zZXRfYW5kX21lc3NhZ2Vz
KERJRkZfVEVTVF9EQVRBKQorICAgICAgICBjY19hbmRfbWVzc2FnZXMgPSB3YXRjaF9saXN0LmRl
dGVybWluZV9jY19hbmRfbWVzc2FnZXMoRElGRl9URVNUX0RBVEEpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHsKLSAgICAgICAgICAgICAgICAnY2Nfc2V0Jzogc2V0KFsnYWJhcnRoQHdlYmtp
dC5vcmcnXSksCi0gICAgICAgICAgICAgICAgJ21lc3NhZ2VzJzogc2V0KCksCi0gICAgICAgICAg
ICAgICAgfSwgY2Nfc2V0X2FuZF9tZXNzYWdlcykKKyAgICAgICAgICAgICAgICAnY2NfbGlzdCc6
IFsnYWJhcnRoQHdlYmtpdC5vcmcnXSwKKyAgICAgICAgICAgICAgICAnbWVzc2FnZXMnOiBbXSwK
KyAgICAgICAgICAgICAgICB9LCBjY19hbmRfbWVzc2FnZXMpCiAKICAgICBkZWYgdGVzdF9jb21w
bGV4X21hdGNoKHNlbGYpOgogICAgICAgICB3YXRjaF9saXN0ID0gc2VsZi5fd2F0Y2hfbGlzdF9w
YXJzZXIucGFyc2UoCkBAIC0yMTEsOCArMjExLDggQEAgY2xhc3MgV2F0Y2hMaXN0VGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAnICAgICAgICAiV2F0Y2hMaXN0MiI6IFsiVGhp
cyBpcyBhIHRlc3QgbWVzc2FnZS4iXSwnCiAgICAgICAgICAgICAnICAgIH0sJwogICAgICAgICAg
ICAgJ30nKQotICAgICAgICBjY19zZXRfYW5kX21lc3NhZ2VzID0gd2F0Y2hfbGlzdC5kZXRlcm1p
bmVfY2Nfc2V0X2FuZF9tZXNzYWdlcyhESUZGX1RFU1RfREFUQSkKKyAgICAgICAgY2NfYW5kX21l
c3NhZ2VzID0gd2F0Y2hfbGlzdC5kZXRlcm1pbmVfY2NfYW5kX21lc3NhZ2VzKERJRkZfVEVTVF9E
QVRBKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyh7Ci0gICAgICAgICAgICAgICAgJ2NjX3Nl
dCc6IHNldChbJ2VyaWNAd2Via2l0Lm9yZyddKSwKLSAgICAgICAgICAgICAgICAnbWVzc2FnZXMn
OiBzZXQoWyJUaGlzIGlzIGEgdGVzdCBtZXNzYWdlLiJdKSwKLSAgICAgICAgICAgICAgICB9LCBj
Y19zZXRfYW5kX21lc3NhZ2VzKQorICAgICAgICAgICAgICAgICdjY19saXN0JzogWydlcmljQHdl
YmtpdC5vcmcnXSwKKyAgICAgICAgICAgICAgICAnbWVzc2FnZXMnOiBbIlRoaXMgaXMgYSB0ZXN0
IG1lc3NhZ2UuIl0sCisgICAgICAgICAgICAgICAgfSwgY2NfYW5kX21lc3NhZ2VzKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL19faW5pdF9fLnB5CmluZGV4IDYx
OTBmMTgxNmFlOTY2NGVhODQ0NmY2NTFjOTFkMDVmOTA3Y2NhM2MuLjM4MzY5NDdmYWI4OGQ3YmQx
ODRlOWYwODRkODdhNGYzOGIzNzJhOGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvdG9vbC9jb21tYW5kcy9fX2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rvb2wvY29tbWFuZHMvX19pbml0X18ucHkKQEAgLTEsNiArMSw3IEBACiAjIFJlcXVpcmVkIGZv
ciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKIAogZnJv
bSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFkZHVzZXJzdG9ncm91cHMgaW1wb3J0IEFkZFVzZXJz
VG9Hcm91cHMKK2Zyb20gd2Via2l0cHkudG9vbC5jb21tYW5kcy5hcHBseXdhdGNobGlzdGxvY2Fs
IGltcG9ydCBBcHBseVdhdGNoTGlzdExvY2FsCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMu
YnVnZm9ydGVzdCBpbXBvcnQgQnVnRm9yVGVzdAogZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRz
LmJ1Z3NlYXJjaCBpbXBvcnQgQnVnU2VhcmNoCiBmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMu
ZG93bmxvYWQgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9v
bC9jb21tYW5kcy9hcHBseXdhdGNobGlzdGxvY2FsLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90b29sL2NvbW1hbmRzL2FwcGx5d2F0Y2hsaXN0bG9jYWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTY1NmFi
M2E1YTc5MjdiZjRiODcxYzJhOGIzZmFkYjBmZGQ3MWE2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9hcHBseXdhdGNobGlzdGxvY2FsLnB5
CkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoK
KyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdlYmtpdHB5LnRvb2wu
Y29tbWFuZHMuYWJzdHJhY3RzZXF1ZW5jZWRjb21tYW5kIGltcG9ydCBBYnN0cmFjdFNlcXVlbmNl
ZENvbW1hbmQKK2Zyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgc3RlcHMKKworCitjbGFzcyBBcHBs
eVdhdGNoTGlzdExvY2FsKEFic3RyYWN0U2VxdWVuY2VkQ29tbWFuZCk6CisgICAgbmFtZSA9ICJh
cHBseS13YXRjaGxpc3QtbG9jYWwiCisgICAgaGVscF90ZXh0ID0gIkFwcGxpZXMgdGhlIHdhdGNo
bGlzdCB0byBsb2NhbCBjaGFuZ2VzLiIKKyAgICBzdGVwcyA9IFsKKyAgICAgICAgc3RlcHMuQXBw
bHlXYXRjaExpc3QsCisgICAgXQorICAgIGxvbmdfaGVscCA9ICIiIiJBcHBsaWVzIHRoZSB3YXRj
aGxpc3QgdG8gbG9jYWwgY2hhbmdlcy4KK1RoZSByZXN1bHRzIGlzIGxvZ2dlZCBidXQgbm90IGFw
cGxpZWQgdG8gYW55IGJ1Zy4gVGhpcyBtYXkgYmUgdXNlZCB0byB0cnkgb3V0IGEgd2F0Y2hsaXN0
IGNoYW5nZS4iIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21t
YW5kcy9hcHBseXdhdGNobGlzdGxvY2FsX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL2NvbW1hbmRzL2FwcGx5d2F0Y2hsaXN0bG9jYWxfdW5pdHRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTk1YmNkNmIyOWUyN2ViMGIwYWE1ZDU1YTg4NGRhZDMwMjE3ODZlMwotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9hcHBseXdhdGNo
bGlzdGxvY2FsX3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChjKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisj
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Citmcm9tIHdlYmtpdHB5LnRvb2wuY29tbWFuZHMuY29tbWFuZHRlc3QgaW1wb3J0IENvbW1hbmRz
VGVzdAorZnJvbSB3ZWJraXRweS50b29sLmNvbW1hbmRzLmFwcGx5d2F0Y2hsaXN0bG9jYWwgaW1w
b3J0IEFwcGx5V2F0Y2hMaXN0TG9jYWwKKworCitjbGFzcyBBcHBseVdhdGNoTGlzdExvY2FsVGVz
dChDb21tYW5kc1Rlc3QpOgorICAgIGRlZiB0ZXN0X2FyZ3NfcGFyc2luZyhzZWxmKToKKyAgICAg
ICAgZXhwZWN0ZWRfc3RkZXJyID0gIk1vY2tXYXRjaExpc3Q6IGRldGVybWluZV9jY19hbmRfbWVz
c2FnZXNcbiIKKyAgICAgICAgc2VsZi5hc3NlcnRfZXhlY3V0ZV9vdXRwdXRzKEFwcGx5V2F0Y2hM
aXN0TG9jYWwoKSwgWyItZyAyZWQ2ZiJdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJy
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25s
b2FkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkLnB5
CmluZGV4IDE4ZTIwMzk4ZTZhNDc5NGNhMTUwMWIwNjMyM2ZhOGQzODE5MDc5M2MuLjIzZWJmODk5
MDgzZjRlYjAyMDk1MjE4MGFlOTYxMTFlNWMxMWZjZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZC5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWQucHkKQEAgLTEsNCArMSw0IEBACi0jIENv
cHlyaWdodCAoYykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5
cmlnaHQgKGMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMg
Q29weXJpZ2h0IChjKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yNTAsNiArMjUwLDIwIEBAIGNsYXNzIEFwcGx5RnJvbUJ1ZyhBYnN0cmFj
dFBhdGNoQXBwbHlpbmdDb21tYW5kLCBQcm9jZXNzQnVnc01peGluKToKICAgICBzaG93X2luX21h
aW5faGVscCA9IFRydWUKIAogCitjbGFzcyBBcHBseVdhdGNoTGlzdChBYnN0cmFjdFBhdGNoU2Vx
dWVuY2luZ0NvbW1hbmQsIFByb2Nlc3NBdHRhY2htZW50c01peGluKToKKyAgICBuYW1lID0gImFw
cGx5LXdhdGNobGlzdCIKKyAgICBoZWxwX3RleHQgPSAiQXBwbGllcyB0aGUgd2F0Y2hsaXN0IHRv
IHRoZSBzcGVjaWZpZWQgYXR0YWNobWVudHMuIgorICAgIGFyZ3VtZW50X25hbWVzID0gIkFUVEFD
SE1FTlRfSUQgW0FUVEFDSE1FTlRfSURTXSIKKyAgICBtYWluX3N0ZXBzID0gWworICAgICAgICBz
dGVwcy5DbGVhbldvcmtpbmdEaXJlY3RvcnksCisgICAgICAgIHN0ZXBzLlVwZGF0ZSwKKyAgICAg
ICAgc3RlcHMuQXBwbHlQYXRjaCwKKyAgICAgICAgc3RlcHMuQXBwbHlXYXRjaExpc3QsCisgICAg
XQorICAgIGxvbmdfaGVscCA9ICIiIiJBcHBsaWVzIHRoZSB3YXRjaGxpc3QgdG8gdGhlIHNwZWNp
ZmllZCBhdHRhY2htZW50cy4KK0Rvd25sb2FkcyB0aGUgYXR0YWNobWVudCwgYXBwbGllcyBpdCBs
b2NhbGx5LCBydW5zIHRoZSB3YXRjaGxpc3QgYWdhaW5zdCBpdCwgYW5kIHVwZGF0ZXMgdGhlIGJ1
ZyB3aXRoIHRoZSByZXN1bHQuIiIiCisKKwogY2xhc3MgQWJzdHJhY3RQYXRjaExhbmRpbmdDb21t
YW5kKEFic3RyYWN0UGF0Y2hTZXF1ZW5jaW5nQ29tbWFuZCk6CiAgICAgbWFpbl9zdGVwcyA9IFsK
ICAgICAgICAgc3RlcHMuQ2xlYW5Xb3JraW5nRGlyZWN0b3J5LApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL2NvbW1hbmRzL2Rvd25sb2FkX3VuaXR0ZXN0LnB5Cmlu
ZGV4IDUxNDE5Mzc0MThkOTBjNjk0OWNmZTlkZDFhMjgzY2U2YmVmZDNjNmMuLjYyMjYyMDgxMjkw
MzJmYTFjMzEzMjY2ZjBjY2VhNWExYTcwZjY5NjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdG9vbC9jb21tYW5kcy9kb3dubG9hZF91bml0dGVzdC5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvY29tbWFuZHMvZG93bmxvYWRfdW5pdHRlc3QucHkKQEAgLTEs
NCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTEwNSw2ICsx
MDUsMTQgQEAgY2xhc3MgRG93bmxvYWRDb21tYW5kc1Rlc3QoQ29tbWFuZHNUZXN0KToKICAgICAg
ICAgZXhwZWN0ZWRfc3RkZXJyID0gIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5XG4yIHJldmll
d2VkIHBhdGNoZXMgZm91bmQgb24gYnVnIDUwMDAwLlxuUHJvY2Vzc2luZyAyIHBhdGNoZXMgZnJv
bSAxIGJ1Zy5cblByb2Nlc3NpbmcgcGF0Y2ggMTAwMDAgZnJvbSBidWcgNTAwMDAuXG5Qcm9jZXNz
aW5nIHBhdGNoIDEwMDAxIGZyb20gYnVnIDUwMDAwLlxuIgogICAgICAgICBzZWxmLmFzc2VydF9l
eGVjdXRlX291dHB1dHMoQXBwbHlGcm9tQnVnKCksIFs1MDAwMF0sIG9wdGlvbnM9b3B0aW9ucywg
ZXhwZWN0ZWRfc3RkZXJyPWV4cGVjdGVkX3N0ZGVycikKIAorICAgIGRlZiB0ZXN0X2FwcGx5X3dh
dGNoX2xpc3Qoc2VsZik6CisgICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICIiIlByb2Nlc3Npbmcg
MSBwYXRjaCBmcm9tIDEgYnVnLgorVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkKK01PQ0sgcnVu
X2FuZF90aHJvd19pZl9mYWlsOiBbJ21vY2stdXBkYXRlLXdlYmtpdCddLCBjd2Q9L21vY2stY2hl
Y2tvdXRcblByb2Nlc3NpbmcgcGF0Y2ggMTAwMDAgZnJvbSBidWcgNTAwMDAuCitNb2NrV2F0Y2hM
aXN0OiBkZXRlcm1pbmVfY2NfYW5kX21lc3NhZ2VzCisiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRf
ZXhlY3V0ZV9vdXRwdXRzKEFwcGx5V2F0Y2hMaXN0KCksIFsxMDAwMF0sIG9wdGlvbnM9c2VsZi5f
ZGVmYXVsdF9vcHRpb25zKCksIGV4cGVjdGVkX3N0ZGVycj1leHBlY3RlZF9zdGRlcnIsIHRvb2w9
TW9ja1Rvb2wobG9nX2V4ZWN1dGl2ZT1UcnVlKSkKKwogICAgIGRlZiB0ZXN0X2xhbmQoc2VsZik6
CiAgICAgICAgIGV4cGVjdGVkX3N0ZGVyciA9ICJCdWlsZGluZyBXZWJLaXRcblJ1bm5pbmcgUHl0
aG9uIHVuaXQgdGVzdHNcblJ1bm5pbmcgUGVybCB1bml0IHRlc3RzXG5SdW5uaW5nIEJpbmRpbmdz
IHRlc3RzXG5SdW5uaW5nIEphdmFTY3JpcHRDb3JlIHRlc3RzXG5SdW5uaW5nIHJ1bi13ZWJraXQt
dGVzdHNcbkNvbW1pdHRlZCByNDk4MjQ6IDxodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC80OTgyND5cblVwZGF0aW5nIGJ1ZyA1MDAwMFxuIgogICAgICAgICBtb2NrX3Rvb2wgPSBNb2Nr
VG9vbCgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvbW9ja3Rvb2wucHkKaW5kZXggNjI5ZGNi
ZmRhMGM1MmM0ODVhYzNiMDAwOWFmNDY4N2E1NjA2MzdlMi4uYTAzZTEyNzU4YmMxNDAyMzk2MTEy
MjRjMzRmMTM5ZmI0NTUwMjEwYyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90
b29sL21vY2t0b29sLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9tb2NrdG9v
bC5weQpAQCAtODA1LDYgKzgwNSwxMiBAQCBjbGFzcyBNb2NrUGxhdGZvcm1JbmZvKG9iamVjdCk6
CiAgICAgICAgIHJldHVybiAiTW9ja1BsYXRmb3JtIDEuMCIKIAogCitjbGFzcyBNb2NrV2F0Y2hM
aXN0KG9iamVjdCk6CisgICAgZGVmIGRldGVybWluZV9jY19hbmRfbWVzc2FnZXMoc2VsZiwgZGlm
Zik6CisgICAgICAgIGxvZygiTW9ja1dhdGNoTGlzdDogZGV0ZXJtaW5lX2NjX2FuZF9tZXNzYWdl
cyIpCisgICAgICAgIHJldHVybiB7J2NjX2xpc3QnOiBbJ2xldmluQGNocm9taXVtLm9yZyddLCAn
bWVzc2FnZXMnOiBbJ01lc3NhZ2UxLicsICdNZXNzYWdlMi4nXSwgfQorCisKIGNsYXNzIE1vY2tX
b3Jrc3BhY2Uob2JqZWN0KToKICAgICBkZWYgZmluZF91bnVzZWRfZmlsZW5hbWUoc2VsZiwgZGly
ZWN0b3J5LCBuYW1lLCBleHRlbnNpb24sIHNlYXJjaF9saW1pdD0xMCk6CiAgICAgICAgIHJldHVy
biAiJXMvJXMuJXMiICUgKGRpcmVjdG9yeSwgbmFtZSwgZXh0ZW5zaW9uKQpAQCAtODM5LDYgKzg0
NSw3IEBAIGNsYXNzIE1vY2tUb29sKG9iamVjdCk6CiAgICAgICAgIHNlbGYuaXJjX3Bhc3N3b3Jk
ID0gIk1PQ0sgaXJjIHBhc3N3b3JkIgogICAgICAgICBzZWxmLnBvcnRfZmFjdG9yeSA9IE1vY2tQ
b3J0RmFjdG9yeSgpCiAgICAgICAgIHNlbGYucGxhdGZvcm0gPSBNb2NrUGxhdGZvcm1JbmZvKCkK
KyAgICAgICAgc2VsZi5fd2F0Y2hfbGlzdCA9IE1vY2tXYXRjaExpc3QoKQogCiAgICAgZGVmIHNj
bShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NjbQpAQCAtODQ5LDYgKzg1Niw5IEBAIGNs
YXNzIE1vY2tUb29sKG9iamVjdCk6CiAgICAgZGVmIGNocm9taXVtX2J1aWxkYm90KHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fY2hyb21pdW1fYnVpbGRib3QKIAorICAgIGRlZiB3YXRjaF9s
aXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2F0Y2hfbGlzdAorCiAgICAgZGVmIGVu
c3VyZV9pcmNfY29ubmVjdGVkKHNlbGYsIGRlbGVnYXRlKToKICAgICAgICAgaWYgbm90IHNlbGYu
X2lyYzoKICAgICAgICAgICAgIHNlbGYuX2lyYyA9IE1vY2tJUkMoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS90b29sL3N0ZXBzL19faW5pdF9fLnB5CmluZGV4IDIwM2U2OTQ3OTU3YTMxM2M0
YjZmMTk5ODBlNjc4NWU1MjMwMGZiOGUuLjI3NzA2YWZmOThjZDAwNWE0ZjZkOGI4YzZkZmE0NTE5
MGUxMzU4YzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9f
X2luaXRfXy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvX19pbml0
X18ucHkKQEAgLTI5LDYgKzI5LDcgQEAKICMgRklYTUU6IElzIHRoaXMgdGhlIHJpZ2h0IHdheSB0
byBkbyB0aGlzPwogZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLmFwcGx5cGF0Y2ggaW1wb3J0IEFw
cGx5UGF0Y2gKIGZyb20gd2Via2l0cHkudG9vbC5zdGVwcy5hcHBseXBhdGNod2l0aGxvY2FsY29t
bWl0IGltcG9ydCBBcHBseVBhdGNoV2l0aExvY2FsQ29tbWl0Citmcm9tIHdlYmtpdHB5LnRvb2wu
c3RlcHMuYXBwbHl3YXRjaGxpc3QgaW1wb3J0IEFwcGx5V2F0Y2hMaXN0CiBmcm9tIHdlYmtpdHB5
LnRvb2wuc3RlcHMuYXR0YWNodG9idWcgaW1wb3J0IEF0dGFjaFRvQnVnCiBmcm9tIHdlYmtpdHB5
LnRvb2wuc3RlcHMuYnVpbGQgaW1wb3J0IEJ1aWxkCiBmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMu
Y2hlY2tzdHlsZSBpbXBvcnQgQ2hlY2tTdHlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS90b29sL3N0ZXBzL2FwcGx5d2F0Y2hsaXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90b29sL3N0ZXBzL2FwcGx5d2F0Y2hsaXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI4YzM2NDkxNzk2
YTM1YzY4OGUxMzNiOTEwMGJkZmE0NWI1NjMwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L3Rvb2wvc3RlcHMvYXBwbHl3YXRjaGxpc3QucHkKQEAgLTAsMCArMSw1
NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBv
cnQgbG9ndXRpbHMKK2Zyb20gd2Via2l0cHkudG9vbC5zdGVwcy5hYnN0cmFjdHN0ZXAgaW1wb3J0
IEFic3RyYWN0U3RlcAorZnJvbSB3ZWJraXRweS50b29sLnN0ZXBzLm9wdGlvbnMgaW1wb3J0IE9w
dGlvbnMKKworCitfbG9nID0gbG9ndXRpbHMuZ2V0X2xvZ2dlcihfX2ZpbGVfXykKKworCitjbGFz
cyBBcHBseVdhdGNoTGlzdChBYnN0cmFjdFN0ZXApOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBvcHRpb25zKGNscyk6CisgICAgICAgIHJldHVybiBBYnN0cmFjdFN0ZXAub3B0aW9ucygpICsg
WworICAgICAgICAgICAgT3B0aW9ucy5naXRfY29tbWl0LAorICAgICAgICBdCisKKyAgICBkZWYg
cnVuKHNlbGYsIHN0YXRlKToKKyAgICAgICAgZGlmZiA9IHNlbGYuY2FjaGVkX2xvb2t1cChzdGF0
ZSwgJ2RpZmYnKQorICAgICAgICBidWdfaWQgPSBzdGF0ZS5nZXQoImJ1Z19pZCIpCisKKyAgICAg
ICAgY2NfYW5kX21lc3NhZ2VzID0gc2VsZi5fdG9vbC53YXRjaF9saXN0KCkuZGV0ZXJtaW5lX2Nj
X2FuZF9tZXNzYWdlcyhkaWZmKQorICAgICAgICBjY19saXN0ID0gY2NfYW5kX21lc3NhZ2VzWydj
Y19saXN0J10KKyAgICAgICAgY29tbWVudF90ZXh0ID0gJ1xuXG4nLmpvaW4oY2NfYW5kX21lc3Nh
Z2VzWydtZXNzYWdlcyddKQorICAgICAgICBpZiBidWdfaWQ6CisgICAgICAgICAgICBzZWxmLl90
b29sLmJ1Z3MucG9zdF9jb21tZW50X3RvX2J1ZyhidWdfaWQsIGNvbW1lbnRfdGV4dCwgY2NfbGlz
dCkKKyAgICAgICAgICAgIGxvZ19yZXN1bHQgPSBfbG9nLmRlYnVnCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBfbG9nLmluZm8oJ05vIGJ1ZyB3YXMgdXBkYXRlZCBiZWNhdXNlIG5vIGlkIHdh
cyBnaXZlbi4nKQorICAgICAgICAgICAgbG9nX3Jlc3VsdCA9IF9sb2cuaW5mbworICAgICAgICBs
b2dfcmVzdWx0KCdSZXN1bHQgb2Ygd2F0Y2hsaXN0OiBjYyAiJXMiIG1lc3NhZ2VzICIlcyInICUg
KCcsICcuam9pbihjY19saXN0KSwgY29tbWVudF90ZXh0KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9hcHBseXdhdGNobGlzdF91bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvdG9vbC9zdGVwcy9hcHBseXdhdGNobGlzdF91bml0dGVzdC5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44ZTU3YTU3ZTg2OGI4Njc5YmFmMzExODU5YWQ1MTIwN2UyODdiYTQwCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90b29sL3N0ZXBzL2FwcGx5
d2F0Y2hsaXN0X3VuaXR0ZXN0LnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLm91dHB1dGNhcHR1
cmUgaW1wb3J0IE91dHB1dENhcHR1cmUKK2Zyb20gd2Via2l0cHkudG9vbC5tb2NrdG9vbCBpbXBv
cnQgTW9ja09wdGlvbnMsIE1vY2tUb29sCitmcm9tIHdlYmtpdHB5LnRvb2wuc3RlcHMuYXBwbHl3
YXRjaGxpc3QgaW1wb3J0IEFwcGx5V2F0Y2hMaXN0CisKKworY2xhc3MgQXBwbHlXYXRjaExpc3RU
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hcHBseV93YXRjaF9saXN0X2xv
Y2FsKHNlbGYpOgorICAgICAgICBjYXB0dXJlID0gT3V0cHV0Q2FwdHVyZSgpCisgICAgICAgIHN0
ZXAgPSBBcHBseVdhdGNoTGlzdChNb2NrVG9vbChsb2dfZXhlY3V0aXZlPVRydWUpLCBNb2NrT3B0
aW9ucygpKQorICAgICAgICBzdGF0ZSA9IHsKKyAgICAgICAgICAgICdidWdfaWQnOiAnMTQzOTcn
LAorICAgICAgICAgICAgJ2RpZmYnOiAnVGhlIGRpZmYnLAorICAgICAgICB9CisgICAgICAgIGV4
cGVjdGVkX3N0ZGVyciA9ICIiIk1vY2tXYXRjaExpc3Q6IGRldGVybWluZV9jY19hbmRfbWVzc2Fn
ZXMKK01PQ0sgYnVnIGNvbW1lbnQ6IGJ1Z19pZD0xNDM5NywgY2M9WydsZXZpbkBjaHJvbWl1bS5v
cmcnXQorLS0tIEJlZ2luIGNvbW1lbnQgLS0tCitNZXNzYWdlMS4KKworTWVzc2FnZTIuCistLS0g
RW5kIGNvbW1lbnQgLS0tCisKKyIiIgorICAgICAgICBjYXB0dXJlLmFzc2VydF9vdXRwdXRzKHNl
bGYsIHN0ZXAucnVuLCBbc3RhdGVdLCBleHBlY3RlZF9zdGRlcnI9ZXhwZWN0ZWRfc3RkZXJyKQo=
</data>
<flag name="review"
          id="106370"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>