<?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>21073</bug_id>
          
          <creation_ts>2008-09-24 14:02:52 -0700</creation_ts>
          <short_desc>JS Debugger doesn&apos;t handle &apos;for&apos; loops correctly</short_desc>
          <delta_ts>2009-08-17 13:22:27 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin McCullough">kmccullough</reporter>
          <assigned_to name="Timothy Hatcher">timothy</assigned_to>
          <cc>achicu</cc>
    
    <cc>olaru</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>92581</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2008-09-24 14:02:52 -0700</bug_when>
    <thetext>9/24/08 1:55 PM Kevin McCullough:
* SUMMARY
The behavior of VS and XCode is as follows.

Assume a breakpoint is on a line of code that contains a single &apos;for&apos; loop with all three statements; the initializer, condition, and increment.
1) When execution first comes to the for loop, it breaks and none of the statements have executed yet
2) If the user chooses to continue, then the breakpoint is never hit again and execution does not break again
3) If the user chooses to step over, then execution goes to the next line (so the initializer and the condition execute)
4) If the user chooses to step into, then execution goes into the first statement (initializer) and then the second (condition)
5) If the user steps through the loop and back to the line with the &apos;for&apos; on it, they can step into the statements as they execute (i.e. the increment and condition)

Currently we support 1 and 2 because &apos;for&apos; loops emit a debug hook at the beginning of emit code; however emitting a debug hook for each statement will solve 3-5, but regress on 1 and 2 since we will break each time we hit any statement on that line.

Tim had a suggestion where we need to differentiate debug hooks between breaking per-line and breaking per-statement, currently we only support breaking per statement.

&lt;rdar://problem/6243923&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92905</commentid>
    <comment_count>1</comment_count>
      <attachid>23848</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2008-09-26 04:48:50 -0700</bug_when>
    <thetext>Created attachment 23848
The patch is a fix for correctly emitting debugging hooks in nodes.cpp. 

After looking in the grammar.y file I think you can have a better level of control of when the debugger must stop. It&apos;s as simple as adding emitDebugHooks in each debuggable statement emitCode method. That will, also, remove the need for two more virtual function calls (isBlock and isLoop).

Also changed the position of some debug hooks in ForNode, ForInNode and DoWhileNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92982</commentid>
    <comment_count>2</comment_count>
      <attachid>23848</attachid>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2008-09-26 15:23:55 -0700</bug_when>
    <thetext>Comment on attachment 23848
The patch is a fix for correctly emitting debugging hooks in nodes.cpp. 

Looks good however be aware that this will not fully fix the issue described in this bug.

It will keep #1 &amp; #3, but regress #2 in that subsequent &quot;continues&quot; will hit the break point each time through the loop, where in VS and XCode it would not.

It will improve #4 &amp; #5 in that you can now step over to the line with the conditional of the for loop but you cannot step into the initialize or increment statements of the for loop.

This patch would be fine without fixing all of these issues, however it would also be good if we had a manual test that exercised each of the statement nodes so that we could see the behavior and check against regressions.

Please make a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109506</commentid>
    <comment_count>3</comment_count>
      <attachid>27611</attachid>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-02-12 10:42:53 -0800</bug_when>
    <thetext>Created attachment 27611
updated patch including manual tests

This is the above patch, submitted by Alex, brought up to date with the repository code.
It also includes four manual tests for the &apos;for&apos;, &apos;for-in&apos;, &apos;while&apos; and &apos;do-while&apos; loops.

The only above step that regresses is #2, as would be expected considering the statement based debug hooks and the line based breakpoints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109512</commentid>
    <comment_count>4</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2009-02-12 11:04:28 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; The only above step that regresses is #2, as would be expected considering the
&gt; statement based debug hooks and the line based breakpoints.
&gt; 

So when a user hits continue on a for loop, do they have to press it 2 times (either once for the initializer and once for the conditional, or once for the increment and once for the conditional)?

I would hate for a user to have to press continue 20 times for a loop that only executes 10 times.  Especially if they are used to the behavior where they would only have to press continue once; after the first time the breakpoint is hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109520</commentid>
    <comment_count>5</comment_count>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-02-12 11:31:56 -0800</bug_when>
    <thetext>&gt; So when a user hits continue on a for loop, do they have to press it 2 times
&gt; (either once for the initializer and once for the conditional, or once for the
&gt; increment and once for the conditional)?

No! It simply regresses #2 - when hitting continue, the debugger will pause again on the &apos;for&apos; line, after going through the loop once. This is opposed to the expected behavior that the breakpoint on the &apos;for&apos; is not hit again.

Otherwise put, if the loop executes 10 time, the user has to click continue 10 times. The user should only have to click continue once to skip the breakpoint at the beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109562</commentid>
    <comment_count>6</comment_count>
    <who name="Kevin McCullough">kmccullough</who>
    <bug_when>2009-02-12 14:39:35 -0800</bug_when>
    <thetext>&gt; Otherwise put, if the loop executes 10 time, the user has to click continue 10
&gt; times. The user should only have to click continue once to skip the breakpoint
&gt; at the beginning.
&gt; 

I actually prefer that behavior in other IDEs but I don&apos;t get to call the shots.  Does the subsequent breakpoints all happen before any statement in the &apos;for&apos; loop?  I.E. before the condition or increment or does it occur between the increment and condition statements?

r+ on this btw.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109628</commentid>
    <comment_count>7</comment_count>
    <who name="Horia Olaru">olaru</who>
    <bug_when>2009-02-12 23:34:22 -0800</bug_when>
    <thetext>&gt; I actually prefer that behavior in other IDEs but I don&apos;t get to call the
&gt; shots.  Does the subsequent breakpoints all happen before any statement in the
&gt; &apos;for&apos; loop?  I.E. before the condition or increment or does it occur between
&gt; the increment and condition statements?

Yes! You can step into first the increment, and then the condition. Stepping over will step over both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111723</commentid>
    <comment_count>8</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-03-01 11:36:14 -0800</bug_when>
    <thetext>Landed in r41342.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23848</attachid>
            <date>2008-09-26 04:48:50 -0700</date>
            <delta_ts>2008-09-26 15:23:55 -0700</delta_ts>
            <desc>The patch is a fix for correctly emitting debugging hooks in nodes.cpp. </desc>
            <filename>patch_debug_hooks2.txt</filename>
            <type>text/plain</type>
            <size>13263</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM2OTUzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMDgtMDktMjYgIEFsZXhhbmRy
dSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCQlCeSBsb29raW5nIGluIGdyYW1tYXIu
eSB0aGVyZSBhcmUgb25seSBhIGZldyB0eXBlcyBvZiBzdGF0ZW1lbnRzIG5vZGUKKwkJb24gd2hp
Y2ggdGhlIGRlYnVnZ2VyIHNob3VsZCBzdG9wLiAKKwkJCisJCVJlbW92ZWQgaXNCbG9jayBhbmQg
aXNMb29wIHZpcnR1YWwgY2FsbHMuIE5vIG5lZWQgdG8gZW1pdCBkZWJ1ZyBob29rcyBpbiB0aGUg
InN0YXRlbWVudExpc3RFbWl0Q29kZSIKKwkJbWV0aG9kIGFzIGxvbmcgYXMgdGhlIG5lY2Vzc2Fy
eSBob29rcyBjYW4gYmUgYWRkZWQgaW4gZWFjaCAiZW1pdENvZGUiLiAKKwkJCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoga2pzL25vZGVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q29uc3RTdGF0ZW1lbnROb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6
OnN0YXRlbWVudExpc3RFbWl0Q29kZSk6CisgICAgICAgIChKU0M6OkVtcHR5U3RhdGVtZW50Tm9k
ZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUp
OgorICAgICAgICAoSlNDOjpWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChK
U0M6OklmTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpJZkVsc2VOb2RlOjplbWl0Q29k
ZSk6CisgICAgICAgIChKU0M6OkRvV2hpbGVOb2RlOjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6
OldoaWxlTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2RlOjplbWl0Q29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdENvZGUpOgorICAgICAgICAoSlNDOjpDb250
aW51ZU5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2RlOjplbWl0Q29kZSk6
CisgICAgICAgIChKU0M6OlJldHVybk5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEpTQzo6V2l0
aE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEpTQzo6U3dpdGNoTm9kZTo6ZW1pdENvZGUpOgor
ICAgICAgICAoSlNDOjpMYWJlbE5vZGU6OmVtaXRDb2RlKToKKyAgICAgICAgKEpTQzo6VGhyb3dO
b2RlOjplbWl0Q29kZSk6CisgICAgICAgIChKU0M6OlRyeU5vZGU6OmVtaXRDb2RlKToKKyAgICAg
ICAgKiBranMvbm9kZXMuaDoKKyAgICAgICAgKEpTQzo6U3RhdGVtZW50Tm9kZTo6KToKKwogMjAw
OC0wOS0yNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL25v
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvbm9kZXMuY3BwCShyZXZp
c2lvbiAzNjg4MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNzQsNiArMTA3NCw3IEBAIFJlZ2lzdGVySUQqIENvbnN0RGVjbE5vZGU6OmVtaXRD
b2RlKENvZGUKIAogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQogeworICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7
ICAgIAogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobV9uZXh0LmdldCgpKTsKIH0KIApA
QCAtMTA4NCw4ICsxMDg1LDYgQEAgc3RhdGljIGlubGluZSBSZWdpc3RlcklEKiBzdGF0ZW1lbnRM
aXN0RQogICAgIFN0YXRlbWVudFZlY3Rvcjo6aXRlcmF0b3IgZW5kID0gc3RhdGVtZW50cy5lbmQo
KTsKICAgICBmb3IgKFN0YXRlbWVudFZlY3Rvcjo6aXRlcmF0b3IgaXQgPSBzdGF0ZW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTdGF0ZW1lbnROb2RlKiBuID0gaXQt
PmdldCgpOwotICAgICAgICBpZiAoIW4tPmlzTG9vcCgpKQotICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG4tPmZpcnN0TGluZSgpLCBuLT5s
YXN0TGluZSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbik7CiAgICAgfQog
ICAgIHJldHVybiAwOwpAQCAtMTEzNCw4ICsxMTMzLDkgQEAgUmVnaXN0ZXJJRCogQmxvY2tOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
RW1wdHlTdGF0ZW1lbnROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1SZWdpc3Rl
cklEKiBFbXB0eVN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiBkc3QpCitSZWdpc3RlcklEKiBFbXB0eVN0YXRlbWVudE5vZGU6OmVtaXRDb2RlKENvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUo
KSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTE1Miw2ICsxMTUyLDcgQEAgUmVnaXN0ZXJJ
RCogRGVidWdnZXJTdGF0ZW1lbnROb2RlOjplbWl0QwogUmVnaXN0ZXJJRCogRXhwclN0YXRlbWVu
dE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewogICAgIEFTU0VSVChtX2V4cHIpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7ICAgIAogICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIuZ2V0KCkpOwogfQogCkBAIC0xMTYw
LDYgKzExNjEsNyBAQCBSZWdpc3RlcklEKiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUoCiBS
ZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqKQogewogICAgIEFTU0VSVChtX2V4cHIpOworICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExp
bmUoKSk7ICAgIAogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsK
IH0KIApAQCAtMTE2NywxNCArMTE2OSwxMyBAQCBSZWdpc3RlcklEKiBWYXJTdGF0ZW1lbnROb2Rl
OjplbWl0Q29kZShDCiAKIFJlZ2lzdGVySUQqIElmTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKKyAg
ICAKICAgICBSZWZQdHI8TGFiZWxJRD4gYWZ0ZXJUaGVuID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAKICAgICBSZWdpc3RlcklEKiBjb25kID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fY29uZGl0aW9u
LmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKGNvbmQsIGFmdGVyVGhlbi5n
ZXQoKSk7CiAKLSAgICBpZiAoIW1faWZCbG9jay0+aXNCbG9jaygpKQotICAgICAgICBnZW5lcmF0
b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9pZkJsb2NrLT5maXJzdExp
bmUoKSwgbV9pZkJsb2NrLT5sYXN0TGluZSgpKTsKLQogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShk
c3QsIG1faWZCbG9jay5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChhZnRlclRoZW4u
Z2V0KCkpOwogCkBAIC0xMTg0LDE1ICsxMTg1LDE0IEBAIFJlZ2lzdGVySUQqIElmTm9kZTo6ZW1p
dENvZGUoQ29kZUdlbmVyYXQKIAogUmVnaXN0ZXJJRCogSWZFbHNlTm9kZTo6ZW1pdENvZGUoQ29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGlu
ZSgpKTsKKyAgICAKICAgICBSZWZQdHI8TGFiZWxJRD4gYmVmb3JlRWxzZSA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbElEPiBhZnRlckVsc2UgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKIAogICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9j
b25kaXRpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYmVm
b3JlRWxzZS5nZXQoKSk7CiAKLSAgICBpZiAoIW1faWZCbG9jay0+aXNCbG9jaygpKQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9pZkJsb2Nr
LT5maXJzdExpbmUoKSwgbV9pZkJsb2NrLT5sYXN0TGluZSgpKTsKLQogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1faWZCbG9jay5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGFm
dGVyRWxzZS5nZXQoKSk7CiAKQEAgLTEyMTAsMTIgKzEyMTAsMTAgQEAgUmVnaXN0ZXJJRCogSWZF
bHNlTm9kZTo6ZW1pdENvZGUoQ29kZUdlbgogUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJl
ZlB0cjxMYWJlbElEPiB0b3BPZkxvb3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHRvcE9mTG9vcC5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwog
Ci0gICAgaWYgKCFtX3N0YXRlbWVudC0+aXNCbG9jaygpKQotICAgICAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9zdGF0ZW1lbnQtPmZpcnN0TGluZSgp
LCBtX3N0YXRlbWVudC0+bGFzdExpbmUoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCh0b3BP
Zkxvb3AuZ2V0KCkpOwogCiAgICAgUmVmUHRyPExhYmVsSUQ+IGNvbnRpbnVlVGFyZ2V0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsSUQ+IGJyZWFrVGFyZ2V0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7CkBAIC0xMjQzLDkgKzEyNDEsNiBAQCBSZWdpc3RlcklEKiBXaGls
ZU5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAKICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoY29udGlu
dWVUYXJnZXQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgp
KTsKLQotICAgIGlmICghbV9zdGF0ZW1lbnQtPmlzQmxvY2soKSkKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fc3RhdGVtZW50LT5maXJzdExp
bmUoKSwgbV9zdGF0ZW1lbnQtPmxhc3RMaW5lKCkpOwogIAogICAgIGdlbmVyYXRvci5wdXNoSnVt
cENvbnRleHQoJm1fbGFiZWxTdGFjaywgY29udGludWVUYXJnZXQuZ2V0KCksIGJyZWFrVGFyZ2V0
LmdldCgpLCB0cnVlKTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudC5n
ZXQoKSk7CkBAIC0xMjY2LDggKzEyNjEsNiBAQCBSZWdpc3RlcklEKiBXaGlsZU5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lCiAKIFJlZ2lzdGVySUQqIEZvck5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7Ci0K
ICAgICBpZiAobV9leHByMSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGlnbm9yZWRSZXN1
bHQoKSwgbV9leHByMS5nZXQoKSk7CiAKQEAgLTEyODcsMTUgKzEyODAsMTQgQEAgUmVnaXN0ZXJJ
RCogRm9yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYQogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChiZWZvcmVDb25kaXRpb24uZ2V0KCkpOwogICAgIGlmIChtX2V4cHIyKSB7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwg
bGFzdExpbmUoKSk7CisKICAgICAgICAgUmVnaXN0ZXJJRCogY29uZCA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX2V4cHIyLmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGNv
bmQsIHRvcE9mTG9vcC5nZXQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKHRvcE9mTG9vcC5nZXQoKSk7CiAgICAgfQogCi0gICAgaWYgKCFtX3N0YXRlbWVudC0+
aXNCbG9jaygpKQotICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0
YXRlbWVudCwgbV9zdGF0ZW1lbnQtPmZpcnN0TGluZSgpLCBtX3N0YXRlbWVudC0+bGFzdExpbmUo
KSk7Ci0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGJyZWFrVGFyZ2V0LmdldCgpKTsKICAgICAK
ICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwpAQCAtMTM3NSwxOCArMTM2NywxNiBAQCBSZWdpc3Rl
cklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8oYXNzaWduTm9kZS0+ZGl2b3QoKSwgYXNzaWduTm9kZS0+c3RhcnRPZmZz
ZXQoKSwgYXNzaWduTm9kZS0+ZW5kT2Zmc2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdFB1
dEJ5VmFsKGJhc2UuZ2V0KCksIHN1YnNjcmlwdCwgcHJvcGVydHlOYW1lKTsKICAgICB9ICAgCi0g
ICAgCi0gICAgZ2VuZXJhdG9yLnB1c2hKdW1wQ29udGV4dCgmbV9sYWJlbFN0YWNrLCBjb250aW51
ZVRhcmdldC5nZXQoKSwgYnJlYWtUYXJnZXQuZ2V0KCksIHRydWUpOwotICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50LmdldCgpKTsKLSAgICBnZW5lcmF0b3IucG9wSnVtcENv
bnRleHQoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVt
ZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CiAKLSAgICBpZiAoIW1fc3RhdGVtZW50LT5p
c0Jsb2NrKCkpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3Rh
dGVtZW50LCBtX3N0YXRlbWVudC0+Zmlyc3RMaW5lKCksIG1fc3RhdGVtZW50LT5sYXN0TGluZSgp
KTsKKyAgICBnZW5lcmF0b3IucHVzaEp1bXBDb250ZXh0KCZtX2xhYmVsU3RhY2ssIGNvbnRpbnVl
VGFyZ2V0LmdldCgpLCBicmVha1RhcmdldC5nZXQoKSwgdHJ1ZSk7CisgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQuZ2V0KCkpOworICAgIGdlbmVyYXRvci5wb3BKdW1wQ29u
dGV4dCgpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChjb250aW51ZVRhcmdldC5nZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXROZXh0UHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSwgaXRlci5n
ZXQoKSwgbG9vcFN0YXJ0LmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxs
RXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoYnJlYWtUYXJnZXQuZ2V0KCkpOwogICAgIHJldHVybiBkc3Q7CiB9CkBAIC0x
Mzk2LDYgKzEzODYsOCBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
CiAvLyBFQ01BIDEyLjcKIFJlZ2lzdGVySUQqIENvbnRpbnVlTm9kZTo6ZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CisgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgp
KTsKKyAgICAKICAgICBpZiAoIWdlbmVyYXRvci5pbkNvbnRpbnVlQ29udGV4dCgpKQogICAgICAg
ICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBTeW50YXhFcnJvciwgIkludmFsaWQg
Y29udGludWUgc3RhdGVtZW50LiIpOwogCkBAIC0xNDIxLDYgKzE0MTMsOCBAQCBSZWdpc3RlcklE
KiBDb250aW51ZU5vZGU6OmVtaXRDb2RlKENvZGVHCiAvLyBFQ01BIDEyLjgKIFJlZ2lzdGVySUQq
IEJyZWFrTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKKyAgICAKICAgICBpZiAoIWdlbmVyYXRvci5p
bkp1bXBDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3Is
IFN5bnRheEVycm9yLCAiSW52YWxpZCBicmVhayBzdGF0ZW1lbnQuIik7CiAgICAgCkBAIC0xNDQ0
LDYgKzE0MzgsNyBAQCBSZWdpc3RlcklEKiBCcmVha05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAK
IFJlZ2lzdGVySUQqIFJldHVybk5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxF
eGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7ICAgIAogICAgIGlmIChn
ZW5lcmF0b3IuY29kZVR5cGUoKSAhPSBGdW5jdGlvbkNvZGUpCiAgICAgICAgIHJldHVybiBlbWl0
VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5bnRheEVycm9yLCAiSW52YWxpZCByZXR1cm4gc3RhdGVt
ZW50LiIpOwogICAgICAgICAKQEAgLTE0NjEsNiArMTQ1Niw4IEBAIFJlZ2lzdGVySUQqIFJldHVy
bk5vZGU6OmVtaXRDb2RlKENvZGVHZW4KIAogUmVnaXN0ZXJJRCogV2l0aE5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVy
YXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFz
dExpbmUoKSk7CisgICAgCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNjb3BlID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fZXhwci5nZXQoKSk7IC8vIHNjb3BlIG11c3QgYmUgcHJvdGVjdGVkIHVudGls
IHBvcHBlZAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9leHBy
ZXNzaW9uTGVuZ3RoLCAwKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1c2hTY29wZShzY29wZS5nZXQo
KSk7CkBAIC0xNjE1LDYgKzE2MTIsOCBAQCBSZWdpc3RlcklEKiBDYXNlQmxvY2tOb2RlOjplbWl0
Q29kZUZvckJsCiAKIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7Cisg
ICAgCiAgICAgUmVmUHRyPExhYmVsSUQ+IGJyZWFrVGFyZ2V0ID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9l
eHByLmdldCgpKTsKQEAgLTE2MzEsNiArMTYzMCw4IEBAIFJlZ2lzdGVySUQqIFN3aXRjaE5vZGU6
OmVtaXRDb2RlKENvZGVHZW4KIAogUmVnaXN0ZXJJRCogTGFiZWxOb2RlOjplbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5l
KCkpOworCiAgICAgaWYgKGdlbmVyYXRvci5qdW1wQ29udGV4dEZvckJyZWFrKG1fbGFiZWwpKQog
ICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2VuZXJhdG9yLCBTeW50YXhFcnJvciwgIkR1
cGxpY2F0ZWQgbGFiZWwgJXMgZm91bmQuIiwgbV9sYWJlbCk7CiAKQEAgLTE2NTEsNiArMTY1Miw4
IEBAIFJlZ2lzdGVySUQqIExhYmVsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmUKIAogUmVnaXN0ZXJJ
RCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRl
bWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOworICAgIAogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBleHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHByLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5k
T2Zmc2V0KTsKICAgICBnZW5lcmF0b3IuZW1pdFRocm93KGV4cHIuZ2V0KCkpOwpAQCAtMTY2MSw2
ICsxNjY0LDggQEAgUmVnaXN0ZXJJRCogVGhyb3dOb2RlOjplbWl0Q29kZShDb2RlR2VuZQogCiBS
ZWdpc3RlcklEKiBUcnlOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJl
Z2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0
ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOworICAgIAogICAgIFJlZlB0cjxM
YWJlbElEPiB0cnlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRy
PExhYmVsSUQ+IHRyeUVuZExhYmVsID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgUmVmUHRy
PExhYmVsSUQ+IGZpbmFsbHlTdGFydDsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCShyZXZpc2lvbiAzNjg4
MikKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIs
OSArMjMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwdXNoTGFi
ZWwoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEpTQ19GQVNUX0NBTEwgeyBtX2xhYmVsU3RhY2su
cHVzaChpZGVudCk7IH0KICAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KICAg
ICAgICAgdmlydHVhbCBib29sIGlzRW1wdHlTdGF0ZW1lbnQoKSBjb25zdCBKU0NfRkFTVF9DQUxM
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgdmlydHVhbCBib29sIGlzQmxvY2soKSBjb25z
dCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBp
c0xvb3AoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgcHJvdGVj
dGVkOgogICAgICAgICBMYWJlbFN0YWNrIG1fbGFiZWxTdGFjazsKIApAQCAtMTgzMiw3ICsxODI5
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgU3RhdGVtZW50VmVjdG9yJiBjaGlsZHJl
bigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCbG9j
aygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgU3RhdGVtZW50VmVjdG9yIG1fY2hpbGRyZW47CiAgICAgfTsKQEAgLTE5MzcsNyAr
MTkzMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFT
VF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvb3AoKSBjb25zdCBKU0NfRkFTVF9D
QUxMIHsgcmV0dXJuIHRydWU7IH0KICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U3RhdGVt
ZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9l
eHByOwpAQCAtMTk1NSw3ICsxOTUwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzTG9vcCgp
IGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgICAgICBSZWZQdHI8U3RhdGVt
ZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CkBAIC0xOTc3LDcgKzE5NzEsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHIxOwogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CkBAIC0xOTk0LDcgKzE5ODcsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50Owog
ICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1faW5pdDsK
</data>
<flag name="review"
          id="10740"
          type_id="1"
          status="-"
          setter="kmccullough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27611</attachid>
            <date>2009-02-12 10:42:53 -0800</date>
            <delta_ts>2009-02-12 14:38:02 -0800</delta_ts>
            <desc>updated patch including manual tests</desc>
            <filename>loopDebuggingPatch.txt</filename>
            <type>text/plain</type>
            <size>20666</size>
            <attacher name="Horia Olaru">olaru</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwOTEwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMDktMDItMTIgIEhvcmlhIE9s
YXJ1ICA8b2xhcnVAYWRvYmUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ5IGxvb2tpbmcgaW4gZ3JhbW1hci55IHRoZXJlIGFyZSBvbmx5IGEg
ZmV3IHR5cGVzIG9mIHN0YXRlbWVudHMgbm9kZQorICAgICAgICBvbiB3aGljaCB0aGUgZGVidWdn
ZXIgc2hvdWxkIHN0b3AuIAorICAgICAgICBSZW1vdmVkIGlzQmxvY2sgYW5kIGlzTG9vcCB2aXJ0
dWFsIGNhbGxzLiBObyBuZWVkIHRvIGVtaXQgZGVidWcgaG9va3MgaW4KKyAgICAgICAgdGhlICJz
dGF0ZW1lbnRMaXN0RW1pdENvZGUiIG1ldGhvZCBhcyBsb25nIGFzIHRoZSBuZWNlc3NhcnkgaG9v
a3MgY2FuIGJlCisgICAgICAgIGFkZGVkIGluIGVhY2ggImVtaXRDb2RlIi4KKworICAgICAgICA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDczPiAKKworICAgICAg
ICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkNvbnN0U3RhdGVtZW50Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6c3RhdGVtZW50TGlzdEVtaXRDb2RlKToKKyAg
ICAgICAgKEpTQzo6RW1wdHlTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAo
SlNDOjpFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6VmFy
U3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6SWZOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpJZkVsc2VOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAoSlNDOjpEb1doaWxlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6V2hp
bGVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGb3JOb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChK
U0M6OkNvbnRpbnVlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QnJlYWtOb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpSZXR1cm5Ob2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpXaXRoTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6
U3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6TGFiZWxOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpUaHJvd05vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OlRyeU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogcGFyc2VyL05vZGVz
Lmg6CisKIDIwMDktMDItMTIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBsb3RzIG9mIFBlcmwgd2FybmluZ3Mgd2hlbiBidWlsZGluZyBKYXZhU2NyaXB0Q29y
ZUdlbmVyYXRlZCBvbgpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCShyZXZpc2lvbiA0MDkw
MCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NzksNiArMTU3OSw3IEBAIHZvaWQgQ29uc3RTdGF0ZW1lbnROb2RlOjpyZWxlYXNlTm9kZXMo
Tm8KIAogUmVnaXN0ZXJJRCogQ29uc3RTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CisgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKG1fbmV4dC5nZXQoKSk7CiB9CiAKQEAg
LTE1ODksOCArMTU5MCw2IEBAIHN0YXRpYyBpbmxpbmUgUmVnaXN0ZXJJRCogc3RhdGVtZW50TGlz
dEUKICAgICBTdGF0ZW1lbnRWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0YXRlbWVudHMu
ZW5kKCk7CiAgICAgZm9yIChTdGF0ZW1lbnRWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc3Rh
dGVtZW50cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU3RhdGVtZW50Tm9k
ZSogbiA9IGl0LT5nZXQoKTsKLSAgICAgICAgaWYgKCFuLT5pc0xvb3AoKSkKLSAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBuLT5maXJzdExp
bmUoKSwgbi0+bGFzdExpbmUoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG4p
OwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE2MjQsOCArMTYyMyw5IEBAIFJlZ2lzdGVySUQq
IEJsb2NrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGUKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEVtcHR5U3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotUmVnaXN0ZXJJRCogRW1wdHlTdGF0ZW1lbnROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3QpCitSZWdpc3RlcklEKiBFbXB0eVN0YXRlbWVudE5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCiB7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1l
bnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAgICByZXR1cm4gZHN0OwogfQogCkBAIC0x
NjQyLDYgKzE2NDIsNyBAQCBSZWdpc3RlcklEKiBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OmVtaXRC
CiBSZWdpc3RlcklEKiBFeHByU3RhdGVtZW50Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBBU1NFUlQobV9leHBy
KTsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmly
c3RMaW5lKCksIGxhc3RMaW5lKCkpOyAKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9leHByLmdldCgpKTsKIH0KIApAQCAtMTY2MCw2ICsxNjYxLDcgQEAgdm9pZCBWYXJTdGF0
ZW1lbnROb2RlOjpyZWxlYXNlTm9kZXMoTm9kZQogUmVnaXN0ZXJJRCogVmFyU3RhdGVtZW50Tm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
KQogewogICAgIEFTU0VSVChtX2V4cHIpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdp
bGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CiAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwogfQogCkBAIC0xNjc4LDE0ICsxNjgw
LDEzIEBAIHZvaWQgSWZOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2VyJiAKIAogUmVnaXN0
ZXJJRCogSWZOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVj
dXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CisgICAgCiAgICAgUmVmUHRy
PExhYmVsPiBhZnRlclRoZW4gPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAogICAgIFJlZ2lzdGVy
SUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9jb25kaXRpb24uZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYWZ0ZXJUaGVuLmdldCgpKTsKIAotICAgIGlm
ICghbV9pZkJsb2NrLT5pc0Jsb2NrKCkpCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29r
KFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX2lmQmxvY2stPmZpcnN0TGluZSgpLCBtX2lmQmxvY2st
Pmxhc3RMaW5lKCkpOwotCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9pZkJsb2NrLmdl
dCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyVGhlbi5nZXQoKSk7CiAKQEAgLTE3
MDgsMjMgKzE3MDksMTkgQEAgdm9pZCBJZkVsc2VOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVh
cwogCiBSZWdpc3RlcklEKiBJZkVsc2VOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogeworICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7Cisg
ICAgCiAgICAgUmVmUHRyPExhYmVsPiBiZWZvcmVFbHNlID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAgICAgUmVmUHRyPExhYmVsPiBhZnRlckVsc2UgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAog
ICAgIFJlZ2lzdGVySUQqIGNvbmQgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9jb25kaXRpb24uZ2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UoY29uZCwgYmVmb3JlRWxzZS5nZXQo
KSk7CiAKLSAgICBpZiAoIW1faWZCbG9jay0+aXNCbG9jaygpKQotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9pZkJsb2NrLT5maXJzdExpbmUo
KSwgbV9pZkJsb2NrLT5sYXN0TGluZSgpKTsKLQogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1faWZCbG9jay5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGFmdGVyRWxzZS5nZXQo
KSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGJlZm9yZUVsc2UuZ2V0KCkpOwogCi0gICAg
aWYgKCFtX2Vsc2VCbG9jay0+aXNCbG9jaygpKQotICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgbV9lbHNlQmxvY2stPmZpcnN0TGluZSgpLCBtX2Vs
c2VCbG9jay0+bGFzdExpbmUoKSk7Ci0KICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2Vs
c2VCbG9jay5nZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGFmdGVyRWxzZS5nZXQo
KSk7CkBAIC0xNzU0LDEwICsxNzUxLDcgQEAgUmVnaXN0ZXJJRCogRG9XaGlsZU5vZGU6OmVtaXRC
eXRlY29kZShCeQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwodG9wT2ZMb29wLmdldCgpKTsKIAog
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBmaXJzdExp
bmUoKSwgbGFzdExpbmUoKSk7Ci0KLSAgICBpZiAoIW1fc3RhdGVtZW50LT5pc0Jsb2NrKCkpCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX3N0
YXRlbWVudC0+Zmlyc3RMaW5lKCksIG1fc3RhdGVtZW50LT5sYXN0TGluZSgpKTsKLSAgICAgICAg
CisgICAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KGRzdCwgbV9zdGF0ZW1lbnQuZ2V0KCkpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7CkBAIC0xNzkwLDEwICsxNzg0LDcgQEAgUmVnaXN0ZXJJRCog
V2hpbGVOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogCiAgICAgUmVmUHRyPExhYmVsPiB0b3BPZkxv
b3AgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHRvcE9m
TG9vcC5nZXQoKSk7Ci0KLSAgICBpZiAoIW1fc3RhdGVtZW50LT5pc0Jsb2NrKCkpCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50LCBtX3N0YXRlbWVu
dC0+Zmlyc3RMaW5lKCksIG1fc3RhdGVtZW50LT5sYXN0TGluZSgpKTsKLSAKKyAgICAKICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudC5nZXQoKSk7CiAKICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKQEAgLTE4NDAsMTEgKzE4MzEs
MTAgQEAgUmVnaXN0ZXJJRCogRm9yTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjbwogICAgIFJlZlB0
cjxMYWJlbD4gdG9wT2ZMb29wID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbCh0b3BPZkxvb3AuZ2V0KCkpOwogCi0gICAgaWYgKCFtX3N0YXRlbWVudC0+aXNC
bG9jaygpKQotICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRl
bWVudCwgbV9zdGF0ZW1lbnQtPmZpcnN0TGluZSgpLCBtX3N0YXRlbWVudC0+bGFzdExpbmUoKSk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50LmdldCgpKTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRl
U3RhdGVtZW50LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CiAgICAgaWYgKG1fZXhwcjMpCiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2V4
cHIzLmdldCgpKTsKIApAQCAtMTk1MywxMiArMTk0MywxMSBAQCBSZWdpc3RlcklEKiBGb3JJbk5v
ZGU6OmVtaXRCeXRlY29kZShCeXRlCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFz
ZS5nZXQoKSwgc3Vic2NyaXB0LCBwcm9wZXJ0eU5hbWUpOwogICAgIH0gICAKIAotICAgIGlmICgh
bV9zdGF0ZW1lbnQtPmlzQmxvY2soKSkKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
V2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG1fc3RhdGVtZW50LT5maXJzdExpbmUoKSwgbV9zdGF0ZW1l
bnQtPmxhc3RMaW5lKCkpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50
LmdldCgpKTsKIAogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOwogICAgIGdlbmVyYXRvci5lbWl0TmV4dFByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUsIGl0
ZXIuZ2V0KCksIGxvb3BTdGFydC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
V2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKICAgICByZXR1cm4gZHN0Owog
fQpAQCAtMTk2OCw2ICsxOTU3LDggQEAgUmVnaXN0ZXJJRCogRm9ySW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZQogLy8gRUNNQSAxMi43CiBSZWdpc3RlcklEKiBDb250aW51ZU5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7Cisg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIGZpcnN0TGlu
ZSgpLCBsYXN0TGluZSgpKTsKKyAgICAKICAgICBMYWJlbFNjb3BlKiBzY29wZSA9IGdlbmVyYXRv
ci5jb250aW51ZVRhcmdldChtX2lkZW50KTsKIAogICAgIGlmICghc2NvcGUpCkBAIC0xOTg0LDYg
KzE5NzUsOCBAQCBSZWdpc3RlcklEKiBDb250aW51ZU5vZGU6OmVtaXRCeXRlY29kZShCCiAvLyBF
Q01BIDEyLjgKIFJlZ2lzdGVySUQqIEJyZWFrTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkp
OworICAgIAogICAgIExhYmVsU2NvcGUqIHNjb3BlID0gZ2VuZXJhdG9yLmJyZWFrVGFyZ2V0KG1f
aWRlbnQpOwogICAgIAogICAgIGlmICghc2NvcGUpCkBAIC0yMDA5LDYgKzIwMDIsNyBAQCB2b2lk
IFJldHVybk5vZGU6OnJlbGVhc2VOb2RlcyhOb2RlUmVsZWFzCiAKIFJlZ2lzdGVySUQqIFJldHVy
bk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCiB7CisgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0
ZW1lbnQsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgpKTsKICAgICBpZiAoZ2VuZXJhdG9yLmNvZGVU
eXBlKCkgIT0gRnVuY3Rpb25Db2RlKQogICAgICAgICByZXR1cm4gZW1pdFRocm93RXJyb3IoZ2Vu
ZXJhdG9yLCBTeW50YXhFcnJvciwgIkludmFsaWQgcmV0dXJuIHN0YXRlbWVudC4iKTsKIApAQCAt
MjAzOSw2ICsyMDMzLDggQEAgdm9pZCBXaXRoTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNl
cgogCiBSZWdpc3RlcklEKiBXaXRoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOworICAg
IAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzY29wZSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoc2NvcGUuZ2V0KCksIG1fZXhwci5nZXQoKSk7IC8v
IHNjb3BlIG11c3QgYmUgcHJvdGVjdGVkIHVudGlsIHBvcHBlZAogICAgIGdlbmVyYXRvci5lbWl0
RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9leHByZXNzaW9uTGVuZ3RoLCAwKTsKQEAgLTIyNDQs
NiArMjI0MCw4IEBAIHZvaWQgU3dpdGNoTm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXMKIAog
UmVnaXN0ZXJJRCogU3dpdGNoTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOworICAgIAog
ICAgIFJlZlB0cjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExh
YmVsU2NvcGU6OlN3aXRjaCk7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0
b3IuZW1pdE5vZGUobV9leHByLmdldCgpKTsKQEAgLTIyNjcsNiArMjI2NSw4IEBAIHZvaWQgTGFi
ZWxOb2RlOjpyZWxlYXNlTm9kZXMoTm9kZVJlbGVhc2UKIAogUmVnaXN0ZXJJRCogTGFiZWxOb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQogeworICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKFdpbGxFeGVjdXRlU3RhdGVtZW50
LCBmaXJzdExpbmUoKSwgbGFzdExpbmUoKSk7CisKICAgICBpZiAoZ2VuZXJhdG9yLmJyZWFrVGFy
Z2V0KG1fbmFtZSkpCiAgICAgICAgIHJldHVybiBlbWl0VGhyb3dFcnJvcihnZW5lcmF0b3IsIFN5
bnRheEVycm9yLCAiRHVwbGljYXRlIGxhYmVsOiAlcy4iLCBtX25hbWUpOwogCkBAIC0yMjkxLDYg
KzIyOTEsOCBAQCB2b2lkIFRocm93Tm9kZTo6cmVsZWFzZU5vZGVzKE5vZGVSZWxlYXNlCiAKIFJl
Z2lzdGVySUQqIFRocm93Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhX
aWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOworCiAgICAgaWYg
KGRzdCA9PSBnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICBkc3QgPSAwOwogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBleHByID0gZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9leHBy
LmdldCgpKTsKQEAgLTIzMTUsNiArMjMxNyw4IEBAIHZvaWQgVHJ5Tm9kZTo6cmVsZWFzZU5vZGVz
KE5vZGVSZWxlYXNlciYKIAogUmVnaXN0ZXJJRCogVHJ5Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKKyAgICBnZW5lcmF0
b3IuZW1pdERlYnVnSG9vayhXaWxsRXhlY3V0ZVN0YXRlbWVudCwgZmlyc3RMaW5lKCksIGxhc3RM
aW5lKCkpOworCiAgICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7CiAgICAgUmVmUHRyPExhYmVsPiB0cnlFbmRMYWJlbCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwogICAgIFJlZlB0cjxMYWJlbD4gZmluYWxseVN0YXJ0OwpJbmRleDogSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgJKHJldmlzaW9uIDQwOTAwKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw5ICsxOTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdmlydHVhbCBib29sIGlzUmV0dXJuTm9kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRXhwclN0YXRlbWVudCgpIGNv
bnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNCbG9jaygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAg
ICAgdmlydHVhbCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFs
c2U7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2xhc3RMaW5lOwogICAgIH07CkBA
IC0xNzA4LDggKzE3MDUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTdGF0ZW1lbnRW
ZWN0b3ImIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQogCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc0Jsb2NrKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0K
ICAgICBwcml2YXRlOgogICAgICAgICBTdGF0ZW1lbnRWZWN0b3IgbV9jaGlsZHJlbjsKICAgICB9
OwpAQCAtMTgyMSw4ICsxODE2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlzTG9vcCgpIGNv
bnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUmVmUHRyPFN0YXRlbWVudE5vZGU+IG1fc3RhdGVtZW50OwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fZXhwcjsKQEAgLTE4NDIsOCArMTgzNSw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1
YWwgYm9vbCBpc0xvb3AoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KLQog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAg
ICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9zdGF0ZW1lbnQ7CkBAIC0xODY3LDggKzE4NTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7
IHJldHVybiB0cnVlOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByMjsK
QEAgLTE4ODcsOCArMTg3Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCog
PSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvb3AoKSBjb25z
dCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAg
IElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2lu
aXQ7CkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gNDA5MTApCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIyIEBACisyMDA5LTAyLTEyICBIb3JpYSBPbGFydSAgPG9sYXJ1QGFkb2Jl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBX
QVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKyAgICAgICAgCisgICAgICAg
IEFkZGluZyBtYW51YWwgZGVidWdnZXIgdGVzdCBjYXNlcyBmb3IgYnVnLgorICAgICAgICA8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDczPgorCisgICAgICAgICog
bWFudWFsLXRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1zdGVwLW9uLWRvLXdoaWxlLXN0YXRlbWVu
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICogbWFudWFsLXRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci1zdGVwLW9uLWZvci1pbi1zdGF0ZW1lbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1hbnVh
bC10ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItc3RlcC1vbi1mb3Itc3RhdGVtZW50cy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXN0ZXAtb24t
d2hpbGUtc3RhdGVtZW50cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtYW51YWwtdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9sb29wLXN0YXRlbWVudHMuanM6IEFkZGVkLgorICAgICAgICAoaW5p
dGlhbGl6ZSk6CisgICAgICAgIChjb25kaXRpb24pOgorICAgICAgICAoaW5jcmVtZW50KToKKyAg
ICAgICAgKHN0YXRlbWVudCk6CisKIDIwMDktMDItMTIgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAg
PGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpJbmRleDog
V2ViQ29yZS9tYW51YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXN0ZXAtb24tZG8td2hpbGUt
c3RhdGVtZW50cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2luc3Bl
Y3Rvci9kZWJ1Z2dlci1zdGVwLW9uLWRvLXdoaWxlLXN0YXRlbWVudHMuaHRtbAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1zdGVwLW9uLWRv
LXdoaWxlLXN0YXRlbWVudHMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9sb29wLXN0YXRlbWVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4JCQkKK2Z1bmN0aW9uIHJ1bkRvV2hpbGUoKQoreworICAgIC8qIHBsYWNlIGJyZWFrcG9pbnQg
b24gbmV4dCBsaW5lIGFuZCBjbGljayBjb250aW51ZSAqLyBkZWJ1Z2dlcjsKKyAgICBkbyB7Cisg
ICAgICAgIHN0YXRlbWVudCgpOworICAgICAgICBpbmNyZW1lbnQoKTsKKyAgICB9IHdoaWxlIChj
b25kaXRpb24oKSk7Cit9CisKKzwvc2NyaXB0PgorU3RhcnQgYSBkZWJ1Z2dpbmcgc2Vzc2lvbiBp
biB0aGUgV2ViIEluc3BlY3RvciBhbmQgb3BlbiB0aGlzIGZpbGUuCis8YnI+PGJyPgorQmVmb3Jl
IHJ1bm5pbmcgdGhlIHRlc3RzIHBsZWFzZSBwZXJmb3JtIHRoZSBmb2xsb3dpbmc6CitNYWtlIHN1
cmUgdGhlIGV4ZWN1dGlvbiBpcyBub3QgcGF1c2VkIGluIHRoZSBkZWJ1Z2dlci48YnI+CitDbGlj
ayB0aGUgYnV0dG9uIGFuZCB3aGVuIHRoZSBkZWJ1Z2dlciBicmVha3MsIHNldCBhIGJyZWFrcG9p
bnQgb24gdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGxvb3AKKyhhcyBpbmRpY2F0ZWQgYnkgdGhlIGNv
bW1lbnQpLCBhbmQgY2xpY2sgY29udGludWUuPGJyPgorVGhlIGRlYnVnZ2VyIHNob3VsZCBzdG9w
IGF0IHRoZSBiZWdnaW5pbmcgb2YgdGhlIGxvb3AuPGJyPgorVGhlIGFib3ZlIGFjdGlvbnMgc2hv
dWxkIGJlIHBlcmZvcm1lZCBiZWZvcmUgPGI+ZWFjaDwvYj4gb2YgdGhlIGZvbGxvd2luZyB0ZXN0
cy4KKzxicj48YnI+Cis8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0icnVuIGRvLXdoaWxlIiBv
bmNsaWNrPSJpbml0aWFsaXplKCk7cnVuRG9XaGlsZSgpIi8+Cis8YnI+PGJyPgorVEVTVCAxOiBD
bGljayAnY29udGludWUnLiBFeGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGhvdXQgc3RvcHBp
bmcgb24gdGhlIGxvb3AgYnJlYWtwb2ludCBhZ2Fpbi48YnI+CitURVNUIDI6IENsaWNrICdTdGVw
IG92ZXInLiBEZWJ1Z2dlciBzaG91bGQgc3RlcCBpbnNpZGUgdGhlIGxvb3AgdG8gdGhlIG5leHQg
c3RhdGVtZW50IGxpbmUuCisnU3RlcCBvdmVyJyB1bnRpbCB0aGUgZGVidWdnZXIgcmVhY2hlcyB0
aGUgJ3doaWxlJyBsaW5lLiBDbGljayAnU3RlcCBpbnRvJyAtIHRoZSBkZWJ1Z2dlciBzaG91bGQK
K2VudGVyIHRoZSAnY29uZGl0aW9uJyBmdW5jdGlvbi48YnI+CitURVNUIDM6ICdTdGVwIG92ZXIn
IHRvIHRoZSBlbmQgb2YgdGhlIGxvb3AgKGFuZCAnd2hpbGUnIHN0YXRlbWVudCkgYW5kIHN0ZXAg
b3ZlciBhZ2Fpbi4gRGVidWdnZXIKK3Nob3VsZCBnbyB0byB0aGUgYmVnZ2luaW5nIG9mIHRoZSBs
b29wLjxicj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL21hbnVh
bC10ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItc3RlcC1vbi1mb3ItaW4tc3RhdGVtZW50cy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci1z
dGVwLW9uLWZvci1pbi1zdGF0ZW1lbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL21h
bnVhbC10ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXItc3RlcC1vbi1mb3ItaW4tc3RhdGVtZW50cy5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8c2NyaXB0PgordmFyIG15T2JqID0g
e3Rlc3QgOiAxfTsKK2Z1bmN0aW9uIGdldE9iamVjdCgpCit7CisgICAgcmV0dXJuIG15T2JqOwor
fQorCitmdW5jdGlvbiBzdGF0ZW1lbnQoKSB7CisgICAgOworfQorCitmdW5jdGlvbiBydW5Gb3JJ
bigpCit7CisgICAgLyogcGxhY2UgYnJlYWtwb2ludCBvbiBuZXh0IGxpbmUgYW5kIGNsaWNrIGNv
bnRpbnVlICovIGRlYnVnZ2VyOworICAgIGZvciAodmFyIHByb3BlcnR5IGluIGdldE9iamVjdCgp
KQorICAgICAgICBzdGF0ZW1lbnQoKTsKK30KKworPC9zY3JpcHQ+CitTdGFydCBhIGRlYnVnZ2lu
ZyBzZXNzaW9uIGluIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCBvcGVuIHRoaXMgZmlsZS4KKzxicj48
YnI+CitCZWZvcmUgcnVubmluZyB0aGUgdGVzdHMgcGxlYXNlIHBlcmZvcm0gdGhlIGZvbGxvd2lu
ZzoKK01ha2Ugc3VyZSB0aGUgZXhlY3V0aW9uIGlzIG5vdCBwYXVzZWQgaW4gdGhlIGRlYnVnZ2Vy
Ljxicj4KK0NsaWNrIHRoZSBidXR0b24gYW5kIHdoZW4gdGhlIGRlYnVnZ2VyIGJyZWFrcywgc2V0
IGEgYnJlYWtwb2ludCBvbiB0aGUgZmlyc3QgbGluZSBpbiB0aGUgbG9vcAorKGFzIGluZGljYXRl
ZCBieSB0aGUgY29tbWVudCksIGFuZCBjbGljayBjb250aW51ZS48YnI+CitUaGUgZGVidWdnZXIg
c2hvdWxkIHN0b3AgYXQgdGhlIGJlZ2dpbmluZyBvZiB0aGUgbG9vcC48YnI+CitUaGUgYWJvdmUg
YWN0aW9ucyBzaG91bGQgYmUgcGVyZm9ybWVkIGJlZm9yZSA8Yj5lYWNoPC9iPiBvZiB0aGUgZm9s
bG93aW5nIHRlc3RzLgorPGJyPjxicj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJydW4g
Zm9yLWluIiBvbmNsaWNrPSJydW5Gb3JJbigpIi8+Cis8YnI+PGJyPgorVEVTVCAxOiBDbGljayAn
Y29udGludWUnLiBFeGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGhvdXQgc3RvcHBpbmcgb24g
dGhlIGxvb3AgYnJlYWtwb2ludCBhZ2Fpbi48YnI+CitURVNUIDI6IENsaWNrICdTdGVwIG92ZXIn
LiBEZWJ1Z2dlciBzaG91bGQgc3RlcCBpbnNpZGUgdGhlIGxvb3AgdG8gdGhlIG5leHQgc3RhdGVt
ZW50IGxpbmUuPGJyPgorVEVTVCAzOiBDbGljayAnU3RlcCBpbnRvJy4gRGVidWdnZXIgc2hvdWxk
IHN0ZXAgaW50byAnZ2V0T2JqZWN0JyBmdW5jdGlvbi48YnI+CitURVNUIDQ6ICdTdGVwIG92ZXIn
IHRvIHRoZSBzdGF0ZW1lbnQgbGluZSBhbmQgdGhlbiAnU3RlcCBvdmVyJyBhZ2Fpbi4gRGVidWdn
ZXIgc2hvdWxkIHBhdXNlIG9uCit0aGUgZm9yLWluIGxvb3AgYWdhaW4uPGJyPgpJbmRleDogV2Vi
Q29yZS9tYW51YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXN0ZXAtb24tZm9yLXN0YXRlbWVu
dHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVhbC10ZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXItc3RlcC1vbi1mb3Itc3RhdGVtZW50cy5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9tYW51YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXN0ZXAtb24tZm9yLXN0YXRlbWVudHMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMSBAQAorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9sb29wLXN0YXRlbWVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4JCQorZnVuY3Rpb24gcnVu
Rm9yKCkKK3sKKyAgICAvKiBwbGFjZSBicmVha3BvaW50IG9uIG5leHQgbGluZSBhbmQgY2xpY2sg
Y29udGludWUgKi8gZGVidWdnZXI7CisgICAgZm9yIChpbml0aWFsaXplKCk7IGNvbmRpdGlvbigp
OyBpbmNyZW1lbnQoKSkKKyAgICAgICAgc3RhdGVtZW50KCk7Cit9Cis8L3NjcmlwdD4KK1N0YXJ0
IGEgZGVidWdnaW5nIHNlc3Npb24gaW4gdGhlIFdlYiBJbnNwZWN0b3IgYW5kIG9wZW4gdGhpcyBm
aWxlLgorPGJyPjxicj4KK0JlZm9yZSBydW5uaW5nIHRoZSB0ZXN0cyBwbGVhc2UgcGVyZm9ybSB0
aGUgZm9sbG93aW5nOgorTWFrZSBzdXJlIHRoZSBleGVjdXRpb24gaXMgbm90IHBhdXNlZCBpbiB0
aGUgZGVidWdnZXIuPGJyPgorQ2xpY2sgdGhlIGJ1dHRvbiBhbmQgd2hlbiB0aGUgZGVidWdnZXIg
YnJlYWtzLCBzZXQgYSBicmVha3BvaW50IG9uIHRoZSBmaXJzdCBsaW5lIGluIHRoZSBsb29wCiso
YXMgaW5kaWNhdGVkIGJ5IHRoZSBjb21tZW50KSwgYW5kIGNsaWNrIGNvbnRpbnVlLjxicj4KK1Ro
ZSBkZWJ1Z2dlciBzaG91bGQgc3RvcCBhdCB0aGUgYmVnZ2luaW5nIG9mIHRoZSBsb29wLjxicj4K
K1RoZSBhYm92ZSBhY3Rpb25zIHNob3VsZCBiZSBwZXJmb3JtZWQgYmVmb3JlIDxiPmVhY2g8L2I+
IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMuCis8YnI+PGJyPgorPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9InJ1biBmb3IiIG9uY2xpY2s9InJ1bkZvcigpIi8+Cis8YnI+PGJyPgorVEVTVCAxOiBD
bGljayAnY29udGludWUnLiBFeGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGhvdXQgc3RvcHBp
bmcgb24gdGhlIGxvb3AgYnJlYWtwb2ludCBhZ2Fpbi48YnI+CitURVNUIDI6IENsaWNrICdTdGVw
IG92ZXInLiBEZWJ1Z2dlciBzaG91bGQgc3RlcCBpbnNpZGUgdGhlIGxvb3AgdG8gdGhlIG5leHQg
c3RhdGVtZW50IGxpbmUuPGJyPgorVEVTVCAzOiBDbGljayAnU3RlcCBpbnRvJy4gRGVidWdnZXIg
c2hvdWxkIHN0ZXAgaW50byAnaW5pdGlhbGl6ZScgZnVuY3Rpb24uIENsaWNrICdTdGVwIGludG8n
IHVudGlsCitvdXRzaWRlIG9mIHRoZSAnaW5pdGlhbGl6ZScgZnVuY3Rpb24gLSBkZWJ1Z2dlciBz
aG91bGQgZW50ZXIgdGhlICdjb25kaXRpb24nIGZ1bmN0aW9uLjxicj4KK1RFU1QgNDogJ1N0ZXAg
b3ZlcicgdG8gdGhlIHN0YXRlbWVudCBsaW5lIGFuZCB0aGVuICdTdGVwIG92ZXInIGFnYWluLiBE
ZWJ1Z2dlciBzaG91bGQgcGF1c2Ugb24KK3RoZSBmb3IgbG9vcCBhZ2Fpbi4gQ2xpY2sgJ1N0ZXAg
aW50bycuIERlYnVnZ2VyIHNob3VsZCBzdGVwIGludG8gdGhlICdpbmNyZW1lbnQnIGZ1bmN0aW9u
LgorQ2xpY2sgJ1N0ZXAgaW50bycgdW50aWwgb3V0c2lkZSBvZiB0aGUgJ2luY3JlbWVudCcgZnVu
Y3Rpb24gLSBkZWJ1Z2dlciBzaG91bGQgZW50ZXIgdGhlICdjb25kaXRpb24nCitmdW5jdGlvbi48
YnI+CisKKworCkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIt
c3RlcC1vbi13aGlsZS1zdGF0ZW1lbnRzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9tYW51
YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyLXN0ZXAtb24td2hpbGUtc3RhdGVtZW50cy5odG1s
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9tYW51YWwtdGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
LXN0ZXAtb24td2hpbGUtc3RhdGVtZW50cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2xvb3Atc3RhdGVtZW50cy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgkJCQorZnVuY3Rpb24gcnVuV2hpbGUoKQoreworICAgIC8qIHBsYWNlIGJyZWFr
cG9pbnQgb24gbmV4dCBsaW5lIGFuZCBjbGljayBjb250aW51ZSAqLyBkZWJ1Z2dlcjsKKyAgICB3
aGlsZSAoY29uZGl0aW9uKCkpIHsKKyAgICAgICAgc3RhdGVtZW50KCk7CisgICAgICAgIGluY3Jl
bWVudCgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CitTdGFydCBhIGRlYnVnZ2luZyBzZXNzaW9u
IGluIHRoZSBXZWIgSW5zcGVjdG9yIGFuZCBvcGVuIHRoaXMgZmlsZS4KKzxicj48YnI+CitCZWZv
cmUgcnVubmluZyB0aGUgdGVzdHMgcGxlYXNlIHBlcmZvcm0gdGhlIGZvbGxvd2luZzoKK01ha2Ug
c3VyZSB0aGUgZXhlY3V0aW9uIGlzIG5vdCBwYXVzZWQgaW4gdGhlIGRlYnVnZ2VyLjxicj4KK0Ns
aWNrIHRoZSBidXR0b24gYW5kIHdoZW4gdGhlIGRlYnVnZ2VyIGJyZWFrcywgc2V0IGEgYnJlYWtw
b2ludCBvbiB0aGUgZmlyc3QgbGluZSBpbiB0aGUgbG9vcAorKGFzIGluZGljYXRlZCBieSB0aGUg
Y29tbWVudCksIGFuZCBjbGljayBjb250aW51ZS48YnI+CitUaGUgZGVidWdnZXIgc2hvdWxkIHN0
b3AgYXQgdGhlIGJlZ2dpbmluZyBvZiB0aGUgbG9vcC48YnI+CitUaGUgYWJvdmUgYWN0aW9ucyBz
aG91bGQgYmUgcGVyZm9ybWVkIGJlZm9yZSA8Yj5lYWNoPC9iPiBvZiB0aGUgZm9sbG93aW5nIHRl
c3RzLgorPGJyPjxicj4KKzxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJydW4gd2hpbGUiIG9u
Y2xpY2s9ImluaXRpYWxpemUoKTtydW5XaGlsZSgpIi8+Cis8YnI+PGJyPgorVEVTVCAxOiBDbGlj
ayAnY29udGludWUnLiBFeGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGhvdXQgc3RvcHBpbmcg
b24gdGhlIGxvb3AgYnJlYWtwb2ludCBhZ2Fpbi48YnI+CitURVNUIDI6IENsaWNrICdTdGVwIG92
ZXInLiBEZWJ1Z2dlciBzaG91bGQgc3RlcCBpbnNpZGUgdGhlIGxvb3AgdG8gdGhlIG5leHQgc3Rh
dGVtZW50IGxpbmUuPGJyPgorVEVTVCAzOiBDbGljayAnU3RlcCBpbnRvJy4gRGVidWdnZXIgc2hv
dWxkIHN0ZXAgaW50byAnY29uZGl0aW9uJyBmdW5jdGlvbi48YnI+CitURVNUIDQ6ICdTdGVwIG92
ZXInIHRoZSBzdGF0ZW1lbnRzIHVudGlsIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGxvb3AuIERl
YnVnZ2VyIHNob3VsZAorc3RlcCBvdmVyIHRvIHRoZSBiZWdnaW5naW4gb2YgdGhlIHdoaWxlIGxv
b3AgYWdhaW4uIENsaWNrICdTdGVwIGludG8nLiBEZWJ1Z2dlciBzaG91bGQgc3RlcCBpbnRvCit0
aGUgJ2NvbmRpdGlvbicgZnVuY3Rpb24uPGJyPgpJbmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMv
aW5zcGVjdG9yL3Jlc291cmNlcy9sb29wLXN0YXRlbWVudHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9tYW51YWwtdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9sb29wLXN0YXRlbWVudHMuanMJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2Vz
L2xvb3Atc3RhdGVtZW50cy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAordmFyIGk7
Cit2YXIgYTsKKworZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCit7CisJaSA9IGZhbHNlOworfQorCitm
dW5jdGlvbiBjb25kaXRpb24oKQoreworCXJldHVybiAhaTsKK30KKworZnVuY3Rpb24gaW5jcmVt
ZW50KCkKK3sKKwlpID0gIWk7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudCgpCit7CisJYSA9IGk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="13397"
          type_id="1"
          status="+"
          setter="kmccullough"
    />
          </attachment>
      

    </bug>

</bugzilla>