<?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>22119</bug_id>
          
          <creation_ts>2008-11-06 17:15:13 -0800</creation_ts>
          <short_desc>[Transforms] clicks in scrollbars of transformed element don&apos;t work (e.g. listbox or overflow)</short_desc>
          <delta_ts>2009-07-02 10:33: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>Layout and Rendering</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>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>22120</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97891</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-11-06 17:15:13 -0800</bug_when>
    <thetext>If a multiline &lt;select&gt; is transformed, clicks in its scrollbar don&apos;t do anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113263</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-11 17:08:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/6672445&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113763</commentid>
    <comment_count>2</comment_count>
      <attachid>28619</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-14 11:01:04 -0700</bug_when>
    <thetext>Created attachment 28619
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113799</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-14 23:02:44 -0700</bug_when>
    <thetext>I have a patch for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113845</commentid>
    <comment_count>4</comment_count>
      <attachid>28641</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-15 13:16:31 -0700</bug_when>
    <thetext>Created attachment 28641
Patch, testcases, changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113931</commentid>
    <comment_count>5</comment_count>
      <attachid>28641</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-03-16 15:14:17 -0700</bug_when>
    <thetext>Comment on attachment 28641
Patch, testcases, changelog

Minus after IRC discussion.  Want to see the scrollbarOwner thing removed and replaced with the right method(s) just being added to ScrollbarClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113932</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-16 15:15:15 -0700</bug_when>
    <thetext>Note: need to fix windows-specific popup code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113972</commentid>
    <comment_count>7</comment_count>
      <attachid>28676</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-03-16 20:31:25 -0700</bug_when>
    <thetext>Created attachment 28676
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114207</commentid>
    <comment_count>8</comment_count>
      <attachid>28676</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-03-18 11:16:32 -0700</bug_when>
    <thetext>Comment on attachment 28676
New patch

My high level commentary here is that new methods have been added that essentially duplicate functionality of Widget and ScrollView.  The reasoning being that the Widget/ScrollView methods aren&apos;t transform-aware.  I think a better approach would be to make them transform-aware.  Take for example:

IntPoint Widget::convertToContainingWindow(const IntPoint&amp; point) const
{
    IntPoint windowPoint = point;
    const Widget* childWidget = this;
    for (const ScrollView* parentScrollView = parent();
         parentScrollView;
         childWidget = parentScrollView, parentScrollView = parentScrollView-&gt;parent())
        windowPoint = parentScrollView-&gt;convertChildToSelf(childWidget, windowPoint);
    return windowPoint;
}

IntPoint Widget::convertFromContainingWindow(const IntPoint&amp; point) const
{
    IntPoint widgetPoint = point;
    const Widget* childWidget = this;
    for (const ScrollView* parentScrollView = parent();
         parentScrollView;
         childWidget = parentScrollView, parentScrollView = parentScrollView-&gt;parent())
        widgetPoint = parentScrollView-&gt;convertSelfToChild(childWidget, widgetPoint);
    return widgetPoint;
}

There is nothing wrong with those methods if you imagine that convertChildToSelf and convertSelfToChild are transform-aware.  In other words, try to find the &quot;leaf&quot; functions used by all of these Widget/ScrollView methods and make them virtual.  Subclass them on FrameView to do the right thing.

It is likely that you may need a &quot;usesTransforms&quot; boolean on FrameView, kind of like we have slow repaints on ScrollView.  If that flag isn&apos;t set then you know you could fall through to the much faster ScrollView functions and not have to crawl up your render tree.  That is an optimization that could be done in a separate patch though I think.

Now there are still some good things here though.  For example, it is good to just send local points to Scrollbars always.  There&apos;s no reason to be sending them window coordinates when you already hit tested all the way to the scrollbar and so should know the local coordinate anyway.  So eliminating window to/from conversions from scrollbar code is good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127281</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-21 22:14:59 -0700</bug_when>
    <thetext>I&apos;m not sure how I can do this by subclassing methods in FrameView. We need to have rect/point conversions done via RenderObjects for Scrollbars and other widgets (e.g. plug-ins), not just for frames.

It seems like the only way to do this in a generic way would be to resurrect WidgetClient? Otherwise there&apos;s no way to get from a Widget to its associated RenderObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127282</commentid>
    <comment_count>10</comment_count>
      <attachid>31631</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-21 22:15:30 -0700</bug_when>
    <thetext>Created attachment 31631
WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127377</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-22 10:48:33 -0700</bug_when>
    <thetext>Every Widget (scrollbar, plugin, frameview) has a non-platform implementation, so we can override virtual methods on Widget in those. The scrollbar one would call through ScrollbarClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128761</commentid>
    <comment_count>12</comment_count>
      <attachid>31994</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-28 18:18:15 -0700</bug_when>
    <thetext>Created attachment 31994
Working patch

Here&apos;s a mostly-complete patch that fixes Widget::convertTo/FromContainingWindow methods so that subclasses can modify their behavior to take transforms into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129255</commentid>
    <comment_count>13</comment_count>
      <attachid>32111</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-06-30 23:23:44 -0700</bug_when>
    <thetext>Created attachment 32111
Almost done; needs testing on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129418</commentid>
    <comment_count>14</comment_count>
      <attachid>32161</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-07-01 17:02:56 -0700</bug_when>
    <thetext>Created attachment 32161
Almost done patch; needs ScrollbarClient cleanup

With this patch nested overflow:scroll regions with transforms work on Windows too.
For some reason, rotated scrollbars on Windows don&apos;t draw.

I added convertTo/FromRenderer methods on FrameView as the funnel points for converting from some renderer up to its enclosing FrameView. convertToRenderer(RenderObject*,IntRect) has a FIXME, but as far as I know it&apos;s never used (we never map rects down into renderers).

ScrollbarClient is troublesome, because it&apos;s too easy for a client to just turn around and call scrollbar-&gt;convertToContainingView() to get the default behavior, and hit infinite recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129526</commentid>
    <comment_count>15</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-07-02 10:33:27 -0700</bug_when>
    <thetext>Fixed in r45478.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>28619</attachid>
            <date>2009-03-14 11:01:04 -0700</date>
            <delta_ts>2009-03-14 11:01:04 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>transformed_select.html</filename>
            <type>text/html</type>
            <size>812</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgogIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVu
dD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KICA8dGl0bGU+VHJhbnNmb3JtZWQgU2VsZWN0
PC90aXRsZT4KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0x
LjAiIC8+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KICAgICN0d28t
Y29udGFpbmVyIHsKICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgaGVpZ2h0OiAyMDBweDsK
ICAgICAgd2lkdGg6IDMwMHB4OwogICAgfQoKICAgICN0d28gewogICAgICAtd2Via2l0LXRyYW5z
Zm9ybTogdHJhbnNsYXRlWCgyMHB4KTsKICAgIH0KCiAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4K
CjxkaXYgaWQ9InR3by1jb250YWluZXIiPgogIDxkaXYgaWQ9InR3byI+CiAgICA8c2VsZWN0IHNp
emU9IjUiPgogICAgICA8b3B0aW9uIHZhbHVlPSJvbmUiPk9uZTwvb3B0aW9uPgogICAgICA8b3B0
aW9uPlR3bzwvb3B0aW9uPgogICAgICA8b3B0aW9uPlRocmVlPC9vcHRpb24+CiAgICAgIDxvcHRp
b24+Rm91cjwvb3B0aW9uPgogICAgICA8b3B0aW9uPkZpdmU8L29wdGlvbj4KICAgICAgPG9wdGlv
bj5TaXg8L29wdGlvbj4KICAgIDwvc2VsZWN0PgogICAgPC9wPgogIDwvZGl2Pgo8L2Rpdj4KCjwv
Ym9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28641</attachid>
            <date>2009-03-15 13:16:31 -0700</date>
            <delta_ts>2009-03-16 20:31:25 -0700</delta_ts>
            <desc>Patch, testcases, changelog</desc>
            <filename>22119_patch.txt</filename>
            <type>text/plain</type>
            <size>47461</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZGJkOGZjLi4xN2M5ZGUwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDMt
MTUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTkKKyAgICAgICAgCisgICAgICAgIFRlc3Qg
aGl0IHRlc3Rpbmcgb2Ygc2Nyb2xsYmFycyBvbiB0cmFuc2Zvcm1lZCBhbmQgdW50cnJhbnNmb3Jt
ZWQgbGlzdCBib3hlcworICAgICAgICBhbmQgb3ZlcmZsb3c6c2Nyb2xsIGVsZW1lbnRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJveC1zY3JvbGxiYXItaGl0LXRl
c3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9mb3Jt
cy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1zY3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVy
Zmxvdy1zY3JvbGxiYXItaGl0LXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMDktMDMtMTQgIE1hcmsg
Um93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBPbGl2
ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1z
L2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2EyNzg1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJveC1z
Y3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKKyAgCitUZXN0
aW5nIGNsaWNrcyBvbiBzZWxlY3QxCitTY3JvbGxlZCBkb3duIGJ5IGl0ZW1IZWlnaHQgb24gZG93
biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAgYnkgaXRlbUhlaWdodCBvbiB1cCBhcnJv
dyBjbGljazogUEFTUworCitUZXN0aW5nIGNsaWNrcyBvbiBzZWxlY3QyCitTY3JvbGxlZCBkb3du
IGJ5IGl0ZW1IZWlnaHQgb24gZG93biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAgYnkg
aXRlbUhlaWdodCBvbiB1cCBhcnJvdyBjbGljazogUEFTUworCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10ZXN0
Lmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9mb3Jtcy9saXN0Ym94LXNjcm9s
bGJhci1oaXQtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhl
YjA0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9m
b3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8
aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGlzdGJveCBzY3JvbGxiYXIgaGl0IHRlc3Rpbmc8L3Rp
dGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIHNlbGVj
dCB7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAgICAgIHBhZGRpbmc6IDEwcHg7
CisgICAgfQorICAgIAorICAgICNyZXN1bHRzIHsKKyAgICAgIG1hcmdpbi10b3A6IDUwcHg7Cisg
ICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNl
dD0idXRmLTgiPgorICAgIGZ1bmN0aW9uIHNlbmRDbGljayhlbGVtZW50LCBjbGllbnRYLCBjbGll
bnRZKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8oY2xpZW50WCwgY2xpZW50WSk7CisgICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICB9
CisgICAgfQorCisgICAgZnVuY3Rpb24gbW91c2VEb3duT25TZWxlY3Qoc2VsSWQsIHRyYW5zbGF0
ZVgsIHRyYW5zbGF0ZVkpCisgICAgeworICAgICAgbG9nKCdUZXN0aW5nIGNsaWNrcyBvbiAnICsg
c2VsSWQpOworCisgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKHNlbElkKTsKKyAgICAgIHZhciBpdGVtSGVpZ2h0ID0gMTQ7CisgICAgICB2YXIgYm9yZGVy
ID0gMjA7CisgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSAxMDsKKyAgICAgIHZhciBzY3JvbGxi
YXJCdXR0b25IZWlnaHQgPSAxMjsKKyAgICAgIAorICAgICAgdmFyIHNjcm9sbGJhck1pZFggPSB0
cmFuc2xhdGVYICsgc2VsZWN0RWxlbWVudC5vZmZzZXRMZWZ0ICsgc2VsZWN0RWxlbWVudC5vZmZz
ZXRXaWR0aCAtIGJvcmRlciAtIHNjcm9sbGJhcldpZHRoIC8gMjsKKyAgICAgIC8vIFJlY2FsbCB0
aGF0IERSVCBydW5zIHdpdGggYm90aCBzY3JvbGwgYXJyb3dzIGF0IHRoZSBlbmQgb2YgdGhlIHNj
cm9sbGJhcgorICAgICAgdmFyIHNjcm9sbGJhclRvcEFycm93WSA9IHRyYW5zbGF0ZVkgKyBzZWxl
Y3RFbGVtZW50Lm9mZnNldFRvcCArIHNlbGVjdEVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gYm9yZGVy
IC0gc2Nyb2xsYmFyQnV0dG9uSGVpZ2h0IC0gMzsKKyAgICAgIHZhciBzY3JvbGxiYXJCb3R0b21B
cnJvd1kgPSB0cmFuc2xhdGVZICsgc2VsZWN0RWxlbWVudC5vZmZzZXRUb3AgKyBzZWxlY3RFbGVt
ZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIDM7CisgICAgICAKKyAgICAgIHNlbmRDbGljayhz
ZWxlY3RFbGVtZW50LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOworICAg
ICAgc2VuZENsaWNrKHNlbGVjdEVsZW1lbnQsIHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhckJvdHRv
bUFycm93WSk7CisgICAgICBpZiAoc2VsZWN0RWxlbWVudC5zY3JvbGxUb3AgPT0gMiAqIGl0ZW1I
ZWlnaHQpCisgICAgICAgIGxvZygnU2Nyb2xsZWQgZG93biBieSBpdGVtSGVpZ2h0IG9uIGRvd24g
YXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQgdG8g
c2Nyb2xsIGRvd24gLSBzY3JvbGxUb3AgaXMgJyArIHNlbGVjdEVsZW1lbnQuc2Nyb2xsVG9wICsg
JzogRkFJTCcpOworCisgICAgICBzZW5kQ2xpY2soc2VsZWN0RWxlbWVudCwgc2Nyb2xsYmFyTWlk
WCwgc2Nyb2xsYmFyVG9wQXJyb3dZKTsKKyAgICAgIGlmIChzZWxlY3RFbGVtZW50LnNjcm9sbFRv
cCA9PSBpdGVtSGVpZ2h0KQorICAgICAgICBsb2coJ1Njcm9sbGVkIHVwIGJ5IGl0ZW1IZWlnaHQg
b24gdXAgYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWls
ZWQgdG8gc2Nyb2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBzZWxlY3RFbGVtZW50LnNjcm9sbFRv
cCArICc6IEZBSUwnKTsKKworICAgICAgbG9nKCcnKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rp
b24gbG9nKG1zZykKKyAgICB7CisgICAgICB2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdyZXN1bHRzJyk7CisgICAgICByZXN1bHRzLmlubmVySFRNTCArPSBtc2cgKyAnPGJy
Pic7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgIHsKKyAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKSB7
CisgICAgICAgIGxvZygnVGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBEUlQnKTsKKyAgICAgIH0KKyAg
ICAgIAorICAgICAgLy8gSGF2ZSB0byB3YWl0IGZvciB0aGUgc2VsZWN0IHRvIGJlIHBhaW50ZWQg
YmVmb3JlIHRoZQorICAgICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVkIGNvcnJlY3RseS4KKyAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0KCdzZWxl
Y3QxJywgMCwgMCk7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0KCdzZWxlY3QyJywgNTAsIDUw
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICB9LCAwKTsKKyAgICB9Cisg
IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorCisgIDxzZWxlY3Qg
aWQ9InNlbGVjdDEiIHNpemU9IjUiPgorICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IjAiPml0
ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0ZW0gMTwvb3B0aW9uPgorICAg
IDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjMi
Pml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQiPml0ZW0gNDwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjciPml0ZW0gNzwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9uPgorICA8L3NlbGVjdD4KKwor
ICA8c2VsZWN0IGlkPSJzZWxlY3QyIiBzaXplPSI1IiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06
IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IjAi
Pml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0ZW0gMTwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQiPml0ZW0gNDwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFs
dWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjciPml0ZW0gNzwvb3B0
aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9uPgorICA8L3NlbGVjdD4K
KworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1z
Y3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDljNzkzCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Ny
b2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitJbm5lcgorIAor
SW5uZXIKK1Rlc3RpbmcgY2xpY2tzIG9uIGJveDEKK1Njcm9sbGVkIGRvd24gYnkgODAgb24gZG93
biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAgYnkgNDAgb24gdXAgYXJyb3cgY2xpY2s6
IFBBU1MKKworVGVzdGluZyBjbGlja3Mgb24gYm94MgorU2Nyb2xsZWQgZG93biBieSA4MCBvbiBk
b3duIGFycm93IGNsaWNrOiBQQVNTCitTY3JvbGxlZCB1cCBieSA0MCBvbiB1cCBhcnJvdyBjbGlj
azogUEFTUworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L292
ZXJmbG93L292ZXJmbG93LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsYmFyLWhpdC10ZXN0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4YzY3NAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L292ZXJmbG93L292ZXJmbG93LXNj
cm9sbGJhci1oaXQtdGVzdC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFkPgor
ICA8dGl0bGU+T3ZlcmZsb3cgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nPC90aXRsZT4KKyAgPHN0eWxl
IHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuYm94IHsKKyAgICAgIGRpc3Bs
YXk6IGlubGluZS1ibG9jazsKKyAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgIGhlaWdodDogMTUw
cHg7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAgICAgIHBhZGRpbmc6IDEwcHg7
CisgICAgICBtYXJnaW46IDE1cHg7CisgICAgICBvdmVyZmxvdzogc2Nyb2xsOworICAgIH0KKyAg
ICAKKyAgICAuaW5uZXIgeworICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgaGVpZ2h0OiAzMDBw
eDsKKyAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisgICAgfQorICAgIAorICAgICNyZXN1
bHRzIHsKKyAgICAgIG1hcmdpbi10b3A6IDUwcHg7CisgICAgfQorICA8L3N0eWxlPgorICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGZ1bmN0aW9u
IHNlbmRDbGljayhlbGVtZW50LCBjbGllbnRYLCBjbGllbnRZKQorICAgIHsKKyAgICAgIGlmICh3
aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2xp
ZW50WCwgY2xpZW50WSk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAg
ICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24g
bW91c2VEb3duT25PdmVyZmxvd0RpdihlbGVtZW50SWQsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVkp
CisgICAgeworICAgICAgbG9nKCdUZXN0aW5nIGNsaWNrcyBvbiAnICsgZWxlbWVudElkKTsKKwor
ICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQpOwor
ICAgICAgdmFyIHNjcm9sbEluY3JlbWVudCA9IDQwOworICAgICAgdmFyIGJvcmRlciA9IDIwOwor
ICAgICAgdmFyIHNjcm9sbGJhcldpZHRoID0gMTY7CisgICAgICB2YXIgc2Nyb2xsYmFySGVpZ2h0
ID0gMTY7CisgICAgICAKKyAgICAgIHZhciBzY3JvbGxiYXJNaWRYID0gdHJhbnNsYXRlWCArIGVs
ZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLSBib3JkZXIgLSBzY3JvbGxi
YXJXaWR0aCAvIDI7CisgICAgICAvLyBSZWNhbGwgdGhhdCBEUlQgc2V0cyBzY3JvbGwgYXJyb3dz
IHRvIGJlIHRvZ2V0aGVyIGF0IGVuZCBlbmQgb2YgdGhlIHNjcm9sbGJhcgorICAgICAgdmFyIHNj
cm9sbGJhclRvcEFycm93WSA9IHRyYW5zbGF0ZVkgKyBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1l
bnQub2Zmc2V0SGVpZ2h0IC0gYm9yZGVyIC0gc2Nyb2xsYmFySGVpZ2h0IC0gc2Nyb2xsYmFySGVp
Z2h0IC0gMzsKKyAgICAgIHZhciBzY3JvbGxiYXJCb3R0b21BcnJvd1kgPSB0cmFuc2xhdGVZICsg
ZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIHNjcm9s
bGJhckhlaWdodCAtIDM7CisgICAgICAKKyAgICAgIHNlbmRDbGljayhlbGVtZW50LCBzY3JvbGxi
YXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOworICAgICAgc2VuZENsaWNrKGVsZW1lbnQs
IHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhckJvdHRvbUFycm93WSk7CisgICAgICBpZiAoZWxlbWVu
dC5zY3JvbGxUb3AgPT0gMiAqIHNjcm9sbEluY3JlbWVudCkKKyAgICAgICAgbG9nKCdTY3JvbGxl
ZCBkb3duIGJ5ICcgKyAoMiAqIHNjcm9sbEluY3JlbWVudCkgKyAnIG9uIGRvd24gYXJyb3cgY2xp
Y2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xsIGRv
d24gLSBzY3JvbGxUb3AgaXMgJyArIGVsZW1lbnQuc2Nyb2xsVG9wICsgJzogRkFJTCcpOworCisg
ICAgICBzZW5kQ2xpY2soZWxlbWVudCwgc2Nyb2xsYmFyTWlkWCwgc2Nyb2xsYmFyVG9wQXJyb3dZ
KTsKKyAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PSBzY3JvbGxJbmNyZW1lbnQpCisgICAg
ICAgIGxvZygnU2Nyb2xsZWQgdXAgYnkgJyArIHNjcm9sbEluY3JlbWVudCArICcgb24gdXAgYXJy
b3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQgdG8gc2Ny
b2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBlbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwnKTsK
KworICAgICAgbG9nKCcnKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAg
ICB7CisgICAgICB2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRz
Jyk7CisgICAgICByZXN1bHRzLmlubmVySFRNTCArPSBtc2cgKyAnPGJyPic7CisgICAgfQorICAg
IAorICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICB9
CisgICAgICAKKyAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGxvZygn
VGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBEUlQnKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8g
SGF2ZSB0byB3YWl0IGZvciB0aGUgc2VsZWN0IHRvIGJlIHBhaW50ZWQgYmVmb3JlIHRoZQorICAg
ICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVkIGNvcnJlY3RseS4KKyAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgIG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoJ2JveDEnLCAwLCAwKTsK
KyAgICAgICAgbW91c2VEb3duT25PdmVyZmxvd0RpdignYm94MicsIDUwLCA1MCk7CisgICAgICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfSwgMCk7CisgICAgfQorICA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KKworCisgIDxkaXYgY2xhc3M9ImJveCIg
aWQ9ImJveDEiPgorICAgIDxkaXYgY2xhc3M9ImlubmVyIj5Jbm5lcjwvZGl2PgorICA8L2Rpdj4K
KworICA8ZGl2IGNsYXNzPSJib3giIGlkPSJib3gyIiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zvcm06
IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxkaXYgY2xhc3M9ImlubmVyIj5Jbm5lcjwv
ZGl2PgorICA8L2Rpdj4KKworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGQ3NTQ1YTkuLjhhY2E3YjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2IEBACisyMDA5LTAzLTE1ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE5CisgICAgICAgIAorICAgICAgICBGaXggY2xpY2sg
aGFuZGxpbmcgaW4gc2Nyb2xsYmFycyBvZiBsaXN0IGJveGVzLCBhbmQgb3ZlcmZsb3c6c2Nyb2xs
IGVsZW1lbnRzCisgICAgICAgIHRvIGJlIHRyYW5zZm9ybS1hd2FyZS4KKworICAgICAgICBUZXN0
czogcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJveC1zY3JvbGxiYXItaGl0LXRlc3QuaHRt
bAorICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Ny
b2xsYmFyLWhpdC10ZXN0Lmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6Cisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OmV2ZW50TWF5U3RhcnREcmFnKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6cHJlcGFyZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVy
OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2Vu
ZENvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpob3Zl
clRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVy
ZXNpc0V4Y2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNl
UHJlc3NFdmVudFRvU2Nyb2xsYmFyKToKKyAgICAgICAgVXNlIHRoZSBuZXcgcG9pbnQtbWFwcGlu
ZyBtZXRob2RzIHRoYXQgYXJlIHRyYW5zZm9ybS1hd2FyZS4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRIYW5kbGVyOjp3aW5kb3dUb0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6d2luZG93VG9TY3JvbGxiYXJQb2ludCk6CisgICAgICAgIE5ldyBtZXRob2RzIHRo
YXQgbWFwIHBvaW50cyBmcm9tIGNvbnRhaW5pbmcgd2luZG93IHRvIGNvbnRlbnQsIGZyYW1lCisg
ICAgICAgIGFuZCBzY3JvbGxiYXIgY29vcmRzIHZpYSByZW5kZXJlcnMgdmlhIEZyYW1lVmlldywg
cmF0aGVyIHRoYW4gdGhyb3VnaCB3aWRnZXRzLgorICAgICAgICAKKyAgICAgICAgKiBwYWdlL0Zy
YW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbGJhck93bmVy
KToKKyAgICAgICAgSW1wbGVtZW50IHRoZSBuZXcgU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4KKyAg
ICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNvbnRhaW5pbmdXaW5kb3dUb0Fi
c29sdXRlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjptYXBQb2ludFRocm91
Z2hDb250YWluaW5nVmlld3MpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAg
IE1hcCBwb2ludHMgZnJvbSBjb250YWluaW5nIHdpbmRvdyB0byAicGFnZSIgKGkuZS4gImFic29s
dXRlIiBmb3IgdGhlIGNvbnRlbnQgZG9jdW1lbnQpCisgICAgICAgIGNvb3JkaW5hdGVzLCBieSB3
YWxraW5nIHRocm91Z2ggZW5jbG9zaW5nIEZyYW1lVmlld3MgYW5kIG1hcHBpbmcgdGhlIHBvaW50
IHRocm91Z2gKKyAgICAgICAgcmVuZGVyZXJzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291
bnQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oOgor
ICAgICAgICBBZGQgYSBjb21tZW50IHNheWluZyB3aGF0IGNvb3JkcyB0aGUgcG9pbnQgaXMgaW4u
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNj
cm9sbGJhclVuZGVyTW91c2UpOgorICAgICAgICBQYXNzIGluIHRoZSB2aWV3LXJlbGF0aXZlIHBv
aW50LCByYXRoZXIgdGhhbiB0aGUgZXZlbnQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbGJhci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNlTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyOjptb3VzZURvd24pOgorICAgICAgICBQYXNzIGluIGEgc2Nyb2xsYmFyLWxvY2FsIHBv
aW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGhpdCB0ZXN0aW5nLCBzbyB0aGF0IGl0CisgICAgICAg
IGRvZXNuJ3QgaGF2ZSB0byBjYWxsIHRoZSB0cmFuc2Zvcm0tdW5hd2FyZSBXaWRnZXQ6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdygpCisgICAgICAgIG1ldGhvZHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsYmFyT3duZXIpOgorICAgICAgICBOZXcgbWV0aG9kIHRoYXQgYWxsb3dzIEZy
YW1lVmlldyB0byBhc2sgZm9yIHRoZSByZW5kZXJlciB0aGF0IG93bnMgdGhlIHNjcm9sbGJhciwK
KyAgICAgICAgYW5kIGFuIG9mZnNldCBvZiB0aGUgc2Nyb2xsYmFyIHdpdGhpbiB0aGF0IHJlbmRl
cmVyLCBzbyB0aGF0IHRoZSBGcmFtZVZpZXcKKyAgICAgICAgY2FuIG1hcCBwb2ludHMgdG8gc2Ny
b2xsYmFyLWxvY2FsIGNvb3JkcyBpbiB3aW5kb3dUb1Njcm9sbGJhclBvaW50KCkuCisgICAgICAg
IAorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZTo6aGl0VGVzdCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBv
c2l0ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdCk6CisgICAgICAgIFBhc3MgaW4gYSBwb2ludCBpbiBz
Y3JvbGxiYXItbG9jYWwgY29vcmRzIGZvciBoaXQgdGVzdGluZy4KKyAgICAgICAgCisgICAgICAg
ICogcGxhdGZvcm0vV2lkZ2V0Lmg6CisgICAgICAgIFJlbW92ZSBhIG5vbi1leGlzdGVudCBmb3J3
YXJkLWRlY2xhcmVkIGNsYXNzLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJm
bG93Q29udHJvbCk6CisgICAgICAgIFBhc3MgYSBwb2ludCBpbiBsb2NhbCBjb29yZGluYXRlcyB0
byBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoKS4KKworICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsYmFyT3duZXIpOgorICAg
ICAgICBJbXBsZW1lbnQgdGhlIFNjcm9sbGJhckNsaWVudCBtZXRob2QgZm9yIHRoZSBvdmVyZmxv
dyBzY3JvbGxiYXJzLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9scyk6CisgICAgICAgIFVzZSB0aGUgbG9jYWxQb2ludCBmb3Ig
aGl0IHRlc3RpbmcsIHJhdGhlciB0aGFuIGNvbXB1dGluZyBhbiBhYnNvbHV0ZSBwb2ludC4KKyAg
ICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKToKKyAgICAg
ICAgRml4IGEgYnVnIHdoZXJlIHRoZSBib3JkZXIgd2FzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQg
d2hlbiBjb21wdXRpbmcgdGhlCisgICAgICAgIHNjcm9sbGJhciByZWN0LgorICAgICAgICAKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbGJhck93bmVyKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICBJbXBsZW1lbnQgdGhlIFNjcm9s
bGJhckNsaWVudCBtZXRob2QuCisKIDIwMDktMDMtMTQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxh
cEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAppbmRleCA4OTgxN2JhLi5jZWJmN2JiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApA
QCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZl
bnRTaW5nbGVDbGljayhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSCiAKICAgICAvLyBEb24n
dCByZXN0YXJ0IHRoZSBzZWxlY3Rpb24gd2hlbiB0aGUgbW91c2UgaXMgcHJlc3NlZCBvbiBhbgog
ICAgIC8vIGV4aXN0aW5nIHNlbGVjdGlvbiBzbyB3ZSBjYW4gYWxsb3cgZm9yIHRleHQgZHJhZ2dp
bmcuCi0gICAgSW50UG9pbnQgdlBvaW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRl
bnRzKGV2ZW50LmV2ZW50KCkucG9zKCkpOworICAgIEludFBvaW50IHZQb2ludCA9IHdpbmRvd1Rv
Q29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3MoKSk7CiAgICAgaWYgKCFleHRlbmRTZWxlY3Rpb24g
JiYgbV9mcmFtZS0+c2VsZWN0aW9uKCktPmNvbnRhaW5zKHZQb2ludCkpIHsKICAgICAgICAgbV9t
b3VzZURvd25XYXNTaW5nbGVDbGlja0luU2VsZWN0aW9uID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudE1heVN0
YXJ0RHJhZyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVx
dWVzdDo6UmVhZE9ubHkpOwotICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1fZnJhbWUtPnZpZXco
KS0+d2luZG93VG9Db250ZW50cyhldmVudC5wb3MoKSkpOworICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0KHdpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zKCkpKTsKICAgICBtX2ZyYW1lLT5jb250ZW50
UmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogICAgIGJvb2wg
c3JjSXNESFRNTDsKICAgICByZXR1cm4gcmVzdWx0LmlubmVyTm9kZSgpICYmIHJlc3VsdC5pbm5l
ck5vZGUoKS0+cmVuZGVyZXIoKS0+ZHJhZ2dhYmxlTm9kZShESFRNTEZsYWcsIFVBRmxhZywgcmVz
dWx0LnBvaW50KCkueCgpLCByZXN1bHQucG9pbnQoKS55KCksIHNyY0lzREhUTUwpOwpAQCAtNDY2
LDcgKzQ2Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURy
YWcoKQogICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Q6Ok1vdXNlTW92ZSk7Ci0g
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodmlldy0+d2luZG93VG9Db250ZW50cyhtX2N1cnJlbnRN
b3VzZVBvc2l0aW9uKSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQod2luZG93VG9Db250ZW50
cyhtX2N1cnJlbnRNb3VzZVBvc2l0aW9uKSk7CiAgICAgbGF5ZXItPmhpdFRlc3QocmVxdWVzdCwg
cmVzdWx0KTsKICAgICB1cGRhdGVTZWxlY3Rpb25Gb3JNb3VzZURyYWcocmVzdWx0LmlubmVyTm9k
ZSgpLCByZXN1bHQubG9jYWxQb2ludCgpKTsKIH0KQEAgLTczMiw2ICs3MzIsNyBAQCBIaXRUZXN0
UmVzdWx0IEV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQoY29uc3QgSW50UG9pbnQm
IHBvaW50LCBib29sIGFsbAogICAgIEZyYW1lKiByZXN1bHRGcmFtZSA9IHJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSA/IHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+
ZnJhbWUoKSA6IDA7CiAgICAgRnJhbWUqIG1haW5GcmFtZSA9IG1fZnJhbWUtPnBhZ2UoKS0+bWFp
bkZyYW1lKCk7CiAgICAgaWYgKG1fZnJhbWUgIT0gbWFpbkZyYW1lICYmIHJlc3VsdEZyYW1lICYm
IHJlc3VsdEZyYW1lICE9IG1haW5GcmFtZSAmJiAhcmVzdWx0RnJhbWUtPmVkaXRvcigpLT5pbnNp
ZGVWaXNpYmxlQXJlYShyZXN1bHQucG9pbnQoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IHRoaXMg
bG9naWMgaXMgbm90IHRyYW5zZm9ybXMtYXdhcmUuIENvbnNpZGVyIHVzaW5nIGNvbnRhaW5pbmdX
aW5kb3dUb0Fic29sdXRlUG9pbnQoKS4KICAgICAgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBy
ZXN1bHRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlc3VsdC5wb2ludCgpKTsKICAg
ICAgICAgSW50UG9pbnQgbWFpbkZyYW1lUG9pbnQgPSBtYWluRnJhbWUtPnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyh3aW5kb3dQb2ludCk7CiAgICAgICAgIHJlc3VsdCA9IG1haW5GcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50KG1haW5GcmFtZVBvaW50LCBhbGxvd1No
YWRvd0NvbnRlbnQsIGlnbm9yZUNsaXBwaW5nKTsKQEAgLTkxOSw3ICs5MjAsNyBAQCBDdXJzb3Ig
RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYgZXZlbnQsIFNjcgogICAgICAgICAgICAgICAgIHJldHVybiBoYW5kQ3Vyc29yKCk7CiAg
ICAgICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5lbmNs
b3NpbmdMYXllcigpIDogMDsKICAgICAgICAgICAgIGJvb2wgaW5SZXNpemVyID0gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAobV9mcmFtZS0+dmlldygpICYmIGxheWVyICYmIGxheWVyLT5pc1BvaW50
SW5SZXNpemVDb250cm9sKG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhldmVudC5l
dmVudCgpLnBvcygpKSkpCisgICAgICAgICAgICBpZiAobV9mcmFtZS0+dmlldygpICYmIGxheWVy
ICYmIGxheWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHdpbmRvd1RvQ29udGVudHMoZXZlbnQu
ZXZlbnQoKS5wb3MoKSkpKQogICAgICAgICAgICAgICAgIGluUmVzaXplciA9IHRydWU7CiAgICAg
ICAgICAgICBpZiAoKGVkaXRhYmxlIHx8IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNUZXh0KCkg
JiYgbm9kZS0+Y2FuU3RhcnRTZWxlY3Rpb24oKSkpICYmICFpblJlc2l6ZXIgJiYgIXNjcm9sbGJh
cikKICAgICAgICAgICAgICAgICByZXR1cm4gaUJlYW1DdXJzb3IoKTsKQEAgLTEwMTAsNyArMTAx
MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgIG1fbW91c2VEb3duTWF5U3RhcnREcmFn
ID0gZmFsc2U7CiAgICAgbV9tb3VzZURvd25NYXlTdGFydFNlbGVjdCA9IGZhbHNlOwogICAgIG1f
bW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsID0gZmFsc2U7Ci0gICAgbV9tb3VzZURvd25Qb3Mg
PSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobW91c2VFdmVudC5wb3MoKSk7Cisg
ICAgbV9tb3VzZURvd25Qb3MgPSB3aW5kb3dUb0NvbnRlbnRzKG1vdXNlRXZlbnQucG9zKCkpOwog
ICAgIG1fbW91c2VEb3duV2FzSW5TdWJmcmFtZSA9IGZhbHNlOwogCiAgICAgSGl0VGVzdFJlcXVl
c3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKQEAgLTEwNzEsNyArMTA3Miw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgIG1fY2xpY2tOb2RlID0gbWV2LnRhcmdldE5vZGUo
KTsKICAgICAKICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSBtX2NsaWNrTm9kZS0+cmVuZGVyZXIo
KSA/IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpIDogMDsKLSAgICBJ
bnRQb2ludCBwID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKG1vdXNlRXZlbnQu
cG9zKCkpOworICAgIEludFBvaW50IHAgPSB3aW5kb3dUb0NvbnRlbnRzKG1vdXNlRXZlbnQucG9z
KCkpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+aXNQb2ludEluUmVzaXplQ29udHJvbChwKSkg
ewogICAgICAgICBsYXllci0+c2V0SW5SZXNpemVNb2RlKHRydWUpOwogICAgICAgICBtX3Jlc2l6
ZUxheWVyID0gbGF5ZXI7CkBAIC0xMTEwLDcgKzExMTEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVu
dCkKICAgICAgICAgICAgIG1ldiA9IHByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIG1vdXNlRXZl
bnQpOwogICAgICAgICB9CiAKLSAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX2ZyYW1l
LT52aWV3KCktPnNjcm9sbGJhclVuZGVyTW91c2UobW91c2VFdmVudCk7CisgICAgICAgIFNjcm9s
bGJhciogc2Nyb2xsYmFyID0gbV9mcmFtZS0+dmlldygpLT5zY3JvbGxiYXJVbmRlck1vdXNlKHdp
bmRvd1RvRnJhbWUobW91c2VFdmVudC5wb3MoKSkpOwogICAgICAgICBpZiAoIXNjcm9sbGJhcikK
ICAgICAgICAgICAgIHNjcm9sbGJhciA9IG1ldi5zY3JvbGxiYXIoKTsKICAgICAgICAgaWYgKHNj
cm9sbGJhciAmJiBwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIobWV2LCBzY3JvbGxiYXIp
KQpAQCAtMTIwMiw3ICsxMjAzLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92
ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKIAogICAgIC8v
IFNlbmQgZXZlbnRzIHJpZ2h0IHRvIGEgc2Nyb2xsYmFyIGlmIHRoZSBtb3VzZSBpcyBwcmVzc2Vk
LgogICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlICYmIG1fbW91c2VQcmVzc2VkKQot
ICAgICAgICByZXR1cm4gbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+bW91c2VNb3ZlZChtX2xh
c3RTY3JvbGxiYXJVbmRlck1vdXNlLT50cmFuc2Zvcm1FdmVudChtb3VzZUV2ZW50KSk7CisgICAg
ICAgIHJldHVybiBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlLT5tb3VzZU1vdmVkKG1fbGFzdFNj
cm9sbGJhclVuZGVyTW91c2UtPnRyYW5zZm9ybUV2ZW50KG1vdXNlRXZlbnQpLCB3aW5kb3dUb1Nj
cm9sbGJhclBvaW50KG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UuZ2V0KCksIG1vdXNlRXZlbnQu
cG9zKCkpKTsKIAogICAgIC8vIFRyZWF0IG1vdXNlIG1vdmUgZXZlbnRzIHdoaWxlIHRoZSBtb3Vz
ZSBpcyBwcmVzc2VkIGFzICJyZWFkLW9ubHkiIGluIHByZXBhcmVNb3VzZUV2ZW50CiAgICAgLy8g
aWYgd2UgYXJlIGFsbG93ZWQgdG8gc2VsZWN0LgpAQCAtMTIyNCw3ICsxMjI1LDcgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgbV9yZXNpemVMYXllci0+cmVzaXplKG1vdXNlRXZl
bnQsIG1fb2Zmc2V0RnJvbVJlc2l6ZUNvcm5lcik7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICht
X2ZyYW1lLT52aWV3KCkpCi0gICAgICAgICAgICBzY3JvbGxiYXIgPSBtX2ZyYW1lLT52aWV3KCkt
PnNjcm9sbGJhclVuZGVyTW91c2UobW91c2VFdmVudCk7CisgICAgICAgICAgICBzY3JvbGxiYXIg
PSBtX2ZyYW1lLT52aWV3KCktPnNjcm9sbGJhclVuZGVyTW91c2Uod2luZG93VG9GcmFtZShtb3Vz
ZUV2ZW50LnBvcygpKSk7CiAKICAgICAgICAgaWYgKCFzY3JvbGxiYXIpCiAgICAgICAgICAgICBz
Y3JvbGxiYXIgPSBtZXYuc2Nyb2xsYmFyKCk7CkBAIC0xMjUzLDggKzEyNTQsMTEgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgaWYgKG5ld1N1YmZyYW1lLT52aWV3KCkpCiAgICAg
ICAgICAgICBzd2FsbG93RXZlbnQgfD0gcGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZShtZXYs
IG5ld1N1YmZyYW1lLmdldCgpLCBob3ZlcmVkTm9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHNjcm9sbGJhciAmJiAhbV9tb3VzZVByZXNzZWQpCi0gICAgICAgICAgICBzY3JvbGxiYXIt
Pm1vdXNlTW92ZWQoc2Nyb2xsYmFyLT50cmFuc2Zvcm1FdmVudChtb3VzZUV2ZW50KSk7IC8vIEhh
bmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRi
YWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KKyAgICAgICAgaWYgKHNjcm9sbGJhciAmJiAhbV9t
b3VzZVByZXNzZWQpIHsKKyAgICAgICAgICAgIC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBs
YXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlzdWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3Zlcmlu
Zy4KKyAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChzY3JvbGxiYXItPnRyYW5zZm9y
bUV2ZW50KG1vdXNlRXZlbnQpLCB3aW5kb3dUb1Njcm9sbGJhclBvaW50KHNjcm9sbGJhciwgbW91
c2VFdmVudC5wb3MoKSkpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoKCFtX3Jl
c2l6ZUxheWVyIHx8ICFtX3Jlc2l6ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkgJiYgIW1fZnJhbWUt
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5wYW5TY3JvbGxJblByb2dyZXNz
KCkgJiYgbV9mcmFtZS0+dmlldygpKQogICAgICAgICAgICAgbV9mcmFtZS0+dmlldygpLT5zZXRD
dXJzb3Ioc2VsZWN0Q3Vyc29yKG1ldiwgc2Nyb2xsYmFyKSk7CiAgICAgfQpAQCAtMTMzMyw3ICsx
MzM3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiBkcmFnVGEKIHsKICAgICBtX2ZyYW1lLT52aWV3KCkt
PnJlc2V0RGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKIAotICAgIEludFBvaW50IGNvbnRlbnRzUG9z
ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKKyAgICBJ
bnRQb2ludCBjb250ZW50c1BvcyA9IHdpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zKCkpOwogICAg
IAogICAgIFJlZlB0cjxNb3VzZUV2ZW50PiBtZSA9IE1vdXNlRXZlbnQ6OmNyZWF0ZShldmVudFR5
cGUsCiAgICAgICAgIHRydWUsIHRydWUsIG1fZnJhbWUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3
KCksCkBAIC0xNDQwLDggKzE0NDQsNyBAQCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIEV2
ZW50SGFuZGxlcjo6cHJlcGFyZU1vdXNlRXZlbnQoY29uc3QgSGl0VGVzdFJlcXVlcwogICAgIEFT
U0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgCi0g
ICAgSW50UG9pbnQgZG9jdW1lbnRQb2ludCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250
ZW50cyhtZXYucG9zKCkpOwotICAgIHJldHVybiBtX2ZyYW1lLT5kb2N1bWVudCgpLT5wcmVwYXJl
TW91c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50LCBtZXYpOworICAgIHJldHVybiBtX2Zy
YW1lLT5kb2N1bWVudCgpLT5wcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCB3aW5kb3dUb0NvbnRl
bnRzKG1ldi5wb3MoKSksIG1ldik7CiB9CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTYwMSw3ICsx
NjA0LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoUGxhdGZvcm1XaGVl
bEV2ZW50JiBlKQogICAgIAogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHByb3RlY3RvcihtX2ZyYW1l
LT52aWV3KCkpOwogCi0gICAgSW50UG9pbnQgdlBvaW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5k
b3dUb0NvbnRlbnRzKGUucG9zKCkpOworICAgIEludFBvaW50IHZQb2ludCA9IHdpbmRvd1RvQ29u
dGVudHMoZS5wb3MoKSk7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1
ZXN0OjpSZWFkT25seSk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQodlBvaW50KTsKQEAgLTE2
NTMsNyArMTY1Niw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgYm9vbCBzd2FsbG93RXZlbnQ7Ci0gICAgSW50UG9pbnQgdmlld3BvcnRQb3MgPSB2
LT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LnBvcygpKTsKKyAgICBJbnRQb2ludCB2aWV3cG9ydFBv
cyA9IHdpbmRvd1RvQ29udGVudHMoZXZlbnQucG9zKCkpOwogICAgIEhpdFRlc3RSZXF1ZXN0IHJl
cXVlc3QoSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CiAgICAgTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyBtZXYgPSBkb2MtPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIHZpZXdwb3J0UG9z
LCBldmVudCk7CiAKQEAgLTE3MzMsNyArMTczNiw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpob3Zl
clRpbWVyRmlyZWQoVGltZXI8RXZlbnRIYW5kbGVyPiopCiAKICAgICBpZiAoUmVuZGVyVmlldyog
cmVuZGVyZXIgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICBIaXRUZXN0
UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpNb3VzZU1vdmUpOwotICAgICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdChtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMobV9jdXJy
ZW50TW91c2VQb3NpdGlvbikpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh3aW5kb3dU
b0NvbnRlbnRzKG1fY3VycmVudE1vdXNlUG9zaXRpb24pKTsKICAgICAgICAgcmVuZGVyZXItPmxh
eWVyKCktPmhpdFRlc3QocmVxdWVzdCwgcmVzdWx0KTsKICAgICAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgfQpAQCAtMTkzMSw3ICsxOTM0LDcgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgRmxvYXRQb2ludCYg
ZmxvYXREcmFnVmlld3BvcnRMb2MKICAgICAKIGJvb2wgRXZlbnRIYW5kbGVyOjpkcmFnSHlzdGVy
ZXNpc0V4Y2VlZGVkKGNvbnN0IEludFBvaW50JiBkcmFnVmlld3BvcnRMb2NhdGlvbikgY29uc3QK
IHsKLSAgICBJbnRQb2ludCBkcmFnTG9jYXRpb24gPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMoZHJhZ1ZpZXdwb3J0TG9jYXRpb24pOworICAgIEludFBvaW50IGRyYWdMb2NhdGlv
biA9IHdpbmRvd1RvQ29udGVudHMoZHJhZ1ZpZXdwb3J0TG9jYXRpb24pOwogICAgIEludFNpemUg
ZGVsdGEgPSBkcmFnTG9jYXRpb24gLSBtX21vdXNlRG93blBvczsKICAgICAKICAgICBpbnQgdGhy
ZXNob2xkID0gR2VuZXJhbERyYWdIeXN0ZXJlc2lzOwpAQCAtMjMxNCw3ICsyMzE3LDM1IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYKIHsKICAgICBpZiAoIXNjcm9sbGJhciB8fCAhc2Nyb2xsYmFy
LT5lbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gc2Nyb2xsYmFy
LT5tb3VzZURvd24obWV2LmV2ZW50KCkpOworCisgICAgcmV0dXJuIHNjcm9sbGJhci0+bW91c2VE
b3duKG1ldi5ldmVudCgpLCB3aW5kb3dUb1Njcm9sbGJhclBvaW50KHNjcm9sbGJhciwgbWV2LmV2
ZW50KCkucG9zKCkpKTsKK30KKworSW50UG9pbnQgRXZlbnRIYW5kbGVyOjp3aW5kb3dUb0NvbnRl
bnRzKGNvbnN0IEludFBvaW50JiBwKSBjb25zdAoreworICAgIHJldHVybiByb3VuZGVkSW50UG9p
bnQobV9mcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93VG9BYnNvbHV0ZVBvaW50KHApKTsK
K30KKworSW50UG9pbnQgRXZlbnRIYW5kbGVyOjp3aW5kb3dUb0ZyYW1lKGNvbnN0IEludFBvaW50
JiBwKSBjb25zdAoreworICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSByb3VuZGVkSW50UG9pbnQo
bV9mcmFtZS0+dmlldygpLT5jb250YWluaW5nV2luZG93VG9BYnNvbHV0ZVBvaW50KHApKTsKKyAg
ICBmcmFtZVBvaW50IC09IG1fZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0
dXJuIGZyYW1lUG9pbnQ7Cit9CisKK0ludFBvaW50IEV2ZW50SGFuZGxlcjo6d2luZG93VG9TY3Jv
bGxiYXJQb2ludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHApIGNvbnN0
Cit7CisgICAgaWYgKHNjcm9sbGJhci0+Y2xpZW50KCkpIHsKKyAgICAgICAgSW50U2l6ZSBzY3Jv
bGxiYXJPZmZzZXQ7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gcmVpbnRl
cnByZXRfY2FzdDxSZW5kZXJPYmplY3QqPihzY3JvbGxiYXItPmNsaWVudCgpLT5zY3JvbGxiYXJP
d25lcihzY3JvbGxiYXIsIHNjcm9sbGJhck9mZnNldCkpKSB7CisgICAgICAgICAgICBGbG9hdFBv
aW50IHBvaW50ID0gd2luZG93VG9Db250ZW50cyhwKTsKKyAgICAgICAgICAgIHBvaW50ID0gcmVu
ZGVyZXItPmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAg
cG9pbnQgLT0gc2Nyb2xsYmFyT2Zmc2V0OworICAgICAgICAgICAgcmV0dXJuIHJvdW5kZWRJbnRQ
b2ludChwb2ludCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAppbmRl
eCBmYjA0ZTEwLi5mMmNjYTc2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC0yOTAsNiArMjkwLDEyIEBA
IHByaXZhdGU6CiAKICAgICBib29sIGNhcHR1cmVzRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBt
X2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAorICAgIC8vIFRoZXNlIG1hcCBwb2ludHMgdmlhIEZyYW1l
Vmlldzo6Y29udGFpbmluZ1dpbmRvd1RvQWJzb2x1dGVQb2ludCgpLCB3aGljaCBpcyBhd2FyZSBv
ZgorICAgIC8vIHRyYW5zZm9ybXMgaW4gdGhlIGNvbnRlbnQgKHVubGlrZSBXaWRnZXQ6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdygpIGFuZCBmcmllbmRzKS4KKyAgICBJbnRQb2ludCB3aW5k
b3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwKSBjb25zdDsKKyAgICBJbnRQb2ludCB3aW5k
b3dUb0ZyYW1lKGNvbnN0IEludFBvaW50JiBwKSBjb25zdDsKKyAgICBJbnRQb2ludCB3aW5kb3dU
b1Njcm9sbGJhclBvaW50KFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JiBwKSBjb25zdDsKKyAg
ICAKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIGJvb2wgbV9tb3VzZVByZXNzZWQ7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCmluZGV4IDY5ZmNlMWEuLmU4ZjY4MWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xMjE1LDYg
KzEyMTUsMTYgQEAgdm9pZCBGcmFtZVZpZXc6OmdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4m
IHRpY2ttYXJrcykgY29uc3QKICAgICB0aWNrbWFya3MgPSBmcmFtZSgpLT5kb2N1bWVudCgpLT5y
ZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIH0KIAor
dm9pZCogRnJhbWVWaWV3OjpzY3JvbGxiYXJPd25lcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgSW50
U2l6ZSYgc2Nyb2xsYmFyT2Zmc2V0KQoreworICAgIGlmIChzY3JvbGxiYXIgPT0gaG9yaXpvbnRh
bFNjcm9sbGJhcigpKQorICAgICAgICBzY3JvbGxiYXJPZmZzZXQgPSBJbnRTaXplKDAsIGhlaWdo
dCgpIC0gc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgZWxzZSBpZiAoc2Nyb2xsYmFyID09IHZl
cnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IEludFNpemUod2lk
dGgoKSAtIHNjcm9sbGJhci0+d2lkdGgoKSwgMCk7CisgICAgICAgIAorICAgIHJldHVybiBtX2Zy
YW1lLT5jb250ZW50UmVuZGVyZXIoKTsKK30KKwogSW50UmVjdCBGcmFtZVZpZXc6OndpbmRvd1Jl
c2l6ZXJSZWN0KCkgY29uc3QKIHsKICAgICBQYWdlKiBwYWdlID0gZnJhbWUoKSA/IGZyYW1lKCkt
PnBhZ2UoKSA6IDA7CkBAIC0xNDI5LDQgKzE0MzksMzggQEAgdm9pZCBGcmFtZVZpZXc6OmFkanVz
dFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0
b20KICAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKIH0KIAorRmxvYXRQb2ludCBGcmFt
ZVZpZXc6OmNvbnRhaW5pbmdXaW5kb3dUb0Fic29sdXRlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYg
cCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFwUG9pbnRUaHJvdWdoQ29udGFpbmluZ1ZpZXdzKHAp
OworfQorCitGbG9hdFBvaW50IEZyYW1lVmlldzo6bWFwUG9pbnRUaHJvdWdoQ29udGFpbmluZ1Zp
ZXdzKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgRmxvYXRQb2ludCBjdXJyUG9p
bnQgPSBwOworCisgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+b3duZXJFbGVtZW50KCk7CisgICAgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gb3duZXJFbGVt
ZW50ID8gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLT52aWV3KCkgOiAwOworICAgIGlmICghcGFy
ZW50VmlldykgeworICAgICAgICBjdXJyUG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPmNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhyb3VuZGVkSW50UG9pbnQoY3VyclBvaW50KSk7CisgICAgICAg
IGN1cnJQb2ludCArPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIGN1cnJQb2ludDsK
KyAgICB9CisKKyAgICBjdXJyUG9pbnQgPSBwYXJlbnRWaWV3LT5tYXBQb2ludFRocm91Z2hDb250
YWluaW5nVmlld3MoY3VyclBvaW50KTsKKworICAgIC8vIEdldCBvdXIgcmVuZGVyZXIgaW4gdGhl
IHBhcmVudCB2aWV3CisgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJl
bmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIGN1cnJQb2ludDsK
KworICAgIC8vIE1hcCB0aHJvdWdoIHRyYW5zZm9ybXMgaW4gdGhlIHBhcmVudCB2aWV3J3MgZG9j
dW1lbnQKKyAgICBjdXJyUG9pbnQgPSByZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKGN1cnJQb2lu
dCwgZmFsc2UsIHRydWUgLyogdXNlVHJhbnNmb3JtcyAqLyk7CisgICAgLy8gU3VidHJhY3QgYm9y
ZGVycyBhbmQgcGFkZGluZworICAgIGN1cnJQb2ludC5tb3ZlKC1yZW5kZXJlci0+Ym9yZGVyTGVm
dCgpIC0gcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgLXJlbmRl
cmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOworICAgIC8vIEFkZCB0
aGUgc2Nyb2xsT2Zmc2V0IHRvIGdldCBpbnRvIHBhZ2UgY29vcmRzCisgICAgY3VyclBvaW50ICs9
IHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBjdXJyUG9pbnQ7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCA0MjA2NjAwLi5kODRkMzQxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBA
IC0xMjksMTAgKzEyOSwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0Ns
aXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMgPSB0cnVlKSBjb25zdDsKICAgICBJbnRSZWN0IHdp
bmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqLCBib29sIGNsaXBUb0xheWVy
Q29udGVudHMpIGNvbnN0OwogCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZHMKICAgICB2
aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2tt
YXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQqIHNjcm9sbGJh
ck93bmVyKFNjcm9sbGJhciosIEludFNpemUmIHNjcm9sbGJhck9mZnNldCk7CiAKICAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKIApAQCAtMTg2LDYgKzE4OCw4
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRqdXN0UGFnZUhlaWdodChmbG9hdCogbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9tTGltaXQpOwogCisg
ICAgLy8gQ29udmVydCBhIHBvaW50IGZyb20gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjb250YWlu
aW5nIHdpbmRvdyBpbnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBjb250ZW50IG9mIHRo
aXMgRnJhbWVWaWV3CisgICAgRmxvYXRQb2ludCBjb250YWluaW5nV2luZG93VG9BYnNvbHV0ZVBv
aW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0
KCk7CkBAIC0xOTksNiArMjAzLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZs
b3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7
CiAKKyAgICBGbG9hdFBvaW50IG1hcFBvaW50VGhyb3VnaENvbnRhaW5pbmdWaWV3cyhjb25zdCBG
bG9hdFBvaW50JiBwKSBjb25zdDsKKwogICAgIHZvaWQgZGlzcGF0Y2hTY2hlZHVsZWRFdmVudHMo
KTsKICAgICB2b2lkIHBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1Nb3VzZUV2ZW50LmgKaW5kZXggMWI5MjE1My4uMGIyNjYzZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtTW91c2VFdmVudC5oCkBAIC0xMzgsNyArMTM4LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEludFBvaW50IG1fcG9zaXRpb247Cisg
ICAgICAgIEludFBvaW50IG1fcG9zaXRpb247ICAgIC8vIGluIHRoZSBjb29yZGluYXRlcyBvZiB0
aGUgdG9wLWxldmVsIHdpbmRvdwogICAgICAgICBJbnRQb2ludCBtX2dsb2JhbFBvc2l0aW9uOwog
ICAgICAgICBNb3VzZUJ1dHRvbiBtX2J1dHRvbjsKICAgICAgICAgTW91c2VFdmVudFR5cGUgbV9l
dmVudFR5cGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCAxMTU0ZDc2Li44ODYwNmFiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKQEAgLTU4NSwxMiArNTg1LDExIEBAIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFp
bnRPblVuc3VwcHJlCiAgICAgfQogfQogCi1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJh
clVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQorU2Nyb2xs
YmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IEludFBvaW50JiB2aWV3
UG9pbnQpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KG1v
dXNlRXZlbnQucG9zKCkpOwogICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIgJiYgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2aWV3UG9pbnQpKQogICAgICAg
ICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwogICAgIGlmIChtX3ZlcnRpY2Fs
U2Nyb2xsYmFyICYmIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKHZp
ZXdQb2ludCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IGY1ODg1MDguLjhlZmE3MTkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCkBAIC0xODMsNyArMTgzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogCiAgICAgLy8gRm9yIHBsYXRmb3Jt
cyB0aGF0IG5lZWQgdG8gaGl0IHRlc3Qgc2Nyb2xsYmFycyBmcm9tIHdpdGhpbiB0aGUgZW5naW5l
J3MgZXZlbnQgaGFuZGxlcnMgKGxpa2UgV2luMzIpLgotICAgIFNjcm9sbGJhciogc2Nyb2xsYmFy
VW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpOworICAgIC8v
IFRoZSBwb2ludCBpcyB2aWV3LXJlbGF0aXZlLgorICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyVW5k
ZXJNb3VzZShjb25zdCBJbnRQb2ludCYpOwogCiAgICAgLy8gVGhpcyBtZXRob2QgZXhpc3RzIGZv
ciBzY3JvbGx2aWV3cyB0aGF0IG5lZWQgdG8gaGFuZGxlIHdoZWVsIGV2ZW50cyBtYW51YWxseS4K
ICAgICAvLyBPbiBNYWMgdGhlIHVuZGVybHlpbmcgTlNTY3JvbGxWaWV3IGp1c3QgZG9lcyB0aGUg
c2Nyb2xsaW5nLCBidXQgb24gb3RoZXIgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5k
ZXggMTNiYjBjOS4uYWM3N2UzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcApAQCAtMzAzLDE5ICsz
MDMsMTcgQEAgdm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFy
dCkKICAgICAgICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9wcmVzc2VkUGFydCk7
CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZ0KQorYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldnQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQogewogICAgIGlmIChtX3ByZXNz
ZWRQYXJ0ID09IFRodW1iUGFydCkgewotICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCi0gICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS54KCkgOgotICAgICAgICAgICAgICAgICAgY29udmVy
dEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueSgpKTsKKyAgICAgICAgbW92ZVRodW1i
KG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGxvY2FsUG9pbnQueCgpIDog
bG9jYWxQb2ludC55KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAo
bV9wcmVzc2VkUGFydCAhPSBOb1BhcnQpCi0gICAgICAgIG1fcHJlc3NlZFBvcyA9IChvcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5k
b3coZXZ0LnBvcygpKS54KCkgOiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygp
KS55KCkpOworICAgICAgICBtX3ByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyID8gbG9jYWxQb2ludC54KCkgOiBsb2NhbFBvaW50LnkoKSk7CiAKLSAgICBT
Y3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2dCk7ICAgIAorICAg
IFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LCBsb2NhbFBv
aW50KTsgICAgCiAgICAgaWYgKHBhcnQgIT0gbV9ob3ZlcmVkUGFydCkgewogICAgICAgICBpZiAo
bV9wcmVzc2VkUGFydCAhPSBOb1BhcnQpIHsKICAgICAgICAgICAgIGlmIChwYXJ0ID09IG1fcHJl
c3NlZFBhcnQpIHsKQEAgLTM1NSwxNCArMzUzLDE0IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZVVw
KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6Om1vdXNlRG93bihjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFyOjptb3VzZURvd24oY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KQog
ewogICAgIC8vIEVhcmx5IGV4aXQgZm9yIHJpZ2h0IGNsaWNrCiAgICAgaWYgKGV2dC5idXR0b24o
KSA9PSBSaWdodEJ1dHRvbikKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEZJWE1FOiBIYW5kbGVk
IGFzIGNvbnRleHQgbWVudSBieSBRdCByaWdodCBub3cuICBTaG91bGQganVzdCBhdm9pZCBldmVu
IGNhbGxpbmcgdGhpcyBtZXRob2Qgb24gYSByaWdodCBjbGljayB0aG91Z2guCiAKLSAgICBzZXRQ
cmVzc2VkUGFydCh0aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2dCkpOwotICAgIGludCBwcmVzc2Vk
UG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLngoKSA6IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhldnQucG9zKCkpLnkoKSk7CisgICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0VGVz
dCh0aGlzLCBldnQsIGxvY2FsUG9pbnQpKTsKKyAgICBpbnQgcHJlc3NlZFBvcyA9IChvcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBsb2NhbFBvaW50LngoKSA6IGxvY2FsUG9p
bnQueSgpKTsKICAgICAKICAgICBpZiAoKHByZXNzZWRQYXJ0KCkgPT0gQmFja1RyYWNrUGFydCB8
fCBwcmVzc2VkUGFydCgpID09IEZvcndhcmRUcmFja1BhcnQpICYmIHRoZW1lKCktPnNob3VsZENl
bnRlck9uVGh1bWIodGhpcywgZXZ0KSkgewogICAgICAgICBzZXRIb3ZlcmVkUGFydChUaHVtYlBh
cnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggMmM1YjI3NC4uODdlZGVkZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCkBAIC05NCwxMyArOTQsMTMgQEAgcHVibGljOgogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIHVzZWQgZm9yIHBsYXRmb3JtIHNjcm9sbGJhcnMgdG8gZ2l2ZSA6aG92ZXIgZmVlZGJhY2su
ICBUaGV5IHdpbGwgbm90IGdldCBjYWxsZWQKICAgICAvLyB3aGVuIHRoZSBtb3VzZSB3ZW50IGRv
d24gaW4gYSBzY3JvbGxiYXIsIHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhlIHNjcm9sbGJhciB3aWxs
IHN0YXJ0CiAgICAgLy8gZ3JhYmJpbmcgYWxsIGV2ZW50cyBpbiB0aGF0IGNhc2UgYW55d2F5Lgot
ICAgIGJvb2wgbW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICBib29s
IG1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50UG9pbnQmIGxv
Y2FsUG9pbnQpOwogICAgIGJvb2wgbW91c2VFeGl0ZWQoKTsKICAgICAKICAgICAvLyBVc2VkIGJ5
IHNvbWUgcGxhdGZvcm0gc2Nyb2xsYmFycyB0byBrbm93IHdoZW4gdGhleSd2ZSBiZWVuIHJlbGVh
c2VkIGZyb20gY2FwdHVyZS4KICAgICBib29sIG1vdXNlVXAoKTsKIAotICAgIGJvb2wgbW91c2VE
b3duKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIGJvb2wgbW91c2VEb3duKGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKIAogI2lm
IFBMQVRGT1JNKFFUKQogICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCB3aXNoIHRvIGhhbmRsZSBj
b250ZXh0IG1lbnUgZXZlbnRzLgpAQCAtMTExLDYgKzExMSw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IFRha2VzIGFuIGV2ZW50IGFuZCBhY2NvdW50cyBmb3IgYW55IHRyYW5zZm9ybXMgdGhhdCBtaWdo
dCBvY2N1ciBvbiB0aGUgc2Nyb2xsYmFyLiAgUmV0dXJucwogICAgIC8vIGEgbmV3IGV2ZW50IHRo
YXQgaGFzIGhhZCBhbGwgb2YgdGhlIHRyYW5zZm9ybXMgYXBwbGllZC4KKyAgICAvLyBGSVhNRTog
bm8gbG9uZ2VyIG5lZWRlZDsgcmVtb3ZlPwogICAgIFBsYXRmb3JtTW91c2VFdmVudCB0cmFuc2Zv
cm1FdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICAKICAgICBTY3JvbGxiYXJU
aGVtZSogdGhlbWUoKSBjb25zdCB7IHJldHVybiBtX3RoZW1lOyB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJDbGllbnQuaAppbmRleCBmNzIwZTk1Li44NjZjOGNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
Q2xpZW50LmgKQEAgLTQ1LDYgKzQ1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY3Jv
bGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldFRp
Y2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KKyAgICAKKyAgICAvLyBSZXR1cm4g
dGhlIFJlbmRlck9iamVjdCB0aGF0IG93bnMgdGhlIHNjcm9sbGJhciwgYW5kIHRoZSBzY3JvbGxi
YXIncyBvZmZzZXQgd2l0aGluIHRoYXQgcmVuZGVyZXIuCisgICAgdmlydHVhbCB2b2lkKiBzY3Jv
bGxiYXJPd25lcihTY3JvbGxiYXIqLCBJbnRTaXplJiBzY3JvbGxiYXJPZmZzZXQpIHsgc2Nyb2xs
YmFyT2Zmc2V0ID0gSW50U2l6ZSgpOyByZXR1cm4gMDsgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXJUaGVtZS5oCmluZGV4IGUyYWViYzYuLjIyODlhNzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
clRoZW1lLmgKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbGJh
clRoZW1lKCkge307CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgLypkYW1hZ2VSZWN0Ki8pIHsgcmV0dXJuIGZhbHNl
OyB9Ci0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyKiwgY29uc3Qg
UGxhdGZvcm1Nb3VzZUV2ZW50JikgeyByZXR1cm4gTm9QYXJ0OyB9CisgICAgdmlydHVhbCBTY3Jv
bGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwg
Y29uc3QgSW50UG9pbnQmIC8qbG9jYWxQb2ludCovKSB7IHJldHVybiBOb1BhcnQ7IH0KICAgICAK
ICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUg
PSBSZWd1bGFyU2Nyb2xsYmFyKSB7IHJldHVybiAwOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKaW5kZXggYWI1ZTE2Yi4uOTk4YWFmMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKQEAgLTE1NiwxMyAr
MTU2LDEzIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRlc3QoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQorU2Nyb2xsYmFyUGFy
dCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCiB7
CiAgICAgU2Nyb2xsYmFyUGFydCByZXN1bHQgPSBOb1BhcnQ7CiAgICAgaWYgKCFzY3JvbGxiYXIt
PmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFBvaW50IG1vdXNl
UG9zaXRpb24gPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9z
KCkpOworICAgIEludFBvaW50IG1vdXNlUG9zaXRpb24gPSBsb2NhbFBvaW50OwogICAgIG1vdXNl
UG9zaXRpb24ubW92ZShzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkpOwogICAgIAogICAg
IGlmICghc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAppbmRleCBkOGMzZmJiLi5m
MWM2MTI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCkBA
IC0zNCw3ICszNCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNj
cm9sbGJhclRoZW1lIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFy
KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsK
IAotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhciosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNj
cm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFBvaW50JiBsb2Nh
bFBvaW50KTsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXIqLCBT
Y3JvbGxiYXJQYXJ0KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKaW5kZXggMDI5Y2M3OC4uZGQ1YzNhMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1dp
ZGdldC5oCkBAIC04MSw3ICs4MSw2IEBAIGNsYXNzIEZvbnQ7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBTY3JvbGxWaWV3OwotY2xhc3Mg
V2lkZ2V0Q2xpZW50OwogY2xhc3MgV2lkZ2V0UHJpdmF0ZTsKIAogLy8gVGhlIFdpZGdldCBjbGFz
cyBzZXJ2ZXMgYXMgYSBiYXNlIGNsYXNzIGZvciB0aHJlZSBraW5kcyBvZiBvYmplY3RzOgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKaW5kZXggMzg1MWRmZS4uNmY3NWY1
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCkBAIC0xNjcsOCAr
MTY3LDkgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZVF0OjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
U2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Nyb2xs
YmFyVGhlbWVRdDo6aGl0VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQsIGNvbnN0IEludFBvaW50JiAvKmxvY2FsUG9pbnQqLykKIHsKKyAgICAv
LyBGSVhNRTogdXNlIGxvY2FsUG9pbnQgdG8gZml4IGhpdCB0ZXN0aW5nIHdpdGggdHJhbnNmb3Jt
cwogICAgIFFTdHlsZU9wdGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xs
YmFyKTsKICAgICBjb25zdCBRUG9pbnQgcG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaW5kb3coZXZ0LnBvcygpKTsKICAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgwLCAw
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCmluZGV4IDc4N2IxNWEuLmY0
NjU4YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAgICAgdmlydHVhbCB2b2lk
IHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JiBjb3JuZXJSZWN0KTsKIAotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0
KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgU2Ny
b2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYs
IGNvbnN0IEludFBvaW50JiAvKmxvY2FsUG9pbnQqLyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hv
dWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsK
ICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCA0ZmExOTdkLi44NzYxNjUwIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0zMjEzLDEyICszMjEzLDEyIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmFkZFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHIpCiAgICAgbV9v
dmVyZmxvd0hlaWdodCA9IG1heChtX292ZXJmbG93SGVpZ2h0LCByLmJvdHRvbSgpKTsKIH0KIAot
Ym9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgaW50LCBpbnQsIGludCwgaW50KQorYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludElu
T3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGlu
dCBfdHgsIGludCBfdHkpCiB7CiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRy
b2xzKHJlc3VsdCk7CisgICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xz
KHJlc3VsdCwgSW50UG9pbnQoX3ggLSBfdHgsIF95IC0gX3R5KSk7CiB9CiAKIGJvb2wgUmVuZGVy
QmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0
UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYzU2
ZDhmNS4uN2FlMjEzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTM5NSw2ICsx
Mzk1LDIyIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25z
dAogICAgIHJldHVybiAhc2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJCb3goKS0+Ym9yZGVy
Qm94UmVjdCgpKS5pc0VtcHR5KCk7CiB9CiAKK3ZvaWQqIFJlbmRlckxheWVyOjpzY3JvbGxiYXJP
d25lcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgSW50U2l6ZSYgc2Nyb2xsYmFyT2Zmc2V0KQorewor
ICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKCFib3gpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSW50UmVjdCBib3JkZXJCb3ggPSBib3gtPmJvcmRlckJveFJlY3Qo
KTsKKworICAgIGlmIChzY3JvbGxiYXIgPT0gbV9oQmFyKQorICAgICAgICBzY3JvbGxiYXJPZmZz
ZXQgPSBJbnRTaXplKGJvcmRlckJveC54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwgYm9yZGVyQm94
LmJvdHRvbSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNjcm9sbGJhci0+aGVpZ2h0KCkpOwor
ICAgIGVsc2UgaWYgKHNjcm9sbGJhciA9PSBtX3ZCYXIpCisgICAgICAgIHNjcm9sbGJhck9mZnNl
dCA9IEludFNpemUoYm9yZGVyQm94LnJpZ2h0KCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3Jv
bGxiYXItPndpZHRoKCksIGJvcmRlckJveC55KCkgKyBib3gtPmJvcmRlclRvcCgpKTsKKworICAg
IHJldHVybiByZW5kZXJlcigpOworfQorCiB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBJbnRSZWN0IHNjcm9sbFJlY3QgPSByZWN0OwpAQCAtMTgwNiw3ICsxODIyLDcgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJbnRQb2ludCYgYWJz
b2x1dGVQb2ludCkgY29uc3QKICAgICByZXR1cm4gcmVzaXplckNvcm5lclJlY3QodGhpcywgbG9j
YWxCb3VuZHMpLmNvbnRhaW5zKGxvY2FsUG9pbnQpOwogfQogICAgIAotYm9vbCBSZW5kZXJMYXll
cjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0KQorYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKIHsKICAgICBpZiAoIW1faEJhciAmJiAhbV92
QmFyICYmICghcmVuZGVyZXIoKS0+aGFzT3ZlcmZsb3dDbGlwKCkgfHwgcmVuZGVyZXIoKS0+c3R5
bGUoKS0+cmVzaXplKCkgPT0gUkVTSVpFX05PTkUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xODE0LDI2ICsxODMwLDIxIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRl
ckJveCgpOwogICAgIEFTU0VSVChib3gpOwogCi0gICAgaW50IHggPSAwOwotICAgIGludCB5ID0g
MDsKLSAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290KCksIHgsIHkpOwotICAgIEludFJlY3Qg
YWJzQm91bmRzKHgsIHksIGJveC0+d2lkdGgoKSwgYm94LT5oZWlnaHQoKSk7Ci0gICAgCiAgICAg
SW50UmVjdCByZXNpemVDb250cm9sUmVjdDsKICAgICBpZiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+
cmVzaXplKCkgIT0gUkVTSVpFX05PTkUpIHsKLSAgICAgICAgcmVzaXplQ29udHJvbFJlY3QgPSBy
ZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBhYnNCb3VuZHMpOwotICAgICAgICBpZiAocmVzaXplQ29u
dHJvbFJlY3QuY29udGFpbnMocmVzdWx0LnBvaW50KCkpKQorICAgICAgICByZXNpemVDb250cm9s
UmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGJveC0+Ym9yZGVyQm94UmVjdCgpKTsKKyAg
ICAgICAgaWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaW50IHJlc2l6ZUNvbnRyb2xTaXplID0g
bWF4KHJlc2l6ZUNvbnRyb2xSZWN0LmhlaWdodCgpLCAwKTsKIAogICAgIGlmIChtX3ZCYXIpIHsK
LSAgICAgICAgSW50UmVjdCB2QmFyUmVjdChhYnNCb3VuZHMucmlnaHQoKSAtIGJveC0+Ym9yZGVy
UmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWJz
Qm91bmRzLnkoKSArIGJveC0+Ym9yZGVyVG9wKCksCisgICAgICAgIEludFJlY3QgdkJhclJlY3Qo
Ym94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBib3gtPmJvcmRlclRvcCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhYnNC
b3VuZHMuaGVpZ2h0KCkgLSAoYm94LT5ib3JkZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkp
IC0gKG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiByZXNpemVDb250cm9sU2l6ZSkpOwotICAg
ICAgICBpZiAodkJhclJlY3QuY29udGFpbnMocmVzdWx0LnBvaW50KCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgYm94LT5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5i
b3JkZXJCb3R0b20oKSkgLSAobV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IHJlc2l6ZUNvbnRy
b2xTaXplKSk7CisgICAgICAgIGlmICh2QmFyUmVjdC5jb250YWlucyhsb2NhbFBvaW50KSkgewog
ICAgICAgICAgICAgcmVzdWx0LnNldFNjcm9sbGJhcihtX3ZCYXIuZ2V0KCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE4NDEsMTEgKzE4NTIsMTEgQEAgYm9vbCBS
ZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYgcmVzdWx0
KQogCiAgICAgcmVzaXplQ29udHJvbFNpemUgPSBtYXgocmVzaXplQ29udHJvbFJlY3Qud2lkdGgo
KSwgMCk7CiAgICAgaWYgKG1faEJhcikgewotICAgICAgICBJbnRSZWN0IGhCYXJSZWN0KGFic0Jv
dW5kcy54KCkgKyBib3gtPmJvcmRlckxlZnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBh
YnNCb3VuZHMuYm90dG9tKCkgLSBib3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMud2lkdGgoKSAtIChib3gtPmJv
cmRlckxlZnQoKSArIGJveC0+Ym9yZGVyUmlnaHQoKSkgLSAobV92QmFyID8gbV92QmFyLT53aWR0
aCgpIDogcmVzaXplQ29udHJvbFNpemUpLAorICAgICAgICBJbnRSZWN0IGhCYXJSZWN0KGJveC0+
Ym9yZGVyTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVpZ2h0KCkgLSBi
b3gtPmJvcmRlckJvdHRvbSgpIC0gbV9oQmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBib3gtPndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJp
Z2h0KCkpIC0gKG1fdkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IHJlc2l6ZUNvbnRyb2xTaXplKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hCYXItPmhlaWdodCgpKTsKLSAgICAgICAgaWYg
KGhCYXJSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkgeworICAgICAgICBpZiAoaEJhclJl
Y3QuY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxi
YXIobV9oQmFyLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAppbmRleCBkYWRlOGQxLi4xM2U3OGI0IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmgKQEAgLTI2Miw3ICsyNjIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc2l0
aW9uT3ZlcmZsb3dDb250cm9scyhpbnQgdHgsIGludCB0eSk7CiAgICAgYm9vbCBpc1BvaW50SW5S
ZXNpemVDb250cm9sKGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50KSBjb25zdDsKLSAgICBi
b29sIGhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmKTsKKyAgICBib29sIGhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCk7CiAgICAgSW50U2l6ZSBvZmZzZXRGcm9tUmVzaXplQ29ybmVyKGNvbnN0IEludFBv
aW50JiBhYnNvbHV0ZVBvaW50KSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRPdmVyZmxvd0NvbnRy
b2xzKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KTsKQEAgLTQ1MSwxMCArNDUxLDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIHNob3Vs
ZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsgCiAKKyAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50
ZXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkKiBz
Y3JvbGxiYXJPd25lcihTY3JvbGxiYXIqIHNjcm9sbGJhciwgSW50U2l6ZSYgc2Nyb2xsYmFyT2Zm
c2V0KTsKIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3Zl
cmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKaW5kZXggNTBiNDA2Yi4uNTQzODBkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTM3MCw3ICszNzAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgdmVydFJlY3QoX3R4ICsgd2lkdGgoKSAtIGJv
cmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICBfdHks
CisgICAgICAgICAgICAgICAgICAgICBfdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAg
ICAgICAgIG1fdkJhci0+d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0g
Ym9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAKQEAgLTYyMiw2ICs2MjIsMTMgQEAgdm9p
ZCBSZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYKICAgICByZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3QpOwog
fQogCit2b2lkKiBSZW5kZXJMaXN0Qm94OjpzY3JvbGxiYXJPd25lcihTY3JvbGxiYXIqIHNjcm9s
bGJhciwgSW50U2l6ZSYgc2Nyb2xsYmFyT2Zmc2V0KQoreworICAgIEFTU0VSVF9VTlVTRUQoc2Ny
b2xsYmFyLCBzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKTsKKyAgICBzY3JvbGxiYXJPZmZzZXQg
PSBJbnRTaXplKHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLCBib3Jk
ZXJUb3AoKSk7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBS
ZW5kZXJMaXN0Qm94OjpjcmVhdGVTY3JvbGxiYXIoKQogewogICAgIFJlZlB0cjxTY3JvbGxiYXI+
IHdpZGdldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAppbmRleCBhY2MzMTNmLi44MzIzZmI5
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKKysrIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCkBAIC0xMDMsNiArMTAzLDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0gLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJZiB3
ZSBkaWQgdGhpcyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIHZvaWQqIHNjcm9s
bGJhck93bmVyKFNjcm9sbGJhciosIEludFNpemUmIHNjcm9sbGJhck9mZnNldCk7CiAKICAgICB2
b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNz
UmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKCk7Cg==
</data>
<flag name="review"
          id="14099"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28676</attachid>
            <date>2009-03-16 20:31:25 -0700</date>
            <delta_ts>2009-06-21 22:15:30 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>22119_patch.txt</filename>
            <type>text/plain</type>
            <size>50011</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwOTgwYzg5Li41YTc3OWNjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMDMt
MTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTkKKyAgICAgICAgCisgICAgICAgIFRlc3Qg
aGl0IHRlc3Rpbmcgb2Ygc2Nyb2xsYmFycyBvbiB0cmFuc2Zvcm1lZCBhbmQgdW50cnJhbnNmb3Jt
ZWQgbGlzdCBib3hlcworICAgICAgICBhbmQgb3ZlcmZsb3c6c2Nyb2xsIGVsZW1lbnRzLgorCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJveC1zY3JvbGxiYXItaGl0LXRl
c3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9mb3Jt
cy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1zY3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVy
Zmxvdy1zY3JvbGxiYXItaGl0LXRlc3QuaHRtbDogQWRkZWQuCisKIDIwMDktMDMtMTYgIE1hcmsg
Um93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBBZGVs
ZSBQZXRlcnNvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zv
cm1zL2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2EyNzg1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJv
eC1zY3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKKyAgCitU
ZXN0aW5nIGNsaWNrcyBvbiBzZWxlY3QxCitTY3JvbGxlZCBkb3duIGJ5IGl0ZW1IZWlnaHQgb24g
ZG93biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAgYnkgaXRlbUhlaWdodCBvbiB1cCBh
cnJvdyBjbGljazogUEFTUworCitUZXN0aW5nIGNsaWNrcyBvbiBzZWxlY3QyCitTY3JvbGxlZCBk
b3duIGJ5IGl0ZW1IZWlnaHQgb24gZG93biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAg
YnkgaXRlbUhlaWdodCBvbiB1cCBhcnJvdyBjbGljazogUEFTUworCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gtc2Nyb2xsYmFyLWhpdC10
ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9mb3Jtcy9saXN0Ym94LXNj
cm9sbGJhci1oaXQtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjhlYjA0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9mb3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCkBAIC0wLDAgKzEsMTEyIEBA
Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGlzdGJveCBzY3JvbGxiYXIgaGl0IHRlc3Rpbmc8
L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgorICAgIHNl
bGVjdCB7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAgICAgIHBhZGRpbmc6IDEw
cHg7CisgICAgfQorICAgIAorICAgICNyZXN1bHRzIHsKKyAgICAgIG1hcmdpbi10b3A6IDUwcHg7
CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hh
cnNldD0idXRmLTgiPgorICAgIGZ1bmN0aW9uIHNlbmRDbGljayhlbGVtZW50LCBjbGllbnRYLCBj
bGllbnRZKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAg
ZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2xpZW50WCwgY2xpZW50WSk7CisgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbW91c2VEb3duT25TZWxlY3Qoc2VsSWQsIHRyYW5z
bGF0ZVgsIHRyYW5zbGF0ZVkpCisgICAgeworICAgICAgbG9nKCdUZXN0aW5nIGNsaWNrcyBvbiAn
ICsgc2VsSWQpOworCisgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKHNlbElkKTsKKyAgICAgIHZhciBpdGVtSGVpZ2h0ID0gMTQ7CisgICAgICB2YXIgYm9y
ZGVyID0gMjA7CisgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSAxMDsKKyAgICAgIHZhciBzY3Jv
bGxiYXJCdXR0b25IZWlnaHQgPSAxMjsKKyAgICAgIAorICAgICAgdmFyIHNjcm9sbGJhck1pZFgg
PSB0cmFuc2xhdGVYICsgc2VsZWN0RWxlbWVudC5vZmZzZXRMZWZ0ICsgc2VsZWN0RWxlbWVudC5v
ZmZzZXRXaWR0aCAtIGJvcmRlciAtIHNjcm9sbGJhcldpZHRoIC8gMjsKKyAgICAgIC8vIFJlY2Fs
bCB0aGF0IERSVCBydW5zIHdpdGggYm90aCBzY3JvbGwgYXJyb3dzIGF0IHRoZSBlbmQgb2YgdGhl
IHNjcm9sbGJhcgorICAgICAgdmFyIHNjcm9sbGJhclRvcEFycm93WSA9IHRyYW5zbGF0ZVkgKyBz
ZWxlY3RFbGVtZW50Lm9mZnNldFRvcCArIHNlbGVjdEVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gYm9y
ZGVyIC0gc2Nyb2xsYmFyQnV0dG9uSGVpZ2h0IC0gMzsKKyAgICAgIHZhciBzY3JvbGxiYXJCb3R0
b21BcnJvd1kgPSB0cmFuc2xhdGVZICsgc2VsZWN0RWxlbWVudC5vZmZzZXRUb3AgKyBzZWxlY3RF
bGVtZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIDM7CisgICAgICAKKyAgICAgIHNlbmRDbGlj
ayhzZWxlY3RFbGVtZW50LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOwor
ICAgICAgc2VuZENsaWNrKHNlbGVjdEVsZW1lbnQsIHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhckJv
dHRvbUFycm93WSk7CisgICAgICBpZiAoc2VsZWN0RWxlbWVudC5zY3JvbGxUb3AgPT0gMiAqIGl0
ZW1IZWlnaHQpCisgICAgICAgIGxvZygnU2Nyb2xsZWQgZG93biBieSBpdGVtSGVpZ2h0IG9uIGRv
d24gYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQg
dG8gc2Nyb2xsIGRvd24gLSBzY3JvbGxUb3AgaXMgJyArIHNlbGVjdEVsZW1lbnQuc2Nyb2xsVG9w
ICsgJzogRkFJTCcpOworCisgICAgICBzZW5kQ2xpY2soc2VsZWN0RWxlbWVudCwgc2Nyb2xsYmFy
TWlkWCwgc2Nyb2xsYmFyVG9wQXJyb3dZKTsKKyAgICAgIGlmIChzZWxlY3RFbGVtZW50LnNjcm9s
bFRvcCA9PSBpdGVtSGVpZ2h0KQorICAgICAgICBsb2coJ1Njcm9sbGVkIHVwIGJ5IGl0ZW1IZWln
aHQgb24gdXAgYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdG
YWlsZWQgdG8gc2Nyb2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBzZWxlY3RFbGVtZW50LnNjcm9s
bFRvcCArICc6IEZBSUwnKTsKKworICAgICAgbG9nKCcnKTsKKyAgICB9CisgICAgCisgICAgZnVu
Y3Rpb24gbG9nKG1zZykKKyAgICB7CisgICAgICB2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdyZXN1bHRzJyk7CisgICAgICByZXN1bHRzLmlubmVySFRNTCArPSBtc2cgKyAn
PGJyPic7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgIHsKKyAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVy
KSB7CisgICAgICAgIGxvZygnVGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBEUlQnKTsKKyAgICAgIH0K
KyAgICAgIAorICAgICAgLy8gSGF2ZSB0byB3YWl0IGZvciB0aGUgc2VsZWN0IHRvIGJlIHBhaW50
ZWQgYmVmb3JlIHRoZQorICAgICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVkIGNvcnJlY3RseS4KKyAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0KCdz
ZWxlY3QxJywgMCwgMCk7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0KCdzZWxlY3QyJywgNTAs
IDUwKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICB9LCAwKTsKKyAgICB9
CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorCisgIDxzZWxl
Y3QgaWQ9InNlbGVjdDEiIHNpemU9IjUiPgorICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IjAi
Pml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0ZW0gMTwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQiPml0ZW0gNDwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFs
dWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjciPml0ZW0gNzwvb3B0
aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9uPgorICA8L3NlbGVjdD4K
KworICA8c2VsZWN0IGlkPSJzZWxlY3QyIiBzaXplPSI1IiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zv
cm06IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9
IjAiPml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0ZW0gMTwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFs
dWU9IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQiPml0ZW0gNDwvb3B0
aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgorICAgIDxvcHRpb24g
dmFsdWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjciPml0ZW0gNzwv
b3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9uPgorICA8L3NlbGVj
dD4KKworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxv
dy1zY3JvbGxiYXItaGl0LXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDljNzkzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ct
c2Nyb2xsYmFyLWhpdC10ZXN0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitJbm5lcgor
IAorSW5uZXIKK1Rlc3RpbmcgY2xpY2tzIG9uIGJveDEKK1Njcm9sbGVkIGRvd24gYnkgODAgb24g
ZG93biBhcnJvdyBjbGljazogUEFTUworU2Nyb2xsZWQgdXAgYnkgNDAgb24gdXAgYXJyb3cgY2xp
Y2s6IFBBU1MKKworVGVzdGluZyBjbGlja3Mgb24gYm94MgorU2Nyb2xsZWQgZG93biBieSA4MCBv
biBkb3duIGFycm93IGNsaWNrOiBQQVNTCitTY3JvbGxlZCB1cCBieSA0MCBvbiB1cCBhcnJvdyBj
bGljazogUEFTUworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L292ZXJmbG93L292ZXJmbG93LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ctc2Nyb2xsYmFyLWhpdC10ZXN0Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4YzY3NAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L292ZXJmbG93L292ZXJmbG93
LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCkBAIC0wLDAgKzEsMTA4IEBACis8aHRtbD4KKzxoZWFk
PgorICA8dGl0bGU+T3ZlcmZsb3cgc2Nyb2xsYmFyIGhpdCB0ZXN0aW5nPC90aXRsZT4KKyAgPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAuYm94IHsKKyAgICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKKyAgICAgIHdpZHRoOiAxNTBweDsKKyAgICAgIGhlaWdodDog
MTUwcHg7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAgICAgIHBhZGRpbmc6IDEw
cHg7CisgICAgICBtYXJnaW46IDE1cHg7CisgICAgICBvdmVyZmxvdzogc2Nyb2xsOworICAgIH0K
KyAgICAKKyAgICAuaW5uZXIgeworICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgaGVpZ2h0OiAz
MDBweDsKKyAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyYXk7CisgICAgfQorICAgIAorICAgICNy
ZXN1bHRzIHsKKyAgICAgIG1hcmdpbi10b3A6IDUwcHg7CisgICAgfQorICA8L3N0eWxlPgorICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGZ1bmN0
aW9uIHNlbmRDbGljayhlbGVtZW50LCBjbGllbnRYLCBjbGllbnRZKQorICAgIHsKKyAgICAgIGlm
ICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
Y2xpZW50WCwgY2xpZW50WSk7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAg
ICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rp
b24gbW91c2VEb3duT25PdmVyZmxvd0RpdihlbGVtZW50SWQsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0
ZVkpCisgICAgeworICAgICAgbG9nKCdUZXN0aW5nIGNsaWNrcyBvbiAnICsgZWxlbWVudElkKTsK
KworICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50SWQp
OworICAgICAgdmFyIHNjcm9sbEluY3JlbWVudCA9IDQwOworICAgICAgdmFyIGJvcmRlciA9IDIw
OworICAgICAgdmFyIHNjcm9sbGJhcldpZHRoID0gMTY7CisgICAgICB2YXIgc2Nyb2xsYmFySGVp
Z2h0ID0gMTY7CisgICAgICAKKyAgICAgIHZhciBzY3JvbGxiYXJNaWRYID0gdHJhbnNsYXRlWCAr
IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLSBib3JkZXIgLSBzY3Jv
bGxiYXJXaWR0aCAvIDI7CisgICAgICAvLyBSZWNhbGwgdGhhdCBEUlQgc2V0cyBzY3JvbGwgYXJy
b3dzIHRvIGJlIHRvZ2V0aGVyIGF0IGVuZCBlbmQgb2YgdGhlIHNjcm9sbGJhcgorICAgICAgdmFy
IHNjcm9sbGJhclRvcEFycm93WSA9IHRyYW5zbGF0ZVkgKyBlbGVtZW50Lm9mZnNldFRvcCArIGVs
ZW1lbnQub2Zmc2V0SGVpZ2h0IC0gYm9yZGVyIC0gc2Nyb2xsYmFySGVpZ2h0IC0gc2Nyb2xsYmFy
SGVpZ2h0IC0gMzsKKyAgICAgIHZhciBzY3JvbGxiYXJCb3R0b21BcnJvd1kgPSB0cmFuc2xhdGVZ
ICsgZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIHNj
cm9sbGJhckhlaWdodCAtIDM7CisgICAgICAKKyAgICAgIHNlbmRDbGljayhlbGVtZW50LCBzY3Jv
bGxiYXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOworICAgICAgc2VuZENsaWNrKGVsZW1l
bnQsIHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhckJvdHRvbUFycm93WSk7CisgICAgICBpZiAoZWxl
bWVudC5zY3JvbGxUb3AgPT0gMiAqIHNjcm9sbEluY3JlbWVudCkKKyAgICAgICAgbG9nKCdTY3Jv
bGxlZCBkb3duIGJ5ICcgKyAoMiAqIHNjcm9sbEluY3JlbWVudCkgKyAnIG9uIGRvd24gYXJyb3cg
Y2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xs
IGRvd24gLSBzY3JvbGxUb3AgaXMgJyArIGVsZW1lbnQuc2Nyb2xsVG9wICsgJzogRkFJTCcpOwor
CisgICAgICBzZW5kQ2xpY2soZWxlbWVudCwgc2Nyb2xsYmFyTWlkWCwgc2Nyb2xsYmFyVG9wQXJy
b3dZKTsKKyAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PSBzY3JvbGxJbmNyZW1lbnQpCisg
ICAgICAgIGxvZygnU2Nyb2xsZWQgdXAgYnkgJyArIHNjcm9sbEluY3JlbWVudCArICcgb24gdXAg
YXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbG9nKCdGYWlsZWQgdG8g
c2Nyb2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBlbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwn
KTsKKworICAgICAgbG9nKCcnKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gbG9nKG1zZykK
KyAgICB7CisgICAgICB2YXIgcmVzdWx0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1
bHRzJyk7CisgICAgICByZXN1bHRzLmlubmVySFRNTCArPSBtc2cgKyAnPGJyPic7CisgICAgfQor
ICAgIAorICAgIGZ1bmN0aW9uIHRlc3QoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAg
ICB9CisgICAgICAKKyAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGxv
ZygnVGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBEUlQnKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAg
Ly8gSGF2ZSB0byB3YWl0IGZvciB0aGUgc2VsZWN0IHRvIGJlIHBhaW50ZWQgYmVmb3JlIHRoZQor
ICAgICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVkIGNvcnJlY3RseS4KKyAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgIG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoJ2JveDEnLCAwLCAw
KTsKKyAgICAgICAgbW91c2VEb3duT25PdmVyZmxvd0RpdignYm94MicsIDUwLCA1MCk7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfSwgMCk7CisgICAgfQorICA8L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0idGVzdCgpIj4KKworCisgIDxkaXYgY2xhc3M9ImJv
eCIgaWQ9ImJveDEiPgorICAgIDxkaXYgY2xhc3M9ImlubmVyIj5Jbm5lcjwvZGl2PgorICA8L2Rp
dj4KKworICA8ZGl2IGNsYXNzPSJib3giIGlkPSJib3gyIiBzdHlsZT0iLXdlYmtpdC10cmFuc2Zv
cm06IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxkaXYgY2xhc3M9ImlubmVyIj5Jbm5l
cjwvZGl2PgorICA8L2Rpdj4KKworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGE3MjgzNWQuLjRkZWZlNmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBACisyMDA5LTAzLTE2
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE5CisgICAgICAgIAorICAgICAgICBGaXggY2xp
Y2sgaGFuZGxpbmcgaW4gc2Nyb2xsYmFycyBvZiBsaXN0IGJveGVzLCBhbmQgb3ZlcmZsb3c6c2Ny
b2xsIGVsZW1lbnRzCisgICAgICAgIHRvIGJlIHRyYW5zZm9ybS1hd2FyZS4KKworICAgICAgICBU
ZXN0czogcGxhdGZvcm0vbWFjL2Zhc3QvZm9ybXMvbGlzdGJveC1zY3JvbGxiYXItaGl0LXRlc3Qu
aHRtbAorICAgICAgICAgICAgICAgcGxhdGZvcm0vbWFjL2Zhc3Qvb3ZlcmZsb3cvb3ZlcmZsb3ct
c2Nyb2xsYmFyLWhpdC10ZXN0Lmh0bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6
CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnRTaW5nbGVDbGljayk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OmV2ZW50TWF5U3RhcnREcmFnKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50SGFuZGxlcjo6dXBkYXRlU2VsZWN0aW9uRm9yTW91c2VEcmFnKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGl0VGVzdFJlc3VsdEF0UG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZWxlY3RDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZU1vdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6cHJlcGFyZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5k
bGVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
c2VuZENvbnRleHRNZW51RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpo
b3ZlclRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpkcmFnSHlz
dGVyZXNpc0V4Y2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01v
dXNlUHJlc3NFdmVudFRvU2Nyb2xsYmFyKToKKyAgICAgICAgVXNlIHRoZSBuZXcgcG9pbnQtbWFw
cGluZyBtZXRob2RzIHRoYXQgYXJlIHRyYW5zZm9ybS1hd2FyZS4KKyAgICAgICAgCisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRIYW5kbGVyOjp3aW5kb3dUb0ZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6d2luZG93VG9TY3JvbGxiYXJQb2ludCk6CisgICAgICAgIE5ldyBtZXRob2Rz
IHRoYXQgbWFwIHBvaW50cyBmcm9tIGNvbnRhaW5pbmcgd2luZG93IHRvIGNvbnRlbnQsIGZyYW1l
CisgICAgICAgIGFuZCBzY3JvbGxiYXIgY29vcmRzIHZpYSByZW5kZXJlcnMgdmlhIEZyYW1lVmll
dywgcmF0aGVyIHRoYW4gdGhyb3VnaCB3aWRnZXRzLgorICAgICAgICAKKyAgICAgICAgKiBwYWdl
L0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFic29sdXRlVG9T
Y3JvbGxiYXJMb2NhbFBvaW50KToKKyAgICAgICAgSW1wbGVtZW50IHRoZSBuZXcgU2Nyb2xsYmFy
Q2xpZW50IG1ldGhvZC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmNv
bnRhaW5pbmdXaW5kb3dUb0Fic29sdXRlUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjptYXBQb2ludFRocm91Z2hDb250YWluaW5nVmlld3MpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3Lmg6CisgICAgICAgIE1hcCBwb2ludHMgZnJvbSBjb250YWluaW5nIHdpbmRvdyB0byAi
cGFnZSIgKGkuZS4gImFic29sdXRlIiBmb3IgdGhlIGNvbnRlbnQgZG9jdW1lbnQpCisgICAgICAg
IGNvb3JkaW5hdGVzLCBieSB3YWxraW5nIHRocm91Z2ggZW5jbG9zaW5nIEZyYW1lVmlld3MgYW5k
IG1hcHBpbmcgdGhlIHBvaW50IHRocm91Z2gKKyAgICAgICAgcmVuZGVyZXJzLCB0YWtpbmcgdHJh
bnNmb3JtcyBpbnRvIGFjY291bnQuCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL1BsYXRm
b3JtTW91c2VFdmVudC5oOgorICAgICAgICBBZGQgYSBjb21tZW50IHNheWluZyB3aGF0IGNvb3Jk
cyB0aGUgcG9pbnQgaXMgaW4uCisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL1BvcHVwTWVu
dS5oOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51OjphYnNvbHV0ZVRvU2Nyb2xsYmFyTG9j
YWxQb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZWxlc3NTY3JvbGxWaWV3OjphYnNvbHV0ZVRv
U2Nyb2xsYmFyTG9jYWxQb2ludCk6CisgICAgICAgIEltcGxlbWVudCB0aGUgbmV3IFNjcm9sbGJh
ckNsaWVudCBtZXRob2QuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgUGFzcyBpbiB0aGUgdmlldy1yZWxh
dGl2ZSBwb2ludCwgcmF0aGVyIHRoYW4gdGhlIGV2ZW50LgorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6bW91c2VEb3duKToKKyAgICAgICAgUGFzcyBpbiBhIHNjcm9sbGJhci1s
b2NhbCBwb2ludCB0aGF0IGNhbiBiZSB1c2VkIGZvciBoaXQgdGVzdGluZywgc28gdGhhdCBpdAor
ICAgICAgICBkb2Vzbid0IGhhdmUgdG8gY2FsbCB0aGUgdHJhbnNmb3JtLXVuYXdhcmUgV2lkZ2V0
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coKQorICAgICAgICBtZXRob2RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbGJhck93bmVyKToKKyAgICAgICAgTmV3IG1ldGhvZCB0aGF0IGFs
bG93cyBGcmFtZVZpZXcgdG8gYXNrIGZvciB0aGUgcmVuZGVyZXIgdGhhdCBvd25zIHRoZSBzY3Jv
bGxiYXIsCisgICAgICAgIGFuZCBhbiBvZmZzZXQgb2YgdGhlIHNjcm9sbGJhciB3aXRoaW4gdGhh
dCByZW5kZXJlciwgc28gdGhhdCB0aGUgRnJhbWVWaWV3CisgICAgICAgIGNhbiBtYXAgcG9pbnRz
IHRvIHNjcm9sbGJhci1sb2NhbCBjb29yZHMgaW4gd2luZG93VG9TY3JvbGxiYXJQb2ludCgpLgor
ICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRdDo6aGl0VGVzdCk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRlc3QpOgorICAgICAgICBQYXNzIGluIGEgcG9p
bnQgaW4gc2Nyb2xsYmFyLWxvY2FsIGNvb3JkcyBmb3IgaGl0IHRlc3RpbmcuCisgICAgICAgIAor
ICAgICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICBSZW1vdmUgYSBub24tZXhpc3Rl
bnQgZm9yd2FyZC1kZWNsYXJlZCBjbGFzcy4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppc1BvaW50
SW5PdmVyZmxvd0NvbnRyb2wpOgorICAgICAgICBQYXNzIGEgcG9pbnQgaW4gbG9jYWwgY29vcmRp
bmF0ZXMgdG8gUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKCkuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmFic29sdXRlVG9TY3Jv
bGxiYXJMb2NhbFBvaW50KToKKyAgICAgICAgSW1wbGVtZW50IHRoZSBTY3JvbGxiYXJDbGllbnQg
bWV0aG9kIGZvciB0aGUgb3ZlcmZsb3cgc2Nyb2xsYmFycy4KKyAgICAgICAgCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbHMpOgorICAgICAgICBV
c2UgdGhlIGxvY2FsUG9pbnQgZm9yIGhpdCB0ZXN0aW5nLCByYXRoZXIgdGhhbiBjb21wdXRpbmcg
YW4gYWJzb2x1dGUgcG9pbnQuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbCk6CisgICAgICAgIEZpeCBhIGJ1ZyB3aGVyZSB0aGUgYm9yZGVyIHdhcyBu
b3QgdGFrZW4gaW50byBhY2NvdW50IHdoZW4gY29tcHV0aW5nIHRoZQorICAgICAgICBzY3JvbGxi
YXIgcmVjdC4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphYnNv
bHV0ZVRvU2Nyb2xsYmFyTG9jYWxQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaDoKKyAgICAgICAgSW1wbGVtZW50IHRoZSBTY3JvbGxiYXJDbGllbnQgbWV0aG9kLgor
CiAyMDA5LTAzLTE2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZXZpbiBEZWNrZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcCBiL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDBjZmY3N2Eu
Ljk2ZDM1YjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yODUsNyArMjg1LDcgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUHJlc3NFdmVudFNpbmdsZUNsaWNrKGNvbnN0IE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFIKIAogICAgIC8vIERvbid0IHJlc3RhcnQgdGhlIHNlbGVjdGlvbiB3
aGVuIHRoZSBtb3VzZSBpcyBwcmVzc2VkIG9uIGFuCiAgICAgLy8gZXhpc3Rpbmcgc2VsZWN0aW9u
IHNvIHdlIGNhbiBhbGxvdyBmb3IgdGV4dCBkcmFnZ2luZy4KLSAgICBJbnRQb2ludCB2UG9pbnQg
PSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZXZlbnQuZXZlbnQoKS5wb3MoKSk7
CisgICAgSW50UG9pbnQgdlBvaW50ID0gd2luZG93VG9Db250ZW50cyhldmVudC5ldmVudCgpLnBv
cygpKTsKICAgICBpZiAoIWV4dGVuZFNlbGVjdGlvbiAmJiBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
Y29udGFpbnModlBvaW50KSkgewogICAgICAgICBtX21vdXNlRG93bldhc1NpbmdsZUNsaWNrSW5T
ZWxlY3Rpb24gPSB0cnVlOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDAsNyArNDQwLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50TWF5U3RhcnREcmFnKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBI
aXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSk7Ci0gICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQobV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50
LnBvcygpKSk7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQod2luZG93VG9Db250ZW50cyhldmVu
dC5wb3MoKSkpOwogICAgIG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLT5sYXllcigpLT5oaXRU
ZXN0KHJlcXVlc3QsIHJlc3VsdCk7CiAgICAgYm9vbCBzcmNJc0RIVE1MOwogICAgIHJldHVybiBy
ZXN1bHQuaW5uZXJOb2RlKCkgJiYgcmVzdWx0LmlubmVyTm9kZSgpLT5yZW5kZXJlcigpLT5kcmFn
Z2FibGVOb2RlKERIVE1MRmxhZywgVUFGbGFnLCByZXN1bHQucG9pbnQoKS54KCksIHJlc3VsdC5w
b2ludCgpLnkoKSwgc3JjSXNESFRNTCk7CkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBFdmVudEhh
bmRsZXI6OnVwZGF0ZVNlbGVjdGlvbkZvck1vdXNlRHJhZygpCiAgICAgSGl0VGVzdFJlcXVlc3Qg
cmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBIaXRUZXN0UmVxdWVzdDo6TW91c2VNb3ZlKTsKLSAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCh2
aWV3LT53aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVudE1vdXNlUG9zaXRpb24pKTsKKyAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCh3aW5kb3dUb0NvbnRlbnRzKG1fY3VycmVudE1vdXNlUG9zaXRpb24p
KTsKICAgICBsYXllci0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQpOwogICAgIHVwZGF0ZVNlbGVj
dGlvbkZvck1vdXNlRHJhZyhyZXN1bHQuaW5uZXJOb2RlKCksIHJlc3VsdC5sb2NhbFBvaW50KCkp
OwogfQpAQCAtNzI3LDYgKzcyNyw3IEBAIEhpdFRlc3RSZXN1bHQgRXZlbnRIYW5kbGVyOjpoaXRU
ZXN0UmVzdWx0QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGJvb2wgYWxsCiAgICAgRnJh
bWUqIHJlc3VsdEZyYW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpIDogMDsKICAgICBGcmFtZSog
bWFpbkZyYW1lID0gbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKTsKICAgICBpZiAobV9mcmFt
ZSAhPSBtYWluRnJhbWUgJiYgcmVzdWx0RnJhbWUgJiYgcmVzdWx0RnJhbWUgIT0gbWFpbkZyYW1l
ICYmICFyZXN1bHRGcmFtZS0+ZWRpdG9yKCktPmluc2lkZVZpc2libGVBcmVhKHJlc3VsdC5wb2lu
dCgpKSkgeworICAgICAgICAvLyBGSVhNRTogdGhpcyBsb2dpYyBpcyBub3QgdHJhbnNmb3Jtcy1h
d2FyZS4gQ29uc2lkZXIgdXNpbmcgY29udGFpbmluZ1dpbmRvd1RvQWJzb2x1dGVQb2ludCgpLgog
ICAgICAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHJlc3VsdEZyYW1lLT52aWV3KCktPmNvbnRl
bnRzVG9XaW5kb3cocmVzdWx0LnBvaW50KCkpOwogICAgICAgICBJbnRQb2ludCBtYWluRnJhbWVQ
b2ludCA9IG1haW5GcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsK
ICAgICAgICAgcmVzdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3Vs
dEF0UG9pbnQobWFpbkZyYW1lUG9pbnQsIGFsbG93U2hhZG93Q29udGVudCwgaWdub3JlQ2xpcHBp
bmcpOwpAQCAtOTE0LDcgKzkxNSw3IEBAIEN1cnNvciBFdmVudEhhbmRsZXI6OnNlbGVjdEN1cnNv
cihjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCwgU2NyCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGhhbmRDdXJzb3IoKTsKICAgICAgICAgICAgIFJlbmRlckxheWVyKiBs
YXllciA9IHJlbmRlcmVyID8gcmVuZGVyZXItPmVuY2xvc2luZ0xheWVyKCkgOiAwOwogICAgICAg
ICAgICAgYm9vbCBpblJlc2l6ZXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lLT52
aWV3KCkgJiYgbGF5ZXIgJiYgbGF5ZXItPmlzUG9pbnRJblJlc2l6ZUNvbnRyb2wobV9mcmFtZS0+
dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGV2ZW50LmV2ZW50KCkucG9zKCkpKSkKKyAgICAgICAg
ICAgIGlmIChtX2ZyYW1lLT52aWV3KCkgJiYgbGF5ZXIgJiYgbGF5ZXItPmlzUG9pbnRJblJlc2l6
ZUNvbnRyb2wod2luZG93VG9Db250ZW50cyhldmVudC5ldmVudCgpLnBvcygpKSkpCiAgICAgICAg
ICAgICAgICAgaW5SZXNpemVyID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICgoZWRpdGFibGUgfHwg
KHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1RleHQoKSAmJiBub2RlLT5jYW5TdGFydFNlbGVjdGlv
bigpKSkgJiYgIWluUmVzaXplciAmJiAhc2Nyb2xsYmFyKQogICAgICAgICAgICAgICAgIHJldHVy
biBpQmVhbUN1cnNvcigpOwpAQCAtMTAwNSw3ICsxMDA2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6
OmhhbmRsZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZl
bnQpCiAgICAgbV9tb3VzZURvd25NYXlTdGFydERyYWcgPSBmYWxzZTsKICAgICBtX21vdXNlRG93
bk1heVN0YXJ0U2VsZWN0ID0gZmFsc2U7CiAgICAgbV9tb3VzZURvd25NYXlTdGFydEF1dG9zY3Jv
bGwgPSBmYWxzZTsKLSAgICBtX21vdXNlRG93blBvcyA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyhtb3VzZUV2ZW50LnBvcygpKTsKKyAgICBtX21vdXNlRG93blBvcyA9IHdpbmRv
d1RvQ29udGVudHMobW91c2VFdmVudC5wb3MoKSk7CiAgICAgbV9tb3VzZURvd25XYXNJblN1YmZy
YW1lID0gZmFsc2U7CiAKICAgICBIaXRUZXN0UmVxdWVzdCByZXF1ZXN0KEhpdFRlc3RSZXF1ZXN0
OjpBY3RpdmUpOwpAQCAtMTA2Niw3ICsxMDY3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZU1vdXNlUHJlc3NFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAg
ICAgbV9jbGlja05vZGUgPSBtZXYudGFyZ2V0Tm9kZSgpOwogICAgIAogICAgIFJlbmRlckxheWVy
KiBsYXllciA9IG1fY2xpY2tOb2RlLT5yZW5kZXJlcigpID8gbV9jbGlja05vZGUtPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCkgOiAwOwotICAgIEludFBvaW50IHAgPSBtX2ZyYW1lLT52aWV3
KCktPndpbmRvd1RvQ29udGVudHMobW91c2VFdmVudC5wb3MoKSk7CisgICAgSW50UG9pbnQgcCA9
IHdpbmRvd1RvQ29udGVudHMobW91c2VFdmVudC5wb3MoKSk7CiAgICAgaWYgKGxheWVyICYmIGxh
eWVyLT5pc1BvaW50SW5SZXNpemVDb250cm9sKHApKSB7CiAgICAgICAgIGxheWVyLT5zZXRJblJl
c2l6ZU1vZGUodHJ1ZSk7CiAgICAgICAgIG1fcmVzaXplTGF5ZXIgPSBsYXllcjsKQEAgLTExMDUs
NyArMTEwNiw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVByZXNzRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogICAgICAgICAgICAgbWV2ID0gcHJl
cGFyZU1vdXNlRXZlbnQocmVxdWVzdCwgbW91c2VFdmVudCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IG1fZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYmFyVW5kZXJN
b3VzZShtb3VzZUV2ZW50KTsKKyAgICAgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBtX2ZyYW1l
LT52aWV3KCktPnNjcm9sbGJhclVuZGVyTW91c2Uod2luZG93VG9GcmFtZShtb3VzZUV2ZW50LnBv
cygpKSk7CiAgICAgICAgIGlmICghc2Nyb2xsYmFyKQogICAgICAgICAgICAgc2Nyb2xsYmFyID0g
bWV2LnNjcm9sbGJhcigpOwogICAgICAgICBpZiAoc2Nyb2xsYmFyICYmIHBhc3NNb3VzZVByZXNz
RXZlbnRUb1Njcm9sbGJhcihtZXYsIHNjcm9sbGJhcikpCkBAIC0xMTk3LDcgKzExOTgsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogCiAgICAgLy8gU2VuZCBldmVudHMgcmlnaHQgdG8gYSBz
Y3JvbGxiYXIgaWYgdGhlIG1vdXNlIGlzIHByZXNzZWQuCiAgICAgaWYgKG1fbGFzdFNjcm9sbGJh
clVuZGVyTW91c2UgJiYgbV9tb3VzZVByZXNzZWQpCi0gICAgICAgIHJldHVybiBtX2xhc3RTY3Jv
bGxiYXJVbmRlck1vdXNlLT5tb3VzZU1vdmVkKG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UtPnRy
YW5zZm9ybUV2ZW50KG1vdXNlRXZlbnQpKTsKKyAgICAgICAgcmV0dXJuIG1fbGFzdFNjcm9sbGJh
clVuZGVyTW91c2UtPm1vdXNlTW92ZWQobV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+dHJhbnNm
b3JtRXZlbnQobW91c2VFdmVudCksIHdpbmRvd1RvU2Nyb2xsYmFyUG9pbnQobV9sYXN0U2Nyb2xs
YmFyVW5kZXJNb3VzZS5nZXQoKSwgbW91c2VFdmVudC5wb3MoKSkpOwogCiAgICAgLy8gVHJlYXQg
bW91c2UgbW92ZSBldmVudHMgd2hpbGUgdGhlIG1vdXNlIGlzIHByZXNzZWQgYXMgInJlYWQtb25s
eSIgaW4gcHJlcGFyZU1vdXNlRXZlbnQKICAgICAvLyBpZiB3ZSBhcmUgYWxsb3dlZCB0byBzZWxl
Y3QuCkBAIC0xMjE5LDcgKzEyMjAsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAg
ICBtX3Jlc2l6ZUxheWVyLT5yZXNpemUobW91c2VFdmVudCwgbV9vZmZzZXRGcm9tUmVzaXplQ29y
bmVyKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKG1fZnJhbWUtPnZpZXcoKSkKLSAgICAgICAg
ICAgIHNjcm9sbGJhciA9IG1fZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYmFyVW5kZXJNb3VzZShtb3Vz
ZUV2ZW50KTsKKyAgICAgICAgICAgIHNjcm9sbGJhciA9IG1fZnJhbWUtPnZpZXcoKS0+c2Nyb2xs
YmFyVW5kZXJNb3VzZSh3aW5kb3dUb0ZyYW1lKG1vdXNlRXZlbnQucG9zKCkpKTsKIAogICAgICAg
ICBpZiAoIXNjcm9sbGJhcikKICAgICAgICAgICAgIHNjcm9sbGJhciA9IG1ldi5zY3JvbGxiYXIo
KTsKQEAgLTEyNDgsOCArMTI0OSwxMSBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAg
ICBpZiAobmV3U3ViZnJhbWUtPnZpZXcoKSkKICAgICAgICAgICAgIHN3YWxsb3dFdmVudCB8PSBw
YXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKG1ldiwgbmV3U3ViZnJhbWUuZ2V0KCksIGhvdmVy
ZWROb2RlKTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNl
UHJlc3NlZCkKLSAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChzY3JvbGxiYXItPnRy
YW5zZm9ybUV2ZW50KG1vdXNlRXZlbnQpKTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxh
dGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5n
LgorICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNlUHJlc3NlZCkgeworICAgICAgICAg
ICAgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1
YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5nLgorICAgICAgICAgICAgc2Nyb2xsYmFy
LT5tb3VzZU1vdmVkKHNjcm9sbGJhci0+dHJhbnNmb3JtRXZlbnQobW91c2VFdmVudCksIHdpbmRv
d1RvU2Nyb2xsYmFyUG9pbnQoc2Nyb2xsYmFyLCBtb3VzZUV2ZW50LnBvcygpKSk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGlmICgoIW1fcmVzaXplTGF5ZXIgfHwgIW1fcmVzaXplTGF5
ZXItPmluUmVzaXplTW9kZSgpKSAmJiAhbV9mcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPnBhblNjcm9sbEluUHJvZ3Jlc3MoKSAmJiBtX2ZyYW1lLT52aWV3KCkpCiAg
ICAgICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldEN1cnNvcihzZWxlY3RDdXJzb3IobWV2LCBz
Y3JvbGxiYXIpKTsKICAgICB9CkBAIC0xMzI4LDcgKzEzMzIsNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUq
IGRyYWdUYQogewogICAgIG1fZnJhbWUtPnZpZXcoKS0+cmVzZXREZWZlcnJlZFJlcGFpbnREZWxh
eSgpOwogCi0gICAgSW50UG9pbnQgY29udGVudHNQb3MgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRv
d1RvQ29udGVudHMoZXZlbnQucG9zKCkpOworICAgIEludFBvaW50IGNvbnRlbnRzUG9zID0gd2lu
ZG93VG9Db250ZW50cyhldmVudC5wb3MoKSk7CiAgICAgCiAgICAgUmVmUHRyPE1vdXNlRXZlbnQ+
IG1lID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwKICAgICAgICAgdHJ1ZSwgdHJ1ZSwg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwKQEAgLTE0MzUsOCArMTQzOSw3IEBA
IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMgRXZlbnRIYW5kbGVyOjpwcmVwYXJlTW91c2VF
dmVudChjb25zdCBIaXRUZXN0UmVxdWVzCiAgICAgQVNTRVJUKG1fZnJhbWUpOwogICAgIEFTU0VS
VChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKICAgICAKLSAgICBJbnRQb2ludCBkb2N1bWVudFBvaW50
ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKG1ldi5wb3MoKSk7Ci0gICAgcmV0
dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVNb3VzZUV2ZW50KHJlcXVlc3QsIGRvY3Vt
ZW50UG9pbnQsIG1ldik7CisgICAgcmV0dXJuIG1fZnJhbWUtPmRvY3VtZW50KCktPnByZXBhcmVN
b3VzZUV2ZW50KHJlcXVlc3QsIHdpbmRvd1RvQ29udGVudHMobWV2LnBvcygpKSwgbWV2KTsKIH0K
IAogI2lmIEVOQUJMRShTVkcpCkBAIC0xNTk2LDcgKzE1OTksNyBAQCBib29sIEV2ZW50SGFuZGxl
cjo6aGFuZGxlV2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgCiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKG1fZnJhbWUtPnZpZXcoKSk7CiAKLSAgICBJbnRQb2lu
dCB2UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZS5wb3MoKSk7Cisg
ICAgSW50UG9pbnQgdlBvaW50ID0gd2luZG93VG9Db250ZW50cyhlLnBvcygpKTsKIAogICAgIEhp
dFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KTsKICAgICBIaXRU
ZXN0UmVzdWx0IHJlc3VsdCh2UG9pbnQpOwpAQCAtMTY0OCw3ICsxNjUxLDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
ZXZlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBib29sIHN3YWxsb3dFdmVu
dDsKLSAgICBJbnRQb2ludCB2aWV3cG9ydFBvcyA9IHYtPndpbmRvd1RvQ29udGVudHMoZXZlbnQu
cG9zKCkpOworICAgIEludFBvaW50IHZpZXdwb3J0UG9zID0gd2luZG93VG9Db250ZW50cyhldmVu
dC5wb3MoKSk7CiAgICAgSGl0VGVzdFJlcXVlc3QgcmVxdWVzdChIaXRUZXN0UmVxdWVzdDo6QWN0
aXZlKTsKICAgICBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzIG1ldiA9IGRvYy0+cHJlcGFy
ZU1vdXNlRXZlbnQocmVxdWVzdCwgdmlld3BvcnRQb3MsIGV2ZW50KTsKIApAQCAtMTcyOCw3ICsx
NzMxLDcgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmhvdmVyVGltZXJGaXJlZChUaW1lcjxFdmVudEhh
bmRsZXI+KikKIAogICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJlciA9IG1fZnJhbWUtPmNvbnRl
bnRSZW5kZXJlcigpKSB7CiAgICAgICAgIEhpdFRlc3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJl
cXVlc3Q6Ok1vdXNlTW92ZSk7Ci0gICAgICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KG1fZnJhbWUt
PnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhtX2N1cnJlbnRNb3VzZVBvc2l0aW9uKSk7CisgICAg
ICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0KHdpbmRvd1RvQ29udGVudHMobV9jdXJyZW50TW91c2VQ
b3NpdGlvbikpOwogICAgICAgICByZW5kZXJlci0+bGF5ZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCBy
ZXN1bHQpOwogICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsK
ICAgICB9CkBAIC0xOTI2LDcgKzE5MjksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZHJhZ0h5c3Rl
cmVzaXNFeGNlZWRlZChjb25zdCBGbG9hdFBvaW50JiBmbG9hdERyYWdWaWV3cG9ydExvYwogICAg
IAogYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29uc3QgSW50UG9p
bnQmIGRyYWdWaWV3cG9ydExvY2F0aW9uKSBjb25zdAogewotICAgIEludFBvaW50IGRyYWdMb2Nh
dGlvbiA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnVmlld3BvcnRMb2Nh
dGlvbik7CisgICAgSW50UG9pbnQgZHJhZ0xvY2F0aW9uID0gd2luZG93VG9Db250ZW50cyhkcmFn
Vmlld3BvcnRMb2NhdGlvbik7CiAgICAgSW50U2l6ZSBkZWx0YSA9IGRyYWdMb2NhdGlvbiAtIG1f
bW91c2VEb3duUG9zOwogICAgIAogICAgIGludCB0aHJlc2hvbGQgPSBHZW5lcmFsRHJhZ0h5c3Rl
cmVzaXM7CkBAIC0yMzA5LDcgKzIzMTIsMjggQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3Vz
ZVByZXNzRXZlbnRUb1Njcm9sbGJhcihNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJgogewog
ICAgIGlmICghc2Nyb2xsYmFyIHx8ICFzY3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBzY3JvbGxiYXItPm1vdXNlRG93bihtZXYuZXZlbnQoKSk7
CisKKyAgICByZXR1cm4gc2Nyb2xsYmFyLT5tb3VzZURvd24obWV2LmV2ZW50KCksIHdpbmRvd1Rv
U2Nyb2xsYmFyUG9pbnQoc2Nyb2xsYmFyLCBtZXYuZXZlbnQoKS5wb3MoKSkpOworfQorCitJbnRQ
b2ludCBFdmVudEhhbmRsZXI6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHApIGNv
bnN0Cit7CisgICAgcmV0dXJuIHJvdW5kZWRJbnRQb2ludChtX2ZyYW1lLT52aWV3KCktPmNvbnRh
aW5pbmdXaW5kb3dUb0Fic29sdXRlUG9pbnQocCkpOworfQorCitJbnRQb2ludCBFdmVudEhhbmRs
ZXI6OndpbmRvd1RvRnJhbWUoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0Cit7CisgICAgSW50UG9p
bnQgZnJhbWVQb2ludCA9IHJvdW5kZWRJbnRQb2ludChtX2ZyYW1lLT52aWV3KCktPmNvbnRhaW5p
bmdXaW5kb3dUb0Fic29sdXRlUG9pbnQocCkpOworICAgIGZyYW1lUG9pbnQgLT0gbV9mcmFtZS0+
dmlldygpLT5zY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gZnJhbWVQb2ludDsKK30KKworSW50
UG9pbnQgRXZlbnRIYW5kbGVyOjp3aW5kb3dUb1Njcm9sbGJhclBvaW50KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcCkgY29uc3QKK3sKKyAgICBpZiAoc2Nyb2xsYmFyLT5j
bGllbnQoKSkKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y2xpZW50KCktPmFic29sdXRlVG9T
Y3JvbGxiYXJMb2NhbFBvaW50KHNjcm9sbGJhciwgd2luZG93VG9Db250ZW50cyhwKSk7CisKKyAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuaAppbmRleCBmYjA0ZTEwLi5mMmNjYTc2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5o
CkBAIC0yOTAsNiArMjkwLDEyIEBAIHByaXZhdGU6CiAKICAgICBib29sIGNhcHR1cmVzRHJhZ2dp
bmcoKSBjb25zdCB7IHJldHVybiBtX2NhcHR1cmVzRHJhZ2dpbmc7IH0KIAorICAgIC8vIFRoZXNl
IG1hcCBwb2ludHMgdmlhIEZyYW1lVmlldzo6Y29udGFpbmluZ1dpbmRvd1RvQWJzb2x1dGVQb2lu
dCgpLCB3aGljaCBpcyBhd2FyZSBvZgorICAgIC8vIHRyYW5zZm9ybXMgaW4gdGhlIGNvbnRlbnQg
KHVubGlrZSBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdygpIGFuZCBmcmllbmRz
KS4KKyAgICBJbnRQb2ludCB3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiBwKSBjb25z
dDsKKyAgICBJbnRQb2ludCB3aW5kb3dUb0ZyYW1lKGNvbnN0IEludFBvaW50JiBwKSBjb25zdDsK
KyAgICBJbnRQb2ludCB3aW5kb3dUb1Njcm9sbGJhclBvaW50KFNjcm9sbGJhciosIGNvbnN0IElu
dFBvaW50JiBwKSBjb25zdDsKKyAgICAKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIGJvb2wg
bV9tb3VzZVByZXNzZWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBi
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY5ZmNlMWEuLjgyNzAxNTkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCkBAIC0xMjE1LDYgKzEyMTUsMjQgQEAgdm9pZCBGcmFtZVZpZXc6OmdldFRpY2tt
YXJrcyhWZWN0b3I8SW50UmVjdD4mIHRpY2ttYXJrcykgY29uc3QKICAgICB0aWNrbWFya3MgPSBm
cmFtZSgpLT5kb2N1bWVudCgpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoKTsKIH0KIAorSW50UG9pbnQgRnJhbWVWaWV3OjphYnNvbHV0ZVRvU2Nyb2xs
YmFyTG9jYWxQb2ludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogY29udGVudFJlbmRlcmVyID0gZnJhbWUoKS0+
Y29udGVudFJlbmRlcmVyKCk7CisgICAgaWYgKCFjb250ZW50UmVuZGVyZXIpCisgICAgICAgIHJl
dHVybiBJbnRQb2ludCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQ7CisgICAgaWYg
KHNjcm9sbGJhciA9PSBob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIHNjcm9sbGJhck9m
ZnNldCA9IEludFNpemUoMCwgaGVpZ2h0KCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKTsKKyAgICBl
bHNlIGlmIChzY3JvbGxiYXIgPT0gdmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgc2Nyb2xs
YmFyT2Zmc2V0ID0gSW50U2l6ZSh3aWR0aCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCAwKTsKKwor
ICAgIEludFBvaW50IGxvY2FsUG9pbnQgPSByb3VuZGVkSW50UG9pbnQoY29udGVudFJlbmRlcmVy
LT5hYnNvbHV0ZVRvTG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgbG9jYWxQb2ludCAt
PSBzY3JvbGxiYXJPZmZzZXQ7CisKKyAgICByZXR1cm4gbG9jYWxQb2ludDsKK30KKwogSW50UmVj
dCBGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKIHsKICAgICBQYWdlKiBwYWdl
ID0gZnJhbWUoKSA/IGZyYW1lKCktPnBhZ2UoKSA6IDA7CkBAIC0xNDI5LDQgKzE0NDcsMzggQEAg
dm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQg
b2xkVG9wLCBmbG9hdCBvbGRCb3R0b20KICAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsK
IH0KIAorRmxvYXRQb2ludCBGcmFtZVZpZXc6OmNvbnRhaW5pbmdXaW5kb3dUb0Fic29sdXRlUG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFwUG9pbnRUaHJv
dWdoQ29udGFpbmluZ1ZpZXdzKHApOworfQorCitGbG9hdFBvaW50IEZyYW1lVmlldzo6bWFwUG9p
bnRUaHJvdWdoQ29udGFpbmluZ1ZpZXdzKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0Cit7Cisg
ICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwOworCisgICAgRWxlbWVudCogb3duZXJFbGVtZW50
ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CisgICAgRnJhbWVWaWV3KiBw
YXJlbnRWaWV3ID0gb3duZXJFbGVtZW50ID8gb3duZXJFbGVtZW50LT5kb2N1bWVudCgpLT52aWV3
KCkgOiAwOworICAgIGlmICghcGFyZW50VmlldykgeworICAgICAgICBjdXJyUG9pbnQgPSBtX2Zy
YW1lLT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhyb3VuZGVkSW50UG9pbnQo
Y3VyclBvaW50KSk7CisgICAgICAgIGN1cnJQb2ludCArPSBzY3JvbGxPZmZzZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGN1cnJQb2ludDsKKyAgICB9CisKKyAgICBjdXJyUG9pbnQgPSBwYXJlbnRWaWV3
LT5tYXBQb2ludFRocm91Z2hDb250YWluaW5nVmlld3MoY3VyclBvaW50KTsKKworICAgIC8vIEdl
dCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCB2aWV3CisgICAgUmVuZGVyUGFydCogcmVuZGVy
ZXIgPSBtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAg
ICAgcmV0dXJuIGN1cnJQb2ludDsKKworICAgIC8vIE1hcCB0aHJvdWdoIHRyYW5zZm9ybXMgaW4g
dGhlIHBhcmVudCB2aWV3J3MgZG9jdW1lbnQKKyAgICBjdXJyUG9pbnQgPSByZW5kZXJlci0+YWJz
b2x1dGVUb0xvY2FsKGN1cnJQb2ludCwgZmFsc2UsIHRydWUgLyogdXNlVHJhbnNmb3JtcyAqLyk7
CisgICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZworICAgIGN1cnJQb2ludC5tb3Zl
KC1yZW5kZXJlci0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAg
ICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5wYWRkaW5n
VG9wKCkpOworICAgIC8vIEFkZCB0aGUgc2Nyb2xsT2Zmc2V0IHRvIGdldCBpbnRvIHBhZ2UgY29v
cmRzCisgICAgY3VyclBvaW50ICs9IHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBjdXJyUG9p
bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaCBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCA0MjA2NjAwLi4w
Y2M5YmY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0xMjksMTAgKzEyOSwxMiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGJvb2wgY2xpcFRvQ29udGVudHMgPSB0cnVlKSBj
b25zdDsKICAgICBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5
ZXIqLCBib29sIGNsaXBUb0xheWVyQ29udGVudHMpIGNvbnN0OwogCisgICAgLy8gU2Nyb2xsYmFy
Q2xpZW50IG1ldGhvZHMKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAg
dmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFBvaW50IGFic29sdXRlVG9TY3JvbGxiYXJMb2NhbFBvaW50KFNjcm9sbGJhcios
IGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dS
ZXNpemVyUmVjdCgpIGNvbnN0OwogCkBAIC0xODYsNiArMTg4LDggQEAgcHVibGljOgogCiAgICAg
dm9pZCBhZGp1c3RQYWdlSGVpZ2h0KGZsb2F0KiBuZXdCb3R0b20sIGZsb2F0IG9sZFRvcCwgZmxv
YXQgb2xkQm90dG9tLCBmbG9hdCBib3R0b21MaW1pdCk7CiAKKyAgICAvLyBDb252ZXJ0IGEgcG9p
bnQgZnJvbSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGNvbnRhaW5pbmcgd2luZG93IGludG8gdGhl
IGNvb3JkaW5hdGUgc3BhY2Ugb2YgdGhlIGNvbnRlbnQgb2YgdGhpcyBGcmFtZVZpZXcKKyAgICBG
bG9hdFBvaW50IGNvbnRhaW5pbmdXaW5kb3dUb0Fic29sdXRlUG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTE5OSw2ICsyMDMs
OCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhvcml6
b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KTsKIAorICAgIEZsb2F0UG9pbnQg
bWFwUG9pbnRUaHJvdWdoQ29udGFpbmluZ1ZpZXdzKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0
OworCiAgICAgdm9pZCBkaXNwYXRjaFNjaGVkdWxlZEV2ZW50cygpOwogICAgIHZvaWQgcGVyZm9y
bVBvc3RMYXlvdXRUYXNrcygpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtTW91c2VFdmVudC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaApp
bmRleCAxYjkyMTUzLi4wYjI2NjNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtTW91c2VFdmVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50
LmgKQEAgLTEzOCw3ICsxMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgSW50UG9pbnQgbV9wb3NpdGlvbjsKKyAgICAgICAgSW50UG9pbnQgbV9w
b3NpdGlvbjsgICAgLy8gaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AtbGV2ZWwgd2luZG93
CiAgICAgICAgIEludFBvaW50IG1fZ2xvYmFsUG9zaXRpb247CiAgICAgICAgIE1vdXNlQnV0dG9u
IG1fYnV0dG9uOwogICAgICAgICBNb3VzZUV2ZW50VHlwZSBtX2V2ZW50VHlwZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51LmggYi9XZWJDb3JlL3BsYXRmb3JtL1BvcHVw
TWVudS5oCmluZGV4IGZjODVkNjAuLmIwNGJmMmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vUG9wdXBNZW51LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Qb3B1cE1lbnUuaApAQCAtMTQ5
LDYgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxi
YXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJh
ckNvcm5lclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgSW50
UG9pbnQgYWJzb2x1dGVUb1Njcm9sbGJhckxvY2FsUG9pbnQoU2Nyb2xsYmFyKiwgY29uc3QgRmxv
YXRQb2ludCYpIGNvbnN0IHsgcmV0dXJuIEludFBvaW50KCk7IH0KIAogICAgIHZvaWQgY2FsY3Vs
YXRlUG9zaXRpb25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqKTsKICAgICB2b2lk
IGludmFsaWRhdGVJdGVtKGludCBpbmRleCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAppbmRleCAx
MTU0ZDc2Li44ODYwNmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKQEAgLTU4NSwxMiArNTg1
LDExIEBAIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc1N1cHByZXNzZWQoYm9vbCBzdXBw
cmVzc2VkLCBib29sIHJlcGFpbnRPblVuc3VwcHJlCiAgICAgfQogfQogCi1TY3JvbGxiYXIqIFNj
cm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBt
b3VzZUV2ZW50KQorU2Nyb2xsYmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNv
bnN0IEludFBvaW50JiB2aWV3UG9pbnQpCiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21D
b250YWluaW5nV2luZG93KG1vdXNlRXZlbnQucG9zKCkpOwogICAgIGlmIChtX2hvcml6b250YWxT
Y3JvbGxiYXIgJiYgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh2
aWV3UG9pbnQpKQogICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOwog
ICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyICYmIG1fdmVydGljYWxTY3JvbGxiYXItPmZyYW1l
UmVjdCgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4IGY1ODg1
MDguLjYxMmViNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKICAgICBTY3JvbGxWaWV3KCk7CiAgICAgflNjcm9sbFZpZXcoKTsKIAotICAgIC8vIFNjcm9s
bGJhckNsaWVudCBtZXRob2QuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRoZSBvdGhlciB0d28uCisg
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50IG1ldGhvZC4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90
aGVycy4KICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwogICAgIAog
ICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuICBUaGUgU2Nyb2xs
VmlldyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpAQCAtMTgz
LDcgKzE4Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmKTsKIAogICAgIC8vIEZvciBwbGF0Zm9ybXMgdGhhdCBuZWVkIHRvIGhpdCB0ZXN0
IHNjcm9sbGJhcnMgZnJvbSB3aXRoaW4gdGhlIGVuZ2luZSdzIGV2ZW50IGhhbmRsZXJzIChsaWtl
IFdpbjMyKS4KLSAgICBTY3JvbGxiYXIqIHNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KTsKKyAgICAvLyBUaGUgcG9pbnQgaXMgdmlldy1yZWxh
dGl2ZS4KKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgSW50UG9pbnQm
KTsKIAogICAgIC8vIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3Igc2Nyb2xsdmlld3MgdGhhdCBuZWVk
IHRvIGhhbmRsZSB3aGVlbCBldmVudHMgbWFudWFsbHkuCiAgICAgLy8gT24gTWFjIHRoZSB1bmRl
cmx5aW5nIE5TU2Nyb2xsVmlldyBqdXN0IGRvZXMgdGhlIHNjcm9sbGluZywgYnV0IG9uIG90aGVy
IHBsYXRmb3JtcwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCmluZGV4IDEzYmIwYzkuLmFjNzdlM2UgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTMwMywxOSArMzAzLDE3IEBAIHZvaWQgU2Nyb2xsYmFy
OjpzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0IHBhcnQpCiAgICAgICAgIHRoZW1lKCktPmlu
dmFsaWRhdGVQYXJ0KHRoaXMsIG1fcHJlc3NlZFBhcnQpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6
bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK2Jvb2wgU2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0LCBjb25zdCBJbnRQb2lu
dCYgbG9jYWxQb2ludCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsK
LSAgICAgICAgbW92ZVRodW1iKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/
IAotICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3Mo
KSkueCgpIDoKLSAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhl
dnQucG9zKCkpLnkoKSk7CisgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09IEhvcml6
b250YWxTY3JvbGxiYXIgPyBsb2NhbFBvaW50LngoKSA6IGxvY2FsUG9pbnQueSgpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0
KQotICAgICAgICBtX3ByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDogY29u
dmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueSgpKTsKKyAgICAgICAgbV9wcmVz
c2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGxvY2FsUG9p
bnQueCgpIDogbG9jYWxQb2ludC55KCkpOwogCi0gICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhl
bWUoKS0+aGl0VGVzdCh0aGlzLCBldnQpOyAgICAKKyAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0
aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2dCwgbG9jYWxQb2ludCk7ICAgIAogICAgIGlmIChwYXJ0
ICE9IG1faG92ZXJlZFBhcnQpIHsKICAgICAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0
KSB7CiAgICAgICAgICAgICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7CkBAIC0zNTUsMTQg
KzM1MywxNCBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VVcCgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgU2Nyb2xsYmFyOjptb3VzZURvd24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dnQpCitib29sIFNjcm9sbGJhcjo6bW91c2VEb3duKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
ZXZ0LCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkKIHsKICAgICAvLyBFYXJseSBleGl0IGZv
ciByaWdodCBjbGljawogICAgIGlmIChldnQuYnV0dG9uKCkgPT0gUmlnaHRCdXR0b24pCiAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTogSGFuZGxlZCBhcyBjb250ZXh0IG1lbnUgYnkgUXQg
cmlnaHQgbm93LiAgU2hvdWxkIGp1c3QgYXZvaWQgZXZlbiBjYWxsaW5nIHRoaXMgbWV0aG9kIG9u
IGEgcmlnaHQgY2xpY2sgdGhvdWdoLgogCi0gICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0
VGVzdCh0aGlzLCBldnQpKTsKLSAgICBpbnQgcHJlc3NlZFBvcyA9IChvcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBv
cygpKS54KCkgOiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS55KCkpOwor
ICAgIHNldFByZXNzZWRQYXJ0KHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LCBsb2NhbFBvaW50
KSk7CisgICAgaW50IHByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gbG9jYWxQb2ludC54KCkgOiBsb2NhbFBvaW50LnkoKSk7CiAgICAgCiAgICAgaWYg
KChwcmVzc2VkUGFydCgpID09IEJhY2tUcmFja1BhcnQgfHwgcHJlc3NlZFBhcnQoKSA9PSBGb3J3
YXJkVHJhY2tQYXJ0KSAmJiB0aGVtZSgpLT5zaG91bGRDZW50ZXJPblRodW1iKHRoaXMsIGV2dCkp
IHsKICAgICAgICAgc2V0SG92ZXJlZFBhcnQoVGh1bWJQYXJ0KTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCmlu
ZGV4IDJjNWIyNzQuLjg3ZWRlZGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApAQCAtOTQsMTMgKzk0LDEz
IEBAIHB1YmxpYzoKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGZvciBwbGF0Zm9ybSBz
Y3JvbGxiYXJzIHRvIGdpdmUgOmhvdmVyIGZlZWRiYWNrLiAgVGhleSB3aWxsIG5vdCBnZXQgY2Fs
bGVkCiAgICAgLy8gd2hlbiB0aGUgbW91c2Ugd2VudCBkb3duIGluIGEgc2Nyb2xsYmFyLCBzaW5j
ZSBpdCBpcyBhc3N1bWVkIHRoZSBzY3JvbGxiYXIgd2lsbCBzdGFydAogICAgIC8vIGdyYWJiaW5n
IGFsbCBldmVudHMgaW4gdGhhdCBjYXNlIGFueXdheS4KLSAgICBib29sIG1vdXNlTW92ZWQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgYm9vbCBtb3VzZU1vdmVkKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYsIGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KTsKICAgICBib29sIG1v
dXNlRXhpdGVkKCk7CiAgICAgCiAgICAgLy8gVXNlZCBieSBzb21lIHBsYXRmb3JtIHNjcm9sbGJh
cnMgdG8ga25vdyB3aGVuIHRoZXkndmUgYmVlbiByZWxlYXNlZCBmcm9tIGNhcHR1cmUuCiAgICAg
Ym9vbCBtb3VzZVVwKCk7CiAKLSAgICBib29sIG1vdXNlRG93bihjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmKTsKKyAgICBib29sIG1vdXNlRG93bihjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBj
b25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCk7CiAKICNpZiBQTEFURk9STShRVCkKICAgICAvLyBG
b3IgcGxhdGZvcm1zIHRoYXQgd2lzaCB0byBoYW5kbGUgY29udGV4dCBtZW51IGV2ZW50cy4KQEAg
LTExMSw2ICsxMTEsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBUYWtlcyBhbiBldmVudCBhbmQgYWNj
b3VudHMgZm9yIGFueSB0cmFuc2Zvcm1zIHRoYXQgbWlnaHQgb2NjdXIgb24gdGhlIHNjcm9sbGJh
ci4gIFJldHVybnMKICAgICAvLyBhIG5ldyBldmVudCB0aGF0IGhhcyBoYWQgYWxsIG9mIHRoZSB0
cmFuc2Zvcm1zIGFwcGxpZWQuCisgICAgLy8gRklYTUU6IG5vIGxvbmdlciBuZWVkZWQ7IHJlbW92
ZT8KICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgdHJhbnNmb3JtRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50Jik7CiAgICAgCiAgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV90aGVtZTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJD
bGllbnQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKaW5kZXggZjcyMGU5
NS4uZGEyMjMwMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCkBAIC0zMiw2ICszMiw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNjcm9sbGJhcjsKK2NsYXNzIEZsb2F0
UG9pbnQ7CiAKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7CiBwdWJsaWM6CkBAIC00NSw2ICs0Niw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNv
bnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+
JikgY29uc3QgeyB9CisgICAgCisgICAgLy8gTWFwIHRoZSBnaXZlbiBwb2ludCBmcm9tIGFic29s
dXRlICgicGFnZSIpIGNvb3JkaW5hdGVzIHRvIGNvb3JkaW5hdGVzIGxvY2FsIHRvIHRoZSBzY3Jv
bGxiYXIKKyAgICB2aXJ0dWFsIEludFBvaW50IGFic29sdXRlVG9TY3JvbGxiYXJMb2NhbFBvaW50
KFNjcm9sbGJhciosIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmggYi9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhclRoZW1lLmgKaW5kZXggZTJhZWJjNi4uMjI4OWE3NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWUuaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U2Nyb2xsYmFyVGhlbWUoKSB7fTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3JvbGxiYXIq
LCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXIq
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KKyAgICB2aXJ0
dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmLCBjb25zdCBJbnRQb2ludCYgLypsb2NhbFBvaW50Ki8pIHsgcmV0dXJuIE5vUGFydDsg
fQogICAgIAogICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250
cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpIHsgcmV0dXJuIDA7IH0KIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcAppbmRleCBhYjVlMTZiLi45OThhYWYw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcApAQCAt
MTU2LDEzICsxNTYsMTMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnQoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGgKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCitTY3Jv
bGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpoaXRUZXN0KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkKIHsKICAgICBTY3JvbGxiYXJQYXJ0IHJlc3VsdCA9IE5vUGFydDsKICAgICBpZiAoIXNj
cm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgSW50UG9p
bnQgbW91c2VQb3NpdGlvbiA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93
KGV2dC5wb3MoKSk7CisgICAgSW50UG9pbnQgbW91c2VQb3NpdGlvbiA9IGxvY2FsUG9pbnQ7CiAg
ICAgbW91c2VQb3NpdGlvbi5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CiAg
ICAgCiAgICAgaWYgKCFzY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlUG9zaXRp
b24pKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCmluZGV4IGQ4
YzNmYmIuLmYxYzYxMjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgKQEAgLTM0LDcgKzM0LDcgQEAgY2xhc3MgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgOiBw
dWJsaWMgU2Nyb2xsYmFyVGhlbWUgewogcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludChT
Y3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFn
ZVJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyKiwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhp
dFRlc3QoU2Nyb2xsYmFyKiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpOwogCiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNjcm9s
bGJhciosIFNjcm9sbGJhclBhcnQpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1dp
ZGdldC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCAwMjljYzc4Li5kZDVjM2Ez
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmgKQEAgLTgxLDcgKzgxLDYgQEAgY2xhc3MgRm9udDsKIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFNjcm9sbFZpZXc7
Ci1jbGFzcyBXaWRnZXRDbGllbnQ7CiBjbGFzcyBXaWRnZXRQcml2YXRlOwogCiAvLyBUaGUgV2lk
Z2V0IGNsYXNzIHNlcnZlcyBhcyBhIGJhc2UgY2xhc3MgZm9yIHRocmVlIGtpbmRzIG9mIG9iamVj
dHM6CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9s
bFZpZXcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GcmFtZWxlc3NTY3JvbGxWaWV3
LmNwcAppbmRleCAxMTRlYWJiLi42YTY1OTYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9sbFZpZXcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5jcHAKQEAgLTg0LDQgKzg0LDEwIEBAIHZvaWQg
RnJhbWVsZXNzU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRzUmVzaXplZCgpCiB7CiB9CiAKK0lu
dFBvaW50IEZyYW1lbGVzc1Njcm9sbFZpZXc6OmFic29sdXRlVG9TY3JvbGxiYXJMb2NhbFBvaW50
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICAvLyBGSVhNRTogdGhpcyBpcyBjYWxsZWQgYnkgRXZlbnRIYW5kbGVyOjp3aW5kb3dUb1Nj
cm9sbGJhclBvaW50IHdoZW4gaGl0IHRlc3Rpbmcgc2Nyb2xsYmFycy4KKyAgICByZXR1cm4gSW50
UG9pbnQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRdC5jcHAKaW5kZXggMzg1MWRmZS4uNmY3NWY1NyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCkBAIC0xNjcsOCArMTY3LDkgQEAgYm9vbCBT
Y3JvbGxiYXJUaGVtZVF0OjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFydCBT
Y3JvbGxiYXJUaGVtZVF0OjpoaXRUZXN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRdDo6aGl0
VGVzdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQs
IGNvbnN0IEludFBvaW50JiAvKmxvY2FsUG9pbnQqLykKIHsKKyAgICAvLyBGSVhNRTogdXNlIGxv
Y2FsUG9pbnQgdG8gZml4IGhpdCB0ZXN0aW5nIHdpdGggdHJhbnNmb3JtcwogICAgIFFTdHlsZU9w
dGlvblNsaWRlciogb3B0ID0gc3R5bGVPcHRpb25TbGlkZXIoc2Nyb2xsYmFyKTsKICAgICBjb25z
dCBRUG9pbnQgcG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0
LnBvcygpKTsKICAgICBvcHQtPnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCmluZGV4IDc4N2IxNWEuLmY0NjU4YmUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29y
bmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJS
ZWN0KTsKIAotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhciosIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRU
ZXN0KFNjcm9sbGJhciosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGNvbnN0IEludFBvaW50
JiAvKmxvY2FsUG9pbnQqLyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVt
YihTY3JvbGxiYXIqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAppbmRleCBmYTY1NGJmLi40YjAyZWJlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCkBAIC0zMjM5LDEyICszMjM5LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZFZpc3VhbE92ZXJmbG93KGNvbnN0IEludFJlY3QmIHIpCiAgICAgbV9vdmVyZmxvd0hlaWdodCA9
IG1heChtX292ZXJmbG93SGVpZ2h0LCByLmJvdHRvbSgpKTsKIH0KIAotYm9vbCBSZW5kZXJCbG9j
azo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50LCBp
bnQsIGludCwgaW50KQorYm9vbCBSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9s
KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBfdHkp
CiB7CiAgICAgaWYgKCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgSW50UG9p
bnQoX3ggLSBfdHgsIF95IC0gX3R5KSk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQs
IGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RB
Y3Rpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggYzU2ZDhmNS4uOTFmMjg5MCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtMTM5NSw2ICsxMzk1LDI2IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OnNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdAogICAgIHJldHVybiAh
c2Nyb2xsQ29ybmVyUmVjdCh0aGlzLCByZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKS5pc0Vt
cHR5KCk7CiB9CiAKK0ludFBvaW50IFJlbmRlckxheWVyOjphYnNvbHV0ZVRvU2Nyb2xsYmFyTG9j
YWxQb2ludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKKyAgICBpZiAoIWJveCkK
KyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICBJbnRSZWN0IGJvcmRlckJveCA9IGJv
eC0+Ym9yZGVyQm94UmVjdCgpOworCisgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQ7CisgICAg
aWYgKHNjcm9sbGJhciA9PSBtX2hCYXIpCisgICAgICAgIHNjcm9sbGJhck9mZnNldCA9IEludFNp
emUoYm9yZGVyQm94LngoKSArIGJveC0+Ym9yZGVyTGVmdCgpLCBib3JkZXJCb3guYm90dG9tKCkg
LSBib3gtPmJvcmRlckJvdHRvbSgpIC0gc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisgICAgZWxzZSBp
ZiAoc2Nyb2xsYmFyID09IG1fdkJhcikKKyAgICAgICAgc2Nyb2xsYmFyT2Zmc2V0ID0gSW50U2l6
ZShib3JkZXJCb3gucmlnaHQoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lk
dGgoKSwgYm9yZGVyQm94LnkoKSArIGJveC0+Ym9yZGVyVG9wKCkpOworCisgICAgSW50UG9pbnQg
bG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChyZW5kZXJlcigpLT5hYnNvbHV0ZVRvTG9jYWwo
cG9pbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgbG9jYWxQb2ludCAtPSBzY3JvbGxiYXJPZmZzZXQ7
CisKKyAgICByZXR1cm4gbG9jYWxQb2ludDsKK30KKwogdm9pZCBSZW5kZXJMYXllcjo6aW52YWxp
ZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCiB7CiAgICAgSW50UmVjdCBzY3JvbGxSZWN0ID0gcmVjdDsKQEAgLTE4MDYsNyArMTgyNiw3
IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3QgSW50UG9p
bnQmIGFic29sdXRlUG9pbnQpIGNvbnN0CiAgICAgcmV0dXJuIHJlc2l6ZXJDb3JuZXJSZWN0KHRo
aXMsIGxvY2FsQm91bmRzKS5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KICAgICAKLWJvb2wgUmVu
ZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkK
K2Jvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpCiB7CiAgICAgaWYgKCFtX2hCYXIg
JiYgIW1fdkJhciAmJiAoIXJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVy
KCktPnN0eWxlKCktPnJlc2l6ZSgpID09IFJFU0laRV9OT05FKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTgxNCwyNiArMTgzNCwyMSBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3Zl
cmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQpCiAgICAgUmVuZGVyQm94KiBib3gg
PSByZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKIAotICAgIGludCB4ID0gMDsKLSAgICBp
bnQgeSA9IDA7Ci0gICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4LCB5KTsKLSAgICBJ
bnRSZWN0IGFic0JvdW5kcyh4LCB5LCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOwotICAg
IAogICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CiAgICAgaWYgKHJlbmRlcmVyKCktPnN0
eWxlKCktPnJlc2l6ZSgpICE9IFJFU0laRV9OT05FKSB7Ci0gICAgICAgIHJlc2l6ZUNvbnRyb2xS
ZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYWJzQm91bmRzKTsKLSAgICAgICAgaWYgKHJl
c2l6ZUNvbnRyb2xSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkKKyAgICAgICAgcmVzaXpl
Q29udHJvbFJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJvcmRlckJveFJlY3Qo
KSk7CisgICAgICAgIGlmIChyZXNpemVDb250cm9sUmVjdC5jb250YWlucyhsb2NhbFBvaW50KSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGludCByZXNpemVDb250cm9s
U2l6ZSA9IG1heChyZXNpemVDb250cm9sUmVjdC5oZWlnaHQoKSwgMCk7CiAKICAgICBpZiAobV92
QmFyKSB7Ci0gICAgICAgIEludFJlY3QgdkJhclJlY3QoYWJzQm91bmRzLnJpZ2h0KCkgLSBib3gt
PmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksIAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRvcCgpLAorICAgICAgICBJbnRSZWN0IHZC
YXJSZWN0KGJveC0+d2lkdGgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgo
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgYm94LT5ib3JkZXJUb3AoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgYWJzQm91bmRzLmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJvcmRlckJv
dHRvbSgpKSAtIChtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogcmVzaXplQ29udHJvbFNpemUp
KTsKLSAgICAgICAgaWYgKHZCYXJSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVpZ2h0KCkgLSAoYm94LT5ib3JkZXJUb3AoKSAr
IGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gKG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkgOiByZXNp
emVDb250cm9sU2l6ZSkpOworICAgICAgICBpZiAodkJhclJlY3QuY29udGFpbnMobG9jYWxQb2lu
dCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xODQxLDExICsxODU2LDExIEBA
IGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQm
IHJlc3VsdCkKIAogICAgIHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4KHJlc2l6ZUNvbnRyb2xSZWN0
LndpZHRoKCksIDApOwogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgSW50UmVjdCBoQmFyUmVj
dChhYnNCb3VuZHMueCgpICsgYm94LT5ib3JkZXJMZWZ0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgYWJzQm91bmRzLmJvdHRvbSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+
aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLndpZHRoKCkgLSAo
Ym94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gKG1fdkJhciA/IG1fdkJh
ci0+d2lkdGgoKSA6IHJlc2l6ZUNvbnRyb2xTaXplKSwKKyAgICAgICAgSW50UmVjdCBoQmFyUmVj
dChib3gtPmJvcmRlckxlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPmhlaWdo
dCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgYm94LT53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVmdCgpICsgYm94LT5i
b3JkZXJSaWdodCgpKSAtIChtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiByZXNpemVDb250cm9s
U2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSk7Ci0gICAg
ICAgIGlmIChoQmFyUmVjdC5jb250YWlucyhyZXN1bHQucG9pbnQoKSkpIHsKKyAgICAgICAgaWYg
KGhCYXJSZWN0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CiAgICAgICAgICAgICByZXN1bHQuc2V0
U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggZGFkZThkMS4uODFjZDBkMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCkBAIC0xNTgsNyArMTU4LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fZml4ZWQgOiAxOwogfTsKIAotY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYmFy
Q2xpZW50IHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHJpdmF0ZSBTY3JvbGxiYXJDbGllbnQgewog
cHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJSZXBsaWNhOwogCkBAIC0yNjIsNyArMjYy
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoaW50IHR4
LCBpbnQgdHkpOwogICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJbnRQb2lu
dCYgYWJzb2x1dGVQb2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9s
cyhIaXRUZXN0UmVzdWx0Jik7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUgb2Zm
c2V0RnJvbVJlc2l6ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgYWJzb2x1dGVQb2ludCkgY29uc3Q7
CiAKICAgICB2b2lkIHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqLCBpbnQg
dHgsIGludCB0eSwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CkBAIC00NTEsMTAgKzQ1MSwx
MiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7
IAogCisgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCB2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3Jv
bGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wg
aXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2Vu
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgYWJzb2x1dGVUb1Njcm9sbGJhckxvY2Fs
UG9pbnQoU2Nyb2xsYmFyKiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9pZCB1
cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNh
bE92ZXJmbG93KTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAppbmRleCA1MGI0MDZi
Li5mMjNiODQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNw
cAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcApAQCAtMzcwLDcgKzM3
MCw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgSW50UmVjdCB2ZXJ0UmVjdChfdHggKyB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIG1fdkJh
ci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgIF90eSwKKyAgICAgICAgICAgICAgICAg
ICAgIF90eSArIGJvcmRlclRvcCgpLAogICAgICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0
aCgpLAogICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBib3JkZXJUb3AoKSAtIGJvcmRl
ckJvdHRvbSgpKTsKIApAQCAtNjIyLDYgKzYyMiwxNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6Omlu
dmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0
JgogICAgIHJlcGFpbnRSZWN0YW5nbGUoc2Nyb2xsUmVjdCk7CiB9CiAKK0ludFBvaW50IFJlbmRl
ckxpc3RCb3g6OmFic29sdXRlVG9TY3JvbGxiYXJMb2NhbFBvaW50KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlRfVU5VU0VE
KHNjcm9sbGJhciwgc2Nyb2xsYmFyID09IG1fdkJhci5nZXQoKSk7CisgICAgSW50U2l6ZSBzY3Jv
bGxiYXJPZmZzZXQgPSBJbnRTaXplKHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gbV92QmFyLT53
aWR0aCgpLCBib3JkZXJUb3AoKSk7CisKKyAgICBJbnRQb2ludCBsb2NhbFBvaW50ID0gcm91bmRl
ZEludFBvaW50KGFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRydWUpKTsKKyAgICBsb2Nh
bFBvaW50IC09IHNjcm9sbGJhck9mZnNldDsKKworICAgIHJldHVybiBsb2NhbFBvaW50OworfQor
CiBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTGlzdEJveDo6Y3JlYXRlU2Nyb2xsYmFyKCkK
IHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmgKaW5kZXggYWNjMzEzZi4uMGM3OTAxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaApA
QCAtMTAzLDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJv
b2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJl
c2VudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IC8vIFdlIGRvbid0IHN1cHBvcnQgcmVzaXpl
IG9uIGxpc3QgYm94ZXMgeWV0LiAgSWYgd2UgZGlkIHRoaXMgd291bGQgaGF2ZSB0byBjaGFuZ2Uu
CisgICAgdmlydHVhbCBJbnRQb2ludCBhYnNvbHV0ZVRvU2Nyb2xsYmFyTG9jYWxQb2ludChTY3Jv
bGxiYXIqLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIHNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKCk7Cg==
</data>
<flag name="review"
          id="14120"
          type_id="1"
          status="-"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31631</attachid>
            <date>2009-06-21 22:15:30 -0700</date>
            <delta_ts>2009-06-28 18:18:15 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>22119_wip.txt</filename>
            <type>text/plain</type>
            <size>23595</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gt
c2Nyb2xsYmFyLWhpdC10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9m
b3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhlYjA0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9mb3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCkBA
IC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGlzdGJveCBzY3JvbGxi
YXIgaGl0IHRlc3Rpbmc8L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgorICAgIHNlbGVjdCB7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAg
ICAgIHBhZGRpbmc6IDEwcHg7CisgICAgfQorICAgIAorICAgICNyZXN1bHRzIHsKKyAgICAgIG1h
cmdpbi10b3A6IDUwcHg7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGZ1bmN0aW9uIHNlbmRDbGljayhlbGVt
ZW50LCBjbGllbnRYLCBjbGllbnRZKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2xpZW50WCwgY2xpZW50WSk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbW91c2VEb3duT25TZWxl
Y3Qoc2VsSWQsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVkpCisgICAgeworICAgICAgbG9nKCdUZXN0
aW5nIGNsaWNrcyBvbiAnICsgc2VsSWQpOworCisgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbElkKTsKKyAgICAgIHZhciBpdGVtSGVpZ2h0ID0gMTQ7
CisgICAgICB2YXIgYm9yZGVyID0gMjA7CisgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSAxMDsK
KyAgICAgIHZhciBzY3JvbGxiYXJCdXR0b25IZWlnaHQgPSAxMjsKKyAgICAgIAorICAgICAgdmFy
IHNjcm9sbGJhck1pZFggPSB0cmFuc2xhdGVYICsgc2VsZWN0RWxlbWVudC5vZmZzZXRMZWZ0ICsg
c2VsZWN0RWxlbWVudC5vZmZzZXRXaWR0aCAtIGJvcmRlciAtIHNjcm9sbGJhcldpZHRoIC8gMjsK
KyAgICAgIC8vIFJlY2FsbCB0aGF0IERSVCBydW5zIHdpdGggYm90aCBzY3JvbGwgYXJyb3dzIGF0
IHRoZSBlbmQgb2YgdGhlIHNjcm9sbGJhcgorICAgICAgdmFyIHNjcm9sbGJhclRvcEFycm93WSA9
IHRyYW5zbGF0ZVkgKyBzZWxlY3RFbGVtZW50Lm9mZnNldFRvcCArIHNlbGVjdEVsZW1lbnQub2Zm
c2V0SGVpZ2h0IC0gYm9yZGVyIC0gc2Nyb2xsYmFyQnV0dG9uSGVpZ2h0IC0gMzsKKyAgICAgIHZh
ciBzY3JvbGxiYXJCb3R0b21BcnJvd1kgPSB0cmFuc2xhdGVZICsgc2VsZWN0RWxlbWVudC5vZmZz
ZXRUb3AgKyBzZWxlY3RFbGVtZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIDM7CisgICAgICAK
KyAgICAgIHNlbmRDbGljayhzZWxlY3RFbGVtZW50LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJC
b3R0b21BcnJvd1kpOworICAgICAgc2VuZENsaWNrKHNlbGVjdEVsZW1lbnQsIHNjcm9sbGJhck1p
ZFgsIHNjcm9sbGJhckJvdHRvbUFycm93WSk7CisgICAgICBpZiAoc2VsZWN0RWxlbWVudC5zY3Jv
bGxUb3AgPT0gMiAqIGl0ZW1IZWlnaHQpCisgICAgICAgIGxvZygnU2Nyb2xsZWQgZG93biBieSBp
dGVtSGVpZ2h0IG9uIGRvd24gYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAg
ICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xsIGRvd24gLSBzY3JvbGxUb3AgaXMgJyArIHNlbGVjdEVs
ZW1lbnQuc2Nyb2xsVG9wICsgJzogRkFJTCcpOworCisgICAgICBzZW5kQ2xpY2soc2VsZWN0RWxl
bWVudCwgc2Nyb2xsYmFyTWlkWCwgc2Nyb2xsYmFyVG9wQXJyb3dZKTsKKyAgICAgIGlmIChzZWxl
Y3RFbGVtZW50LnNjcm9sbFRvcCA9PSBpdGVtSGVpZ2h0KQorICAgICAgICBsb2coJ1Njcm9sbGVk
IHVwIGJ5IGl0ZW1IZWlnaHQgb24gdXAgYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBzZWxl
Y3RFbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwnKTsKKworICAgICAgbG9nKCcnKTsKKyAgICB9
CisgICAgCisgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICB7CisgICAgICB2YXIgcmVzdWx0cyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJyk7CisgICAgICByZXN1bHRzLmlubmVy
SFRNTCArPSBtc2cgKyAnPGJyPic7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3QoKQor
ICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGxvZygnVGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBE
UlQnKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gSGF2ZSB0byB3YWl0IGZvciB0aGUgc2Vs
ZWN0IHRvIGJlIHBhaW50ZWQgYmVmb3JlIHRoZQorICAgICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVk
IGNvcnJlY3RseS4KKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIG1vdXNl
RG93bk9uU2VsZWN0KCdzZWxlY3QxJywgMCwgMCk7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0
KCdzZWxlY3QyJywgNTAsIDUwKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
ICB9LCAwKTsKKyAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0
KCkiPgorCisgIDxzZWxlY3QgaWQ9InNlbGVjdDEiIHNpemU9IjUiPgorICAgIDxvcHRpb24gc2Vs
ZWN0ZWQgdmFsdWU9IjAiPml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0
ZW0gMTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAg
IDxvcHRpb24gdmFsdWU9IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQi
Pml0ZW0gNDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjciPml0ZW0gNzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9u
PgorICA8L3NlbGVjdD4KKworICA8c2VsZWN0IGlkPSJzZWxlY3QyIiBzaXplPSI1IiBzdHlsZT0i
LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxvcHRpb24g
c2VsZWN0ZWQgdmFsdWU9IjAiPml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEi
Pml0ZW0gMTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjQiPml0ZW0gNDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFs
dWU9IjciPml0ZW0gNzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0
aW9uPgorICA8L3NlbGVjdD4KKworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9v
dmVyZmxvdy9vdmVyZmxvdy1zY3JvbGxiYXItaGl0LXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L292ZXJmbG93L292ZXJmbG93LXNjcm9sbGJhci1oaXQtdGVzdC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOGM2NzQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1z
Y3JvbGxiYXItaGl0LXRlc3QuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWw+Cis8aGVhZD4K
KyAgPHRpdGxlPk92ZXJmbG93IHNjcm9sbGJhciBoaXQgdGVzdGluZzwvdGl0bGU+CisgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmJveCB7CisgICAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CisgICAgICB3aWR0aDogMTUwcHg7CisgICAgICBoZWlnaHQ6IDE1
MHB4OworICAgICAgYm9yZGVyOiAyMHB4IGluc2V0IGdyYXk7CisgICAgICBwYWRkaW5nOiAxMHB4
OworICAgICAgbWFyZ2luOiAxNXB4OworICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICB9Cisg
ICAgCisgICAgLmlubmVyIHsKKyAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgIGhlaWdodDogMzAw
cHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBncmF5OworICAgIH0KKyAgICAKKyAgICAjcmVz
dWx0cyB7CisgICAgICBtYXJnaW4tdG9wOiA1MHB4OworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBmdW5jdGlv
biBzZW5kQ2xpY2soZWxlbWVudCwgY2xpZW50WCwgY2xpZW50WSkKKyAgICB7CisgICAgICBpZiAo
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNs
aWVudFgsIGNsaWVudFkpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoZWxlbWVudElkLCB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZ
KQorICAgIHsKKyAgICAgIGxvZygnVGVzdGluZyBjbGlja3Mgb24gJyArIGVsZW1lbnRJZCk7CisK
KyAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsK
KyAgICAgIHZhciBzY3JvbGxJbmNyZW1lbnQgPSA0MDsKKyAgICAgIHZhciBib3JkZXIgPSAyMDsK
KyAgICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IDE2OworICAgICAgdmFyIHNjcm9sbGJhckhlaWdo
dCA9IDE2OworICAgICAgCisgICAgICB2YXIgc2Nyb2xsYmFyTWlkWCA9IHRyYW5zbGF0ZVggKyBl
bGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC0gYm9yZGVyIC0gc2Nyb2xs
YmFyV2lkdGggLyAyOworICAgICAgLy8gUmVjYWxsIHRoYXQgRFJUIHNldHMgc2Nyb2xsIGFycm93
cyB0byBiZSB0b2dldGhlciBhdCBlbmQgZW5kIG9mIHRoZSBzY3JvbGxiYXIKKyAgICAgIHZhciBz
Y3JvbGxiYXJUb3BBcnJvd1kgPSB0cmFuc2xhdGVZICsgZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIHNjcm9sbGJhckhlaWdodCAtIHNjcm9sbGJhckhl
aWdodCAtIDM7CisgICAgICB2YXIgc2Nyb2xsYmFyQm90dG9tQXJyb3dZID0gdHJhbnNsYXRlWSAr
IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBib3JkZXIgLSBzY3Jv
bGxiYXJIZWlnaHQgLSAzOworICAgICAgCisgICAgICBzZW5kQ2xpY2soZWxlbWVudCwgc2Nyb2xs
YmFyTWlkWCwgc2Nyb2xsYmFyQm90dG9tQXJyb3dZKTsKKyAgICAgIHNlbmRDbGljayhlbGVtZW50
LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOworICAgICAgaWYgKGVsZW1l
bnQuc2Nyb2xsVG9wID09IDIgKiBzY3JvbGxJbmNyZW1lbnQpCisgICAgICAgIGxvZygnU2Nyb2xs
ZWQgZG93biBieSAnICsgKDIgKiBzY3JvbGxJbmNyZW1lbnQpICsgJyBvbiBkb3duIGFycm93IGNs
aWNrOiBQQVNTJyk7CisgICAgICBlbHNlCisgICAgICAgIGxvZygnRmFpbGVkIHRvIHNjcm9sbCBk
b3duIC0gc2Nyb2xsVG9wIGlzICcgKyBlbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwnKTsKKwor
ICAgICAgc2VuZENsaWNrKGVsZW1lbnQsIHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhclRvcEFycm93
WSk7CisgICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT0gc2Nyb2xsSW5jcmVtZW50KQorICAg
ICAgICBsb2coJ1Njcm9sbGVkIHVwIGJ5ICcgKyBzY3JvbGxJbmNyZW1lbnQgKyAnIG9uIHVwIGFy
cm93IGNsaWNrOiBQQVNTJyk7CisgICAgICBlbHNlCisgICAgICAgIGxvZygnRmFpbGVkIHRvIHNj
cm9sbCB1cCAtIHNjcm9sbFRvcCBpcyAnICsgZWxlbWVudC5zY3JvbGxUb3AgKyAnOiBGQUlMJyk7
CisKKyAgICAgIGxvZygnJyk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisg
ICAgeworICAgICAgdmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0
cycpOworICAgICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gbXNnICsgJzxicj4nOworICAgIH0KKyAg
ICAKKyAgICBmdW5jdGlvbiB0ZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAg
fQorICAgICAgCisgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBsb2co
J1RoaXMgdGVzdCBvbmx5IHJ1bnMgaW4gRFJUJyk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8v
IEhhdmUgdG8gd2FpdCBmb3IgdGhlIHNlbGVjdCB0byBiZSBwYWludGVkIGJlZm9yZSB0aGUKKyAg
ICAgIC8vIHNjcm9sbGJhciBpcyBzaXplZCBjb3JyZWN0bHkuCisgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICBtb3VzZURvd25Pbk92ZXJmbG93RGl2KCdib3gxJywgMCwgMCk7
CisgICAgICAgIG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoJ2JveDInLCA1MCwgNTApOworICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgIH0sIDApOworICAgIH0KKyAgPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+CisKKworICA8ZGl2IGNsYXNzPSJib3gi
IGlkPSJib3gxIj4KKyAgICA8ZGl2IGNsYXNzPSJpbm5lciI+SW5uZXI8L2Rpdj4KKyAgPC9kaXY+
CisKKyAgPGRpdiBjbGFzcz0iYm94IiBpZD0iYm94MiIgc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3Jt
OiB0cmFuc2xhdGUoNTBweCwgNTBweCk7Ij4KKyAgICA8ZGl2IGNsYXNzPSJpbm5lciI+SW5uZXI8
L2Rpdj4KKyAgPC9kaXY+CisKKyAgPGRpdiBpZD0icmVzdWx0cyI+CisgIDwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAzOGIwNWU4Li4yZThmNzg1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcApAQCAtMTI2Miw2ICsxMjYyLDI2IEBAIHZvaWQgRnJhbWVWaWV3OjpnZXRUaWNrbWFya3Mo
VmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3MpIGNvbnN0CiAgICAgdGlja21hcmtzID0gZnJhbWUo
KS0+ZG9jdW1lbnQoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRl
eHRNYXRjaCk7CiB9CiAKKy8qCitJbnRQb2ludCBGcmFtZVZpZXc6OmFic29sdXRlVG9TY3JvbGxi
YXJMb2NhbFBvaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiBjb250ZW50UmVuZGVyZXIgPSBmcmFtZSgpLT5j
b250ZW50UmVuZGVyZXIoKTsKKyAgICBpZiAoIWNvbnRlbnRSZW5kZXJlcikKKyAgICAgICAgcmV0
dXJuIEludFBvaW50KCk7CisKKyAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldDsKKyAgICBpZiAo
c2Nyb2xsYmFyID09IGhvcml6b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgc2Nyb2xsYmFyT2Zm
c2V0ID0gSW50U2l6ZSgwLCBoZWlnaHQoKSAtIHNjcm9sbGJhci0+aGVpZ2h0KCkpOworICAgIGVs
c2UgaWYgKHNjcm9sbGJhciA9PSB2ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICBzY3JvbGxi
YXJPZmZzZXQgPSBJbnRTaXplKHdpZHRoKCkgLSBzY3JvbGxiYXItPndpZHRoKCksIDApOworCisg
ICAgSW50UG9pbnQgbG9jYWxQb2ludCA9IHJvdW5kZWRJbnRQb2ludChjb250ZW50UmVuZGVyZXIt
PmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRydWUpKTsKKyAgICBsb2NhbFBvaW50IC09
IHNjcm9sbGJhck9mZnNldDsKKworICAgIHJldHVybiBsb2NhbFBvaW50OworfQorKi8KKwogSW50
UmVjdCBGcmFtZVZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKIHsKICAgICBQYWdlKiBw
YWdlID0gZnJhbWUoKSA/IGZyYW1lKCktPnBhZ2UoKSA6IDA7CkBAIC0xNDg3LDQgKzE1MDcsNTcg
QEAgdm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxv
YXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20KICAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRv
bTsKIH0KIAorI2lmIDAKK0Zsb2F0UG9pbnQgRnJhbWVWaWV3Ojpjb250YWluaW5nV2luZG93VG9Q
YWdlUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFwUG9p
bnRUaHJvdWdoQ29udGFpbmluZ1ZpZXdzKHApOworfQorCitGbG9hdFBvaW50IEZyYW1lVmlldzo6
bWFwUG9pbnRUaHJvdWdoQ29udGFpbmluZ1ZpZXdzKGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0
Cit7CisgICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwOworCisgICAgRWxlbWVudCogb3duZXJF
bGVtZW50ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CisgICAgRnJhbWVW
aWV3KiBwYXJlbnRWaWV3ID0gb3duZXJFbGVtZW50ID8gb3duZXJFbGVtZW50LT5kb2N1bWVudCgp
LT52aWV3KCkgOiAwOworICAgIGlmICghcGFyZW50VmlldykgeworICAgICAgICBjdXJyUG9pbnQg
PSBtX2ZyYW1lLT52aWV3KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhyb3VuZGVkSW50
UG9pbnQoY3VyclBvaW50KSk7CisgICAgICAgIGN1cnJQb2ludCArPSBzY3JvbGxPZmZzZXQoKTsK
KyAgICAgICAgcmV0dXJuIGN1cnJQb2ludDsKKyAgICB9CisKKyAgICBjdXJyUG9pbnQgPSBwYXJl
bnRWaWV3LT5tYXBQb2ludFRocm91Z2hDb250YWluaW5nVmlld3MoY3VyclBvaW50KTsKKworICAg
IC8vIEdldCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCB2aWV3CisgICAgUmVuZGVyUGFydCog
cmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCk7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIGN1cnJQb2ludDsKKworICAgIC8vIE1hcCB0aHJvdWdoIHRyYW5zZm9y
bXMgaW4gdGhlIHBhcmVudCB2aWV3J3MgZG9jdW1lbnQKKyAgICBjdXJyUG9pbnQgPSByZW5kZXJl
ci0+YWJzb2x1dGVUb0xvY2FsKGN1cnJQb2ludCwgZmFsc2UsIHRydWUgLyogdXNlVHJhbnNmb3Jt
cyAqLyk7CisgICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZworICAgIGN1cnJQb2lu
dC5tb3ZlKC1yZW5kZXJlci0+Ym9yZGVyTGVmdCgpIC0gcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCks
CisgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5w
YWRkaW5nVG9wKCkpOworICAgIC8vIEFkZCB0aGUgc2Nyb2xsT2Zmc2V0IHRvIGdldCBpbnRvIHBh
Z2UgY29vcmRzCisgICAgY3VyclBvaW50ICs9IHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBj
dXJyUG9pbnQ7Cit9CisjZW5kaWYKKworSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0Q2hpbGRU
b1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAoreworfQorCitJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25z
dCBXaWRnZXQqIGNoaWxkV2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cit9
CisKK0ludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBj
aGlsZFdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKK30KKworSW50UmVjdCBG
cmFtZVZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkV2lkZ2V0LCBj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCAxNmVhZGM1Li4zMWExMTgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0xODQsMTAg
KzE4NCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkanVzdFBhZ2VIZWlnaHQoZmxvYXQqIG5l
d0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20sIGZsb2F0IGJvdHRvbUxpbWl0
KTsKIAorICAgIC8vIENvbnZlcnQgYSBwb2ludCBmcm9tIHRoZSBjb29yZGluYXRlcyBvZiB0aGUg
Y29udGFpbmluZyB3aW5kb3cgaW50byB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgY29udGVu
dCBvZiB0aGlzIEZyYW1lVmlldworICAgIEZsb2F0UG9pbnQgY29udGFpbmluZ1dpbmRvd1RvUGFn
ZVBvaW50KGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKKwogICAgIGJvb2wgbG9ja2VkVG9BbmNo
b3IoKSB7IHJldHVybiBtX2xvY2tlZFRvQW5jaG9yOyB9CiAgICAgdm9pZCBzZXRMb2NrZWRUb0Fu
Y2hvcihib29sIGxvY2tlZFRvQW5jaG9yKSB7IG1fbG9ja2VkVG9BbmNob3IgPSBsb2NrZWRUb0Fu
Y2hvcjsgfQogCi0KIHByaXZhdGU6CiAgICAgRnJhbWVWaWV3KEZyYW1lKik7CiAKQEAgLTIxNCw2
ICsyMTYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGxheW91dCgpOwogICAgIH0KIAorICAg
IC8vIE92ZXJyaWRlIFNjcm9sbFZpZXcgbWV0aG9kcyB0byBkbyBwb2ludCBjb252ZXJzaW9uIHZp
YSByZW5kZXJlcnMsIGluIG9yZGVyIHRvCisgICAgLy8gdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNj
b3VudC4KKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRn
ZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVy
dFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAg
dmlydHVhbCBJbnRSZWN0IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisKICAgICB2b2lkIGRlZmVycmVk
UmVwYWludFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3PiopOwogICAgIHZvaWQgZG9EZWZlcnJl
ZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVEZWZlcnJlZFJlcGFpbnREZWxheSgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAKaW5kZXggOWYwZGEzYS4uZmUyOTRiOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCkBAIC02NzcsNiArNjc3LDQyIEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVu
dChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCiAgICAgfQogfQogCitJbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9pbnQ7CisgICAgaWYg
KCFpc1Njcm9sbFZpZXdTY3JvbGxiYXIoY2hpbGQpKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50
IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgbmV3UG9pbnQubW92ZShjaGlsZC0+eCgpLCBjaGlsZC0+
eSgpKTsKKyAgICByZXR1cm4gbmV3UG9pbnQ7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNv
bnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoIWlz
U2Nyb2xsVmlld1Njcm9sbGJhcihjaGlsZCkpCisgICAgICAgIG5ld1BvaW50ID0gcG9pbnQgKyBz
Y3JvbGxPZmZzZXQoKTsKKyAgICBuZXdQb2ludC5tb3ZlKC1jaGlsZC0+eCgpLCAtY2hpbGQtPnko
KSk7CisgICAgcmV0dXJuIG5ld1BvaW50OworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OmNvbnZl
cnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAoreworICAgIEludFJlY3QgbmV3UmVjdCA9IHJlY3Q7CisgICAgaWYgKCFpc1Njcm9sbFZp
ZXdTY3JvbGxiYXIoY2hpbGQpKQorICAgICAgICBuZXdSZWN0LnNldExvY2F0aW9uKHJlY3QubG9j
YXRpb24oKSAtIHNjcm9sbE9mZnNldCgpKTsKKyAgICBuZXdSZWN0Lm1vdmUoY2hpbGQtPngoKSwg
Y2hpbGQtPnkoKSk7CisgICAgcmV0dXJuIG5ld1JlY3Q7Cit9CisKK0ludFJlY3QgU2Nyb2xsVmll
dzo6Y29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBuZXdSZWN0ID0gcmVjdDsKKyAgICBpZiAoIWlz
U2Nyb2xsVmlld1Njcm9sbGJhcihjaGlsZCkpCisgICAgICAgIG5ld1JlY3Quc2V0TG9jYXRpb24o
cmVjdC5sb2NhdGlvbigpICsgc2Nyb2xsT2Zmc2V0KCkpOworICAgIG5ld1JlY3QubW92ZSgtY2hp
bGQtPngoKSwgLWNoaWxkLT55KCkpOworICAgIHJldHVybiBuZXdSZWN0OworfQorCiB2b2lkIFNj
cm9sbFZpZXc6OnNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQogewogICAgIElu
dFJlY3Qgb2xkUmVjdCA9IGZyYW1lUmVjdCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCAzNTQ5
YzY2Li5jNmRkYTkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApAQCAtMTg4LDIzICsxODgsMTEgQEAg
cHVibGljOgogICAgIC8vIChsaWtlIFdpbmRvd3MpLCB3ZSBuZWVkIHRoaXMgbWV0aG9kIGluIG9y
ZGVyIHRvIGRvIHRoZSBzY3JvbGwgb3Vyc2VsdmVzLgogICAgIHZvaWQgd2hlZWxFdmVudChQbGF0
Zm9ybVdoZWVsRXZlbnQmKTsKIAotICAgIEludFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25z
dCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci0gICAgewotICAg
ICAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBvaW50OwotICAgICAgICBpZiAoIWlzU2Nyb2xsVmll
d1Njcm9sbGJhcihjaGlsZCkpCi0gICAgICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xs
T2Zmc2V0KCk7Ci0gICAgICAgIG5ld1BvaW50Lm1vdmUoY2hpbGQtPngoKSwgY2hpbGQtPnkoKSk7
Ci0gICAgICAgIHJldHVybiBuZXdQb2ludDsKLSAgICB9Ci0KLSAgICBJbnRQb2ludCBjb252ZXJ0
U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAotICAgIHsKLSAgICAgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKLSAgICAgICAg
aWYgKCFpc1Njcm9sbFZpZXdTY3JvbGxiYXIoY2hpbGQpKQotICAgICAgICAgICAgbmV3UG9pbnQg
PSBwb2ludCArIHNjcm9sbE9mZnNldCgpOwotICAgICAgICBuZXdQb2ludC5tb3ZlKC1jaGlsZC0+
eCgpLCAtY2hpbGQtPnkoKSk7Ci0gICAgICAgIHJldHVybiBuZXdQb2ludDsKLSAgICB9CisgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9DaGls
ZChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgdmlydHVhbCBJ
bnRSZWN0IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRn
ZXQqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAgICAvLyBXaWRnZXQgb3ZlcnJpZGUuICBI
YW5kbGVzIHBhaW50aW5nIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgdmlldyBhcyB3ZWxsIGFzIHRo
ZSBzY3JvbGxiYXJzLgogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKaW5kZXggYTQ1NjQzMS4uZWZlZjNjNyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vV2lkZ2V0LmNwcApAQCAtNjksNDIgKzY5LDYxIEBAIHZvaWQgV2lkZ2V0OjpyZW1vdmVGcm9t
UGFyZW50KCkKICAgICAgICAgcGFyZW50KCktPnJlbW92ZUNoaWxkKHRoaXMpOwogfQogCi0jaWYg
IVBMQVRGT1JNKE1BQykKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICBpZiAoY29uc3QgU2Nyb2xs
VmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIEludFJlY3QgcGFy
ZW50UmVjdCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRDaGlsZFRvU2VsZih0aGlzLCBsb2Nh
bFJlY3QpOworICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydFRvQ29udGFp
bmluZ1dpbmRvdyhwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUm9v
dFRvQ29udGFpbmluZ1dpbmRvdyh0aGlzLCBsb2NhbFJlY3QpOworfQogCi1JbnRSZWN0IFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAor
SW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBsb2NhbFBvaW50KSBjb25zdAoreworICAgIGlmIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRT
Y3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKKyAgICAgICAgSW50UG9pbnQgcGFyZW50UG9pbnQgPSBw
YXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0Q2hpbGRUb1NlbGYodGhpcywgbG9jYWxQb2ludCk7Cisg
ICAgICAgIHJldHVybiBwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KHBhcmVudFBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUm9vdFRvQ29udGFp
bmluZ1dpbmRvdyh0aGlzLCBsb2NhbFBvaW50KTsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25z
dAoreworICAgIGlmIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50
KCkpIHsKKyAgICAgICAgSW50UG9pbnQgcGFyZW50UG9pbnQgPSBwYXJlbnRTY3JvbGxWaWV3LT5j
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9pbnQpOworICAgICAgICByZXR1cm4g
cGFyZW50U2Nyb2xsVmlldy0+Y29udmVydFNlbGZUb0NoaWxkKHRoaXMsIHBhcmVudFBvaW50KTsK
KyAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdCh0aGlz
LCB3aW5kb3dQb2ludCk7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3coY29uc3QgSW50UmVjdCYgd2luZG93UmVjdCkgY29uc3QKK3sKKyAgICBpZiAoY29u
c3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIElu
dFJlY3QgcGFyZW50UmVjdCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRGcm9tQ29udGFpbmlu
Z1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFNjcm9sbFZpZXctPmNv
bnZlcnRTZWxmVG9DaGlsZCh0aGlzLCBwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdCh0aGlzLCB3aW5kb3dSZWN0KTsKK30KKwor
I2lmICFQTEFURk9STShNQUMpCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Sb290VG9Db250
YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCosIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAg
SW50UmVjdCBjb252ZXJ0ZWRSZWN0ID0gcmVjdDsKLSAgICBjb252ZXJ0ZWRSZWN0LnNldExvY2F0
aW9uKGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlvbigpKSk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRlZFJlY3Q7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFBv
aW50IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0CitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9S
b290KGNvbnN0IFdpZGdldCosIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgSW50UG9pbnQg
d2luZG93UG9pbnQgPSBwb2ludDsKLSAgICBjb25zdCBXaWRnZXQqIGNoaWxkV2lkZ2V0ID0gdGhp
czsKLSAgICBmb3IgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQo
KTsKLSAgICAgICAgIHBhcmVudFNjcm9sbFZpZXc7Ci0gICAgICAgICBjaGlsZFdpZGdldCA9IHBh
cmVudFNjcm9sbFZpZXcsIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnRTY3JvbGxWaWV3LT5wYXJl
bnQoKSkKLSAgICAgICAgd2luZG93UG9pbnQgPSBwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0Q2hp
bGRUb1NlbGYoY2hpbGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKLSAgICByZXR1cm4gd2luZG93UG9p
bnQ7CisgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21D
b250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50IFdp
ZGdldDo6Y29udmVydEZyb21Sb290VG9Db250YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCosIGNv
bnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50
OwotICAgIGNvbnN0IFdpZGdldCogY2hpbGRXaWRnZXQgPSB0aGlzOwotICAgIGZvciAoY29uc3Qg
U2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpOwotICAgICAgICAgcGFyZW50
U2Nyb2xsVmlldzsKLSAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50U2Nyb2xsVmlldywgcGFy
ZW50U2Nyb2xsVmlldyA9IHBhcmVudFNjcm9sbFZpZXctPnBhcmVudCgpKQotICAgICAgICB3aWRn
ZXRQb2ludCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRTZWxmVG9DaGlsZChjaGlsZFdpZGdl
dCwgd2lkZ2V0UG9pbnQpOwotICAgIHJldHVybiB3aWRnZXRQb2ludDsKKyAgICByZXR1cm4gcG9p
bnQ7CiB9CiAKLUludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250
YWluaW5nV2luZG93VG9Sb290KGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JiBwb2ludCkK
IHsKLSAgICBJbnRSZWN0IHJlc3VsdCA9IHJlY3Q7Ci0gICAgcmVzdWx0LnNldExvY2F0aW9uKGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBwb2ludDsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAppbmRleCBi
NmMwMDU0Li4xM2NmYzg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTgxLDcgKzgxLDYgQEAgY2xhc3MgRm9u
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNs
YXNzIFNjcm9sbFZpZXc7Ci1jbGFzcyBXaWRnZXRDbGllbnQ7CiBjbGFzcyBXaWRnZXRQcml2YXRl
OwogCiAvLyBUaGUgV2lkZ2V0IGNsYXNzIHNlcnZlcyBhcyBhIGJhc2UgY2xhc3MgZm9yIHRocmVl
IGtpbmRzIG9mIG9iamVjdHM6CkBAIC0xNjQsOSArMTYzLDEwIEBAIHB1YmxpYzoKICAgICAvLyB1
cCB3aXRoIGFuIGluYWNjdXJhdGUgcmVjdC4gIEFsd2F5cyBtYWtlIHN1cmUgdG8gdXNlIHRoZSBy
ZWN0LWJhc2VkIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyBtZXRob2QKICAgICAvLyB3aGVu
IGNvbnZlcnRpbmcgd2luZG93IHJlY3RzLgogICAgIEludFJlY3QgY29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgSW50UG9pbnQgY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OyAvLyBTZWUgY29t
bWVudCBhYm92ZSBhYm91dCB3aGVuIG5vdCB0byB1c2UgdGhpcyBtZXRob2QuCiAgICAgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAg
IAorICAgIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVJlY3RzQ2hhbmdlZCgp
IHt9CiAKQEAgLTE4NSw2ICsxODUsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlbGVhc2VQbGF0
Zm9ybVdpZGdldCgpOwogICAgIHZvaWQgcmV0YWluUGxhdGZvcm1XaWRnZXQoKTsKICAgICAKKyAg
ICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGNvbnZlcnQgZnJvbSB0aGUgcm9vdCB3aWRn
ZXQgdG8gdGhlIGNvbnRhaW5pbmcgd2luZG93LAorICAgIC8vIHdoaWNoIGhhcyBiZWhhdmlvciB0
aGF0IG1heSBkaWZmZXIgYmV0d2VlbiBwbGF0Zm9ybXMgKGUuZy4gTWFjIHVzZXMgZmxpcHBlZCB3
aW5kb3cgY29vcmRpbmF0ZXMpLgorICAgIHN0YXRpYyBJbnRSZWN0IGNvbnZlcnRGcm9tUm9vdFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICBzdGF0aWMgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3Qo
Y29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRSZWN0Jik7CisgICAgCisgICAgc3Rh
dGljIEludFBvaW50IGNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRn
ZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFBvaW50Jik7CisgICAgc3RhdGljIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQs
IGNvbnN0IEludFBvaW50Jik7CisKIHByaXZhdGU6CiAgICAgU2Nyb2xsVmlldyogbV9wYXJlbnQ7
CiAgICAgUGxhdGZvcm1XaWRnZXQgbV93aWRnZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9XaWRnZXRNYWMubW0gYi9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0K
aW5kZXggMWFhZjRiMi4uODY1M2EwMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2lkZ2V0TWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQpAQCAt
MjgzLDcyICsyODMsNTIgQEAgdm9pZCBXaWRnZXQ6OmFmdGVyTW91c2VEb3duKE5TVmlldyAqdmll
dywgV2lkZ2V0KiB3aWRnZXQpCiAgICAgfQogfQogCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisvLyBUaGVz
ZSBhcmUgaGVyZSB0byBkZWFsIHdpdGggZmxpcHBlZCBjb29yZHMgb24gTWFjLgorSW50UmVjdCBX
aWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJv
b3RXaWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdl
dCgpKSB7Ci0gICAgICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gcG9pbnQ7
Ci0gICAgICAgIEludFBvaW50IHJlc3VsdCA9IHBhcmVudCgpLT5jb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3cocG9pbnQpOwotICAgICAgICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgp
IC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xsWSgpIC0geSgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQor
ICAgICAgICByZXR1cm4gcmVjdDsKKwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICByZXR1cm4gSW50UG9pbnQoW3BsYXRmb3JtV2lkZ2V0KCkgY29udmVydFBvaW50OnBvaW50
IGZyb21WaWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtyb290V2lkZ2V0
LT5wbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3Om5pbF0pOwogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgCi0gICAgcmV0dXJuIHBvaW50OworCisgICAg
cmV0dXJuIHJlY3Q7CiB9CiAKLUludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdX
aW5kb3coY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkgewotICAgICAg
ICBpZiAoIXBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHJlY3Q7Ci0gICAgICAgIEludFJl
Y3QgcmVzdWx0ID0gcGFyZW50KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhyZWN0KTsK
LSAgICAgICAgcmVzdWx0Lm1vdmUocGFyZW50KCktPnNjcm9sbFgoKSAtIHgoKSwgcGFyZW50KCkt
PnNjcm9sbFkoKSAtIHkoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAor
ICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHJl
Y3Q7CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGVuY2xv
c2luZ0ludFJlY3QoW3BsYXRmb3JtV2lkZ2V0KCkgY29udmVydFJlY3Q6cmVjdCBmcm9tVmlldzpu
aWxdKTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbcm9vdFdpZGdldC0+cGxhdGZvcm1X
aWRnZXQoKSBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7Ci0gICAgCisKICAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBX
aWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVjdCYgcikgY29uc3QK
K0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Sb290VG9Db250YWluaW5nV2luZG93KGNvbnN0
IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewotICAgIGlmICgh
cGxhdGZvcm1XaWRnZXQoKSkgewotICAgICAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIHI7Ci0gICAgICAgIEludFJlY3QgcmVzdWx0ID0gcjsKLSAgICAgICAgcmVzdWx0Lm1v
dmUocGFyZW50KCktPnNjcm9sbFgoKSAtIHgoKSwgcGFyZW50KCktPnNjcm9sbFkoKSAtIHkoKSk7
Ci0gICAgICAgIHJldHVybiBwYXJlbnQoKS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZXN1
bHQpOwotICAgIH0KLSAgICAKKyAgICBpZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkp
CisgICAgICAgIHJldHVybiBwb2ludDsKKwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICByZXR1cm4gSW50UmVjdChbcGxhdGZvcm1XaWRnZXQoKSBjb252ZXJ0UmVjdDpyIHRv
VmlldzpuaWxdKTsKKyAgICByZXR1cm4gSW50UG9pbnQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lk
Z2V0KCkgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdKTsKICAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwotCi0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIHBvaW50OwogfQotIAot
SW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBwKSBjb25zdAorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRv
d1RvUm9vdChjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkK
IHsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJlbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICBJbnRQb2ludCByZXN1bHQgPSBwOwotICAg
ICAgICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgpIC0geCgpLCBwYXJlbnQoKS0+c2Ny
b2xsWSgpIC0geSgpKTsKLSAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5jb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KHJlc3VsdCk7Ci0gICAgfQotICAgIAorICAgIGlmICghcm9vdFdpZGdldC0+cGxh
dGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBJbnRQb2ludChbcGxhdGZvcm1XaWRnZXQoKSBj
b252ZXJ0UG9pbnQ6cCB0b1ZpZXc6bmlsXSk7CisgICAgcmV0dXJuIEludFBvaW50KFtyb290V2lk
Z2V0LT5wbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdKTsK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIHA7CisgICAgcmV0
dXJuIHBvaW50OwogfQogCiB2b2lkIFdpZGdldDo6cmVsZWFzZVBsYXRmb3JtV2lkZ2V0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31994</attachid>
            <date>2009-06-28 18:18:15 -0700</date>
            <delta_ts>2009-07-01 17:02:56 -0700</delta_ts>
            <desc>Working patch</desc>
            <filename>22119_patch.txt</filename>
            <type>text/plain</type>
            <size>34405</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAppbmRleCAyZDc5YzY4Li45ZjViMzdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC05MjksNiArOTI5
LDEwIEBAIF9fWk5LN1dlYkNvcmU2U3RyaW5nN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTZTdHJp
bmc5c3Vic3RyaW5nRWpqCiBfX1pOSzdXZWJDb3JlNlN0cmluZ2N2TjNKU0M3VVN0cmluZ0VFdgog
X19aTks3V2ViQ29yZTZXaWRnZXQ5ZnJhbWVSZWN0RXYKK19fWk5LN1dlYkNvcmU2V2lkZ2V0MjNj
b252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzhJbnRQb2ludEUKK19fWk5LN1dlYkNvcmU2V2lk
Z2V0MjNjb252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzdJbnRSZWN0RQorX19aTks3V2ViQ29y
ZTZXaWRnZXQyNWNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdFUktOU183SW50UmVjdEUKK19fWk5L
N1dlYkNvcmU2V2lkZ2V0MjVjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3RVJLTlNfOEludFBvaW50
RQogX19aTks3V2ViQ29yZTdDU3RyaW5nNGRhdGFFdgogX19aTks3V2ViQ29yZTdDU3RyaW5nNmxl
bmd0aEV2CiBfX1pOSzdXZWJDb3JlN0VsZW1lbnQxMmdldEF0dHJpYnV0ZUVSS05TXzEzUXVhbGlm
aWVkTmFtZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNDFmMmM1Yy4uOGQwZWJiNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKQEAgLTE1MTcsNCArMTUxNywxMTcgQEAgdm9pZCBGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWln
aHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRCb3R0b20KICAgICAg
ICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKIH0KIAorSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZl
cnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAg
ICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7Cisg
ICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKSB7CisgICAgICAgICAg
ICAvLyBHZXQgb3VyIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQgdmlldworICAgICAgICAgICAgUmVu
ZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJlbmRlcmVyKCk7CisgICAgICAgICAg
ICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlY3Q7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRSZWN0IHJlY3QobG9jYWxSZWN0KTsKKworICAg
ICAgICAgICAgLy8gQWRkIGJvcmRlcnMgYW5kIHBhZGRpbmcKKyAgICAgICAgICAgIHJlY3QubW92
ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+
cGFkZGluZ1RvcCgpKTsKKworICAgICAgICAgICAgLy8gTWFwIHRocm91Z2ggdHJhbnNmb3JtcyBp
biB0aGUgcGFyZW50IHZpZXcncyBkb2N1bWVudAorICAgICAgICAgICAgRmxvYXRRdWFkIGNvbnRh
aW5lclF1YWQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocmVjdCks
IGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBjb250YWluZXJRdWFkLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBXaWRnZXQ6OmNv
bnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2FsUmVjdCk7CisgICAgfQorICAgIAorICAgIHJldHVy
biBsb2NhbFJlY3Q7Cit9CisKK0ludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdp
ZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKK30KKworSW50UG9p
bnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9j
YWxQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xs
VmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1l
VmlldygpKSB7CisgICAgICAgICAgICAvLyBHZXQgb3VyIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQg
dmlldworICAgICAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJl
bmRlcmVyKCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBsb2NhbFBvaW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgSW50UG9pbnQg
cG9pbnQobG9jYWxQb2ludCk7CisKKyAgICAgICAgICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRk
aW5nCisgICAgICAgICAgICBwb2ludC5tb3ZlKHJlbmRlcmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5k
ZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPmJv
cmRlclRvcCgpICsgcmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CisKKyAgICAgICAgICAgIC8vIE1h
cCB0aHJvdWdoIHRyYW5zZm9ybXMgaW4gdGhlIHBhcmVudCB2aWV3J3MgZG9jdW1lbnQKKyAgICAg
ICAgICAgIEZsb2F0UG9pbnQgY29udGFpbmVyUG9pbnQgPSByZW5kZXJlci0+bG9jYWxUb0Fic29s
dXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyAqLyk7CisgICAgICAgICAg
ICByZXR1cm4gcm91bmRlZEludFBvaW50KGNvbnRhaW5lclBvaW50KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9j
YWxQb2ludCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBsb2NhbFBvaW50OworfQorCitJbnRQ
b2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQm
IHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGlmIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRT
Y3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKHBhcmVudFNjcm9sbFZpZXctPmlz
RnJhbWVWaWV3KCkpIHsKKyAgICAgICAgICAgIC8vIEdldCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBh
cmVudCB2aWV3CisgICAgICAgICAgICBSZW5kZXJQYXJ0KiByZW5kZXJlciA9IG1fZnJhbWUtPm93
bmVyUmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBhcmVudFBvaW50OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
TWFwIHRocm91Z2ggdHJhbnNmb3JtcyBpbiB0aGUgcGFyZW50IHZpZXcncyBkb2N1bWVudAorICAg
ICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmFic29s
dXRlVG9Mb2NhbChwYXJlbnRQb2ludCwgZmFsc2UsIHRydWUgLyogdXNlVHJhbnNmb3JtcyAqLykp
OworICAgICAgICAgICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZworICAgICAgICAg
ICAgcG9pbnQubW92ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJlbmRlcmVyLT5wYWRkaW5n
TGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3Ao
KSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOworICAgICAgICAgICAgcmV0dXJuIHBvaW50Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHBhcmVu
dFBvaW50OworfQorCisvLyBTY3JvbGxCYXJDbGllbnQgb3ZlcnJpZGVzIGluaGVyaXRlZCBmcm9t
IFNjcm9sbFZpZXcKK0ludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGxvY2FsUmVjdDsKK30KKworSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgRnJhbWVWaWV3
Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgLy8gU2Nyb2xsYmFycyB3b24n
dCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKKyAgICBJbnRQb2ludCBuZXdQb2ludCA9IGxvY2Fs
UG9pbnQ7CisgICAgbmV3UG9pbnQubW92ZShzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkp
OworCisgICAgLy8gRklYTUU6IGFyZSB3ZSBjb252ZXJ0aW5nIHRvIHRoaXMsIG9yIGl0cyBjb250
YWluZXI/CisgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KG5ld1BvaW50KTsKK30K
KworSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7
CisgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKKworICAg
IC8vIEZJWE1FOiBhcmUgd2UgY29udmVydGluZyB0byB0aGlzLCBvciBpdHMgY29udGFpbmVyPwor
ICAgIEludFBvaW50IG5ld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQ
b2ludCk7CisgICAgbmV3UG9pbnQubW92ZSgtc2Nyb2xsYmFyLT54KCksIC1zY3JvbGxiYXItPnko
KSk7CisKKyAgICByZXR1cm4gbmV3UG9pbnQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5oCmluZGV4IDlkYWJlNTYuLjE2YmFjZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKQEAgLTE4NSwxMCAr
MTg1LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRqdXN0UGFnZUhlaWdodChmbG9hdCogbmV3
Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbSwgZmxvYXQgYm90dG9tTGltaXQp
OwogCisgICAgLy8gQ29udmVydCBhIHBvaW50IGZyb20gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBj
b250YWluaW5nIHdpbmRvdyBpbnRvIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHRoZSBjb250ZW50
IG9mIHRoaXMgRnJhbWVWaWV3CisgICAgRmxvYXRQb2ludCBjb250YWluaW5nV2luZG93VG9QYWdl
UG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OworCiAgICAgYm9vbCBsb2NrZWRUb0FuY2hv
cigpIHsgcmV0dXJuIG1fbG9ja2VkVG9BbmNob3I7IH0KICAgICB2b2lkIHNldExvY2tlZFRvQW5j
aG9yKGJvb2wgbG9ja2VkVG9BbmNob3IpIHsgbV9sb2NrZWRUb0FuY2hvciA9IGxvY2tlZFRvQW5j
aG9yOyB9CiAKLQogcHJpdmF0ZToKICAgICBGcmFtZVZpZXcoRnJhbWUqKTsKIApAQCAtMjE1LDYg
KzIxNywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbGF5b3V0KCk7CiAgICAgfQogCisgICAg
Ly8gT3ZlcnJpZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRvIGRvIHBvaW50IGNvbnZlcnNpb24gdmlh
IHJlbmRlcmVycywgaW4gb3JkZXIgdG8KKyAgICAvLyB0YWtlIHRyYW5zZm9ybXMgaW50byBhY2Nv
dW50LgorICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSW50UG9pbnQg
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKKworICAgIC8vIFNjcm9sbEJhckNsaWVudCBvdmVycmlkZXMKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICAKKyAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisKICAgICB2b2lkIGRlZmVycmVkUmVwYWludFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3Piop
OwogICAgIHZvaWQgZG9EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVEZWZlcnJl
ZFJlcGFpbnREZWxheSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3
LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCA3Zjk5YTIyLi5hYmU1N2Uy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaApAQCAtMjIxLDEzICsyMjEsMTkgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKIAorICAgIHZp
cnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdCA9
IDA7CisgICAgCisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29u
c3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
cmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2Up
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY29udGVu
dHNSZXNpemVkKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB2aXNpYmxlQ29udGVudHNSZXNpemVk
KCkgPSAwOwotICAgIAorCiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBjcmVhdGUv
ZGVzdHJveSBzY3JvbGxiYXJzLgogICAgIHZvaWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihi
b29sKTsKICAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCmluZGV4IGJhYmYzZDQuLmJhMjNmN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAK
QEAgLTQ1NCw0ICs0NTQsMzYgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50IFNjcm9sbGJhcjo6dHJhbnNm
b3JtRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKICAgICByZXR1cm4gZXZl
bnQ7CiB9CiAKK0ludFJlY3QgU2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25z
dCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisvLyAgICBpZiAobV9jbGllbnQpCisvLyAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0VG9Db250YWluaW5nVmlldyh0aGlzLCBsb2Nh
bFJlY3QpOworCisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9j
YWxSZWN0KTsKK30KKworSW50UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKy8vICAgIGlmIChtX2NsaWVu
dCkKKy8vICAgICAgICByZXR1cm4gbV9jbGllbnQtPmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXco
dGhpcywgcGFyZW50UmVjdCk7CisKKyAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KHBhcmVudFJlY3QpOworfQorCitJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRU
b0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAoreworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0VG9Db250YWlu
aW5nVmlldyh0aGlzLCBsb2NhbFBvaW50KTsKKworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRU
b0NvbnRhaW5pbmdWaWV3KGxvY2FsUG9pbnQpOworfQorCitJbnRQb2ludCBTY3JvbGxiYXI6OmNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25z
dAoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KHRoaXMsIHBhcmVudFBvaW50KTsKKworICAgIHJldHVybiBXaWRn
ZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOworfQorCiB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuaAppbmRleCA3MTFhZTM2Li4yMTVhYzk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAg
LTEzMiw2ICsxMzIsMTIgQEAgcHJpdmF0ZToKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlVGh1bWJQb3NpdGlvbigpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3Bv
cnRpb24oKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9p
bnQmKSBjb25zdDsKICAgICAKICAgICB2b2lkIGF1dG9zY3JvbGxUaW1lckZpcmVkKFRpbWVyPFNj
cm9sbGJhcj4qKTsKICAgICB2b2lkIHN0YXJ0VGltZXJJZk5lZWRlZChkb3VibGUgZGVsYXkpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKaW5kZXggZjcyMGU5NS4uMmRhZThmYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCkBAIC00NSw2ICs0NSwxMyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0IHsgfQorCisg
ICAgLy8gUG9pbnQgYW5kIHJlY3QgY29udmVyc2lvbiBtZXRob2RzIHRoYXQgYXJlIHRyYW5zZm9y
bS1hd2FyZS4KKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3QgPSAwOwogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuY3BwCmluZGV4IGE0NTY0MzEuLjA2OTgzMTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vV2lkZ2V0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKQEAgLTY5LDQy
ICs2OSw2MSBAQCB2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCiAgICAgICAgIHBhcmVu
dCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpCitJbnRSZWN0
IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiBsb2NhbFJl
Y3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcg
PSBwYXJlbnQoKSkgeworICAgICAgICBJbnRSZWN0IHBhcmVudFJlY3QgPSBjb252ZXJ0VG9Db250
YWluaW5nVmlldyhsb2NhbFJlY3QpOworICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xsVmlldy0+
Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJu
IGNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyh0aGlzLCBsb2NhbFJlY3QpOworfQor
CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVu
dFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRQb2ludCBwYXJlbnRQb2ludCA9
IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm4gcGFy
ZW50U2Nyb2xsVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhwYXJlbnRQb2ludCk7Cisg
ICAgfQorICAgIHJldHVybiBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3codGhpcywg
bG9jYWxQb2ludCk7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5n
V2luZG93KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoY29u
c3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIElu
dFBvaW50IHBhcmVudFBvaW50ID0gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydEZyb21Db250YWlu
aW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXcocGFyZW50UG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gY29udmVydEZyb21Db250
YWluaW5nV2luZG93VG9Sb290KHRoaXMsIHdpbmRvd1BvaW50KTsKK30KIAotSW50UmVjdCBXaWRn
ZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QK
K0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVj
dCYgd2luZG93UmVjdCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IGNvbnZlcnRlZFJlY3QgPSByZWN0
OwotICAgIGNvbnZlcnRlZFJlY3Quc2V0TG9jYXRpb24oY29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhjb252ZXJ0ZWRSZWN0LmxvY2F0aW9uKCkpKTsKLSAgICByZXR1cm4gY29udmVydGVkUmVjdDsK
KyAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7
CisgICAgICAgIEludFJlY3QgcGFyZW50UmVjdCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dSZWN0KTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVjdCk7CisgICAgfQorICAgIHJldHVybiBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QodGhpcywgd2luZG93UmVjdCk7CiB9CiAKLUludFBv
aW50IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0CisjaWYgIVBMQVRGT1JNKE1BQykKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJv
bVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHBvaW50OwotICAgIGNvbnN0IFdpZGdl
dCogY2hpbGRXaWRnZXQgPSB0aGlzOwotICAgIGZvciAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50
U2Nyb2xsVmlldyA9IHBhcmVudCgpOwotICAgICAgICAgcGFyZW50U2Nyb2xsVmlldzsKLSAgICAg
ICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50U2Nyb2xsVmlldywgcGFyZW50U2Nyb2xsVmlldyA9IHBh
cmVudFNjcm9sbFZpZXctPnBhcmVudCgpKQotICAgICAgICB3aW5kb3dQb2ludCA9IHBhcmVudFNj
cm9sbFZpZXctPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdpZGdldCwgd2luZG93UG9pbnQpOwot
ICAgIHJldHVybiB3aW5kb3dQb2ludDsKKyAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UG9pbnQg
V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAorSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9v
dChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEludFBvaW50IHdp
ZGdldFBvaW50ID0gcG9pbnQ7Ci0gICAgY29uc3QgV2lkZ2V0KiBjaGlsZFdpZGdldCA9IHRoaXM7
Ci0gICAgZm9yIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCk7
Ci0gICAgICAgICBwYXJlbnRTY3JvbGxWaWV3OwotICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJl
bnRTY3JvbGxWaWV3LCBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50U2Nyb2xsVmlldy0+cGFyZW50
KCkpCi0gICAgICAgIHdpZGdldFBvaW50ID0gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydFNlbGZU
b0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRnZXRQb2ludCk7Ci0gICAgcmV0dXJuIHdpZGdldFBvaW50
OworICAgIHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250
YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitJbnRQb2ludCBXaWRnZXQ6
OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgSW50UmVjdCByZXN1bHQgPSByZWN0OwotICAgIHJlc3Vs
dC5zZXRMb2NhdGlvbihjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocmVjdC5sb2NhdGlvbigp
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisKK0ludFBvaW50
IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNvbnN0IFdpZGdldCos
IGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAjZW5kaWYK
IApAQCAtMTE4LDQgKzEzNyw0MSBAQCB2b2lkIFdpZGdldDo6cmV0YWluUGxhdGZvcm1XaWRnZXQo
KQogfQogI2VuZGlmCiAKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZp
ZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRSZWN0IHBhcmVu
dFJlY3QobG9jYWxSZWN0KTsKKyAgICAgICAgcGFyZW50UmVjdC5zZXRMb2NhdGlvbihwYXJlbnRT
Y3JvbGxWaWV3LT5jb252ZXJ0Q2hpbGRUb1NlbGYodGhpcywgbG9jYWxSZWN0LmxvY2F0aW9uKCkp
KTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CisgICAgfQorICAgIHJldHVybiBsb2NhbFJl
Y3Q7CiB9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0
IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcq
IHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRSZWN0IGxvY2FsUmVj
dCA9IHBhcmVudFJlY3Q7CisgICAgICAgIGxvY2FsUmVjdC5zZXRMb2NhdGlvbihwYXJlbnRTY3Jv
bGxWaWV3LT5jb252ZXJ0U2VsZlRvQ2hpbGQodGhpcywgbG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsK
KyAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyZW50UmVj
dDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJ
bnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyog
cGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKQorICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xs
Vmlldy0+Y29udmVydENoaWxkVG9TZWxmKHRoaXMsIGxvY2FsUG9pbnQpOworCisgICAgcmV0dXJu
IGxvY2FsUG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5n
Vmlldyhjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0
IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJu
IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRTZWxmVG9DaGlsZCh0aGlzLCBwYXJlbnRQb2ludCk7
CisKKyAgICByZXR1cm4gcGFyZW50UG9pbnQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCmluZGV4IGI2YzAwNTQuLmRiMmY1ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vV2lkZ2V0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaApAQCAtODEsNyAr
ODEsNiBAQCBjbGFzcyBGb250OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgUGxhdGZv
cm1Nb3VzZUV2ZW50OwogY2xhc3MgU2Nyb2xsVmlldzsKLWNsYXNzIFdpZGdldENsaWVudDsKIGNs
YXNzIFdpZGdldFByaXZhdGU7CiAKIC8vIFRoZSBXaWRnZXQgY2xhc3Mgc2VydmVzIGFzIGEgYmFz
ZSBjbGFzcyBmb3IgdGhyZWUga2luZHMgb2Ygb2JqZWN0czoKQEAgLTE2NCw5ICsxNjMsMTAgQEAg
cHVibGljOgogICAgIC8vIHVwIHdpdGggYW4gaW5hY2N1cmF0ZSByZWN0LiAgQWx3YXlzIG1ha2Ug
c3VyZSB0byB1c2UgdGhlIHJlY3QtYmFzZWQgY29udmVydEZyb21Db250YWluaW5nV2luZG93IG1l
dGhvZAogICAgIC8vIHdoZW4gY29udmVydGluZyB3aW5kb3cgcmVjdHMuCiAgICAgSW50UmVjdCBj
b252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmKSBjb25zdDsKLSAgICBJbnRQ
b2ludCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0g
ICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7IC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHdoZW4gbm90IHRvIHVzZSB0aGlzIG1l
dGhvZC4KICAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRS
ZWN0JikgY29uc3Q7CisgICAgCisgICAgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGZy
YW1lUmVjdHNDaGFuZ2VkKCkge30KIApAQCAtMTc5LDEyICsxNzksMjcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVtb3ZlRnJvbVN1cGVydmlldygpOwogI2VuZGlmCiAKK3Byb3RlY3RlZDoKKyAgICAv
LyBWaXJ0dWFsIG1ldGhvZHMgdG8gY29udmVydCBwb2ludHMgdG8vZnJvbSB0aGUgY29udGFpbmlu
ZyBGcmFtZVZpZXcKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXco
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50
IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmly
dHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBsYXRmb3JtV2lkZ2V0KTsgLy8gTXVz
dCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3RvcnMgdG8gaW5pdGlhbGl6ZSBjcm9z
cy1wbGF0Zm9ybSBkYXRhLgogCiAgICAgdm9pZCByZWxlYXNlUGxhdGZvcm1XaWRnZXQoKTsKICAg
ICB2b2lkIHJldGFpblBsYXRmb3JtV2lkZ2V0KCk7CiAgICAgCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgdXNlZCB0byBjb252ZXJ0IGZyb20gdGhlIHJvb3Qgd2lkZ2V0IHRvIHRoZSBjb250YWlu
aW5nIHdpbmRvdywKKyAgICAvLyB3aGljaCBoYXMgYmVoYXZpb3IgdGhhdCBtYXkgZGlmZmVyIGJl
dHdlZW4gcGxhdGZvcm1zIChlLmcuIE1hYyB1c2VzIGZsaXBwZWQgd2luZG93IGNvb3JkaW5hdGVz
KS4KKyAgICBzdGF0aWMgSW50UmVjdCBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3co
Y29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIElu
dFJlY3QgY29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNvbnN0IFdpZGdldCogcm9v
dFdpZGdldCwgY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHN0YXRpYyBJbnRQb2ludCBjb252
ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBj
b25zdCBJbnRQb2ludCYpOworICAgIHN0YXRpYyBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYp
OworCiBwcml2YXRlOgogICAgIFNjcm9sbFZpZXcqIG1fcGFyZW50OwogICAgIFBsYXRmb3JtV2lk
Z2V0IG1fd2lkZ2V0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFj
Lm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCmluZGV4IDFhYWY0YjIuLjg2
NTNhMDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KQEAgLTI4Myw3MiArMjgzLDUyIEBA
IHZvaWQgV2lkZ2V0OjphZnRlck1vdXNlRG93bihOU1ZpZXcgKnZpZXcsIFdpZGdldCogd2lkZ2V0
KQogICAgIH0KIH0KIAotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5k
b3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorLy8gVGhlc2UgYXJlIGhlcmUgdG8gZGVh
bCB3aXRoIGZsaXBwZWQgY29vcmRzIG9uIE1hYy4KK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJv
bVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQoKSkgewotICAgICAgICBp
ZiAoIXBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHBvaW50OwotICAgICAgICBJbnRQb2lu
dCByZXN1bHQgPSBwYXJlbnQoKS0+Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHBvaW50KTsK
LSAgICAgICAgcmVzdWx0Lm1vdmUocGFyZW50KCktPnNjcm9sbFgoKSAtIHgoKSwgcGFyZW50KCkt
PnNjcm9sbFkoKSAtIHkoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAor
ICAgIGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHJl
Y3Q7CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIEludFBv
aW50KFtwbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRQb2ludDpwb2ludCBmcm9tVmlldzpuaWxdKTsK
KyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQo
KSBjb252ZXJ0UmVjdDpyZWN0IHRvVmlldzpuaWxdKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENF
UFRJT05TOwotICAgIAotICAgIHJldHVybiBwb2ludDsKKworICAgIHJldHVybiByZWN0OwogfQog
Ci1JbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2lu
ZG93VG9Sb290KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJlbnQoKSkK
LSAgICAgICAgICAgIHJldHVybiByZWN0OwotICAgICAgICBJbnRSZWN0IHJlc3VsdCA9IHBhcmVu
dCgpLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocmVjdCk7Ci0gICAgICAgIHJlc3VsdC5t
b3ZlKHBhcmVudCgpLT5zY3JvbGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3JvbGxZKCkgLSB5KCkp
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKKyAgICBpZiAoIXJvb3RXaWRn
ZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiByZWN0OworCiAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KFtwbGF0
Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnJlY3QgZnJvbVZpZXc6bmlsXSk7CisgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgY29udmVydFJl
Y3Q6cmVjdCBmcm9tVmlldzpuaWxdKTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwot
ICAgIAorCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLUludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9D
b250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitJbnRQb2ludCBXaWRnZXQ6
OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBXaWRnZXQqIHJvb3RXaWRn
ZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkp
IHsKLSAgICAgICAgaWYgKCFwYXJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiByOwotICAgICAg
ICBJbnRSZWN0IHJlc3VsdCA9IHI7Ci0gICAgICAgIHJlc3VsdC5tb3ZlKHBhcmVudCgpLT5zY3Jv
bGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3JvbGxZKCkgLSB5KCkpOwotICAgICAgICByZXR1cm4g
cGFyZW50KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVzdWx0KTsKLSAgICB9Ci0gICAg
CisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4g
cG9pbnQ7CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIElu
dFJlY3QoW3BsYXRmb3JtV2lkZ2V0KCkgY29udmVydFJlY3Q6ciB0b1ZpZXc6bmlsXSk7CisgICAg
cmV0dXJuIEludFBvaW50KFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRQb2lu
dDpwb2ludCB0b1ZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLQot
ICAgIHJldHVybiByOworICAgIHJldHVybiBwb2ludDsKIH0KLSAKLUludFBvaW50IFdpZGdldDo6
Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcCkgY29uc3QKKworSW50
UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lk
Z2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFwbGF0
Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgICAgICByZXR1
cm4gcDsKLSAgICAgICAgSW50UG9pbnQgcmVzdWx0ID0gcDsKLSAgICAgICAgcmVzdWx0Lm1vdmUo
cGFyZW50KCktPnNjcm9sbFgoKSAtIHgoKSwgcGFyZW50KCktPnNjcm9sbFkoKSAtIHkoKSk7Ci0g
ICAgICAgIHJldHVybiBwYXJlbnQoKS0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZXN1bHQp
OwotICAgIH0KLSAgICAKKyAgICBpZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisg
ICAgICAgIHJldHVybiBwb2ludDsKKwogICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
LSAgICByZXR1cm4gSW50UG9pbnQoW3BsYXRmb3JtV2lkZ2V0KCkgY29udmVydFBvaW50OnAgdG9W
aWV3Om5pbF0pOworICAgIHJldHVybiBJbnRQb2ludChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRn
ZXQoKSBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIHJldHVybiBwOworICAgIHJldHVybiBwb2ludDsKIH0KIAog
dm9pZCBXaWRnZXQ6OnJlbGVhc2VQbGF0Zm9ybVdpZGdldCgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAKaW5kZXggOTg0MjZlZC4uMzkxMjNlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cApAQCAtMzI0NiwxMiArMzI0NiwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRWaXN1YWxPdmVy
Zmxvdyhjb25zdCBJbnRSZWN0JiByKQogICAgIG1fb3ZlcmZsb3dIZWlnaHQgPSBtYXgobV9vdmVy
Zmxvd0hlaWdodCwgci5ib3R0b20oKSk7CiB9CiAKLWJvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJ
bk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCwgaW50LCBpbnQsIGlu
dCkKK2Jvb2wgUmVuZGVyQmxvY2s6OmlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5KQogewogICAgIGlm
ICghc2Nyb2xsc092ZXJmbG93KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBsYXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQpOworICAgIHJldHVybiBs
YXllcigpLT5oaXRUZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIEludFBvaW50KF94IC0gX3R4
LCBfeSAtIF90eSkpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGlu
dCBfeSwgaW50IF90eCwgaW50IF90eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCmluZGV4IGIyMDdhMzEuLmU0ZDk1M2EgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKIHVz
aW5nIHN0ZDo6bWluOwpAQCAtMTE5LDQgKzEyMCw0NSBAQCBib29sIFJlbmRlckRhdGFHcmlkOjpp
c0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmlzQWN0aXZlKCk7CiB9CiAKKworSW50UmVjdCBSZW5kZXJEYXRhR3JpZDo6Y29udmVydFRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0
KSBjb25zdAoreworICAgIHJldHVybiBsb2NhbFJlY3Q7Cit9CisKK0ludFJlY3QgUmVuZGVyRGF0
YUdyaWQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyZW50UmVjdDsKK30K
KworSW50UG9pbnQgUmVuZGVyRGF0YUdyaWQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0
IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoc2Nyb2xsYmFyID0gbV92QmFyLmdldCgpKTsKKworICAgIEludFBvaW50
IHBvaW50ID0gbG9jYWxQb2ludDsKKyAgICBwb2ludC5tb3ZlKHdpZHRoKCkgLSBib3JkZXJSaWdo
dCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpLCBib3JkZXJUb3AoKSk7CisgICAgcG9pbnQgPSByb3Vu
ZGVkSW50UG9pbnQobG9jYWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJh
bnNmb3JtcyAqLykpOworCisgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJhYnNvbHV0ZSIpIHRv
IEZyYW1lVmlldyBjb29yZGluYXRlcy4KKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMt
PnZpZXcoKSkKKyAgICAgICAgcG9pbnQgLT0gSW50U2l6ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Ny
b2xsWCgpLCB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWSgpKTsKKworICAgIHJldHVybiBwb2lu
dDsKK30KKworSW50UG9pbnQgUmVuZGVyRGF0YUdyaWQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2lu
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc2Nyb2xsYmFyID0gbV92QmFyLmdldCgpKTsKKworICAg
IEludFBvaW50IHBvaW50ID0gcGFyZW50UG9pbnQ7CisgICAgCisgICAgLy8gQ29udmVydCBmcm9t
IEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUiKSBjb29yZGluYXRlcy4KKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkKKyAgICAgICAgcG9pbnQgKz0g
SW50U2l6ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWCgpLCB2aWV3LT5mcmFtZVZpZXcoKS0+
c2Nyb2xsWSgpKTsKKworICAgIHBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Mb2Nh
bChwb2ludCwgZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKyAgICBwb2ludC5t
b3ZlKC0od2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCkpLCAtYm9y
ZGVyVG9wKCkpOworICAgIHJldHVybiBwb2ludDsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRh
dGFHcmlkLmgKaW5kZXggNmE0YjMyZS4uZWQyMDdkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGF0YUdyaWQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRh
R3JpZC5oCkBAIC02Miw2ICs2MiwxMSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gZGF0
YSBncmlkcyB5ZXQuICBJZiB3ZSBkaWQgdGhpcyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KIAorICAg
IHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKKwogICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fdkJhcjsKIH07CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAppbmRleCBiYTg1ZjFhLi5hOWE2MTlhIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCkBAIC0xNDIzLDYgKzE0MjMsNTQgQEAgYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xs
YmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0CiAgICAgcmV0dXJuICFzY3JvbGxDb3JuZXJSZWN0KHRo
aXMsIHJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpLmlzRW1wdHkoKTsKIH0KIAorSW50UmVj
dCBSZW5kZXJMYXllcjo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIHJldHVybiBsb2NhbFJlY3Q7
Cit9CisKK0ludFJlY3QgUmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGF5ZXI6OmNvbnZlcnRUb0Nv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYg
bG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBwb2ludCA9IGxvY2FsUG9pbnQ7Cisg
ICAgLy8gRG9uJ3QgdHJ1c3QgdGhlIHNjcm9sbGJhcidzIGZyYW1lUmVjdCwgYmVjYXVzZSBpdCBp
cyBhZmZlY3QgYnkgdGhlIHR4LHR5IHBhaW50aW5nIG9mZnNldAorICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CisgICAgaWYgKHNjcm9sbGJhciA9PSBtX3ZCYXIuZ2V0KCkpCisgICAg
ICAgIHBvaW50Lm1vdmUoYm94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xs
YmFyLT53aWR0aCgpLCBib3gtPmJvcmRlclRvcCgpKTsKKyAgICBlbHNlCisgICAgICAgIHBvaW50
Lm1vdmUoYm94LT5ib3JkZXJMZWZ0KCksIGJveC0+aGVpZ2h0KCkgLSBib3gtPmJvcmRlckJvdHRv
bSgpIC0gc2Nyb2xsYmFyLT5oZWlnaHQoKSk7CisKKyAgICBwb2ludCA9IHJvdW5kZWRJbnRQb2lu
dChyZW5kZXJlcigpLT5sb2NhbFRvQWJzb2x1dGUocG9pbnQsIGZhbHNlLCB0cnVlIC8qIHVzZSB0
cmFuc2Zvcm1zICovKSk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikg
dG8gRnJhbWVWaWV3IGNvb3JkaW5hdGVzLgorICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gcmVu
ZGVyZXIoKS0+dmlldygpKQorICAgICAgICBwb2ludCAtPSBJbnRTaXplKHZpZXctPmZyYW1lVmll
dygpLT5zY3JvbGxYKCksIHZpZXctPmZyYW1lVmlldygpLT5zY3JvbGxZKCkpOworCisgICAgcmV0
dXJuIHBvaW50OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVu
dFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gcGFyZW50UG9pbnQ7CisgICAg
CisgICAgLy8gQ29udmVydCBmcm9tIEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1
dGUiKSBjb29yZGluYXRlcy4KKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKSkKKyAgICAgICAgcG9pbnQgKz0gSW50U2l6ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Ny
b2xsWCgpLCB2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWSgpKTsKKworICAgIHBvaW50ID0gcm91
bmRlZEludFBvaW50KHJlbmRlcmVyKCktPmFic29sdXRlVG9Mb2NhbChwb2ludCwgZmFsc2UsIHRy
dWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKyAgICAKKyAgICBSZW5kZXJCb3gqIGJveCA9IHJl
bmRlckJveCgpOworICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAgICBw
b2ludC5tb3ZlKC0oYm94LT53aWR0aCgpIC0gYm94LT5ib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFy
LT53aWR0aCgpKSwgLWJveC0+Ym9yZGVyVG9wKCkpOworICAgIGVsc2UKKyAgICAgICAgcG9pbnQu
bW92ZSgtYm94LT5ib3JkZXJMZWZ0KCksIC0oYm94LT5oZWlnaHQoKSAtIGJveC0+Ym9yZGVyQm90
dG9tKCkgLSBzY3JvbGxiYXItPmhlaWdodCgpKSk7CisgICAgCisgICAgcmV0dXJuIHBvaW50Owor
fQorCiB2b2lkIFJlbmRlckxheWVyOjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBJbnRSZWN0IHNjcm9sbFJl
Y3QgPSByZWN0OwpAQCAtMTgzNCwzNCArMTg4MiwyOSBAQCBib29sIFJlbmRlckxheWVyOjppc1Bv
aW50SW5SZXNpemVDb250cm9sKGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50KSBjb25zdAog
ICAgIHJldHVybiByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBsb2NhbEJvdW5kcykuY29udGFpbnMo
bG9jYWxQb2ludCk7CiB9CiAgICAgCi1ib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dD
b250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQpCitib29sIFJlbmRlckxheWVyOjpoaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBs
b2NhbFBvaW50KQogewogICAgIGlmICghbV9oQmFyICYmICFtX3ZCYXIgJiYgKCFyZW5kZXJlcigp
LT5oYXNPdmVyZmxvd0NsaXAoKSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT5yZXNpemUoKSA9PSBS
RVNJWkVfTk9ORSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CiAgICAgQVNTRVJUKGJveCk7Ci0KLSAgICBpbnQgeCA9IDA7Ci0gICAg
aW50IHkgPSAwOwotICAgIGNvbnZlcnRUb0xheWVyQ29vcmRzKHJvb3QoKSwgeCwgeSk7Ci0gICAg
SW50UmVjdCBhYnNCb3VuZHMoeCwgeSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsKICAg
ICAKICAgICBJbnRSZWN0IHJlc2l6ZUNvbnRyb2xSZWN0OwogICAgIGlmIChyZW5kZXJlcigpLT5z
dHlsZSgpLT5yZXNpemUoKSAhPSBSRVNJWkVfTk9ORSkgewotICAgICAgICByZXNpemVDb250cm9s
UmVjdCA9IHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGFic0JvdW5kcyk7Ci0gICAgICAgIGlmIChy
ZXNpemVDb250cm9sUmVjdC5jb250YWlucyhyZXN1bHQucG9pbnQoKSkpCisgICAgICAgIHJlc2l6
ZUNvbnRyb2xSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYm94LT5ib3JkZXJCb3hSZWN0
KCkpOworICAgICAgICBpZiAocmVzaXplQ29udHJvbFJlY3QuY29udGFpbnMobG9jYWxQb2ludCkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpbnQgcmVzaXplQ29udHJv
bFNpemUgPSBtYXgocmVzaXplQ29udHJvbFJlY3QuaGVpZ2h0KCksIDApOwogCiAgICAgaWYgKG1f
dkJhcikgewotICAgICAgICBJbnRSZWN0IHZCYXJSZWN0KGFic0JvdW5kcy5yaWdodCgpIC0gYm94
LT5ib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBhYnNCb3VuZHMueSgpICsgYm94LT5ib3JkZXJUb3AoKSwKKyAgICAgICAgSW50UmVjdCB2
QmFyUmVjdChib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRo
KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+Ym9yZGVyVG9wKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGFic0JvdW5kcy5oZWlnaHQoKSAtIChib3gtPmJvcmRlclRvcCgpICsgYm94LT5ib3JkZXJC
b3R0b20oKSkgLSAobV9oQmFyID8gbV9oQmFyLT5oZWlnaHQoKSA6IHJlc2l6ZUNvbnRyb2xTaXpl
KSk7Ci0gICAgICAgIGlmICh2QmFyUmVjdC5jb250YWlucyhyZXN1bHQucG9pbnQoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBib3gtPmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkg
KyBib3gtPmJvcmRlckJvdHRvbSgpKSAtIChtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogcmVz
aXplQ29udHJvbFNpemUpKTsKKyAgICAgICAgaWYgKHZCYXJSZWN0LmNvbnRhaW5zKGxvY2FsUG9p
bnQpKSB7CiAgICAgICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5nZXQoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTg2OSwxMSArMTkxMiwxMSBA
QCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0
JiByZXN1bHQpCiAKICAgICByZXNpemVDb250cm9sU2l6ZSA9IG1heChyZXNpemVDb250cm9sUmVj
dC53aWR0aCgpLCAwKTsKICAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIEludFJlY3QgaEJhclJl
Y3QoYWJzQm91bmRzLngoKSArIGJveC0+Ym9yZGVyTGVmdCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIGFic0JvdW5kcy5ib3R0b20oKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXIt
PmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5kcy53aWR0aCgpIC0g
KGJveC0+Ym9yZGVyTGVmdCgpICsgYm94LT5ib3JkZXJSaWdodCgpKSAtIChtX3ZCYXIgPyBtX3ZC
YXItPndpZHRoKCkgOiByZXNpemVDb250cm9sU2l6ZSksCisgICAgICAgIEludFJlY3QgaEJhclJl
Y3QoYm94LT5ib3JkZXJMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgYm94LT5oZWln
aHQoKSAtIGJveC0+Ym9yZGVyQm90dG9tKCkgLSBtX2hCYXItPmhlaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGJveC0+d2lkdGgoKSAtIChib3gtPmJvcmRlckxlZnQoKSArIGJveC0+
Ym9yZGVyUmlnaHQoKSkgLSAobV92QmFyID8gbV92QmFyLT53aWR0aCgpIDogcmVzaXplQ29udHJv
bFNpemUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1faEJhci0+aGVpZ2h0KCkpOwotICAg
ICAgICBpZiAoaEJhclJlY3QuY29udGFpbnMocmVzdWx0LnBvaW50KCkpKSB7CisgICAgICAgIGlm
IChoQmFyUmVjdC5jb250YWlucyhsb2NhbFBvaW50KSkgewogICAgICAgICAgICAgcmVzdWx0LnNl
dFNjcm9sbGJhcihtX2hCYXIuZ2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmggYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCmluZGV4IDRmZWVkZTguLjRlZGE1NDcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaApAQCAtMjY0LDcgKzI2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgcG9zaXRpb25PdmVyZmxvd0NvbnRyb2xzKGludCB0eCwgaW50IHR5KTsKICAgICBib29sIGlz
UG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQpIGNvbnN0
OwotICAgIGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYpOworICAg
IGJvb2wgaGl0VGVzdE92ZXJmbG93Q29udHJvbHMoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEludFBv
aW50JiBsb2NhbFBvaW50KTsKICAgICBJbnRTaXplIG9mZnNldEZyb21SZXNpemVDb3JuZXIoY29u
c3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludE92ZXJm
bG93Q29udHJvbHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpOwpAQCAtNDY5LDEwICs0NjksMTUgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgc2hvdWxkQmVOb3JtYWxGbG93T25seSgpIGNvbnN0OyAKIAorICAgIC8vIFNjcm9sbEJhckNs
aWVudCBpbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEludFJlY3QgY29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAK
ICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93LCBi
b29sIHZlcnRpY2FsT3ZlcmZsb3cpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCmlu
ZGV4IDgzYzU2OWUuLjIxNWQ3ZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCkBA
IC0zNzAsNyArMzcwLDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1BvaW50SW5PdmVyZmxvd0Nv
bnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBJbnRSZWN0IHZlcnRSZWN0KF90eCArIHdpZHRoKCkgLSBib3JkZXJSaWdo
dCgpIC0gbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgX3R5LAorICAgICAg
ICAgICAgICAgICAgICAgX3R5ICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgICAgICBt
X3ZCYXItPndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIGJvcmRlclRv
cCgpIC0gYm9yZGVyQm90dG9tKCkpOwogCkBAIC02MjMsNiArNjIzLDQzIEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNv
bnN0IEludFJlY3QmCiAgICAgcmVwYWludFJlY3RhbmdsZShzY3JvbGxSZWN0KTsKIH0KIAorLy8g
U2Nyb2xsQmFyQ2xpZW50IG92ZXJyaWRlcyBpbmhlcml0ZWQgZnJvbSBTY3JvbGxWaWV3CitJbnRS
ZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbG9jYWxS
ZWN0OworfQorCitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IElu
dFBvaW50JiBsb2NhbFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0gbG9jYWxQ
b2ludDsKKyAgICBwb2ludC5tb3ZlKHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFy
LT53aWR0aCgpLCBib3JkZXJUb3AoKSk7CisgICAgcG9pbnQgPSByb3VuZGVkSW50UG9pbnQobG9j
YWxUb0Fic29sdXRlKHBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1c2UgdHJhbnNmb3JtcyAqLykpOwor
CisgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJhYnNvbHV0ZSIpIHRvIEZyYW1lVmlldyBjb29y
ZGluYXRlcy4KKyAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkKKyAgICAg
ICAgcG9pbnQgLT0gSW50U2l6ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWCgpLCB2aWV3LT5m
cmFtZVZpZXcoKS0+c2Nyb2xsWSgpKTsKKworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UG9p
bnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAg
IEludFBvaW50IHBvaW50ID0gcGFyZW50UG9pbnQ7CisgICAgCisgICAgLy8gQ29udmVydCBmcm9t
IEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUiKSBjb29yZGluYXRlcy4KKyAg
ICBpZiAoUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKSkKKyAgICAgICAgcG9pbnQgKz0g
SW50U2l6ZSh2aWV3LT5mcmFtZVZpZXcoKS0+c2Nyb2xsWCgpLCB2aWV3LT5mcmFtZVZpZXcoKS0+
c2Nyb2xsWSgpKTsKKworICAgIHBvaW50ID0gcm91bmRlZEludFBvaW50KGFic29sdXRlVG9Mb2Nh
bChwb2ludCwgZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKyAgICBwb2ludC5t
b3ZlKC0od2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCkpLCAtYm9y
ZGVyVG9wKCkpOworICAgIHJldHVybiBwb2ludDsKK30KKwogUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IFJlbmRlckxpc3RCb3g6OmNyZWF0ZVNjcm9sbGJhcigpCiB7CiAgICAgUmVmUHRyPFNjcm9sbGJh
cj4gd2lkZ2V0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCmluZGV4IGI4YzA1NDAuLmY2YTdl
NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKQEAgLTEwMSw2ICsxMDEsMTAgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0gLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJ
ZiB3ZSBkaWQgdGhpcyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIEludFJlY3Qg
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
IGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBv
aW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lk
IHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32111</attachid>
            <date>2009-06-30 23:23:44 -0700</date>
            <delta_ts>2009-07-01 17:02:56 -0700</delta_ts>
            <desc>Almost done; needs testing on Windows</desc>
            <filename>22119_almost.txt</filename>
            <type>text/plain</type>
            <size>50116</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Zvcm1zL2xpc3Rib3gt
c2Nyb2xsYmFyLWhpdC10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9m
b3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhlYjA0Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9mb3Jtcy9saXN0Ym94LXNjcm9sbGJhci1oaXQtdGVzdC5odG1sCkBA
IC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+TGlzdGJveCBzY3JvbGxi
YXIgaGl0IHRlc3Rpbmc8L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgorICAgIHNlbGVjdCB7CisgICAgICBib3JkZXI6IDIwcHggaW5zZXQgZ3JheTsKKyAg
ICAgIHBhZGRpbmc6IDEwcHg7CisgICAgfQorICAgIAorICAgICNyZXN1bHRzIHsKKyAgICAgIG1h
cmdpbi10b3A6IDUwcHg7CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgorICAgIGZ1bmN0aW9uIHNlbmRDbGljayhlbGVt
ZW50LCBjbGllbnRYLCBjbGllbnRZKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5k
ZXIpIHsKKyAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8oY2xpZW50WCwgY2xpZW50WSk7
CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICBldmVudFNlbmRlci5t
b3VzZVVwKCk7CisgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbW91c2VEb3duT25TZWxl
Y3Qoc2VsSWQsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVkpCisgICAgeworICAgICAgbG9nKCdUZXN0
aW5nIGNsaWNrcyBvbiAnICsgc2VsSWQpOworCisgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbElkKTsKKyAgICAgIHZhciBpdGVtSGVpZ2h0ID0gMTQ7
CisgICAgICB2YXIgYm9yZGVyID0gMjA7CisgICAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSAxMDsK
KyAgICAgIHZhciBzY3JvbGxiYXJCdXR0b25IZWlnaHQgPSAxMjsKKyAgICAgIAorICAgICAgdmFy
IHNjcm9sbGJhck1pZFggPSB0cmFuc2xhdGVYICsgc2VsZWN0RWxlbWVudC5vZmZzZXRMZWZ0ICsg
c2VsZWN0RWxlbWVudC5vZmZzZXRXaWR0aCAtIGJvcmRlciAtIHNjcm9sbGJhcldpZHRoIC8gMjsK
KyAgICAgIC8vIFJlY2FsbCB0aGF0IERSVCBydW5zIHdpdGggYm90aCBzY3JvbGwgYXJyb3dzIGF0
IHRoZSBlbmQgb2YgdGhlIHNjcm9sbGJhcgorICAgICAgdmFyIHNjcm9sbGJhclRvcEFycm93WSA9
IHRyYW5zbGF0ZVkgKyBzZWxlY3RFbGVtZW50Lm9mZnNldFRvcCArIHNlbGVjdEVsZW1lbnQub2Zm
c2V0SGVpZ2h0IC0gYm9yZGVyIC0gc2Nyb2xsYmFyQnV0dG9uSGVpZ2h0IC0gMzsKKyAgICAgIHZh
ciBzY3JvbGxiYXJCb3R0b21BcnJvd1kgPSB0cmFuc2xhdGVZICsgc2VsZWN0RWxlbWVudC5vZmZz
ZXRUb3AgKyBzZWxlY3RFbGVtZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIDM7CisgICAgICAK
KyAgICAgIHNlbmRDbGljayhzZWxlY3RFbGVtZW50LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJC
b3R0b21BcnJvd1kpOworICAgICAgc2VuZENsaWNrKHNlbGVjdEVsZW1lbnQsIHNjcm9sbGJhck1p
ZFgsIHNjcm9sbGJhckJvdHRvbUFycm93WSk7CisgICAgICBpZiAoc2VsZWN0RWxlbWVudC5zY3Jv
bGxUb3AgPT0gMiAqIGl0ZW1IZWlnaHQpCisgICAgICAgIGxvZygnU2Nyb2xsZWQgZG93biBieSBp
dGVtSGVpZ2h0IG9uIGRvd24gYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UKKyAgICAg
ICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xsIGRvd24gLSBzY3JvbGxUb3AgaXMgJyArIHNlbGVjdEVs
ZW1lbnQuc2Nyb2xsVG9wICsgJzogRkFJTCcpOworCisgICAgICBzZW5kQ2xpY2soc2VsZWN0RWxl
bWVudCwgc2Nyb2xsYmFyTWlkWCwgc2Nyb2xsYmFyVG9wQXJyb3dZKTsKKyAgICAgIGlmIChzZWxl
Y3RFbGVtZW50LnNjcm9sbFRvcCA9PSBpdGVtSGVpZ2h0KQorICAgICAgICBsb2coJ1Njcm9sbGVk
IHVwIGJ5IGl0ZW1IZWlnaHQgb24gdXAgYXJyb3cgY2xpY2s6IFBBU1MnKTsKKyAgICAgIGVsc2UK
KyAgICAgICAgbG9nKCdGYWlsZWQgdG8gc2Nyb2xsIHVwIC0gc2Nyb2xsVG9wIGlzICcgKyBzZWxl
Y3RFbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwnKTsKKworICAgICAgbG9nKCcnKTsKKyAgICB9
CisgICAgCisgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICB7CisgICAgICB2YXIgcmVzdWx0cyA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHRzJyk7CisgICAgICByZXN1bHRzLmlubmVy
SFRNTCArPSBtc2cgKyAnPGJyPic7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHRlc3QoKQor
ICAgIHsKKyAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICghd2lu
ZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGxvZygnVGhpcyB0ZXN0IG9ubHkgcnVucyBpbiBE
UlQnKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gSGF2ZSB0byB3YWl0IGZvciB0aGUgc2Vs
ZWN0IHRvIGJlIHBhaW50ZWQgYmVmb3JlIHRoZQorICAgICAgLy8gc2Nyb2xsYmFyIGlzIHNpemVk
IGNvcnJlY3RseS4KKyAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgIG1vdXNl
RG93bk9uU2VsZWN0KCdzZWxlY3QxJywgMCwgMCk7CisgICAgICAgIG1vdXNlRG93bk9uU2VsZWN0
KCdzZWxlY3QyJywgNTAsIDUwKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
ICB9LCAwKTsKKyAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0
KCkiPgorCisgIDxzZWxlY3QgaWQ9InNlbGVjdDEiIHNpemU9IjUiPgorICAgIDxvcHRpb24gc2Vs
ZWN0ZWQgdmFsdWU9IjAiPml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEiPml0
ZW0gMTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgorICAg
IDxvcHRpb24gdmFsdWU9IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjQi
Pml0ZW0gNDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjciPml0ZW0gNzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0aW9u
PgorICA8L3NlbGVjdD4KKworICA8c2VsZWN0IGlkPSJzZWxlY3QyIiBzaXplPSI1IiBzdHlsZT0i
LXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MHB4LCA1MHB4KTsiPgorICAgIDxvcHRpb24g
c2VsZWN0ZWQgdmFsdWU9IjAiPml0ZW0gMDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjEi
Pml0ZW0gMTwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjIiPml0ZW0gMjwvb3B0aW9uPgor
ICAgIDxvcHRpb24gdmFsdWU9IjMiPml0ZW0gMzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9
IjQiPml0ZW0gNDwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjUiPml0ZW0gNTwvb3B0aW9u
PgorICAgIDxvcHRpb24gdmFsdWU9IjYiPml0ZW0gNjwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFs
dWU9IjciPml0ZW0gNzwvb3B0aW9uPgorICAgIDxvcHRpb24gdmFsdWU9IjgiPml0ZW0gODwvb3B0
aW9uPgorICA8L3NlbGVjdD4KKworICA8ZGl2IGlkPSJyZXN1bHRzIj4KKyAgPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9v
dmVyZmxvdy9vdmVyZmxvdy1zY3JvbGxiYXItaGl0LXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L292ZXJmbG93L292ZXJmbG93LXNjcm9sbGJhci1oaXQtdGVzdC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOGM2NzQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9vdmVyZmxvdy9vdmVyZmxvdy1z
Y3JvbGxiYXItaGl0LXRlc3QuaHRtbApAQCAtMCwwICsxLDEwOCBAQAorPGh0bWw+Cis8aGVhZD4K
KyAgPHRpdGxlPk92ZXJmbG93IHNjcm9sbGJhciBoaXQgdGVzdGluZzwvdGl0bGU+CisgIDxzdHls
ZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CisgICAgLmJveCB7CisgICAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CisgICAgICB3aWR0aDogMTUwcHg7CisgICAgICBoZWlnaHQ6IDE1
MHB4OworICAgICAgYm9yZGVyOiAyMHB4IGluc2V0IGdyYXk7CisgICAgICBwYWRkaW5nOiAxMHB4
OworICAgICAgbWFyZ2luOiAxNXB4OworICAgICAgb3ZlcmZsb3c6IHNjcm9sbDsKKyAgICB9Cisg
ICAgCisgICAgLmlubmVyIHsKKyAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgIGhlaWdodDogMzAw
cHg7CisgICAgICBib3JkZXI6IDFweCBzb2xpZCBncmF5OworICAgIH0KKyAgICAKKyAgICAjcmVz
dWx0cyB7CisgICAgICBtYXJnaW4tdG9wOiA1MHB4OworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBmdW5jdGlv
biBzZW5kQ2xpY2soZWxlbWVudCwgY2xpZW50WCwgY2xpZW50WSkKKyAgICB7CisgICAgICBpZiAo
d2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNs
aWVudFgsIGNsaWVudFkpOworICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKKyAgICAg
ICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoZWxlbWVudElkLCB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZ
KQorICAgIHsKKyAgICAgIGxvZygnVGVzdGluZyBjbGlja3Mgb24gJyArIGVsZW1lbnRJZCk7CisK
KyAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTsK
KyAgICAgIHZhciBzY3JvbGxJbmNyZW1lbnQgPSA0MDsKKyAgICAgIHZhciBib3JkZXIgPSAyMDsK
KyAgICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IDE2OworICAgICAgdmFyIHNjcm9sbGJhckhlaWdo
dCA9IDE2OworICAgICAgCisgICAgICB2YXIgc2Nyb2xsYmFyTWlkWCA9IHRyYW5zbGF0ZVggKyBl
bGVtZW50Lm9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC0gYm9yZGVyIC0gc2Nyb2xs
YmFyV2lkdGggLyAyOworICAgICAgLy8gUmVjYWxsIHRoYXQgRFJUIHNldHMgc2Nyb2xsIGFycm93
cyB0byBiZSB0b2dldGhlciBhdCBlbmQgZW5kIG9mIHRoZSBzY3JvbGxiYXIKKyAgICAgIHZhciBz
Y3JvbGxiYXJUb3BBcnJvd1kgPSB0cmFuc2xhdGVZICsgZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCAtIGJvcmRlciAtIHNjcm9sbGJhckhlaWdodCAtIHNjcm9sbGJhckhl
aWdodCAtIDM7CisgICAgICB2YXIgc2Nyb2xsYmFyQm90dG9tQXJyb3dZID0gdHJhbnNsYXRlWSAr
IGVsZW1lbnQub2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBib3JkZXIgLSBzY3Jv
bGxiYXJIZWlnaHQgLSAzOworICAgICAgCisgICAgICBzZW5kQ2xpY2soZWxlbWVudCwgc2Nyb2xs
YmFyTWlkWCwgc2Nyb2xsYmFyQm90dG9tQXJyb3dZKTsKKyAgICAgIHNlbmRDbGljayhlbGVtZW50
LCBzY3JvbGxiYXJNaWRYLCBzY3JvbGxiYXJCb3R0b21BcnJvd1kpOworICAgICAgaWYgKGVsZW1l
bnQuc2Nyb2xsVG9wID09IDIgKiBzY3JvbGxJbmNyZW1lbnQpCisgICAgICAgIGxvZygnU2Nyb2xs
ZWQgZG93biBieSAnICsgKDIgKiBzY3JvbGxJbmNyZW1lbnQpICsgJyBvbiBkb3duIGFycm93IGNs
aWNrOiBQQVNTJyk7CisgICAgICBlbHNlCisgICAgICAgIGxvZygnRmFpbGVkIHRvIHNjcm9sbCBk
b3duIC0gc2Nyb2xsVG9wIGlzICcgKyBlbGVtZW50LnNjcm9sbFRvcCArICc6IEZBSUwnKTsKKwor
ICAgICAgc2VuZENsaWNrKGVsZW1lbnQsIHNjcm9sbGJhck1pZFgsIHNjcm9sbGJhclRvcEFycm93
WSk7CisgICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgPT0gc2Nyb2xsSW5jcmVtZW50KQorICAg
ICAgICBsb2coJ1Njcm9sbGVkIHVwIGJ5ICcgKyBzY3JvbGxJbmNyZW1lbnQgKyAnIG9uIHVwIGFy
cm93IGNsaWNrOiBQQVNTJyk7CisgICAgICBlbHNlCisgICAgICAgIGxvZygnRmFpbGVkIHRvIHNj
cm9sbCB1cCAtIHNjcm9sbFRvcCBpcyAnICsgZWxlbWVudC5zY3JvbGxUb3AgKyAnOiBGQUlMJyk7
CisKKyAgICAgIGxvZygnJyk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisg
ICAgeworICAgICAgdmFyIHJlc3VsdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0
cycpOworICAgICAgcmVzdWx0cy5pbm5lckhUTUwgKz0gbXNnICsgJzxicj4nOworICAgIH0KKyAg
ICAKKyAgICBmdW5jdGlvbiB0ZXN0KCkKKyAgICB7CisgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAg
fQorICAgICAgCisgICAgICBpZiAoIXdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBsb2co
J1RoaXMgdGVzdCBvbmx5IHJ1bnMgaW4gRFJUJyk7CisgICAgICB9CisgICAgICAKKyAgICAgIC8v
IEhhdmUgdG8gd2FpdCBmb3IgdGhlIHNlbGVjdCB0byBiZSBwYWludGVkIGJlZm9yZSB0aGUKKyAg
ICAgIC8vIHNjcm9sbGJhciBpcyBzaXplZCBjb3JyZWN0bHkuCisgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeworICAgICAgICBtb3VzZURvd25Pbk92ZXJmbG93RGl2KCdib3gxJywgMCwgMCk7
CisgICAgICAgIG1vdXNlRG93bk9uT3ZlcmZsb3dEaXYoJ2JveDInLCA1MCwgNTApOworICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgIH0sIDApOworICAgIH0KKyAgPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InRlc3QoKSI+CisKKworICA8ZGl2IGNsYXNzPSJib3gi
IGlkPSJib3gxIj4KKyAgICA8ZGl2IGNsYXNzPSJpbm5lciI+SW5uZXI8L2Rpdj4KKyAgPC9kaXY+
CisKKyAgPGRpdiBjbGFzcz0iYm94IiBpZD0iYm94MiIgc3R5bGU9Ii13ZWJraXQtdHJhbnNmb3Jt
OiB0cmFuc2xhdGUoNTBweCwgNTBweCk7Ij4KKyAgICA8ZGl2IGNsYXNzPSJpbm5lciI+SW5uZXI8
L2Rpdj4KKyAgPC9kaXY+CisKKyAgPGRpdiBpZD0icmVzdWx0cyI+CisgIDwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwIGIvV2ViQ29y
ZS9XZWJDb3JlLmJhc2UuZXhwCmluZGV4IGY3NWE2MDUuLjJhMzM4N2QgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvV2ViQ29yZS5iYXNlLmV4cAorKysgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKQEAg
LTkzMCw2ICs5MzAsMTAgQEAgX19aTks3V2ViQ29yZTZTdHJpbmc3aXNFbXB0eUV2CiBfX1pOSzdX
ZWJDb3JlNlN0cmluZzlzdWJzdHJpbmdFamoKIF9fWk5LN1dlYkNvcmU2U3RyaW5nY3ZOM0pTQzdV
U3RyaW5nRUV2CiBfX1pOSzdXZWJDb3JlNldpZGdldDlmcmFtZVJlY3RFdgorX19aTks3V2ViQ29y
ZTZXaWRnZXQyM2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfOEludFBvaW50RQorX19aTks3
V2ViQ29yZTZXaWRnZXQyM2NvbnZlcnRUb0NvbnRhaW5pbmdWaWV3RVJLTlNfN0ludFJlY3RFCitf
X1pOSzdXZWJDb3JlNldpZGdldDI1Y29udmVydEZyb21Db250YWluaW5nVmlld0VSS05TXzdJbnRS
ZWN0RQorX19aTks3V2ViQ29yZTZXaWRnZXQyNWNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdFUktO
U184SW50UG9pbnRFCiBfX1pOSzdXZWJDb3JlN0NTdHJpbmc0ZGF0YUV2CiBfX1pOSzdXZWJDb3Jl
N0NTdHJpbmc2bGVuZ3RoRXYKIF9fWk5LN1dlYkNvcmU3RWxlbWVudDEyZ2V0QXR0cmlidXRlRVJL
TlNfMTNRdWFsaWZpZWROYW1lRQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAgYi9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCA4N2U5ZWNjLi40MmVk
YzY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMTI5Nyw3ICsxMjk3LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYg
bW91c2VFdmVudCwgSGkKIAogICAgIC8vIFNlbmQgZXZlbnRzIHJpZ2h0IHRvIGEgc2Nyb2xsYmFy
IGlmIHRoZSBtb3VzZSBpcyBwcmVzc2VkLgogICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1v
dXNlICYmIG1fbW91c2VQcmVzc2VkKQotICAgICAgICByZXR1cm4gbV9sYXN0U2Nyb2xsYmFyVW5k
ZXJNb3VzZS0+bW91c2VNb3ZlZChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlLT50cmFuc2Zvcm1F
dmVudChtb3VzZUV2ZW50KSk7CisgICAgICAgIHJldHVybiBtX2xhc3RTY3JvbGxiYXJVbmRlck1v
dXNlLT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOwogCiAgICAgLy8gVHJlYXQgbW91c2UgbW92ZSBl
dmVudHMgd2hpbGUgdGhlIG1vdXNlIGlzIHByZXNzZWQgYXMgInJlYWQtb25seSIgaW4gcHJlcGFy
ZU1vdXNlRXZlbnQKICAgICAvLyBpZiB3ZSBhcmUgYWxsb3dlZCB0byBzZWxlY3QuCkBAIC0xMzQ5
LDcgKzEzNDksNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBIaQogICAgICAgICAgICAgc3dhbGxv
d0V2ZW50IHw9IHBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUobWV2LCBuZXdTdWJmcmFtZS5n
ZXQoKSwgaG92ZXJlZE5vZGUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzY3JvbGxiYXIg
JiYgIW1fbW91c2VQcmVzc2VkKQotICAgICAgICAgICAgc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKHNj
cm9sbGJhci0+dHJhbnNmb3JtRXZlbnQobW91c2VFdmVudCkpOyAvLyBIYW5kbGUgaG92ZXIgZWZm
ZWN0cyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVkYmFjayBvbiBzY3JvbGxi
YXIgaG92ZXJpbmcuCisgICAgICAgICAgICBzY3JvbGxiYXItPm1vdXNlTW92ZWQobW91c2VFdmVu
dCk7IC8vIEhhbmRsZSBob3ZlciBlZmZlY3RzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdmlz
dWFsIGZlZWRiYWNrIG9uIHNjcm9sbGJhciBob3ZlcmluZy4KICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBtX2ZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgICAgIGlmICgoIW1fcmVzaXplTGF5ZXIg
fHwgIW1fcmVzaXplTGF5ZXItPmluUmVzaXplTW9kZSgpKSAmJiAhcGFnZS0+bWFpbkZyYW1lKCkt
PmV2ZW50SGFuZGxlcigpLT5wYW5TY3JvbGxJblByb2dyZXNzKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRl
eCA0NWZjMGFkLi4xYzJiNjNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTI5NCw2ICsxMjk0LDQ1IEBA
IHZvaWQgRnJhbWVWaWV3OjpnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JiB0aWNrbWFya3Mp
IGNvbnN0CiAgICAgdGlja21hcmtzID0gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+cmVuZGVyZWRSZWN0
c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiB9CiAKK0ludFJlY3QgRnJh
bWVWaWV3Ojpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIGxvY2FsUmVjdCkgY29uc3QKK3sKKyAgICAv
LyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhpbiB1cworICAgIEludFJlY3Qg
bmV3UmVjdCA9IGxvY2FsUmVjdDsKKyAgICBuZXdSZWN0Lm1vdmUoc2Nyb2xsYmFyLT54KCksIHNj
cm9sbGJhci0+eSgpKTsKKworICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5nVmlldyhuZXdS
ZWN0KTsKK30KKworSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFy
ZW50UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KHBhcmVudFJlY3QpOworCisgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFu
c2Zvcm1lZCB3aXRoaW4gdXMKKyAgICBuZXdSZWN0Lm1vdmUoLXNjcm9sbGJhci0+eCgpLCAtc2Ny
b2xsYmFyLT55KCkpOworCisgICAgcmV0dXJuIG5ld1JlY3Q7Cit9CisKKy8vIEZJWE1FOiB0ZXN0
IHRoZXNlIG9uIHdpbmRvd3MKK0ludFBvaW50IEZyYW1lVmlldzo6Y29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQ
b2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRy
YW5zZm9ybWVkIHdpdGhpbiB1cworICAgIEludFBvaW50IG5ld1BvaW50ID0gbG9jYWxQb2ludDsK
KyAgICBuZXdQb2ludC5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CisKKyAg
ICByZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1ZpZXcobmV3UG9pbnQpOworfQorCitJbnRQb2lu
dCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAor
eworICAgIEludFBvaW50IG5ld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJl
bnRQb2ludCk7CisKKyAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdpdGhp
biB1cworICAgIG5ld1BvaW50Lm1vdmUoLXNjcm9sbGJhci0+eCgpLCAtc2Nyb2xsYmFyLT55KCkp
OworCisgICAgcmV0dXJuIG5ld1BvaW50OworfQorCiBJbnRSZWN0IEZyYW1lVmlldzo6d2luZG93
UmVzaXplclJlY3QoKSBjb25zdAogewogICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZSgpID8gZnJhbWUo
KS0+cGFnZSgpIDogMDsKQEAgLTE1MTksNCArMTU1OCwxNTIgQEAgdm9pZCBGcmFtZVZpZXc6OmFk
anVzdFBhZ2VIZWlnaHQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdCBvbGRC
b3R0b20KICAgICAgICAgKm5ld0JvdHRvbSA9IG9sZEJvdHRvbTsKIH0KIAorSW50UmVjdCBGcmFt
ZVZpZXc6OmNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgSW50UmVjdCYgcmVuZGVyZXJSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9
IHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChyZW5kZXJlclJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOworCisgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJhYnNv
bHV0ZSIpIHRvIEZyYW1lVmlldyBjb29yZGluYXRlcy4KKyAgICByZWN0Lm1vdmUoLXNjcm9sbFgo
KSwgLXNjcm9sbFkoKSk7CisKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UmVjdCBGcmFtZVZp
ZXc6OmNvbnZlcnRUb1JlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IEludFJlY3QmIHZpZXdSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgcmVjdCA9IHZpZXdSZWN0
OworICAgIAorICAgIC8vIENvbnZlcnQgZnJvbSBGcmFtZVZpZXcgY29vcmRzIGludG8gcGFnZSAo
ImFic29sdXRlIikgY29vcmRpbmF0ZXMuCisgICAgcmVjdC5tb3ZlKHNjcm9sbFgoKSwgc2Nyb2xs
WSgpKTsKKworICAgIC8vIEZJWE1FOiB3ZSBkb24ndCBoYXZlIGEgd2F5IHRvIG1hcCBhbiBhYnNv
bHV0ZSByZWN0IGRvd24gdG8gYSBsb2NhbCBxdWFkLCBzbyBqdXN0CisgICAgLy8gbW92ZSB0aGUg
cmVjdCBmb3Igbm93LgorICAgIHJlY3Quc2V0TG9jYXRpb24ocm91bmRlZEludFBvaW50KHJlbmRl
cmVyLT5hYnNvbHV0ZVRvTG9jYWwocmVjdC5sb2NhdGlvbigpLCBmYWxzZSwgdHJ1ZSAvKiB1c2Ug
dHJhbnNmb3JtcyAqLykpKTsKKyAgICByZXR1cm4gcmVjdDsKK30KKworSW50UG9pbnQgRnJhbWVW
aWV3Ojpjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IEludFBvaW50JiByZW5kZXJlclBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50
ID0gcm91bmRlZEludFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUocmVuZGVyZXJQb2lu
dCwgZmFsc2UsIHRydWUgLyogdXNlIHRyYW5zZm9ybXMgKi8pKTsKKworICAgIC8vIENvbnZlcnQg
ZnJvbSBwYWdlICgiYWJzb2x1dGUiKSB0byBGcmFtZVZpZXcgY29vcmRpbmF0ZXMuCisgICAgcG9p
bnQubW92ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgpKTsKKyAgICByZXR1cm4gcG9pbnQ7Cit9CisK
K0ludFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgY29uc3QgSW50UG9pbnQmIHZpZXdQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHZpZXdQb2ludDsKKyAgICAKKyAgICAvLyBDb252ZXJ0IGZyb20gRnJhbWVW
aWV3IGNvb3JkcyBpbnRvIHBhZ2UgKCJhYnNvbHV0ZSIpIGNvb3JkaW5hdGVzLgorICAgIHBvaW50
ICs9IEludFNpemUoc2Nyb2xsWCgpLCBzY3JvbGxZKCkpOworCisgICAgcmV0dXJuIHJvdW5kZWRJ
bnRQb2ludChyZW5kZXJlci0+YWJzb2x1dGVUb0xvY2FsKHBvaW50LCBmYWxzZSwgdHJ1ZSAvKiB1
c2UgdHJhbnNmb3JtcyAqLykpOworfQorCitJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAoreworICAgIGlmIChj
b25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKKyAgICAgICAg
aWYgKHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgICAgIC8vIEdl
dCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCB2aWV3CisgICAgICAgICAgICBSZW5kZXJQYXJ0
KiByZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEludFJlY3QgcmVjdChsb2NhbFJlY3QpOworCisgICAgICAgICAg
ICAvLyBBZGQgYm9yZGVycyBhbmQgcGFkZGluZworICAgICAgICAgICAgcmVjdC5tb3ZlKHJlbmRl
cmVyLT5ib3JkZXJMZWZ0KCkgKyByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICByZW5kZXJlci0+Ym9yZGVyVG9wKCkgKyByZW5kZXJlci0+cGFkZGluZ1RvcCgp
KTsKKworICAgICAgICAgICAgLy8gTWFwIHRocm91Z2ggdHJhbnNmb3JtcyBpbiB0aGUgcGFyZW50
IHZpZXcncyBkb2N1bWVudAorICAgICAgICAgICAgRmxvYXRRdWFkIGNvbnRhaW5lclF1YWQgPSBy
ZW5kZXJlci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFF1YWQocmVjdCksIGZhbHNlKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBhZGQgcGFyZW50IHZpZXcgc2Nyb2xsIGNvb3JkcworICAgICAg
ICAgICAgcmV0dXJuIGNvbnRhaW5lclF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmlu
Z1ZpZXcobG9jYWxSZWN0KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGxvY2FsUmVjdDsKK30K
KworSW50UmVjdCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50
UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBpZiAoY29uc3QgU2Nyb2xsVmlldyogcGFy
ZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIGlmIChwYXJlbnRTY3JvbGxWaWV3
LT5pc0ZyYW1lVmlldygpKSB7CisgICAgICAgICAgICAvLyBHZXQgb3VyIHJlbmRlcmVyIGluIHRo
ZSBwYXJlbnQgdmlldworICAgICAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1l
LT5vd25lclJlbmRlcmVyKCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnRSZWN0OworCisgICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxl
IHBhcmVudCB2aWV3IHNjcm9sbCBjb29yZHMKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIE1hcCB0aHJvdWdoIHRyYW5zZm9ybXMgaW4gdGhlIHBhcmVudCB2aWV3J3MgZG9jdW1lbnQK
KyAgICAgICAgICAgIC8vIEZJWE1FOiB3ZSBkb24ndCB5ZXQgaGF2ZSBjb3JlIG1ldGhvZHMgdG8g
bWFwIGEgYW4gYWJzb2x1dGUgcmVjdCBpbnRvIGEgcXVhZAorICAgICAgICAgICAgLy8gdGFraW5n
IHRyYW5zZm9ybXMgaW50byBhY2NvdW50LiBTbyBmb3Igbm93IGp1c3QgbWFwIHRoZSByZWN0IGxv
Y2F0aW9uLgorICAgICAgICAgICAgSW50UG9pbnQgbmV3TG9jYXRpb24gPSByb3VuZGVkSW50UG9p
bnQocmVuZGVyZXItPmFic29sdXRlVG9Mb2NhbChwYXJlbnRSZWN0LmxvY2F0aW9uKCksIGZhbHNl
LCB0cnVlIC8qIHVzZVRyYW5zZm9ybXMgKi8pKTsKKyAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJv
cmRlcnMgYW5kIHBhZGRpbmcKKyAgICAgICAgICAgIG5ld0xvY2F0aW9uLm1vdmUoLXJlbmRlcmVy
LT5ib3JkZXJMZWZ0KCkgLSByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5wYWRkaW5n
VG9wKCkpOworICAgICAgICAgICAgcmV0dXJuIEludFJlY3QobmV3TG9jYXRpb24sIHBhcmVudFJl
Y3Quc2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFdpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHBhcmVudFJlY3Q7Cit9CisKK0ludFBvaW50IEZyYW1lVmlldzo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYg
KGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAg
ICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgeworICAgICAgICAgICAgLy8g
R2V0IG91ciByZW5kZXJlciBpbiB0aGUgcGFyZW50IHZpZXcKKyAgICAgICAgICAgIFJlbmRlclBh
cnQqIHJlbmRlcmVyID0gbV9mcmFtZS0+b3duZXJSZW5kZXJlcigpOworICAgICAgICAgICAgaWYg
KCFyZW5kZXJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxQb2ludDsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEludFBvaW50IHBvaW50KGxvY2FsUG9pbnQpOworCisgICAg
ICAgICAgICAvLyBBZGQgYm9yZGVycyBhbmQgcGFkZGluZworICAgICAgICAgICAgcG9pbnQubW92
ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRk
aW5nVG9wKCkpOworCisgICAgICAgICAgICAvLyBNYXAgdGhyb3VnaCB0cmFuc2Zvcm1zIGluIHRo
ZSBwYXJlbnQgdmlldydzIGRvY3VtZW50CisgICAgICAgICAgICBGbG9hdFBvaW50IGNvbnRhaW5l
clBvaW50ID0gcmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShwb2ludCwgZmFsc2UsIHRydWUgLyog
dXNlIHRyYW5zZm9ybXMgKi8pOworICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBwYXJlbnQgdmll
dyBzY3JvbGwgY29vcmRzCisgICAgICAgICAgICByZXR1cm4gcm91bmRlZEludFBvaW50KGNvbnRh
aW5lclBvaW50KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFdpZGdldDo6
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBsb2NhbFBvaW50OworfQorCitJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGlm
IChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKKyAgICAg
ICAgaWYgKHBhcmVudFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgICAgIC8v
IEdldCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCB2aWV3CisgICAgICAgICAgICBSZW5kZXJQ
YXJ0KiByZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFBvaW50OworCisgICAg
ICAgICAgICAvLyBGSVhNRTogaGFuZGxlIHBhcmVudCB2aWV3IHNjcm9sbCBjb29yZHMKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE1hcCB0aHJvdWdoIHRyYW5zZm9ybXMgaW4gdGhl
IHBhcmVudCB2aWV3J3MgZG9jdW1lbnQKKyAgICAgICAgICAgIEludFBvaW50IHBvaW50ID0gcm91
bmRlZEludFBvaW50KHJlbmRlcmVyLT5hYnNvbHV0ZVRvTG9jYWwocGFyZW50UG9pbnQsIGZhbHNl
LCB0cnVlIC8qIHVzZVRyYW5zZm9ybXMgKi8pKTsKKyAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJv
cmRlcnMgYW5kIHBhZGRpbmcKKyAgICAgICAgICAgIHBvaW50Lm1vdmUoLXJlbmRlcmVyLT5ib3Jk
ZXJMZWZ0KCkgLSByZW5kZXJlci0+cGFkZGluZ0xlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgLXJlbmRlcmVyLT5ib3JkZXJUb3AoKSAtIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHBhcmVudFBvaW50OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKaW5kZXggOWRhYmU1Ni4uOWFiMjgxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtMTI2LDEx
ICsxMjYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KGJv
b2wgY2xpcFRvQ29udGVudHMgPSB0cnVlKSBjb25zdDsKICAgICBJbnRSZWN0IHdpbmRvd0NsaXBS
ZWN0Rm9yTGF5ZXIoY29uc3QgUmVuZGVyTGF5ZXIqLCBib29sIGNsaXBUb0xheWVyQ29udGVudHMp
IGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7Ci0KICAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9p
ZCBzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0Jik7CkBAIC0xODgs
NiArMTgzLDExIEBAIHB1YmxpYzoKICAgICBib29sIGxvY2tlZFRvQW5jaG9yKCkgeyByZXR1cm4g
bV9sb2NrZWRUb0FuY2hvcjsgfQogICAgIHZvaWQgc2V0TG9ja2VkVG9BbmNob3IoYm9vbCBsb2Nr
ZWRUb0FuY2hvcikgeyBtX2xvY2tlZFRvQW5jaG9yID0gbG9ja2VkVG9BbmNob3I7IH0KIAorICAg
IC8vIE1ldGhvZHMgdG8gY29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIGNvb3Jk
aW5hdGUgc3BhY2Ugb2YgdGhlIHJlbmRlcmVyLCBhbmQgdGhpcyB2aWV3LgorICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRvUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvUmVuZGVyZXIoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICBGcmFtZVZpZXcoRnJhbWUqKTsKQEAgLTIxNSw2ICsyMTUsMjMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGxheW91dCgpOwogICAgIH0KIAorICAgIC8vIE92ZXJyaWRlIFNjcm9sbFZpZXcgbWV0
aG9kcyB0byBkbyBwb2ludCBjb252ZXJzaW9uIHZpYSByZW5kZXJlcnMsIGluIG9yZGVyIHRvCisg
ICAgLy8gdGFrZSB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KKyAgICB2aXJ0dWFsIEludFJlY3Qg
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1
YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAvLyBTY3JvbGxCYXJDbGllbnQg
aW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CisgICAgdmlydHVh
bCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJ
bnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9s
bGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCiAgICAgdm9p
ZCBkZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lVmlldz4qKTsKICAgICB2b2lk
IGRvRGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZvaWQgdXBkYXRlRGVmZXJyZWRSZXBhaW50RGVs
YXkoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKaW5kZXggODE0YjcwNC4uNWJiNDllNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgKQEAgLTIyMSw2ICsyMjEsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBi
b29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJh
clRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9T
Y3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CisK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludENvbnRlbnRSZWN0YW5nbGUoY29u
c3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2UpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludENv
bnRlbnRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpID0gMDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCBiYWJmM2Q0Li40NTc0ZjYzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCkBAIC00NDksOSArNDQ5LDM2IEBAIHZvaWQgU2Nyb2xsYmFyOjppbnZhbGlkYXRl
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgICAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNj
cm9sbGJhclJlY3QodGhpcywgcmVjdCk7CiB9CiAKLVBsYXRmb3JtTW91c2VFdmVudCBTY3JvbGxi
YXI6OnRyYW5zZm9ybUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCitJbnRS
ZWN0IFNjcm9sbGJhcjo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9j
YWxSZWN0KSBjb25zdAogewotICAgIHJldHVybiBldmVudDsKKyAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgIHJldHVybiBtX2NsaWVudC0+Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KHRoaXMsIGxvY2FsUmVjdCk7CisKKyAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0VG9Db250
YWluaW5nVmlldyhsb2NhbFJlY3QpOworfQorCitJbnRSZWN0IFNjcm9sbGJhcjo6Y29udmVydEZy
b21Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UmVjdCk7CisKKyAgICByZXR1cm4gV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFJlY3QpOworfQorCitJbnRQb2lu
dCBTY3JvbGxiYXI6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JiBsb2Nh
bFBvaW50KSBjb25zdAoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xp
ZW50LT5jb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxQb2lu
dCk7CisKKyAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFBv
aW50KTsKK30KKworSW50UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KGNvbnN0IEludFBvaW50JiBwYXJlbnRQb2ludCkgY29uc3QKK3sKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIHJldHVybiBtX2NsaWVudC0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Ny
b2xsYmFyKHRoaXMsIHBhcmVudFBvaW50KTsKKworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaApp
bmRleCA3MTFhZTM2Li5jMjA5ODQ0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTExMCwxMCArMTEw
LDYgQEAgcHVibGljOgogICAgIGJvb2wgY29udGV4dE1lbnUoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCk7CiAjZW5kaWYKIAotICAgIC8vIFRha2VzIGFuIGV2ZW50IGFuZCBhY2NvdW50
cyBmb3IgYW55IHRyYW5zZm9ybXMgdGhhdCBtaWdodCBvY2N1ciBvbiB0aGUgc2Nyb2xsYmFyLiAg
UmV0dXJucwotICAgIC8vIGEgbmV3IGV2ZW50IHRoYXQgaGFzIGhhZCBhbGwgb2YgdGhlIHRyYW5z
Zm9ybXMgYXBwbGllZC4KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgdHJhbnNmb3JtRXZlbnQoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7Ci0gICAgCiAgICAgU2Nyb2xsYmFyVGhlbWUqIHRoZW1l
KCkgY29uc3QgeyByZXR1cm4gbV90aGVtZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFBhcmVu
dChTY3JvbGxWaWV3Kik7CkBAIC0xMzIsNiArMTI4LDEyIEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGh1bWJQcm9wb3J0aW9uKCk7CisKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVy
dFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50
UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAg
ICAKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBhdXRvc2Nyb2xs
VGltZXJGaXJlZChUaW1lcjxTY3JvbGxiYXI+Kik7CiAgICAgdm9pZCBzdGFydFRpbWVySWZOZWVk
ZWQoZG91YmxlIGRlbGF5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
Q2xpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCmluZGV4IGY3MjBl
OTUuLmI1OTU2NDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaApAQCAtNDUsNiArNDUs
MTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkg
Y29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVj
dD4mKSBjb25zdCB7IH0KKworICAgIC8vIENvbnZlcnQgcG9pbnRzIGFuZCByZWN0cyBiZXR3ZWVu
IHRoZSBzY3JvbGxiYXIsIGFuZCBpdHMgY29udGFpbmluZyB2aWV3LgorICAgIC8vIFRoZSBjbGll
bnQgbmVlZHMgdG8gaW1wbGVtZW50IHRoZXNlIGluIG9yZGVyIHRvIGJlIGF3YXJlIG9mIGxheW91
dCBlZmZlY3RzCisgICAgLy8gbGlrZSBDU1MgdHJhbnNmb3Jtcy4KKyAgICB2aXJ0dWFsIEludFJl
Y3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRS
ZWN0JikgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Qg
PSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE0NTY0MzEuLjViYjkwM2IgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5jcHAKQEAgLTY5LDQyICs2OSw2MSBAQCB2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBh
cmVudCgpCiAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotI2lmICFQ
TEFURk9STShNQUMpCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93
KGNvbnN0IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9s
bFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRSZWN0IHBh
cmVudFJlY3QgPSBwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3co
d2luZG93UmVjdCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBh
cmVudFJlY3QpOworICAgIH0KKyAgICByZXR1cm4gY29udmVydEZyb21Db250YWluaW5nV2luZG93
VG9Sb290KHRoaXMsIHdpbmRvd1JlY3QpOworfQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAg
aWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAg
ICAgICBJbnRSZWN0IHBhcmVudFJlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFJl
Y3QpOworICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydFRvQ29udGFpbmlu
Z1dpbmRvdyhwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUm9vdFRv
Q29udGFpbmluZ1dpbmRvdyh0aGlzLCBsb2NhbFJlY3QpOworfQorCitJbnRQb2ludCBXaWRnZXQ6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQp
IGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBw
YXJlbnQoKSkgeworICAgICAgICBJbnRQb2ludCBwYXJlbnRQb2ludCA9IHBhcmVudFNjcm9sbFZp
ZXctPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgICAgIHJl
dHVybiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKKyAgICB9CisgICAg
cmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdCh0aGlzLCB3aW5kb3dQb2lu
dCk7Cit9CiAKLUludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5p
bmdXaW5kb3coY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UmVj
dCBjb252ZXJ0ZWRSZWN0ID0gcmVjdDsKLSAgICBjb252ZXJ0ZWRSZWN0LnNldExvY2F0aW9uKGNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRlZFJlY3Q7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNj
cm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRQb2ludCBwYXJlbnRQb2ludCA9IGNv
bnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm4gcGFyZW50
U2Nyb2xsVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhwYXJlbnRQb2ludCk7CisgICAg
fQorICAgIHJldHVybiBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3codGhpcywgbG9j
YWxQb2ludCk7CiB9CiAKLUludFBvaW50IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisjaWYgIVBMQVRGT1JNKE1BQykKK0ludFJl
Y3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0
KiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHBv
aW50OwotICAgIGNvbnN0IFdpZGdldCogY2hpbGRXaWRnZXQgPSB0aGlzOwotICAgIGZvciAoY29u
c3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpOwotICAgICAgICAgcGFy
ZW50U2Nyb2xsVmlldzsKLSAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50U2Nyb2xsVmlldywg
cGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudFNjcm9sbFZpZXctPnBhcmVudCgpKQotICAgICAgICB3
aW5kb3dQb2ludCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdp
ZGdldCwgd2luZG93UG9pbnQpOwotICAgIHJldHVybiB3aW5kb3dQb2ludDsKKyAgICByZXR1cm4g
cmVjdDsKIH0KIAotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3co
Y29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEludFBvaW50IHdpZGdldFBvaW50ID0gcG9pbnQ7Ci0gICAgY29uc3QgV2lkZ2V0
KiBjaGlsZFdpZGdldCA9IHRoaXM7Ci0gICAgZm9yIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRT
Y3JvbGxWaWV3ID0gcGFyZW50KCk7Ci0gICAgICAgICBwYXJlbnRTY3JvbGxWaWV3OwotICAgICAg
ICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRTY3JvbGxWaWV3LCBwYXJlbnRTY3JvbGxWaWV3ID0gcGFy
ZW50U2Nyb2xsVmlldy0+cGFyZW50KCkpCi0gICAgICAgIHdpZGdldFBvaW50ID0gcGFyZW50U2Ny
b2xsVmlldy0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRnZXRQb2ludCk7Ci0g
ICAgcmV0dXJuIHdpZGdldFBvaW50OworICAgIHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFdp
ZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhj
b25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgSW50UmVjdCByZXN1
bHQgPSByZWN0OwotICAgIHJlc3VsdC5zZXRMb2NhdGlvbihjb252ZXJ0RnJvbUNvbnRhaW5pbmdX
aW5kb3cocmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4g
cG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93
VG9Sb290KGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1
cm4gcG9pbnQ7CiB9CiAjZW5kaWYKIApAQCAtMTE4LDQgKzEzNyw0MSBAQCB2b2lkIFdpZGdldDo6
cmV0YWluUGxhdGZvcm1XaWRnZXQoKQogfQogI2VuZGlmCiAKK0ludFJlY3QgV2lkZ2V0Ojpjb252
ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7Cisg
ICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgewor
ICAgICAgICBJbnRSZWN0IHBhcmVudFJlY3QobG9jYWxSZWN0KTsKKyAgICAgICAgcGFyZW50UmVj
dC5zZXRMb2NhdGlvbihwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0Q2hpbGRUb1NlbGYodGhpcywg
bG9jYWxSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CisgICAg
fQorICAgIHJldHVybiBsb2NhbFJlY3Q7CiB9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJv
bUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAg
aWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAg
ICAgICBJbnRSZWN0IGxvY2FsUmVjdCA9IHBhcmVudFJlY3Q7CisgICAgICAgIGxvY2FsUmVjdC5z
ZXRMb2NhdGlvbihwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0U2VsZlRvQ2hpbGQodGhpcywgbG9j
YWxSZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKKyAgICB9CisK
KyAgICByZXR1cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0VG9D
b250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBp
ZiAoY29uc3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKQorICAgICAg
ICByZXR1cm4gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydENoaWxkVG9TZWxmKHRoaXMsIGxvY2Fs
UG9pbnQpOworCisgICAgcmV0dXJuIGxvY2FsUG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNv
bnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJl
bnQoKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRTZWxmVG9DaGls
ZCh0aGlzLCBwYXJlbnRQb2ludCk7CisKKyAgICByZXR1cm4gcGFyZW50UG9pbnQ7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IGI2YzAwNTQuLmRiMmY1ODMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9XaWRnZXQuaApAQCAtODEsNyArODEsNiBAQCBjbGFzcyBGb250OwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgU2Nyb2xsVmlldzsKLWNs
YXNzIFdpZGdldENsaWVudDsKIGNsYXNzIFdpZGdldFByaXZhdGU7CiAKIC8vIFRoZSBXaWRnZXQg
Y2xhc3Mgc2VydmVzIGFzIGEgYmFzZSBjbGFzcyBmb3IgdGhyZWUga2luZHMgb2Ygb2JqZWN0czoK
QEAgLTE2NCw5ICsxNjMsMTAgQEAgcHVibGljOgogICAgIC8vIHVwIHdpdGggYW4gaW5hY2N1cmF0
ZSByZWN0LiAgQWx3YXlzIG1ha2Ugc3VyZSB0byB1c2UgdGhlIHJlY3QtYmFzZWQgY29udmVydEZy
b21Db250YWluaW5nV2luZG93IG1ldGhvZAogICAgIC8vIHdoZW4gY29udmVydGluZyB3aW5kb3cg
cmVjdHMuCiAgICAgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKLSAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0
IEludFBvaW50JikgY29uc3Q7Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7IC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHdo
ZW4gbm90IHRvIHVzZSB0aGlzIG1ldGhvZC4KICAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgCisgICAgSW50UG9pbnQgY29u
dmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFBv
aW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkge30KIApAQCAtMTc5LDEyICsx
NzksMjcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVydmlldygpOwogI2VuZGlm
CiAKK3Byb3RlY3RlZDoKKyAgICAvLyBWaXJ0dWFsIG1ldGhvZHMgdG8gY29udmVydCBwb2ludHMg
dG8vZnJvbSB0aGUgY29udGFpbmluZyBGcmFtZVZpZXcKKyAgICB2aXJ0dWFsIEludFJlY3QgY29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdW
aWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBs
YXRmb3JtV2lkZ2V0KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3Rv
cnMgdG8gaW5pdGlhbGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCiAgICAgdm9pZCByZWxlYXNl
UGxhdGZvcm1XaWRnZXQoKTsKICAgICB2b2lkIHJldGFpblBsYXRmb3JtV2lkZ2V0KCk7CiAgICAg
CisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBjb252ZXJ0IGZyb20gdGhlIHJvb3Qg
d2lkZ2V0IHRvIHRoZSBjb250YWluaW5nIHdpbmRvdywKKyAgICAvLyB3aGljaCBoYXMgYmVoYXZp
b3IgdGhhdCBtYXkgZGlmZmVyIGJldHdlZW4gcGxhdGZvcm1zIChlLmcuIE1hYyB1c2VzIGZsaXBw
ZWQgd2luZG93IGNvb3JkaW5hdGVzKS4KKyAgICBzdGF0aWMgSW50UmVjdCBjb252ZXJ0RnJvbVJv
b3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgc3RhdGljIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nV2luZG93VG9S
b290KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYpOworICAgIAorICAg
IHN0YXRpYyBJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3Qg
V2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYpOworICAgIHN0YXRpYyBJbnRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lk
Z2V0LCBjb25zdCBJbnRQb2ludCYpOworCiBwcml2YXRlOgogICAgIFNjcm9sbFZpZXcqIG1fcGFy
ZW50OwogICAgIFBsYXRmb3JtV2lkZ2V0IG1fd2lkZ2V0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbnRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRQb2ludC5oCmluZGV4IDFjYWUxOTEuLjIxYWY2N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ludFBvaW50LmgKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0WChpbnQg
eCkgeyBtX3ggPSB4OyB9CiAgICAgdm9pZCBzZXRZKGludCB5KSB7IG1feSA9IHk7IH0KIAorICAg
IHZvaWQgbW92ZShjb25zdCBJbnRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgp
KTsgfSAKICAgICB2b2lkIG1vdmUoaW50IGR4LCBpbnQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0g
ZHk7IH0KICAgICAKICAgICBJbnRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEludFBvaW50JiBvdGhl
cikgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbSBi
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQppbmRleCAxYWFmNGIyLi44NjUzYTAz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCkBAIC0yODMsNzIgKzI4Myw1MiBAQCB2b2lk
IFdpZGdldDo6YWZ0ZXJNb3VzZURvd24oTlNWaWV3ICp2aWV3LCBXaWRnZXQqIHdpZGdldCkKICAg
ICB9CiB9CiAKLUludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKKy8vIFRoZXNlIGFyZSBoZXJlIHRvIGRlYWwgd2l0
aCBmbGlwcGVkIGNvb3JkcyBvbiBNYWMuCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Sb290
VG9Db250YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFw
YXJlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBwb2ludDsKLSAgICAgICAgSW50UG9pbnQgcmVz
dWx0ID0gcGFyZW50KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhwb2ludCk7Ci0gICAg
ICAgIHJlc3VsdC5tb3ZlKHBhcmVudCgpLT5zY3JvbGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3Jv
bGxZKCkgLSB5KCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKKyAgICBp
ZiAoIXJvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiByZWN0Owor
CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBJbnRQb2ludChb
cGxhdGZvcm1XaWRnZXQoKSBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7CisgICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgY29u
dmVydFJlY3Q6cmVjdCB0b1ZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9O
UzsKLSAgICAKLSAgICByZXR1cm4gcG9pbnQ7CisKKyAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50
UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KSBjb25zdAorSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1Rv
Um9vdChjb25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIGlmICghcGFyZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVjdDsKLSAgICAgICAgSW50UmVjdCByZXN1bHQgPSBwYXJlbnQoKS0+
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KHJlY3QpOwotICAgICAgICByZXN1bHQubW92ZShw
YXJlbnQoKS0+c2Nyb2xsWCgpIC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xsWSgpIC0geSgpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFyb290V2lkZ2V0LT5w
bGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcmVjdDsKKwogICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUzsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbcGxhdGZvcm1X
aWRnZXQoKSBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Om5pbF0pOworICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnJl
Y3QgZnJvbVZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAK
KwogICAgIHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFp
bmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByKSBjb25zdAorSW50UG9pbnQgV2lkZ2V0Ojpjb252
ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKSB7Ci0g
ICAgICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgSW50
UmVjdCByZXN1bHQgPSByOwotICAgICAgICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgp
IC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xsWSgpIC0geSgpKTsKLSAgICAgICAgcmV0dXJuIHBhcmVu
dCgpLT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KHJlc3VsdCk7Ci0gICAgfQotICAgIAorICAg
IGlmICghcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHBvaW50
OworCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBJbnRSZWN0
KFtwbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnIgdG9WaWV3Om5pbF0pOworICAgIHJldHVy
biBJbnRQb2ludChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBjb252ZXJ0UG9pbnQ6cG9p
bnQgdG9WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICBy
ZXR1cm4gcjsKKyAgICByZXR1cm4gcG9pbnQ7CiB9Ci0gCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHApIGNvbnN0CisKK0ludFBvaW50
IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNvbnN0IFdpZGdldCog
cm9vdFdpZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewotICAgIGlmICghcGxhdGZvcm1X
aWRnZXQoKSkgewotICAgICAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHA7
Ci0gICAgICAgIEludFBvaW50IHJlc3VsdCA9IHA7Ci0gICAgICAgIHJlc3VsdC5tb3ZlKHBhcmVu
dCgpLT5zY3JvbGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3JvbGxZKCkgLSB5KCkpOwotICAgICAg
ICByZXR1cm4gcGFyZW50KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVzdWx0KTsKLSAg
ICB9Ci0gICAgCisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAg
ICByZXR1cm4gcG9pbnQ7CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAg
cmV0dXJuIEludFBvaW50KFtwbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRQb2ludDpwIHRvVmlldzpu
aWxdKTsKKyAgICByZXR1cm4gSW50UG9pbnQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkg
Y29udmVydFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7CiAKLSAgICByZXR1cm4gcDsKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAKIHZvaWQg
V2lkZ2V0OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CmluZGV4IDk4NDI2ZWQuLjM5MTIzZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAg
LTMyNDYsMTIgKzMyNDYsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkVmlzdWFsT3ZlcmZsb3co
Y29uc3QgSW50UmVjdCYgcikKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dI
ZWlnaHQsIHIuYm90dG9tKCkpOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVy
Zmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQsIGludCwgaW50LCBpbnQpCiti
b29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSkKIHsKICAgICBpZiAoIXNj
cm9sbHNPdmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5
ZXIoKS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0KTsKKyAgICByZXR1cm4gbGF5ZXIo
KS0+aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBJbnRQb2ludChfeCAtIF90eCwgX3kg
LSBfdHkpKTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVz
dFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ks
IGludCBfdHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckRhdGFHcmlkLmNwcAppbmRleCA3YTExMjE3Li5mYjZlOWNiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCiB1c2luZyBz
dGQ6Om1pbjsKQEAgLTEyMiw2ICsxMjMsNjUgQEAgYm9vbCBSZW5kZXJEYXRhR3JpZDo6aXNBY3Rp
dmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5p
c0FjdGl2ZSgpOwogfQogCisKK0ludFJlY3QgUmVuZGVyRGF0YUdyaWQ6OmNvbnZlcnRGcm9tU2Ny
b2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0g
dGhpcy0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJl
Y3Q7CisKKyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworCisgICAgaW50IHNjcm9s
bGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsK
KyAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAgcmVjdC5tb3ZlKHNjcm9s
bGJhckxlZnQsIHNjcm9sbGJhclRvcCk7CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCkt
PmNvbnZlcnRGcm9tUmVuZGVyZXIodGhpcywgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyRGF0
YUdyaWQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAg
cmV0dXJuIHBhcmVudFJlY3Q7CisKKyAgICBJbnRSZWN0IHJlY3QgPSB2aWV3LT5mcmFtZVZpZXco
KS0+Y29udmVydFRvUmVuZGVyZXIodGhpcywgcGFyZW50UmVjdCk7CisKKyAgICBpbnQgc2Nyb2xs
YmFyTGVmdCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOwor
ICAgIGludCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKKyAgICByZWN0Lm1vdmUoLXNjcm9s
bGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2lu
dCBSZW5kZXJEYXRhR3JpZDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQp
IGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKKyAgICBpZiAo
IXZpZXcpCisgICAgICAgIHJldHVybiBzY3JvbGxiYXJQb2ludDsKKworICAgIEludFBvaW50IHBv
aW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisKKyAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkg
LSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOworICAgIGludCBzY3JvbGxiYXJU
b3AgPSBib3JkZXJUb3AoKTsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhckxlZnQsIHNjcm9sbGJh
clRvcCk7CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVuZGVy
ZXIodGhpcywgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJEYXRhR3JpZDo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmll
dyA9IHRoaXMtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBwYXJlbnRQ
b2ludDsKKworICAgIEludFBvaW50IHBvaW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRU
b1JlbmRlcmVyKHRoaXMsIHBhcmVudFBvaW50KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0g
d2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNj
cm9sbGJhclRvcCA9IGJvcmRlclRvcCgpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhckxlZnQs
IC1zY3JvbGxiYXJUb3ApOworICAgIHJldHVybiBwb2ludDsKK30KKwogfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmggYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJEYXRhR3JpZC5oCmluZGV4IDIxMTZmOTAuLjMyNWVmYzcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGF0YUdyaWQuaApAQCAtNjMsNiArNjMsMTAgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8g
V2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gZGF0YSBncmlkcyB5ZXQuICBJZiB3ZSBkaWQgdGhp
cyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7
CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGM1MTcwNmIuLjNjZGU2YjggMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MjQsNiArMTQyNCw2NiBAQCBib29sIFJl
bmRlckxheWVyOjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QKICAgICByZXR1cm4gIXNj
cm9sbENvcm5lclJlY3QodGhpcywgcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSkuaXNFbXB0
eSgpOwogfQogCitJbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29u
dGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNj
cm9sbGJhclJlY3QpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBzY3JvbGxiYXJSZWN0Owor
CisgICAgSW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xs
YmFyT2Zmc2V0KHNjcm9sbGJhcikpOworCisgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5j
b252ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRl
ckxheWVyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAg
UmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybiBwYXJlbnRSZWN0OworCisgICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJh
bWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAg
IHJlY3QubW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0
OworfQorCitJbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRh
aW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Ny
b2xsYmFyUG9pbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCkt
PnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBzY3JvbGxiYXJQb2ludDsK
KworICAgIEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShz
Y3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygp
LT5jb252ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHBvaW50KTsKK30KKworSW50UG9pbnQg
UmVuZGVyTGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAor
eworICAgIFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9
IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRQ
b2ludCk7CisKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7Cisg
ICAgcmV0dXJuIHBvaW50OworfQorCitJbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZz
ZXQoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKKworICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQor
ICAgICAgICByZXR1cm4gSW50U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkg
LSBzY3JvbGxiYXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOworCisgICAgaWYgKHNjcm9s
bGJhciA9PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKGJveC0+Ym9yZGVy
TGVmdCgpLCBib3gtPmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNjcm9sbGJhci0+
aGVpZ2h0KCkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJ
bnRTaXplKCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJl
Y3Qgc2Nyb2xsUmVjdCA9IHJlY3Q7CkBAIC0xODM1LDM0ICsxODk1LDI5IEBAIGJvb2wgUmVuZGVy
TGF5ZXI6OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9p
bnQpIGNvbnN0CiAgICAgcmV0dXJuIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGxvY2FsQm91bmRz
KS5jb250YWlucyhsb2NhbFBvaW50KTsKIH0KICAgICAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRl
c3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK2Jvb2wgUmVuZGVyTGF5
ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SW50UG9pbnQmIGxvY2FsUG9pbnQpCiB7CiAgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAo
IXJlbmRlcmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJl
c2l6ZSgpID09IFJFU0laRV9OT05FKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVu
ZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKLQotICAgIGludCB4
ID0gMDsKLSAgICBpbnQgeSA9IDA7Ci0gICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4
LCB5KTsKLSAgICBJbnRSZWN0IGFic0JvdW5kcyh4LCB5LCBib3gtPndpZHRoKCksIGJveC0+aGVp
Z2h0KCkpOwogICAgIAogICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CiAgICAgaWYgKHJl
bmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgpICE9IFJFU0laRV9OT05FKSB7Ci0gICAgICAgIHJl
c2l6ZUNvbnRyb2xSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYWJzQm91bmRzKTsKLSAg
ICAgICAgaWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkKKyAg
ICAgICAgcmVzaXplQ29udHJvbFJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJv
cmRlckJveFJlY3QoKSk7CisgICAgICAgIGlmIChyZXNpemVDb250cm9sUmVjdC5jb250YWlucyhs
b2NhbFBvaW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGludCBy
ZXNpemVDb250cm9sU2l6ZSA9IG1heChyZXNpemVDb250cm9sUmVjdC5oZWlnaHQoKSwgMCk7CiAK
ICAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIEludFJlY3QgdkJhclJlY3QoYWJzQm91bmRzLnJp
Z2h0KCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRvcCgpLAorICAgICAg
ICBJbnRSZWN0IHZCYXJSZWN0KGJveC0+d2lkdGgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1f
dkJhci0+d2lkdGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgYm94LT5ib3JkZXJUb3Ao
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgYWJzQm91bmRzLmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBi
b3gtPmJvcmRlckJvdHRvbSgpKSAtIChtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogcmVzaXpl
Q29udHJvbFNpemUpKTsKLSAgICAgICAgaWYgKHZCYXJSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2lu
dCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVpZ2h0KCkgLSAoYm94LT5i
b3JkZXJUb3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gKG1faEJhciA/IG1faEJhci0+aGVp
Z2h0KCkgOiByZXNpemVDb250cm9sU2l6ZSkpOworICAgICAgICBpZiAodkJhclJlY3QuY29udGFp
bnMobG9jYWxQb2ludCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFy
LmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xODcwLDEx
ICsxOTI1LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhp
dFRlc3RSZXN1bHQmIHJlc3VsdCkKIAogICAgIHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4KHJlc2l6
ZUNvbnRyb2xSZWN0LndpZHRoKCksIDApOwogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgSW50
UmVjdCBoQmFyUmVjdChhYnNCb3VuZHMueCgpICsgYm94LT5ib3JkZXJMZWZ0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLmJvdHRvbSgpIC0gYm94LT5ib3JkZXJCb3R0b20o
KSAtIG1faEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRz
LndpZHRoKCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gKG1f
dkJhciA/IG1fdkJhci0+d2lkdGgoKSA6IHJlc2l6ZUNvbnRyb2xTaXplKSwKKyAgICAgICAgSW50
UmVjdCBoQmFyUmVjdChib3gtPmJvcmRlckxlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBib3gtPmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgYm94LT53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVm
dCgpICsgYm94LT5ib3JkZXJSaWdodCgpKSAtIChtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiBy
ZXNpemVDb250cm9sU2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWln
aHQoKSk7Ci0gICAgICAgIGlmIChoQmFyUmVjdC5jb250YWlucyhyZXN1bHQucG9pbnQoKSkpIHsK
KyAgICAgICAgaWYgKGhCYXJSZWN0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CiAgICAgICAgICAg
ICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggOTcxYzRkMS4uMTEz
ODY1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoaW50IHR4LCBpbnQgdHkpOwog
ICAgIGJvb2wgaXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJbnRQb2ludCYgYWJzb2x1dGVQ
b2ludCkgY29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVz
dWx0Jik7CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6
ZUNvcm5lcihjb25zdCBJbnRQb2ludCYgYWJzb2x1dGVQb2ludCkgY29uc3Q7CiAKICAgICB2b2lk
IHBhaW50T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CkBAIC00NzYsMTEgKzQ3NiwxOCBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCisgICAgLy8g
U2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0Owot
CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJ
bnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0
RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50
UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0
OworICAgIAorICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNv
bnN0OworICAgIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFs
T3ZlcmZsb3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CiAKICAgICB2b2lkIGNoaWxkVmlzaWJp
bGl0eUNoYW5nZWQoYm9vbCBuZXdWaXNpYmlsaXR5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKaW5kZXggODNjNTY5ZS4uYjRhN2U5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKQEAgLTM3MCw3ICszNzAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92
ZXJmbG93Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50CiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIEludFJlY3QgdmVydFJlY3QoX3R4ICsgd2lkdGgoKSAtIGJv
cmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICBfdHks
CisgICAgICAgICAgICAgICAgICAgICBfdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAg
ICAgICAgIG1fdkJhci0+d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0g
Ym9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAKQEAgLTYyMyw2ICs2MjMsNjQgQEAgdm9p
ZCBSZW5kZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgY29uc3QgSW50UmVjdCYKICAgICByZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3QpOwog
fQogCitJbnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWlu
aW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xs
YmFyUmVjdCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpOwor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CisKKyAgICBJbnRS
ZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworCisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0
aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xs
YmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhckxlZnQsIHNjcm9s
bGJhclRvcCk7CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVu
ZGVyZXIodGhpcywgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIFJlbmRlclZpZXcqIHZpZXcg
PSB0aGlzLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gcGFyZW50UmVj
dDsKKworICAgIEludFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5k
ZXJlcih0aGlzLCBwYXJlbnRSZWN0KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgo
KSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJh
clRvcCA9IGJvcmRlclRvcCgpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9s
bGJhclRvcCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxpc3RCb3g6
OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIFJl
bmRlclZpZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm4gc2Nyb2xsYmFyUG9pbnQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBv
aW50OworCisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAt
IHNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7
CisgICAgcG9pbnQubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOworCisgICAgcmV0
dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHBvaW50KTsK
K30KKworSW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFy
ZW50UG9pbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsK
KyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsKKworICAgIEludFBv
aW50IHBvaW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBh
cmVudFBvaW50KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJp
Z2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRl
clRvcCgpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOwor
ICAgIHJldHVybiBwb2ludDsKK30KKwogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlckxpc3RC
b3g6OmNyZWF0ZVNjcm9sbGJhcigpCiB7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCmluZGV4IGI4YzA1NDAuLmRkMjU3YTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgKQEAgLTEwMSw2ICsxMDEsMTAgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8g
V2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJZiB3ZSBkaWQgdGhp
cyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1Rv
U2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9p
bnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhcios
IGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xs
YmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRl
U2Nyb2xsYmFyKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32161</attachid>
            <date>2009-07-01 17:02:56 -0700</date>
            <delta_ts>2009-07-02 10:02:27 -0700</delta_ts>
            <desc>Almost done patch; needs ScrollbarClient cleanup</desc>
            <filename>22119_almost.txt</filename>
            <type>text/plain</type>
            <size>42757</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cCBiL1dlYkNvcmUvV2ViQ29yZS5i
YXNlLmV4cAppbmRleCBkMDA3Nzk0Li5lMGI4ZjM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCkBAIC05MzEsNiArOTMx
LDEwIEBAIF9fWk5LN1dlYkNvcmU2U3RyaW5nN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTZTdHJp
bmc5c3Vic3RyaW5nRWpqCiBfX1pOSzdXZWJDb3JlNlN0cmluZ2N2TjNKU0M3VVN0cmluZ0VFdgog
X19aTks3V2ViQ29yZTZXaWRnZXQ5ZnJhbWVSZWN0RXYKK19fWk5LN1dlYkNvcmU2V2lkZ2V0MjNj
b252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzhJbnRQb2ludEUKK19fWk5LN1dlYkNvcmU2V2lk
Z2V0MjNjb252ZXJ0VG9Db250YWluaW5nVmlld0VSS05TXzdJbnRSZWN0RQorX19aTks3V2ViQ29y
ZTZXaWRnZXQyNWNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdFUktOU183SW50UmVjdEUKK19fWk5L
N1dlYkNvcmU2V2lkZ2V0MjVjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3RVJLTlNfOEludFBvaW50
RQogX19aTks3V2ViQ29yZTdDU3RyaW5nNGRhdGFFdgogX19aTks3V2ViQ29yZTdDU3RyaW5nNmxl
bmd0aEV2CiBfX1pOSzdXZWJDb3JlN0VsZW1lbnQxMmdldEF0dHJpYnV0ZUVSS05TXzEzUXVhbGlm
aWVkTmFtZUUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggODdlOWVjYy4uNDJlZGM2OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL0V2
ZW50SGFuZGxlci5jcHAKQEAgLTEyOTcsNyArMTI5Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQs
IEhpCiAKICAgICAvLyBTZW5kIGV2ZW50cyByaWdodCB0byBhIHNjcm9sbGJhciBpZiB0aGUgbW91
c2UgaXMgcHJlc3NlZC4KICAgICBpZiAobV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZSAmJiBtX21v
dXNlUHJlc3NlZCkKLSAgICAgICAgcmV0dXJuIG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UtPm1v
dXNlTW92ZWQobV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+dHJhbnNmb3JtRXZlbnQobW91c2VF
dmVudCkpOworICAgICAgICByZXR1cm4gbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+bW91c2VN
b3ZlZChtb3VzZUV2ZW50KTsKIAogICAgIC8vIFRyZWF0IG1vdXNlIG1vdmUgZXZlbnRzIHdoaWxl
IHRoZSBtb3VzZSBpcyBwcmVzc2VkIGFzICJyZWFkLW9ubHkiIGluIHByZXBhcmVNb3VzZUV2ZW50
CiAgICAgLy8gaWYgd2UgYXJlIGFsbG93ZWQgdG8gc2VsZWN0LgpAQCAtMTM0OSw3ICsxMzQ5LDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgbW91c2VFdmVudCwgSGkKICAgICAgICAgICAgIHN3YWxsb3dFdmVudCB8PSBw
YXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKG1ldiwgbmV3U3ViZnJhbWUuZ2V0KCksIGhvdmVy
ZWROb2RlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2Nyb2xsYmFyICYmICFtX21vdXNl
UHJlc3NlZCkKLSAgICAgICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChzY3JvbGxiYXItPnRy
YW5zZm9ybUV2ZW50KG1vdXNlRXZlbnQpKTsgLy8gSGFuZGxlIGhvdmVyIGVmZmVjdHMgb24gcGxh
dGZvcm1zIHRoYXQgc3VwcG9ydCB2aXN1YWwgZmVlZGJhY2sgb24gc2Nyb2xsYmFyIGhvdmVyaW5n
LgorICAgICAgICAgICAgc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKG1vdXNlRXZlbnQpOyAvLyBIYW5k
bGUgaG92ZXIgZWZmZWN0cyBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHZpc3VhbCBmZWVkYmFj
ayBvbiBzY3JvbGxiYXIgaG92ZXJpbmcuCiAgICAgICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFt
ZS0+cGFnZSgpKSB7CiAgICAgICAgICAgICBpZiAoKCFtX3Jlc2l6ZUxheWVyIHx8ICFtX3Jlc2l6
ZUxheWVyLT5pblJlc2l6ZU1vZGUoKSkgJiYgIXBhZ2UtPm1haW5GcmFtZSgpLT5ldmVudEhhbmRs
ZXIoKS0+cGFuU2Nyb2xsSW5Qcm9ncmVzcygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNDVmYzBhZC4u
NjVjODI1YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTEyOTQsNiArMTI5NCwzOSBAQCB2b2lkIEZyYW1l
Vmlldzo6Z2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYgdGlja21hcmtzKSBjb25zdAogICAg
IHRpY2ttYXJrcyA9IGZyYW1lKCktPmRvY3VtZW50KCktPnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJz
KERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogfQogCitJbnRSZWN0IEZyYW1lVmlldzo6Y29u
dmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgLy8gU2Nyb2xsYmFy
cyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKKyAgICBJbnRSZWN0IG5ld1JlY3QgPSBs
b2NhbFJlY3Q7CisgICAgbmV3UmVjdC5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnko
KSk7CisgICAgcmV0dXJuIG5ld1JlY3Q7Cit9CisKK0ludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIs
IGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBuZXdSZWN0
ID0gcGFyZW50UmVjdDsKKyAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdp
dGhpbiB1cworICAgIG5ld1JlY3QubW92ZSgtc2Nyb2xsYmFyLT54KCksIC1zY3JvbGxiYXItPnko
KSk7CisgICAgcmV0dXJuIG5ld1JlY3Q7Cit9CisKKy8vIEZJWE1FOiB0ZXN0IHRoZXNlIG9uIHdp
bmRvd3MKK0ludFBvaW50IEZyYW1lVmlldzo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgbG9jYWxQ
b2ludCkgY29uc3QKK3sKKyAgICAvLyBTY3JvbGxiYXJzIHdvbid0IGJlIHRyYW5zZm9ybWVkIHdp
dGhpbiB1cworICAgIEludFBvaW50IG5ld1BvaW50ID0gbG9jYWxQb2ludDsKKyAgICBuZXdQb2lu
dC5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CisgICAgcmV0dXJuIG5ld1Bv
aW50OworfQorCitJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBh
cmVudFBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IG5ld1BvaW50ID0gcGFyZW50UG9pbnQ7
CisgICAgLy8gU2Nyb2xsYmFycyB3b24ndCBiZSB0cmFuc2Zvcm1lZCB3aXRoaW4gdXMKKyAgICBu
ZXdQb2ludC5tb3ZlKC1zY3JvbGxiYXItPngoKSwgLXNjcm9sbGJhci0+eSgpKTsKKyAgICByZXR1
cm4gbmV3UG9pbnQ7Cit9CisKIEludFJlY3QgRnJhbWVWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCgp
IGNvbnN0CiB7CiAgICAgUGFnZSogcGFnZSA9IGZyYW1lKCkgPyBmcmFtZSgpLT5wYWdlKCkgOiAw
OwpAQCAtMTUxOSw0ICsxNTUyLDE0MiBAQCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdo
dChmbG9hdCAqbmV3Qm90dG9tLCBmbG9hdCBvbGRUb3AsIGZsb2F0IG9sZEJvdHRvbQogICAgICAg
ICAqbmV3Qm90dG9tID0gb2xkQm90dG9tOwogfQogCitJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVy
dEZyb21SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRSZWN0
JiByZW5kZXJlclJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gcmVuZGVyZXItPmxv
Y2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KHJlbmRlcmVyUmVjdCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CisKKyAgICAvLyBDb252ZXJ0IGZyb20gcGFnZSAoImFic29sdXRlIikgdG8gRnJh
bWVWaWV3IGNvb3JkaW5hdGVzLgorICAgIHJlY3QubW92ZSgtc2Nyb2xsWCgpLCAtc2Nyb2xsWSgp
KTsKKworICAgIHJldHVybiByZWN0OworfQorCitJbnRSZWN0IEZyYW1lVmlldzo6Y29udmVydFRv
UmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UmVjdCYgdmll
d1JlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCByZWN0ID0gdmlld1JlY3Q7CisgICAgCisgICAg
Ly8gQ29udmVydCBmcm9tIEZyYW1lVmlldyBjb29yZHMgaW50byBwYWdlICgiYWJzb2x1dGUiKSBj
b29yZGluYXRlcy4KKyAgICByZWN0Lm1vdmUoc2Nyb2xsWCgpLCBzY3JvbGxZKCkpOworCisgICAg
Ly8gRklYTUU6IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gbWFwIGFuIGFic29sdXRlIHJlY3QgZG93
biB0byBhIGxvY2FsIHF1YWQsIHNvIGp1c3QKKyAgICAvLyBtb3ZlIHRoZSByZWN0IGZvciBub3cu
CisgICAgcmVjdC5zZXRMb2NhdGlvbihyb3VuZGVkSW50UG9pbnQocmVuZGVyZXItPmFic29sdXRl
VG9Mb2NhbChyZWN0LmxvY2F0aW9uKCksIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1zICov
KSkpOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRG
cm9tUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50UG9pbnQm
IHJlbmRlcmVyUG9pbnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9pbnQgPSByb3VuZGVkSW50
UG9pbnQocmVuZGVyZXItPmxvY2FsVG9BYnNvbHV0ZShyZW5kZXJlclBvaW50LCBmYWxzZSwgdHJ1
ZSAvKiB1c2UgdHJhbnNmb3JtcyAqLykpOworCisgICAgLy8gQ29udmVydCBmcm9tIHBhZ2UgKCJh
YnNvbHV0ZSIpIHRvIEZyYW1lVmlldyBjb29yZGluYXRlcy4KKyAgICBwb2ludC5tb3ZlKC1zY3Jv
bGxYKCksIC1zY3JvbGxZKCkpOworICAgIHJldHVybiBwb2ludDsKK30KKworSW50UG9pbnQgRnJh
bWVWaWV3Ojpjb252ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBJbnRQb2ludCYgdmlld1BvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHBvaW50ID0g
dmlld1BvaW50OworICAgIAorICAgIC8vIENvbnZlcnQgZnJvbSBGcmFtZVZpZXcgY29vcmRzIGlu
dG8gcGFnZSAoImFic29sdXRlIikgY29vcmRpbmF0ZXMuCisgICAgcG9pbnQgKz0gSW50U2l6ZShz
Y3JvbGxYKCksIHNjcm9sbFkoKSk7CisKKyAgICByZXR1cm4gcm91bmRlZEludFBvaW50KHJlbmRl
cmVyLT5hYnNvbHV0ZVRvTG9jYWwocG9pbnQsIGZhbHNlLCB0cnVlIC8qIHVzZSB0cmFuc2Zvcm1z
ICovKSk7Cit9CisKK0ludFJlY3QgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZp
ZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBpZiAocGFyZW50U2Ny
b2xsVmlldy0+aXNGcmFtZVZpZXcoKSkgeworICAgICAgICAgICAgY29uc3QgRnJhbWVWaWV3KiBw
YXJlbnRWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4ocGFyZW50U2Nyb2xsVmll
dyk7CisgICAgICAgICAgICAvLyBHZXQgb3VyIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQgdmlldwor
ICAgICAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJlbmRlcmVy
KCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBs
b2NhbFJlY3Q7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBJbnRSZWN0IHJlY3QobG9j
YWxSZWN0KTsKKyAgICAgICAgICAgIC8vIEFkZCBib3JkZXJzIGFuZCBwYWRkaW5nPz8KKyAgICAg
ICAgICAgIHJlY3QubW92ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgpICsgcmVuZGVyZXItPnBhZGRp
bmdMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPmJvcmRlclRvcCgpICsg
cmVuZGVyZXItPnBhZGRpbmdUb3AoKSk7CisgICAgICAgICAgICByZXR1cm4gcGFyZW50Vmlldy0+
Y29udmVydEZyb21SZW5kZXJlcihyZW5kZXJlciwgcmVjdCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2FsUmVj
dCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBsb2NhbFJlY3Q7Cit9CisKK0ludFJlY3QgRnJh
bWVWaWV3Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJl
Y3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcg
PSBwYXJlbnQoKSkgeworICAgICAgICBpZiAocGFyZW50U2Nyb2xsVmlldy0+aXNGcmFtZVZpZXco
KSkgeworICAgICAgICAgICAgY29uc3QgRnJhbWVWaWV3KiBwYXJlbnRWaWV3ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgRnJhbWVWaWV3Kj4ocGFyZW50U2Nyb2xsVmlldyk7CisKKyAgICAgICAgICAgIC8v
IEdldCBvdXIgcmVuZGVyZXIgaW4gdGhlIHBhcmVudCB2aWV3CisgICAgICAgICAgICBSZW5kZXJQ
YXJ0KiByZW5kZXJlciA9IG1fZnJhbWUtPm93bmVyUmVuZGVyZXIoKTsKKyAgICAgICAgICAgIGlm
ICghcmVuZGVyZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CisKKyAgICAg
ICAgICAgIEludFJlY3QgcmVjdCA9IHBhcmVudFZpZXctPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRl
cmVyLCBwYXJlbnRSZWN0KTsKKyAgICAgICAgICAgIC8vIFN1YnRyYWN0IGJvcmRlcnMgYW5kIHBh
ZGRpbmcKKyAgICAgICAgICAgIHJlY3QubW92ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJl
bmRlcmVyLT5wYWRkaW5nTGVmdCgpLAorICAgICAgICAgICAgICAgICAgICAgIC1yZW5kZXJlci0+
Ym9yZGVyVG9wKCkgLSByZW5kZXJlci0+cGFkZGluZ1RvcCgpKTsKKyAgICAgICAgICAgIHJldHVy
biByZWN0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gV2lkZ2V0Ojpjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFJlY3QpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgRnJhbWVWaWV3Ojpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoY29u
c3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKSB7CisgICAgICAgIGlm
IChwYXJlbnRTY3JvbGxWaWV3LT5pc0ZyYW1lVmlldygpKSB7CisgICAgICAgICAgICBjb25zdCBG
cmFtZVZpZXcqIHBhcmVudFZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPihwYXJl
bnRTY3JvbGxWaWV3KTsKKworICAgICAgICAgICAgLy8gR2V0IG91ciByZW5kZXJlciBpbiB0aGUg
cGFyZW50IHZpZXcKKyAgICAgICAgICAgIFJlbmRlclBhcnQqIHJlbmRlcmVyID0gbV9mcmFtZS0+
b3duZXJSZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbG9jYWxQb2ludDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIElu
dFBvaW50IHBvaW50KGxvY2FsUG9pbnQpOworCisgICAgICAgICAgICAvLyBBZGQgYm9yZGVycyBh
bmQgcGFkZGluZworICAgICAgICAgICAgcG9pbnQubW92ZShyZW5kZXJlci0+Ym9yZGVyTGVmdCgp
ICsgcmVuZGVyZXItPnBhZGRpbmdMZWZ0KCksCisgICAgICAgICAgICAgICAgICAgICAgIHJlbmRl
cmVyLT5ib3JkZXJUb3AoKSArIHJlbmRlcmVyLT5wYWRkaW5nVG9wKCkpOworICAgICAgICAgICAg
cmV0dXJuIHBhcmVudFZpZXctPmNvbnZlcnRGcm9tUmVuZGVyZXIocmVuZGVyZXIsIHBvaW50KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFRvQ29u
dGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBsb2NhbFBv
aW50OworfQorCitJbnRQb2ludCBGcmFtZVZpZXc6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXco
Y29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAgIGlmIChjb25zdCBTY3Jv
bGxWaWV3KiBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50KCkpIHsKKyAgICAgICAgaWYgKHBhcmVu
dFNjcm9sbFZpZXctPmlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEZyYW1lVmll
dyogcGFyZW50VmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHBhcmVudFNjcm9s
bFZpZXcpOworCisgICAgICAgICAgICAvLyBHZXQgb3VyIHJlbmRlcmVyIGluIHRoZSBwYXJlbnQg
dmlldworICAgICAgICAgICAgUmVuZGVyUGFydCogcmVuZGVyZXIgPSBtX2ZyYW1lLT5vd25lclJl
bmRlcmVyKCk7CisgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBwYXJlbnRQb2ludDsKKworICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBwYXJlbnRW
aWV3LT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlciwgcGFyZW50UG9pbnQpOworICAgICAgICAg
ICAgLy8gU3VidHJhY3QgYm9yZGVycyBhbmQgcGFkZGluZworICAgICAgICAgICAgcG9pbnQubW92
ZSgtcmVuZGVyZXItPmJvcmRlckxlZnQoKSAtIHJlbmRlcmVyLT5wYWRkaW5nTGVmdCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAtcmVuZGVyZXItPmJvcmRlclRvcCgpIC0gcmVuZGVyZXItPnBh
ZGRpbmdUb3AoKSk7CisgICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFy
ZW50UG9pbnQpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcGFyZW50UG9pbnQ7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aCBiL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAppbmRleCA5ZGFiZTU2Li45YWIyODFlIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCkBAIC0xMjYsMTEgKzEyNiw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qg
d2luZG93Q2xpcFJlY3QoYm9vbCBjbGlwVG9Db250ZW50cyA9IHRydWUpIGNvbnN0OwogICAgIElu
dFJlY3Qgd2luZG93Q2xpcFJlY3RGb3JMYXllcihjb25zdCBSZW5kZXJMYXllciosIGJvb2wgY2xp
cFRvTGF5ZXJDb250ZW50cykgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBj
b25zdDsKLQogICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IElu
dFJlY3QmKTsKQEAgLTE4OCw2ICsxODMsMTEgQEAgcHVibGljOgogICAgIGJvb2wgbG9ja2VkVG9B
bmNob3IoKSB7IHJldHVybiBtX2xvY2tlZFRvQW5jaG9yOyB9CiAgICAgdm9pZCBzZXRMb2NrZWRU
b0FuY2hvcihib29sIGxvY2tlZFRvQW5jaG9yKSB7IG1fbG9ja2VkVG9BbmNob3IgPSBsb2NrZWRU
b0FuY2hvcjsgfQogCisgICAgLy8gTWV0aG9kcyB0byBjb252ZXJ0IHBvaW50cyBhbmQgcmVjdHMg
YmV0d2VlbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0aGUgcmVuZGVyZXIsIGFuZCB0aGlzIHZp
ZXcuCisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tUmVuZGVyZXIoY29uc3QgUmVuZGVy
T2JqZWN0KiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVjdCBjb252
ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVJlbmRlcmVyKGNvbnN0IFJlbmRlck9i
amVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252
ZXJ0VG9SZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIEZyYW1lVmlldyhGcmFtZSopOwpAQCAtMjE1LDYgKzIxNSwyMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbGF5b3V0KCk7CiAgICAgfQogCisgICAgLy8gT3ZlcnJp
ZGUgU2Nyb2xsVmlldyBtZXRob2RzIHRvIGRvIHBvaW50IGNvbnZlcnNpb24gdmlhIHJlbmRlcmVy
cywgaW4gb3JkZXIgdG8KKyAgICAvLyB0YWtlIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgorICAg
IHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29u
c3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgIC8v
IFNjcm9sbEJhckNsaWVudCBpbnRlcmZhY2UKKyAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChT
Y3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5p
bmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisKICAgICB2b2lkIGRlZmVycmVkUmVwYWludFRpbWVyRmlyZWQoVGltZXI8RnJhbWVW
aWV3PiopOwogICAgIHZvaWQgZG9EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1cGRhdGVE
ZWZlcnJlZFJlcGFpbnREZWxheSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmggYi9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAppbmRleCA4MTRiNzA0Li41
YmI0OWU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaApAQCAtMjIxLDYgKzIyMSwxMSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwogCisg
ICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhj
b25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25z
dCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9t
Q29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2lu
dCYpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Q29u
dGVudFJlY3RhbmdsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkgPSAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCmluZGV4IGJhYmYzZDQuLjQ1NzRm
NjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKQEAgLTQ0OSw5ICs0NDksMzYgQEAgdm9pZCBTY3Jv
bGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgICAgIG1fY2xp
ZW50LT5pbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdCh0aGlzLCByZWN0KTsKIH0KIAotUGxhdGZvcm1N
b3VzZUV2ZW50IFNjcm9sbGJhcjo6dHJhbnNmb3JtRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCkKK0ludFJlY3QgU2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWluaW5nVmlldyhj
b25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGV2ZW50OworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0RnJvbVNjcm9s
bGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxSZWN0KTsKKworICAgIHJldHVybiBXaWRn
ZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGxvY2FsUmVjdCk7Cit9CisKK0ludFJlY3QgU2Ny
b2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJl
Y3QpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICByZXR1cm4gbV9jbGllbnQt
PmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRSZWN0KTsK
KworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UmVj
dCk7Cit9CisKK0ludFBvaW50IFNjcm9sbGJhcjo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICByZXR1cm4gbV9jbGllbnQtPmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyh0aGlzLCBsb2NhbFBvaW50KTsKKworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRh
aW5pbmdWaWV3KGxvY2FsUG9pbnQpOworfQorCitJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAorewor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UG9pbnQpOworCisgICAgcmV0dXJu
IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmggYi9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhci5oCmluZGV4IDcxMWFlMzYuLjc4NDMwYjEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIu
aApAQCAtMTEwLDEwICsxMTAsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250ZXh0TWVudShjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KTsKICNlbmRpZgogCi0gICAgLy8gVGFrZXMgYW4g
ZXZlbnQgYW5kIGFjY291bnRzIGZvciBhbnkgdHJhbnNmb3JtcyB0aGF0IG1pZ2h0IG9jY3VyIG9u
IHRoZSBzY3JvbGxiYXIuICBSZXR1cm5zCi0gICAgLy8gYSBuZXcgZXZlbnQgdGhhdCBoYXMgaGFk
IGFsbCBvZiB0aGUgdHJhbnNmb3JtcyBhcHBsaWVkLgotICAgIFBsYXRmb3JtTW91c2VFdmVudCB0
cmFuc2Zvcm1FdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICAKICAgICBTY3Jv
bGxiYXJUaGVtZSogdGhlbWUoKSBjb25zdCB7IHJldHVybiBtX3RoZW1lOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKQEAgLTEyNiwxMyArMTIyLDE5IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzdHlsZUNoYW5nZWQoKSB7IH0KIAorICAgIHZpcnR1
YWwgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JikgY29uc3Q7
CisgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50
UmVjdCYpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFRvQ29udGFp
bmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKwogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKLSAgICAKKwogICAgIHZv
aWQgYXV0b3Njcm9sbFRpbWVyRmlyZWQoVGltZXI8U2Nyb2xsYmFyPiopOwogICAgIHZvaWQgc3Rh
cnRUaW1lcklmTmVlZGVkKGRvdWJsZSBkZWxheSk7CiAgICAgdm9pZCBzdG9wVGltZXJJZk5lZWRl
ZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKaW5kZXggZjcyMGU5NS4uNzRkZjk1MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCkBAIC0yNywxMiArMjcsMTEgQEAKICNkZWZp
bmUgU2Nyb2xsYmFyQ2xpZW50X2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJT
Y3JvbGxCYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU2Nyb2xsYmFyOwotCiBjbGFzcyBTY3JvbGxiYXJDbGllbnQgewogcHVibGlj
OgogICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpIHt9CkBAIC00NSw2ICs0NCwzMiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNv
bnN0IHsgfQorCisgICAgLy8gQ29udmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIHNj
cm9sbGJhciwgYW5kIGl0cyBjb250YWluaW5nIHZpZXcuCisgICAgLy8gVGhlIGNsaWVudCBuZWVk
cyB0byBpbXBsZW1lbnQgdGhlc2UgaW4gb3JkZXIgdG8gYmUgYXdhcmUgb2YgbGF5b3V0IGVmZmVj
dHMKKyAgICAvLyBsaWtlIENTUyB0cmFuc2Zvcm1zLgorI2Vycm9yIFRoaXMgbmVlZHMgY2xlYW5p
bmcgdXAKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBmdWdseSwgYW5kIGl0IHdvdWxkIGJlIGJldHRl
ciBpZiBhIFNjcm9sbGFyQ2xpZW50IGRpZG4ndCByaXNrIHJlY3Vyc2lvbiBieQorICAgIC8vIGp1
c3QgY2FsbGluZyBzY3JvbGxiYXItPmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KCkuCisgICAgdmly
dHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBT
Y3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29udmVydFRvQ29udGFp
bmluZ1ZpZXcoc2Nyb2xsYmFyUmVjdCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFy
ZW50UmVjdCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGJhclBvaW50
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBv
aW50JiBwYXJlbnRQb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzY3JvbGxiYXIt
PldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CisgICAgfQog
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE0NTY0MzEuLjViYjkwM2IgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5jcHAKQEAgLTY5LDQyICs2OSw2MSBAQCB2b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgp
CiAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotI2lmICFQTEFURk9S
TShNQUMpCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0
IEludFJlY3QmIHdpbmRvd1JlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcq
IHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRSZWN0IHBhcmVudFJl
Y3QgPSBwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93
UmVjdCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFJl
Y3QpOworICAgIH0KKyAgICByZXR1cm4gY29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290
KHRoaXMsIHdpbmRvd1JlY3QpOworfQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFp
bmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNv
bnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJ
bnRSZWN0IHBhcmVudFJlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nVmlldyhsb2NhbFJlY3QpOwor
ICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyhwYXJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnZlcnRGcm9tUm9vdFRvQ29udGFp
bmluZ1dpbmRvdyh0aGlzLCBsb2NhbFJlY3QpOworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpIGNvbnN0
Cit7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQo
KSkgeworICAgICAgICBJbnRQb2ludCBwYXJlbnRQb2ludCA9IHBhcmVudFNjcm9sbFZpZXctPmNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgICAgIHJldHVybiBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKKyAgICB9CisgICAgcmV0dXJu
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdCh0aGlzLCB3aW5kb3dQb2ludCk7Cit9
CiAKLUludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5k
b3coY29uc3QgSW50UG9pbnQmIGxvY2FsUG9pbnQpIGNvbnN0CiB7Ci0gICAgSW50UmVjdCBjb252
ZXJ0ZWRSZWN0ID0gcmVjdDsKLSAgICBjb252ZXJ0ZWRSZWN0LnNldExvY2F0aW9uKGNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgcmV0dXJu
IGNvbnZlcnRlZFJlY3Q7CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZp
ZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJbnRQb2ludCBwYXJlbnRQb2ludCA9IGNvbnZlcnRU
b0NvbnRhaW5pbmdWaWV3KGxvY2FsUG9pbnQpOworICAgICAgICByZXR1cm4gcGFyZW50U2Nyb2xs
Vmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhwYXJlbnRQb2ludCk7CisgICAgfQorICAg
IHJldHVybiBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3codGhpcywgbG9jYWxQb2lu
dCk7CiB9CiAKLUludFBvaW50IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisjaWYgIVBMQVRGT1JNKE1BQykKK0ludFJlY3QgV2lk
Z2V0Ojpjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiwgY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHBvaW50Owot
ICAgIGNvbnN0IFdpZGdldCogY2hpbGRXaWRnZXQgPSB0aGlzOwotICAgIGZvciAoY29uc3QgU2Ny
b2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpOwotICAgICAgICAgcGFyZW50U2Ny
b2xsVmlldzsKLSAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50U2Nyb2xsVmlldywgcGFyZW50
U2Nyb2xsVmlldyA9IHBhcmVudFNjcm9sbFZpZXctPnBhcmVudCgpKQotICAgICAgICB3aW5kb3dQ
b2ludCA9IHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdpZGdldCwg
d2luZG93UG9pbnQpOwotICAgIHJldHVybiB3aW5kb3dQb2ludDsKKyAgICByZXR1cm4gcmVjdDsK
IH0KIAotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvd1RvUm9vdChjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEludFBvaW50IHdpZGdldFBvaW50ID0gcG9pbnQ7Ci0gICAgY29uc3QgV2lkZ2V0KiBjaGls
ZFdpZGdldCA9IHRoaXM7Ci0gICAgZm9yIChjb25zdCBTY3JvbGxWaWV3KiBwYXJlbnRTY3JvbGxW
aWV3ID0gcGFyZW50KCk7Ci0gICAgICAgICBwYXJlbnRTY3JvbGxWaWV3OwotICAgICAgICAgY2hp
bGRXaWRnZXQgPSBwYXJlbnRTY3JvbGxWaWV3LCBwYXJlbnRTY3JvbGxWaWV3ID0gcGFyZW50U2Ny
b2xsVmlldy0+cGFyZW50KCkpCi0gICAgICAgIHdpZGdldFBvaW50ID0gcGFyZW50U2Nyb2xsVmll
dy0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRnZXRQb2ludCk7Ci0gICAgcmV0
dXJuIHdpZGdldFBvaW50OworICAgIHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFdpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CitJ
bnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRGcm9tUm9vdFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBX
aWRnZXQqLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgSW50UmVjdCByZXN1bHQgPSBy
ZWN0OwotICAgIHJlc3VsdC5zZXRMb2NhdGlvbihjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3co
cmVjdC5sb2NhdGlvbigpKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcG9pbnQ7
Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290
KGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICByZXR1cm4gcG9p
bnQ7CiB9CiAjZW5kaWYKIApAQCAtMTE4LDQgKzEzNyw0MSBAQCB2b2lkIFdpZGdldDo6cmV0YWlu
UGxhdGZvcm1XaWRnZXQoKQogfQogI2VuZGlmCiAKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9D
b250YWluaW5nVmlldyhjb25zdCBJbnRSZWN0JiBsb2NhbFJlY3QpIGNvbnN0Cit7CisgICAgaWYg
KGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAg
ICBJbnRSZWN0IHBhcmVudFJlY3QobG9jYWxSZWN0KTsKKyAgICAgICAgcGFyZW50UmVjdC5zZXRM
b2NhdGlvbihwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0Q2hpbGRUb1NlbGYodGhpcywgbG9jYWxS
ZWN0LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFJlY3Q7CisgICAgfQorICAg
IHJldHVybiBsb2NhbFJlY3Q7CiB9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3KGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgaWYgKGNv
bnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkgeworICAgICAgICBJ
bnRSZWN0IGxvY2FsUmVjdCA9IHBhcmVudFJlY3Q7CisgICAgICAgIGxvY2FsUmVjdC5zZXRMb2Nh
dGlvbihwYXJlbnRTY3JvbGxWaWV3LT5jb252ZXJ0U2VsZlRvQ2hpbGQodGhpcywgbG9jYWxSZWN0
LmxvY2F0aW9uKCkpKTsKKyAgICAgICAgcmV0dXJuIGxvY2FsUmVjdDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFyZW50UmVjdDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKK3sKKyAgICBpZiAoY29u
c3QgU2Nyb2xsVmlldyogcGFyZW50U2Nyb2xsVmlldyA9IHBhcmVudCgpKQorICAgICAgICByZXR1
cm4gcGFyZW50U2Nyb2xsVmlldy0+Y29udmVydENoaWxkVG9TZWxmKHRoaXMsIGxvY2FsUG9pbnQp
OworCisgICAgcmV0dXJuIGxvY2FsUG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVy
dEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7
CisgICAgaWYgKGNvbnN0IFNjcm9sbFZpZXcqIHBhcmVudFNjcm9sbFZpZXcgPSBwYXJlbnQoKSkK
KyAgICAgICAgcmV0dXJuIHBhcmVudFNjcm9sbFZpZXctPmNvbnZlcnRTZWxmVG9DaGlsZCh0aGlz
LCBwYXJlbnRQb2ludCk7CisKKyAgICByZXR1cm4gcGFyZW50UG9pbnQ7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmggYi9X
ZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCmluZGV4IGI2YzAwNTQuLmRiMmY1ODMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaApAQCAtODEsNyArODEsNiBAQCBjbGFzcyBGb250OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OwogY2xhc3MgU2Nyb2xsVmlldzsKLWNsYXNzIFdp
ZGdldENsaWVudDsKIGNsYXNzIFdpZGdldFByaXZhdGU7CiAKIC8vIFRoZSBXaWRnZXQgY2xhc3Mg
c2VydmVzIGFzIGEgYmFzZSBjbGFzcyBmb3IgdGhyZWUga2luZHMgb2Ygb2JqZWN0czoKQEAgLTE2
NCw5ICsxNjMsMTAgQEAgcHVibGljOgogICAgIC8vIHVwIHdpdGggYW4gaW5hY2N1cmF0ZSByZWN0
LiAgQWx3YXlzIG1ha2Ugc3VyZSB0byB1c2UgdGhlIHJlY3QtYmFzZWQgY29udmVydEZyb21Db250
YWluaW5nV2luZG93IG1ldGhvZAogICAgIC8vIHdoZW4gY29udmVydGluZyB3aW5kb3cgcmVjdHMu
CiAgICAgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmKSBj
b25zdDsKLSAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBv
aW50JikgY29uc3Q7Ci0gICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGNv
bnN0IEludFBvaW50JikgY29uc3Q7IC8vIFNlZSBjb21tZW50IGFib3ZlIGFib3V0IHdoZW4gbm90
IHRvIHVzZSB0aGlzIG1ldGhvZC4KICAgICBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgCisgICAgSW50UG9pbnQgY29udmVydFRv
Q29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIEludFBvaW50IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIGZyYW1lUmVjdHNDaGFuZ2VkKCkge30KIApAQCAtMTc5LDEyICsxNzksMjcg
QEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlRnJvbVN1cGVydmlldygpOwogI2VuZGlmCiAKK3By
b3RlY3RlZDoKKyAgICAvLyBWaXJ0dWFsIG1ldGhvZHMgdG8gY29udmVydCBwb2ludHMgdG8vZnJv
bSB0aGUgY29udGFpbmluZyBGcmFtZVZpZXcKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydFRv
Q29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBsYXRmb3Jt
V2lkZ2V0KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3RvcnMgdG8g
aW5pdGlhbGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCiAgICAgdm9pZCByZWxlYXNlUGxhdGZv
cm1XaWRnZXQoKTsKICAgICB2b2lkIHJldGFpblBsYXRmb3JtV2lkZ2V0KCk7CiAgICAgCisgICAg
Ly8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBjb252ZXJ0IGZyb20gdGhlIHJvb3Qgd2lkZ2V0
IHRvIHRoZSBjb250YWluaW5nIHdpbmRvdywKKyAgICAvLyB3aGljaCBoYXMgYmVoYXZpb3IgdGhh
dCBtYXkgZGlmZmVyIGJldHdlZW4gcGxhdGZvcm1zIChlLmcuIE1hYyB1c2VzIGZsaXBwZWQgd2lu
ZG93IGNvb3JkaW5hdGVzKS4KKyAgICBzdGF0aWMgSW50UmVjdCBjb252ZXJ0RnJvbVJvb3RUb0Nv
bnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJbnRSZWN0Jik7
CisgICAgc3RhdGljIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNv
bnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYpOworICAgIAorICAgIHN0YXRp
YyBJbnRQb2ludCBjb252ZXJ0RnJvbVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0
KiByb290V2lkZ2V0LCBjb25zdCBJbnRQb2ludCYpOworICAgIHN0YXRpYyBJbnRQb2ludCBjb252
ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3dUb1Jvb3QoY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBj
b25zdCBJbnRQb2ludCYpOworCiBwcml2YXRlOgogICAgIFNjcm9sbFZpZXcqIG1fcGFyZW50Owog
ICAgIFBsYXRmb3JtV2lkZ2V0IG1fd2lkZ2V0OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbnRQb2ludC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRQb2lu
dC5oCmluZGV4IDFjYWUxOTEuLjIxYWY2N2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UG9pbnQuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFBv
aW50LmgKQEAgLTgwLDYgKzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0WChpbnQgeCkgeyBt
X3ggPSB4OyB9CiAgICAgdm9pZCBzZXRZKGludCB5KSB7IG1feSA9IHk7IH0KIAorICAgIHZvaWQg
bW92ZShjb25zdCBJbnRTaXplJiBzKSB7IG1vdmUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsgfSAK
ICAgICB2b2lkIG1vdmUoaW50IGR4LCBpbnQgZHkpIHsgbV94ICs9IGR4OyBtX3kgKz0gZHk7IH0K
ICAgICAKICAgICBJbnRQb2ludCBleHBhbmRlZFRvKGNvbnN0IEludFBvaW50JiBvdGhlcikgY29u
c3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbSBiL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQppbmRleCAxYWFmNGIyLi44NjUzYTAzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCkBAIC0yODMsNzIgKzI4Myw1MiBAQCB2b2lkIFdpZGdl
dDo6YWZ0ZXJNb3VzZURvd24oTlNWaWV3ICp2aWV3LCBXaWRnZXQqIHdpZGdldCkKICAgICB9CiB9
CiAKLUludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKKy8vIFRoZXNlIGFyZSBoZXJlIHRvIGRlYWwgd2l0aCBmbGlw
cGVkIGNvb3JkcyBvbiBNYWMuCitJbnRSZWN0IFdpZGdldDo6Y29udmVydEZyb21Sb290VG9Db250
YWluaW5nV2luZG93KGNvbnN0IFdpZGdldCogcm9vdFdpZGdldCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAoIXBsYXRmb3JtV2lkZ2V0KCkpIHsKLSAgICAgICAgaWYgKCFwYXJlbnQo
KSkKLSAgICAgICAgICAgIHJldHVybiBwb2ludDsKLSAgICAgICAgSW50UG9pbnQgcmVzdWx0ID0g
cGFyZW50KCktPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhwb2ludCk7Ci0gICAgICAgIHJl
c3VsdC5tb3ZlKHBhcmVudCgpLT5zY3JvbGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3JvbGxZKCkg
LSB5KCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKKyAgICBpZiAoIXJv
b3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiByZWN0OworCiAgICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBJbnRQb2ludChbcGxhdGZv
cm1XaWRnZXQoKSBjb252ZXJ0UG9pbnQ6cG9pbnQgZnJvbVZpZXc6bmlsXSk7CisgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgY29udmVydFJl
Y3Q6cmVjdCB0b1ZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAg
ICAKLSAgICByZXR1cm4gcG9pbnQ7CisKKyAgICByZXR1cm4gcmVjdDsKIH0KIAotSW50UmVjdCBX
aWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0KSBj
b25zdAorSW50UmVjdCBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvd1RvUm9vdChj
b25zdCBXaWRnZXQqIHJvb3RXaWRnZXQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KCFwbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVjdDsKLSAgICAgICAgSW50UmVjdCByZXN1bHQgPSBwYXJlbnQoKS0+Y29udmVy
dEZyb21Db250YWluaW5nV2luZG93KHJlY3QpOwotICAgICAgICByZXN1bHQubW92ZShwYXJlbnQo
KS0+c2Nyb2xsWCgpIC0geCgpLCBwYXJlbnQoKS0+c2Nyb2xsWSgpIC0geSgpKTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9y
bVdpZGdldCgpKQorICAgICAgICByZXR1cm4gcmVjdDsKKwogICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChbcGxhdGZvcm1XaWRnZXQo
KSBjb252ZXJ0UmVjdDpyZWN0IGZyb21WaWV3Om5pbF0pOworICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KFtyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnJlY3QgZnJv
bVZpZXc6bmlsXSk7CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAKKwogICAg
IHJldHVybiByZWN0OwogfQogCi1JbnRSZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dp
bmRvdyhjb25zdCBJbnRSZWN0JiByKSBjb25zdAorSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0RnJv
bVJvb3RUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgV2lkZ2V0KiByb290V2lkZ2V0LCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFwbGF0Zm9ybVdpZGdldCgpKSB7Ci0gICAgICAg
IGlmICghcGFyZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gcjsKLSAgICAgICAgSW50UmVjdCBy
ZXN1bHQgPSByOwotICAgICAgICByZXN1bHQubW92ZShwYXJlbnQoKS0+c2Nyb2xsWCgpIC0geCgp
LCBwYXJlbnQoKS0+c2Nyb2xsWSgpIC0geSgpKTsKLSAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5j
b252ZXJ0VG9Db250YWluaW5nV2luZG93KHJlc3VsdCk7Ci0gICAgfQotICAgIAorICAgIGlmICgh
cm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIHBvaW50OworCiAg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIHJldHVybiBJbnRSZWN0KFtwbGF0
Zm9ybVdpZGdldCgpIGNvbnZlcnRSZWN0OnIgdG9WaWV3Om5pbF0pOworICAgIHJldHVybiBJbnRQ
b2ludChbcm9vdFdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9W
aWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0KLSAgICByZXR1cm4g
cjsKKyAgICByZXR1cm4gcG9pbnQ7CiB9Ci0gCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHApIGNvbnN0CisKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93VG9Sb290KGNvbnN0IFdpZGdldCogcm9vdFdp
ZGdldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewotICAgIGlmICghcGxhdGZvcm1XaWRnZXQo
KSkgewotICAgICAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICAgICAgcmV0dXJuIHA7Ci0gICAg
ICAgIEludFBvaW50IHJlc3VsdCA9IHA7Ci0gICAgICAgIHJlc3VsdC5tb3ZlKHBhcmVudCgpLT5z
Y3JvbGxYKCkgLSB4KCksIHBhcmVudCgpLT5zY3JvbGxZKCkgLSB5KCkpOwotICAgICAgICByZXR1
cm4gcGFyZW50KCktPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVzdWx0KTsKLSAgICB9Ci0g
ICAgCisgICAgaWYgKCFyb290V2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICByZXR1
cm4gcG9pbnQ7CisKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJu
IEludFBvaW50KFtwbGF0Zm9ybVdpZGdldCgpIGNvbnZlcnRQb2ludDpwIHRvVmlldzpuaWxdKTsK
KyAgICByZXR1cm4gSW50UG9pbnQoW3Jvb3RXaWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgY29udmVy
dFBvaW50OnBvaW50IGZyb21WaWV3Om5pbF0pOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElP
TlM7CiAKLSAgICByZXR1cm4gcDsKKyAgICByZXR1cm4gcG9pbnQ7CiB9CiAKIHZvaWQgV2lkZ2V0
OjpyZWxlYXNlUGxhdGZvcm1XaWRnZXQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmluZGV4
IDk4NDI2ZWQuLjM5MTIzZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTMyNDYs
MTIgKzMyNDYsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkVmlzdWFsT3ZlcmZsb3coY29uc3Qg
SW50UmVjdCYgcikKICAgICBtX292ZXJmbG93SGVpZ2h0ID0gbWF4KG1fb3ZlcmZsb3dIZWlnaHQs
IHIuYm90dG9tKCkpOwogfQogCi1ib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0Nv
bnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQsIGludCwgaW50LCBpbnQpCitib29sIFJl
bmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyb2woSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSkKIHsKICAgICBpZiAoIXNjcm9sbHNP
dmVyZmxvdygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbGF5ZXIoKS0+
aGl0VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0KTsKKyAgICByZXR1cm4gbGF5ZXIoKS0+aGl0
VGVzdE92ZXJmbG93Q29udHJvbHMocmVzdWx0LCBJbnRQb2ludChfeCAtIF90eCwgX3kgLSBfdHkp
KTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IF94LCBpbnQgX3ksIGludCBf
dHgsIGludCBfdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckRhdGFHcmlkLmNwcAppbmRleCA3YTExMjE3Li5mYjZlOWNiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGF0YUdyaWQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCiB1c2luZyBzdGQ6Om1p
bjsKQEAgLTEyMiw2ICsxMjMsNjUgQEAgYm9vbCBSZW5kZXJEYXRhR3JpZDo6aXNBY3RpdmUoKSBj
b25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2
ZSgpOwogfQogCisKK0ludFJlY3QgUmVuZGVyRGF0YUdyaWQ6OmNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgc2Nyb2xsYmFyUmVjdCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+
dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CisK
KyAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXJSZWN0OworCisgICAgaW50IHNjcm9sbGJhckxl
ZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICBp
bnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhckxl
ZnQsIHNjcm9sbGJhclRvcCk7CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZl
cnRGcm9tUmVuZGVyZXIodGhpcywgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyRGF0YUdyaWQ6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqIHNj
cm9sbGJhciwgY29uc3QgSW50UmVjdCYgcGFyZW50UmVjdCkgY29uc3QKK3sKKyAgICBSZW5kZXJW
aWV3KiB2aWV3ID0gdGhpcy0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
IHBhcmVudFJlY3Q7CisKKyAgICBJbnRSZWN0IHJlY3QgPSB2aWV3LT5mcmFtZVZpZXcoKS0+Y29u
dmVydFRvUmVuZGVyZXIodGhpcywgcGFyZW50UmVjdCk7CisKKyAgICBpbnQgc2Nyb2xsYmFyTGVm
dCA9IHdpZHRoKCkgLSBib3JkZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOworICAgIGlu
dCBzY3JvbGxiYXJUb3AgPSBib3JkZXJUb3AoKTsKKyAgICByZWN0Lm1vdmUoLXNjcm9sbGJhckxl
ZnQsIC1zY3JvbGxiYXJUb3ApOworICAgIHJldHVybiByZWN0OworfQorCitJbnRQb2ludCBSZW5k
ZXJEYXRhR3JpZDo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0
Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcp
CisgICAgICAgIHJldHVybiBzY3JvbGxiYXJQb2ludDsKKworICAgIEludFBvaW50IHBvaW50ID0g
c2Nyb2xsYmFyUG9pbnQ7CisKKyAgICBpbnQgc2Nyb2xsYmFyTGVmdCA9IHdpZHRoKCkgLSBib3Jk
ZXJSaWdodCgpIC0gc2Nyb2xsYmFyLT53aWR0aCgpOworICAgIGludCBzY3JvbGxiYXJUb3AgPSBi
b3JkZXJUb3AoKTsKKyAgICBwb2ludC5tb3ZlKHNjcm9sbGJhckxlZnQsIHNjcm9sbGJhclRvcCk7
CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIodGhp
cywgcG9pbnQpOworfQorCitJbnRQb2ludCBSZW5kZXJEYXRhR3JpZDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRQb2ludCYgcGFyZW50UG9pbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHRo
aXMtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsK
KworICAgIEludFBvaW50IHBvaW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRl
cmVyKHRoaXMsIHBhcmVudFBvaW50KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgo
KSAtIGJvcmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJh
clRvcCA9IGJvcmRlclRvcCgpOworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhckxlZnQsIC1zY3Jv
bGxiYXJUb3ApOworICAgIHJldHVybiBwb2ludDsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJEYXRhR3JpZC5oCmluZGV4IDIxMTZmOTAuLjMyNWVmYzcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRGF0YUdyaWQuaApAQCAtNjMsNiArNjMsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gV2UgZG9u
J3Qgc3VwcG9ydCByZXNpemUgb24gZGF0YSBncmlkcyB5ZXQuICBJZiB3ZSBkaWQgdGhpcyB3b3Vs
ZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX3ZCYXI7CiB9Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGM1MTcwNmIuLjNjZGU2YjggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTE0MjQsNiArMTQyNCw2NiBAQCBib29sIFJlbmRlckxh
eWVyOjpzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QKICAgICByZXR1cm4gIXNjcm9sbENv
cm5lclJlY3QodGhpcywgcmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSkuaXNFbXB0eSgpOwog
fQogCitJbnRSZWN0IFJlbmRlckxheWVyOjpjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJh
clJlY3QpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXco
KTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBzY3JvbGxiYXJSZWN0OworCisgICAg
SW50UmVjdCByZWN0ID0gc2Nyb2xsYmFyUmVjdDsKKyAgICByZWN0Lm1vdmUoc2Nyb2xsYmFyT2Zm
c2V0KHNjcm9sbGJhcikpOworCisgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0
RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHJlY3QpOworfQorCitJbnRSZWN0IFJlbmRlckxheWVy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Cit7CisgICAgUmVuZGVy
VmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAg
IHJldHVybiBwYXJlbnRSZWN0OworCisgICAgSW50UmVjdCByZWN0ID0gdmlldy0+ZnJhbWVWaWV3
KCktPmNvbnZlcnRUb1JlbmRlcmVyKHJlbmRlcmVyKCksIHBhcmVudFJlY3QpOworICAgIHJlY3Qu
bW92ZSgtc2Nyb2xsYmFyT2Zmc2V0KHNjcm9sbGJhcikpOworICAgIHJldHVybiByZWN0OworfQor
CitJbnRQb2ludCBSZW5kZXJMYXllcjo6Y29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsYmFy
UG9pbnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHJlbmRlcmVyKCktPnZpZXco
KTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBzY3JvbGxiYXJQb2ludDsKKworICAg
IEludFBvaW50IHBvaW50ID0gc2Nyb2xsYmFyUG9pbnQ7CisgICAgcG9pbnQubW92ZShzY3JvbGxi
YXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0dXJuIHZpZXctPmZyYW1lVmlldygpLT5jb252
ZXJ0RnJvbVJlbmRlcmVyKHJlbmRlcmVyKCksIHBvaW50KTsKK30KKworSW50UG9pbnQgUmVuZGVy
TGF5ZXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxi
YXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBhcmVudFBvaW50KSBjb25zdAoreworICAg
IFJlbmRlclZpZXcqIHZpZXcgPSByZW5kZXJlcigpLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQor
ICAgICAgICByZXR1cm4gcGFyZW50UG9pbnQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IHZpZXct
PmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcihyZW5kZXJlcigpLCBwYXJlbnRQb2ludCk7
CisKKyAgICBwb2ludC5tb3ZlKC1zY3JvbGxiYXJPZmZzZXQoc2Nyb2xsYmFyKSk7CisgICAgcmV0
dXJuIHBvaW50OworfQorCitJbnRTaXplIFJlbmRlckxheWVyOjpzY3JvbGxiYXJPZmZzZXQoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0Cit7CisgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKKworICAgIGlmIChzY3JvbGxiYXIgPT0gbV92QmFyLmdldCgpKQorICAgICAg
ICByZXR1cm4gSW50U2l6ZShib3gtPndpZHRoKCkgLSBib3gtPmJvcmRlclJpZ2h0KCkgLSBzY3Jv
bGxiYXItPndpZHRoKCksIGJveC0+Ym9yZGVyVG9wKCkpOworCisgICAgaWYgKHNjcm9sbGJhciA9
PSBtX2hCYXIuZ2V0KCkpCisgICAgICAgIHJldHVybiBJbnRTaXplKGJveC0+Ym9yZGVyTGVmdCgp
LCBib3gtPmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIHNjcm9sbGJhci0+aGVpZ2h0
KCkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbnRTaXpl
KCk7Cit9CisKIHZvaWQgUmVuZGVyTGF5ZXI6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEludFJlY3Qgc2Ny
b2xsUmVjdCA9IHJlY3Q7CkBAIC0xODM1LDM0ICsxODk1LDI5IEBAIGJvb2wgUmVuZGVyTGF5ZXI6
OmlzUG9pbnRJblJlc2l6ZUNvbnRyb2woY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQpIGNv
bnN0CiAgICAgcmV0dXJuIHJlc2l6ZXJDb3JuZXJSZWN0KHRoaXMsIGxvY2FsQm91bmRzKS5jb250
YWlucyhsb2NhbFBvaW50KTsKIH0KICAgICAKLWJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVy
Zmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKK2Jvb2wgUmVuZGVyTGF5ZXI6Omhp
dFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9p
bnQmIGxvY2FsUG9pbnQpCiB7CiAgICAgaWYgKCFtX2hCYXIgJiYgIW1fdkJhciAmJiAoIXJlbmRl
cmVyKCktPmhhc092ZXJmbG93Q2xpcCgpIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnJlc2l6ZSgp
ID09IFJFU0laRV9OT05FKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUmVuZGVyQm94
KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBBU1NFUlQoYm94KTsKLQotICAgIGludCB4ID0gMDsK
LSAgICBpbnQgeSA9IDA7Ci0gICAgY29udmVydFRvTGF5ZXJDb29yZHMocm9vdCgpLCB4LCB5KTsK
LSAgICBJbnRSZWN0IGFic0JvdW5kcyh4LCB5LCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkp
OwogICAgIAogICAgIEludFJlY3QgcmVzaXplQ29udHJvbFJlY3Q7CiAgICAgaWYgKHJlbmRlcmVy
KCktPnN0eWxlKCktPnJlc2l6ZSgpICE9IFJFU0laRV9OT05FKSB7Ci0gICAgICAgIHJlc2l6ZUNv
bnRyb2xSZWN0ID0gcmVzaXplckNvcm5lclJlY3QodGhpcywgYWJzQm91bmRzKTsKLSAgICAgICAg
aWYgKHJlc2l6ZUNvbnRyb2xSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkKKyAgICAgICAg
cmVzaXplQ29udHJvbFJlY3QgPSByZXNpemVyQ29ybmVyUmVjdCh0aGlzLCBib3gtPmJvcmRlckJv
eFJlY3QoKSk7CisgICAgICAgIGlmIChyZXNpemVDb250cm9sUmVjdC5jb250YWlucyhsb2NhbFBv
aW50KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGludCByZXNpemVD
b250cm9sU2l6ZSA9IG1heChyZXNpemVDb250cm9sUmVjdC5oZWlnaHQoKSwgMCk7CiAKICAgICBp
ZiAobV92QmFyKSB7Ci0gICAgICAgIEludFJlY3QgdkJhclJlY3QoYWJzQm91bmRzLnJpZ2h0KCkg
LSBib3gtPmJvcmRlclJpZ2h0KCkgLSBtX3ZCYXItPndpZHRoKCksIAotICAgICAgICAgICAgICAg
ICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3gtPmJvcmRlclRvcCgpLAorICAgICAgICBJbnRS
ZWN0IHZCYXJSZWN0KGJveC0+d2lkdGgoKSAtIGJveC0+Ym9yZGVyUmlnaHQoKSAtIG1fdkJhci0+
d2lkdGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgYm94LT5ib3JkZXJUb3AoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgYWJzQm91bmRzLmhlaWdodCgpIC0gKGJveC0+Ym9yZGVyVG9wKCkgKyBib3gtPmJv
cmRlckJvdHRvbSgpKSAtIChtX2hCYXIgPyBtX2hCYXItPmhlaWdodCgpIDogcmVzaXplQ29udHJv
bFNpemUpKTsKLSAgICAgICAgaWYgKHZCYXJSZWN0LmNvbnRhaW5zKHJlc3VsdC5wb2ludCgpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgIGJveC0+aGVpZ2h0KCkgLSAoYm94LT5ib3JkZXJU
b3AoKSArIGJveC0+Ym9yZGVyQm90dG9tKCkpIC0gKG1faEJhciA/IG1faEJhci0+aGVpZ2h0KCkg
OiByZXNpemVDb250cm9sU2l6ZSkpOworICAgICAgICBpZiAodkJhclJlY3QuY29udGFpbnMobG9j
YWxQb2ludCkpIHsKICAgICAgICAgICAgIHJlc3VsdC5zZXRTY3JvbGxiYXIobV92QmFyLmdldCgp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xODcwLDExICsxOTI1
LDExIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKEhpdFRlc3RS
ZXN1bHQmIHJlc3VsdCkKIAogICAgIHJlc2l6ZUNvbnRyb2xTaXplID0gbWF4KHJlc2l6ZUNvbnRy
b2xSZWN0LndpZHRoKCksIDApOwogICAgIGlmIChtX2hCYXIpIHsKLSAgICAgICAgSW50UmVjdCBo
QmFyUmVjdChhYnNCb3VuZHMueCgpICsgYm94LT5ib3JkZXJMZWZ0KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgYWJzQm91bmRzLmJvdHRvbSgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1f
aEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYWJzQm91bmRzLndpZHRo
KCkgLSAoYm94LT5ib3JkZXJMZWZ0KCkgKyBib3gtPmJvcmRlclJpZ2h0KCkpIC0gKG1fdkJhciA/
IG1fdkJhci0+d2lkdGgoKSA6IHJlc2l6ZUNvbnRyb2xTaXplKSwKKyAgICAgICAgSW50UmVjdCBo
QmFyUmVjdChib3gtPmJvcmRlckxlZnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib3gt
PmhlaWdodCgpIC0gYm94LT5ib3JkZXJCb3R0b20oKSAtIG1faEJhci0+aGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgYm94LT53aWR0aCgpIC0gKGJveC0+Ym9yZGVyTGVmdCgpICsg
Ym94LT5ib3JkZXJSaWdodCgpKSAtIChtX3ZCYXIgPyBtX3ZCYXItPndpZHRoKCkgOiByZXNpemVD
b250cm9sU2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oQmFyLT5oZWlnaHQoKSk7
Ci0gICAgICAgIGlmIChoQmFyUmVjdC5jb250YWlucyhyZXN1bHQucG9pbnQoKSkpIHsKKyAgICAg
ICAgaWYgKGhCYXJSZWN0LmNvbnRhaW5zKGxvY2FsUG9pbnQpKSB7CiAgICAgICAgICAgICByZXN1
bHQuc2V0U2Nyb2xsYmFyKG1faEJhci5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaCBi
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKaW5kZXggOTcxYzRkMS4uMTEzODY1OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAorKysgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5oCkBAIC0yNjQsNyArMjY0LDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBwb3NpdGlvbk92ZXJmbG93Q29udHJvbHMoaW50IHR4LCBpbnQgdHkpOwogICAgIGJv
b2wgaXNQb2ludEluUmVzaXplQ29udHJvbChjb25zdCBJbnRQb2ludCYgYWJzb2x1dGVQb2ludCkg
Y29uc3Q7Ci0gICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0Jik7
CisgICAgYm9vbCBoaXRUZXN0T3ZlcmZsb3dDb250cm9scyhIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SW50UG9pbnQmIGxvY2FsUG9pbnQpOwogICAgIEludFNpemUgb2Zmc2V0RnJvbVJlc2l6ZUNvcm5l
cihjb25zdCBJbnRQb2ludCYgYWJzb2x1dGVQb2ludCkgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50
T3ZlcmZsb3dDb250cm9scyhHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCk7CkBAIC00NzYsMTEgKzQ3NiwxOCBAQCBwcml2YXRlOgogCiAg
ICAgYm9vbCBzaG91bGRCZU5vcm1hbEZsb3dPbmx5KCkgY29uc3Q7IAogCisgICAgLy8gU2Nyb2xs
QmFyQ2xpZW50IGludGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwotCisgICAg
dmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25z
dCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRSZWN0
IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNj
cm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQm
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdU
b1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAg
IAorICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0Owor
ICAgIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZs
b3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CiAKICAgICB2b2lkIGNoaWxkVmlzaWJpbGl0eUNo
YW5nZWQoYm9vbCBuZXdWaXNpYmlsaXR5KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
aW5kZXggODNjNTY5ZS4uYjRhN2U5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAK
QEAgLTM3MCw3ICszNzAsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJbk92ZXJmbG93
Q29udHJvbChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCBfeCwgaW50CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEludFJlY3QgdmVydFJlY3QoX3R4ICsgd2lkdGgoKSAtIGJvcmRlclJp
Z2h0KCkgLSBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICBfdHksCisgICAg
ICAgICAgICAgICAgICAgICBfdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgICAgICAgICAgICAg
IG1fdkJhci0+d2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gYm9yZGVy
VG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAKQEAgLTYyMyw2ICs2MjMsNjQgQEAgdm9pZCBSZW5k
ZXJMaXN0Qm94OjppbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwg
Y29uc3QgSW50UmVjdCYKICAgICByZXBhaW50UmVjdGFuZ2xlKHNjcm9sbFJlY3QpOwogfQogCitJ
bnRSZWN0IFJlbmRlckxpc3RCb3g6OmNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFyUmVj
dCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiB2aWV3ID0gdGhpcy0+dmlldygpOworICAgIGlm
ICghdmlldykKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJhclJlY3Q7CisKKyAgICBJbnRSZWN0IHJl
Y3QgPSBzY3JvbGxiYXJSZWN0OworCisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0g
Ym9yZGVyUmlnaHQoKSAtIHNjcm9sbGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYmFyVG9w
ID0gYm9yZGVyVG9wKCk7CisgICAgcmVjdC5tb3ZlKHNjcm9sbGJhckxlZnQsIHNjcm9sbGJhclRv
cCk7CisKKyAgICByZXR1cm4gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRGcm9tUmVuZGVyZXIo
dGhpcywgcmVjdCk7Cit9CisKK0ludFJlY3QgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250
YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAoreworICAgIFJlbmRlclZpZXcqIHZpZXcgPSB0aGlz
LT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gcGFyZW50UmVjdDsKKwor
ICAgIEludFJlY3QgcmVjdCA9IHZpZXctPmZyYW1lVmlldygpLT5jb252ZXJ0VG9SZW5kZXJlcih0
aGlzLCBwYXJlbnRSZWN0KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJv
cmRlclJpZ2h0KCkgLSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9
IGJvcmRlclRvcCgpOworICAgIHJlY3QubW92ZSgtc2Nyb2xsYmFyTGVmdCwgLXNjcm9sbGJhclRv
cCk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0ludFBvaW50IFJlbmRlckxpc3RCb3g6OmNvbnZl
cnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAoreworICAgIFJlbmRlclZp
ZXcqIHZpZXcgPSB0aGlzLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyUG9pbnQ7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IHNjcm9sbGJhclBvaW50Owor
CisgICAgaW50IHNjcm9sbGJhckxlZnQgPSB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIHNjcm9s
bGJhci0+d2lkdGgoKTsKKyAgICBpbnQgc2Nyb2xsYmFyVG9wID0gYm9yZGVyVG9wKCk7CisgICAg
cG9pbnQubW92ZShzY3JvbGxiYXJMZWZ0LCBzY3JvbGxiYXJUb3ApOworCisgICAgcmV0dXJuIHZp
ZXctPmZyYW1lVmlldygpLT5jb252ZXJ0RnJvbVJlbmRlcmVyKHRoaXMsIHBvaW50KTsKK30KKwor
SW50UG9pbnQgUmVuZGVyTGlzdEJveDo6Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0Cit7CisgICAgUmVuZGVyVmlldyogdmlldyA9IHRoaXMtPnZpZXcoKTsKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBwYXJlbnRQb2ludDsKKworICAgIEludFBvaW50IHBv
aW50ID0gdmlldy0+ZnJhbWVWaWV3KCktPmNvbnZlcnRUb1JlbmRlcmVyKHRoaXMsIHBhcmVudFBv
aW50KTsKKworICAgIGludCBzY3JvbGxiYXJMZWZ0ID0gd2lkdGgoKSAtIGJvcmRlclJpZ2h0KCkg
LSBzY3JvbGxiYXItPndpZHRoKCk7CisgICAgaW50IHNjcm9sbGJhclRvcCA9IGJvcmRlclRvcCgp
OworICAgIHBvaW50Lm1vdmUoLXNjcm9sbGJhckxlZnQsIC1zY3JvbGxiYXJUb3ApOworICAgIHJl
dHVybiBwb2ludDsKK30KKwogUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlckxpc3RCb3g6OmNy
ZWF0ZVNjcm9sbGJhcigpCiB7CiAgICAgUmVmUHRyPFNjcm9sbGJhcj4gd2lkZ2V0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oCmluZGV4IGI4YzA1NDAuLmRkMjU3YTggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmgKQEAgLTEwMSw2ICsxMDEsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYp
OwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gV2UgZG9u
J3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJZiB3ZSBkaWQgdGhpcyB3b3Vs
ZCBoYXZlIHRvIGNoYW5nZS4KKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21TY3JvbGxi
YXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgSW50UG9pbnQgY29u
dmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CiAKICAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJv
b2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xs
YmFyKCk7Cg==
</data>
<flag name="review"
          id="16678"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>