<?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>101516</bug_id>
          
          <creation_ts>2012-11-07 15:25:54 -0800</creation_ts>
          <short_desc>Handle gesture events on scrollbars.</short_desc>
          <delta_ts>2012-11-16 10:18:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Robert Flack">flackr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>761100</commentid>
    <comment_count>0</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-07 15:25:54 -0800</bug_when>
    <thetext>Handle gesture events on scrollbars.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761103</commentid>
    <comment_count>1</comment_count>
      <attachid>172881</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-07 15:27:23 -0800</bug_when>
    <thetext>Created attachment 172881
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764564</commentid>
    <comment_count>2</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-12 10:47:57 -0800</bug_when>
    <thetext>This makes touching and dragging the scrollbar behave appropriately rather than scrolling the container div. in the opposite direction. Please take a look, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765564</commentid>
    <comment_count>3</comment_count>
      <attachid>172881</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-11-13 07:12:16 -0800</bug_when>
    <thetext>Comment on attachment 172881
Patch

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

Looks generally good. Some requests for a final round.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Handle gesture events on scrollbars.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=101516
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Test: fast/events/touch/gesture/gesture-scrollbar.html
&gt; +
&gt; +        * page/EventHandler.cpp:

Please improve your changelog with some more details about motivation, advantages, etc of your change.

&gt; Source/WebCore/page/EventHandler.cpp:387
&gt; +    m_scrollGestureHandlingScrollbar = 0;

I think it would read better a m_scrollbarHandlingScrollGesture .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765714</commentid>
    <comment_count>4</comment_count>
      <attachid>173915</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-13 09:55:47 -0800</bug_when>
    <thetext>Created attachment 173915
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765715</commentid>
    <comment_count>5</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-13 09:56:23 -0800</bug_when>
    <thetext>Thanks for the review! Comments inline.

(In reply to comment #3)
&gt; (From update of attachment 172881 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172881&amp;action=review
&gt; 
&gt; Looks generally good. Some requests for a final round.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Handle gesture events on scrollbars.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=101516
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        Test: fast/events/touch/gesture/gesture-scrollbar.html
&gt; &gt; +
&gt; &gt; +        * page/EventHandler.cpp:
&gt; 
&gt; Please improve your changelog with some more details about motivation, advantages, etc of your change.

Done.

&gt;
&gt; &gt; Source/WebCore/page/EventHandler.cpp:387
&gt; &gt; +    m_scrollGestureHandlingScrollbar = 0;
&gt; 
&gt; I think it would read better a m_scrollbarHandlingScrollGesture .

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765744</commentid>
    <comment_count>6</comment_count>
      <attachid>173915</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-11-13 10:10:09 -0800</bug_when>
    <thetext>Comment on attachment 173915
Patch

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

Did you check how does this added test behavior for ports that disable scrollbars?

&gt; Source/WebCore/platform/Scrollbar.cpp:377
&gt; +    if (evt.type() == PlatformEvent::GestureTapDown) {
&gt; +        setPressedPart(theme()-&gt;hitTest(this, evt.position()));
&gt; +        m_pressedPos = (orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y());
&gt; +        return true;
&gt; +    }
&gt; +    if (m_pressedPart == ThumbPart &amp;&amp; (evt.type() == PlatformEvent::GestureTapDownCancel || evt.type() == PlatformEvent::GestureScrollBegin))
&gt; +        return true;
&gt; +    if (m_pressedPart == ThumbPart &amp;&amp; evt.type() == PlatformEvent::GestureScrollUpdate) {
&gt; +        moveThumb(m_pressedPos + (m_orientation == HorizontalScrollbar ? evt.deltaX() : evt.deltaY()), false);
&gt; +        return true;
&gt; +    }
&gt; +    if (evt.type() == PlatformEvent::GestureTap) {
&gt; +        if (m_pressedPart == ThumbPart || m_pressedPart == NoPart)
&gt; +            return false;
&gt; +        if (m_scrollableArea)
&gt; +            return m_scrollableArea-&gt;scroll(pressedPartScrollDirection(), pressedPartScrollGranularity());
&gt; +    }

By looking at this, would it look nicer if you handle all type&apos;s in a switch/case block instead?

&gt; LayoutTests/fast/events/touch/gesture/gesture-scrollbar.html:51
&gt; +function runTest()
&gt; +{
&gt; +    internals.settings.setMockScrollbarsEnabled(true);

Did you check how this added test behavior for ports that disable scrollbars? AH, maybe setMockScrollbarsEnabled take care of it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766104</commentid>
    <comment_count>7</comment_count>
      <attachid>174006</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-13 15:18:12 -0800</bug_when>
    <thetext>Created attachment 174006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766110</commentid>
    <comment_count>8</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-13 15:34:37 -0800</bug_when>
    <thetext>Thanks again.

(In reply to comment #6)
&gt; (From update of attachment 173915 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=173915&amp;action=review
&gt; 
&gt; Did you check how does this added test behavior for ports that disable scrollbars?
&gt; 
&gt; &gt; Source/WebCore/platform/Scrollbar.cpp:377
&gt; &gt; +    if (evt.type() == PlatformEvent::GestureTapDown) {
&gt; &gt; +        setPressedPart(theme()-&gt;hitTest(this, evt.position()));
&gt; &gt; +        m_pressedPos = (orientation() == HorizontalScrollbar ? convertFromContainingWindow(evt.position()).x() : convertFromContainingWindow(evt.position()).y());
&gt; &gt; +        return true;
&gt; &gt; +    }
&gt; &gt; +    if (m_pressedPart == ThumbPart &amp;&amp; (evt.type() == PlatformEvent::GestureTapDownCancel || evt.type() == PlatformEvent::GestureScrollBegin))
&gt; &gt; +        return true;
&gt; &gt; +    if (m_pressedPart == ThumbPart &amp;&amp; evt.type() == PlatformEvent::GestureScrollUpdate) {
&gt; &gt; +        moveThumb(m_pressedPos + (m_orientation == HorizontalScrollbar ? evt.deltaX() : evt.deltaY()), false);
&gt; &gt; +        return true;
&gt; &gt; +    }
&gt; &gt; +    if (evt.type() == PlatformEvent::GestureTap) {
&gt; &gt; +        if (m_pressedPart == ThumbPart || m_pressedPart == NoPart)
&gt; &gt; +            return false;
&gt; &gt; +        if (m_scrollableArea)
&gt; &gt; +            return m_scrollableArea-&gt;scroll(pressedPartScrollDirection(), pressedPartScrollGranularity());
&gt; &gt; +    }
&gt; 
&gt; By looking at this, would it look nicer if you handle all type&apos;s in a switch/case block instead?

Done. Also, I there was some incorrect handling of the gesture events. Originally I had used the event position, but when running LayoutTests sending scroll updates doesn&apos;t change the test event position and this wouldn&apos;t work well if we wanted to do things like fling. Deltas are however incremental so I have to accumulate these.

&gt; 
&gt; &gt; LayoutTests/fast/events/touch/gesture/gesture-scrollbar.html:51
&gt; &gt; +function runTest()
&gt; &gt; +{
&gt; &gt; +    internals.settings.setMockScrollbarsEnabled(true);
&gt; 
&gt; Did you check how this added test behavior for ports that disable scrollbars? AH, maybe setMockScrollbarsEnabled take care of it...

Are there ports which disable scrollbars or are we talking about overlay scrollbars (in which case cr-android seems to be passing)? It seems there is a mouse thumb dragging test in scrollbars/scrollbar-drag-thumb-with-large-content.html and no platform specific expectations / exclusions. setMockScrollbarsEnabled as far as I can see from the layout test it only changes the style of the root scrollbars, so I&apos;ve added a style to the scrollbars to ensure consistent sizing in all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766835</commentid>
    <comment_count>9</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-11-14 06:40:13 -0800</bug_when>
    <thetext>
&gt; &gt; Did you check how this added test behavior for ports that disable scrollbars? AH, maybe setMockScrollbarsEnabled take care of it...
&gt; 
&gt; Are there ports which disable scrollbars or are we talking about overlay scrollbars (in which case cr-android seems to be passing)? It seems there is a mouse thumb dragging test in scrollbars/scrollbar-drag-thumb-with-large-content.html and no platform specific expectations / exclusions. setMockScrollbarsEnabled as far as I can see from the layout test it only changes the style of the root scrollbars, so I&apos;ve added a style to the scrollbars to ensure consistent sizing in all platforms.

BlackBerry port does completely disable scrollbars, and delegating drawing it to the client, afaict.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768499</commentid>
    <comment_count>10</comment_count>
      <attachid>174517</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-15 14:31:30 -0800</bug_when>
    <thetext>Created attachment 174517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768501</commentid>
    <comment_count>11</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-15 14:33:02 -0800</bug_when>
    <thetext>In the 4th patch I added cancelling flings. Since EventHandler knows if a scrollbar is handling gestures we can query that on GestureFlingStart to know whether to cancel the fling. Alternately if we know the scrollbar direction we could rail and amplify the fling but I think this will work as a first pass. Please take a look, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769286</commentid>
    <comment_count>12</comment_count>
      <attachid>174517</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-11-16 08:08:53 -0800</bug_when>
    <thetext>Comment on attachment 174517
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2681
&gt; +bool EventHandler::isScrollbarHandlingGestures()

const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769311</commentid>
    <comment_count>13</comment_count>
      <attachid>174694</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-16 08:33:56 -0800</bug_when>
    <thetext>Created attachment 174694
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769312</commentid>
    <comment_count>14</comment_count>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-16 08:34:23 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 174517 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174517&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2681
&gt; &gt; +bool EventHandler::isScrollbarHandlingGestures()
&gt; 
&gt; const

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769321</commentid>
    <comment_count>15</comment_count>
      <attachid>174694</attachid>
    <who name="Robert Flack">flackr</who>
    <bug_when>2012-11-16 08:44:10 -0800</bug_when>
    <thetext>Comment on attachment 174694
Patch

nit from previous review fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769412</commentid>
    <comment_count>16</comment_count>
      <attachid>174694</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 10:18:07 -0800</bug_when>
    <thetext>Comment on attachment 174694
Patch

Clearing flags on attachment: 174694

Committed r134965: &lt;http://trac.webkit.org/changeset/134965&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769413</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-16 10:18:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172881</attachid>
            <date>2012-11-07 15:27:23 -0800</date>
            <delta_ts>2012-11-13 09:55:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101516-20121107182533.patch</filename>
            <type>text/plain</type>
            <size>19196</size>
            <attacher name="Robert Flack">flackr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE5OTA0MTgwYjk5NWU5
MWQ4N2ViMTJlOWIyMDA5NGQ1NjBhMTIwNi4uYTQ1ZThlZmVlNDcyNWU1MTc3NjllZTJhMDEzNzgy
ODdkMjQyNzI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTExLTA3ICBSb2Jl
cnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJl
IGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNj
cm9sbGJhci5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Z2VzdHVyZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXI6Om1vdXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZURvd24p
OgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6aGl0VGVzdCk6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Nj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmg6CisgICAgICAgIChTY3JvbGxiYXJU
aGVtZVFTdHlsZSk6CisKIDIwMTItMTEtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CiAKICAgICAgICAgRml4IGxheWVyIGJvcmRlcnMgdG8gY2xlYW5pbmcgYXBwZWFy
IGFuZCBkaXNhcHBlYXIgb24gc3dpdGNoaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggOTIwNTVhMTIzM2E3ODQ2OTUyYjdiYmNmYzExYWQ3M2M1YzgzZTk4Zi4uNmNkOWRi
ZGI2ZWZlMWEzMTNkOTAzZmU1ODA2MzQyYzhlNjhiMzJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMzg0LDYgKzM4NCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVh
cigpCiAjZW5kaWYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgbV9zY3JvbGxHZXN0
dXJlSGFuZGxpbmdOb2RlID0gMDsKKyAgICBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ1Njcm9sbGJh
ciA9IDA7CiAjZW5kaWYKICAgICBtX21heE1vdXNlTW92ZWREdXJhdGlvbiA9IDA7CiAgICAgbV9i
YXNlRXZlbnRUeXBlID0gUGxhdGZvcm1FdmVudDo6Tm9UeXBlOwpAQCAtMjUwNiw4ICsyNTA3LDEx
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1H
ZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Tm9kZSogZXZlbnRUYXJnZXQgPSAwOwotICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBs
YXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgfHwgZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKQorICAgIFNjcm9sbGJhciogc2Nyb2xs
YmFyID0gMDsKKyAgICBpZiAoZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpH
ZXN0dXJlU2Nyb2xsRW5kIHx8IGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6
R2VzdHVyZVNjcm9sbFVwZGF0ZSkgeworICAgICAgICBzY3JvbGxiYXIgPSBtX3Njcm9sbEdlc3R1
cmVIYW5kbGluZ1Njcm9sbGJhci5nZXQoKTsKICAgICAgICAgZXZlbnRUYXJnZXQgPSBtX3Njcm9s
bEdlc3R1cmVIYW5kbGluZ05vZGUuZ2V0KCk7CisgICAgfQogCiAgICAgSW50UG9pbnQgYWRqdXN0
ZWRQb2ludCA9IGdlc3R1cmVFdmVudC5wb3NpdGlvbigpOwogICAgIEhpdFRlc3RSZXF1ZXN0OjpI
aXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpUb3VjaEV2ZW50OwpA
QCAtMjUyNSwxMCArMjUyOSwyNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlR2VzdHVyZUV2
ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQpCiAgICAgaWYgKCFz
aG91bGRHZXN0dXJlc1RyaWdnZXJBY3RpdmUoKSkKICAgICAgICAgaGl0VHlwZSB8PSBIaXRUZXN0
UmVxdWVzdDo6UmVhZE9ubHk7CiAKLSAgICBpZiAoIWV2ZW50VGFyZ2V0IHx8ICEoaGl0VHlwZSAm
IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSkpIHsKKyAgICBpZiAoKCFzY3JvbGxiYXIgJiYgIWV2
ZW50VGFyZ2V0KSB8fCAhKGhpdFR5cGUgJiBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkpKSB7CiAg
ICAgICAgIEludFBvaW50IGhpdFRlc3RQb2ludCA9IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9D
b250ZW50cyhhZGp1c3RlZFBvaW50KTsKLSAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBo
aXRUZXN0UmVzdWx0QXRQb2ludChoaXRUZXN0UG9pbnQsIGZhbHNlLCBmYWxzZSwgRG9udEhpdFRl
c3RTY3JvbGxiYXJzLCBoaXRUeXBlKTsKKyAgICAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBo
aXRUZXN0UmVzdWx0QXRQb2ludChoaXRUZXN0UG9pbnQsIGZhbHNlLCBmYWxzZSwgU2hvdWxkSGl0
VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOwogICAgICAgICBldmVudFRhcmdldCA9IHJlc3VsdC50
YXJnZXROb2RlKCk7CisgICAgICAgIGlmICghc2Nyb2xsYmFyKSB7CisgICAgICAgICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCk7CisgICAgICAgICAgICBzY3JvbGxiYXIgPSB2
aWV3ID8gdmlldy0+c2Nyb2xsYmFyQXRQb2ludChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSkgOiAw
OworICAgICAgICB9CisgICAgICAgIGlmICghc2Nyb2xsYmFyKQorICAgICAgICAgICAgc2Nyb2xs
YmFyID0gcmVzdWx0LnNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlmIChzY3JvbGxiYXIpIHsK
KyAgICAgICAgYm9vbCBldmVudFN3YWxsb3dlZCA9IHNjcm9sbGJhci0+Z2VzdHVyZUV2ZW50KGdl
c3R1cmVFdmVudCk7CisgICAgICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3Jt
RXZlbnQ6Okdlc3R1cmVTY3JvbGxCZWdpbiAmJiBldmVudFN3YWxsb3dlZCkKKyAgICAgICAgICAg
IG1fc2Nyb2xsR2VzdHVyZUhhbmRsaW5nU2Nyb2xsYmFyID0gc2Nyb2xsYmFyOworICAgICAgICBl
bHNlIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxFbmQgfHwgIWV2ZW50U3dhbGxvd2VkKQorICAgICAgICAgICAgbV9zY3JvbGxHZXN0dXJlSGFu
ZGxpbmdTY3JvbGxiYXIgPSAwOworCisgICAgICAgIGlmIChldmVudFN3YWxsb3dlZCkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChldmVudFRhcmdldCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggOTNjNmIxMGViOTg3NDRmYmY1NjdhODE5ZjI4
MTY4ZjMyMmExYzFjOC4uMjVmMjY2NTBiNjQxODc5NWRmZWU5NjNiMGViYjcxZjlmYzkzN2U4NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC00NTcsNiArNDU3LDcgQEAgcHJpdmF0
ZToKIAogI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykKICAgICBSZWZQdHI8Tm9kZT4gbV9zY3Jv
bGxHZXN0dXJlSGFuZGxpbmdOb2RlOworICAgIFJlZlB0cjxTY3JvbGxiYXI+IG1fc2Nyb2xsR2Vz
dHVyZUhhbmRsaW5nU2Nyb2xsYmFyOwogI2VuZGlmCiAKICAgICBkb3VibGUgbV9tYXhNb3VzZU1v
dmVkRHVyYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAppbmRleCA4ZmE0
MTdjNmIzZGIwOTZjZTNhYTE3ZjE0MTEzOTIyYzQ5MzAwODY1Li4yMzY1YTJmMGVhYmQyMTdmYTk4
MzE2YmY0YmQ3NTE0ODJkMzk2MDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5j
cHAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisjaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKKyNlbmRpZgorCiAvLyBGSVhNRTogVGhlIGZvbGxvd2lu
ZyAjaW5jbHVkZXMgYXJlIGEgbGF5ZXJpbmcgdmlvbGF0aW9uIGFuZCBzaG91bGQgYmUgcmVtb3Zl
ZC4KICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNj
cm9sbGJhci5oIgpAQCAtMzUxLDYgKzM1NSwzMiBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3Nl
ZFBhcnQoU2Nyb2xsYmFyUGFydCBwYXJ0KQogICAgICAgICB0aGVtZSgpLT5pbnZhbGlkYXRlUGFy
dCh0aGlzLCBtX2hvdmVyZWRQYXJ0KTsKIH0KIAorI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5UUykK
K2Jvb2wgU2Nyb2xsYmFyOjpnZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQm
IGV2dCkKK3sKKyAgICBpZiAoZXZ0LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFw
RG93bikgeworICAgICAgICBzZXRQcmVzc2VkUGFydCh0aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2
dC5wb3NpdGlvbigpKSk7CisgICAgICAgIG1fcHJlc3NlZFBvcyA9IChvcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIgPyBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBv
c2l0aW9uKCkpLngoKSA6IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24o
KSkueSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChtX3ByZXNzZWRQ
YXJ0ID09IFRodW1iUGFydCAmJiAoZXZ0LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJl
VGFwRG93bkNhbmNlbCB8fCBldnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxCZWdpbikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09
IFRodW1iUGFydCAmJiBldnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxV
cGRhdGUpIHsKKyAgICAgICAgbW92ZVRodW1iKG1fcHJlc3NlZFBvcyArIChtX29yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBldnQuZGVsdGFYKCkgOiBldnQuZGVsdGFZKCkpLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoZXZ0LnR5cGUoKSA9
PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwKSB7CisgICAgICAgIGlmIChtX3ByZXNzZWRQYXJ0
ID09IFRodW1iUGFydCB8fCBtX3ByZXNzZWRQYXJ0ID09IE5vUGFydCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+c2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9u
KCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSk7CisgICAgfQorICAgIHNldFByZXNz
ZWRQYXJ0KE5vUGFydCk7CisgICAgbV9wcmVzc2VkUG9zID0gMDsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisjZW5kaWYKKwogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7
CkBAIC0zNjgsNyArMzk4LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQoY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldnQpCiAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0KQog
ICAgICAgICBtX3ByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS54KCkgOiBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpLnkoKSk7CiAKLSAgICBT
Y3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2dCk7CisgICAgU2Ny
b2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBldnQucG9zaXRpb24oKSk7
CiAgICAgaWYgKHBhcnQgIT0gbV9ob3ZlcmVkUGFydCkgewogICAgICAgICBpZiAobV9wcmVzc2Vk
UGFydCAhPSBOb1BhcnQpIHsKICAgICAgICAgICAgIGlmIChwYXJ0ID09IG1fcHJlc3NlZFBhcnQp
IHsKQEAgLTQxNCw3ICs0NDQsNyBAQCBib29sIFNjcm9sbGJhcjo6bW91c2VVcChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCiAgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpIHsK
ICAgICAgICAgLy8gbV9ob3ZlcmVkUGFydCB3b24ndCBiZSB1cGRhdGVkIHVudGlsIHRoZSBuZXh0
IG1vdXNlTW92ZWQgb3IgbW91c2VEb3duLCBzbyB3ZSBoYXZlIHRvIGhpdCB0ZXN0CiAgICAgICAg
IC8vIHRvIHJlYWxseSBrbm93IGlmIHRoZSBtb3VzZSBoYXMgZXhpdGVkIHRoZSBzY3JvbGxiYXIg
b24gYSBtb3VzZVVwLgotICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVtZSgpLT5oaXRU
ZXN0KHRoaXMsIG1vdXNlRXZlbnQpOworICAgICAgICBTY3JvbGxiYXJQYXJ0IHBhcnQgPSB0aGVt
ZSgpLT5oaXRUZXN0KHRoaXMsIG1vdXNlRXZlbnQucG9zaXRpb24oKSk7CiAgICAgICAgIGlmIChw
YXJ0ID09IE5vUGFydCkKICAgICAgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPm1vdXNlRXhpdGVk
U2Nyb2xsYmFyKHRoaXMpOwogICAgIH0KQEAgLTQzMSw3ICs0NjEsNyBAQCBib29sIFNjcm9sbGJh
cjo6bW91c2VEb3duKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogICAgIGlmIChldnQu
YnV0dG9uKCkgPT0gUmlnaHRCdXR0b24pCiAgICAgICAgIHJldHVybiB0cnVlOyAvLyBGSVhNRTog
SGFuZGxlZCBhcyBjb250ZXh0IG1lbnUgYnkgUXQgcmlnaHQgbm93LiAgU2hvdWxkIGp1c3QgYXZv
aWQgZXZlbiBjYWxsaW5nIHRoaXMgbWV0aG9kIG9uIGEgcmlnaHQgY2xpY2sgdGhvdWdoLgogCi0g
ICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBldnQpKTsKKyAgICBzZXRQ
cmVzc2VkUGFydCh0aGVtZSgpLT5oaXRUZXN0KHRoaXMsIGV2dC5wb3NpdGlvbigpKSk7CiAgICAg
aW50IHByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8g
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS54KCkgOiBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpLnkoKSk7CiAgICAgCiAgICAgaWYg
KChtX3ByZXNzZWRQYXJ0ID09IEJhY2tUcmFja1BhcnQgfHwgbV9wcmVzc2VkUGFydCA9PSBGb3J3
YXJkVHJhY2tQYXJ0KSAmJiB0aGVtZSgpLT5zaG91bGRDZW50ZXJPblRodW1iKHRoaXMsIGV2dCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKaW5kZXggNTc4ZjcwOTg1MGIzZmE5MDlh
M2E3NjQzNTg2NzcxNGE4N2M4NDU5OS4uYTYyODI4NmIwOTgzMTQ4ZThkZWY0Y2MzMjNlZGIwNjU1
ODE2ZDZmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgKQEAgLTQxLDYgKzQxLDEw
IEBAIGNsYXNzIFBsYXRmb3JtTW91c2VFdmVudDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xh
c3MgU2Nyb2xsYmFyVGhlbWU7CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitjbGFzcyBQ
bGF0Zm9ybUdlc3R1cmVFdmVudDsKKyNlbmRpZgorCiBjbGFzcyBTY3JvbGxiYXIgOiBwdWJsaWMg
V2lkZ2V0LAogICAgICAgICAgICAgICAgICAgcHVibGljIFNjcm9sbGJhclRoZW1lQ2xpZW50IHsK
IApAQCAtMTIzLDYgKzEyNywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzV2luZG93QWN0aXZl
KCkgY29uc3Q7CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCisgICAgYm9vbCBnZXN0dXJl
RXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyNlbmRpZgorCiAgICAgLy8gVGhl
c2UgbWV0aG9kcyBhcmUgdXNlZCBmb3IgcGxhdGZvcm0gc2Nyb2xsYmFycyB0byBnaXZlIDpob3Zl
ciBmZWVkYmFjay4gIFRoZXkgd2lsbCBub3QgZ2V0IGNhbGxlZAogICAgIC8vIHdoZW4gdGhlIG1v
dXNlIHdlbnQgZG93biBpbiBhIHNjcm9sbGJhciwgc2luY2UgaXQgaXMgYXNzdW1lZCB0aGUgc2Ny
b2xsYmFyIHdpbGwgc3RhcnQKICAgICAvLyBncmFiYmluZyBhbGwgZXZlbnRzIGluIHRoYXQgY2Fz
ZSBhbnl3YXkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJU
aGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaAppbmRleCBj
Y2NjMmY5MjU2ZmQzMjI4ZDM0MWYzYzZlOTE2NThiYzlhNTU1ZGUyLi4wMWFiMDllOTE1N2M2MDVm
OGQ0NzYxYjU4ZTkwYjU2ZGVlMWRmNmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IH07CiAKICAgICB2aXJ0
dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQorICAgIHZpcnR1YWwgU2Nyb2xs
YmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UG9pbnQmKSB7
IHJldHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlja25l
c3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7IHJldHVybiAwOyB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29t
cG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmNwcAppbmRleCBiNzg0Y2MzM2RlZTQ2MGE4Zjc5MzIwYTQ2YTM2ZWVkMDgzZTAxZjI1Li5k
MDJhOGFhYjlhZDc4MzJlYzI2ZDBlYWM0NTYxMGViYWQ5NzljNGM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCkBAIC0xMTUs
NDEgKzExNSw0MSBAQCBib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbgogICAgIHJldHVybiB0cnVlOwog
fQogCi1TY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpoaXRUZXN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0
KQorU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3JvbGxi
YXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCiB7CiAg
ICAgU2Nyb2xsYmFyUGFydCByZXN1bHQgPSBOb1BhcnQ7CiAgICAgaWYgKCFzY3JvbGxiYXItPmVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFBvaW50IG1vdXNlUG9z
aXRpb24gPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRp
b24oKSk7Ci0gICAgbW91c2VQb3NpdGlvbi5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSk7CisgICAgSW50UG9pbnQgdGVzdFBvc2l0aW9uID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3cocG9zaXRpb24pOworICAgIHRlc3RQb3NpdGlvbi5tb3ZlKHNjcm9s
bGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CiAgICAgCi0gICAgaWYgKCFzY3JvbGxiYXItPmZy
YW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGlmICghc2Nyb2xsYmFyLT5m
cmFtZVJlY3QoKS5jb250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICByZXR1cm4gTm9QYXJ0
OwogCiAgICAgcmVzdWx0ID0gU2Nyb2xsYmFyQkdQYXJ0OwogCiAgICAgSW50UmVjdCB0cmFjayA9
IHRyYWNrUmVjdChzY3JvbGxiYXIpOwotICAgIGlmICh0cmFjay5jb250YWlucyhtb3VzZVBvc2l0
aW9uKSkgeworICAgIGlmICh0cmFjay5jb250YWlucyh0ZXN0UG9zaXRpb24pKSB7CiAgICAgICAg
IEludFJlY3QgYmVmb3JlVGh1bWJSZWN0OwogICAgICAgICBJbnRSZWN0IHRodW1iUmVjdDsKICAg
ICAgICAgSW50UmVjdCBhZnRlclRodW1iUmVjdDsKICAgICAgICAgc3BsaXRUcmFjayhzY3JvbGxi
YXIsIHRyYWNrLCBiZWZvcmVUaHVtYlJlY3QsIHRodW1iUmVjdCwgYWZ0ZXJUaHVtYlJlY3QpOwot
ICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgICAgICBp
ZiAodGh1bWJSZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1bHQg
PSBUaHVtYlBhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKGJlZm9yZVRodW1iUmVjdC5jb250YWlucyht
b3VzZVBvc2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYmVmb3JlVGh1bWJSZWN0LmNvbnRhaW5z
KHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1bHQgPSBCYWNrVHJhY2tQYXJ0OwotICAg
ICAgICBlbHNlIGlmIChhZnRlclRodW1iUmVjdC5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAg
ICAgICAgZWxzZSBpZiAoYWZ0ZXJUaHVtYlJlY3QuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IEZvcndhcmRUcmFja1BhcnQ7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IFRyYWNrQkdQYXJ0OwotICAgIH0gZWxzZSBpZiAoYmFja0J1dHRvblJl
Y3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9u
KSkKKyAgICB9IGVsc2UgaWYgKGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwgQmFja0J1dHRvblN0
YXJ0UGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gQmFja0J1
dHRvblN0YXJ0UGFydDsKLSAgICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJh
Y2tCdXR0b25FbmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChi
YWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5jb250YWlucyh0ZXN0
UG9zaXRpb24pKQogICAgICAgICByZXN1bHQgPSBCYWNrQnV0dG9uRW5kUGFydDsKLSAgICBlbHNl
IGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQp
LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGVsc2UgaWYgKGZvcndhcmRCdXR0b25SZWN0
KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkuY29udGFpbnModGVzdFBvc2l0aW9u
KSkKICAgICAgICAgcmVzdWx0ID0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICBlbHNlIGlm
IChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KS5jb250
YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3Jv
bGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KS5jb250YWlucyh0ZXN0UG9zaXRpb24pKQogICAg
ICAgICByZXN1bHQgPSBGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICByZXR1cm4gcmVzdWx0Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmgKaW5kZXggZGZkMTVlZDE4ODc4MzA4YTE3ZGFjNTQwMThmNTU1NjE5OGJmOGJiNi4uMThlNDYx
MTEzZThkOWRkMjk4MGI3MmE5NjIzZjU1OTBkZDNiNzUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCkBAIC0zNCw3ICszNCw3IEBA
IGNsYXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNjcm9sbGJhclRoZW1lIHsK
IHB1YmxpYzoKICAgICAvLyBJbXBsZW1lbnQgU2Nyb2xsYmFyVGhlbWUgaW50ZXJmYWNlCiAgICAg
dmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0
IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQYXJ0KFNj
cm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CiAgICAgdmlydHVhbCBpbnQgdGh1
bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIHZpcnR1YWwgaW50IHRodW1i
TGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKaW5kZXggYWMwZGMzODQ0OTYxMmM5
NTExNzNjNDQ2NTc2NjYzOWU5Y2I5OTk2ZS4uZjg5OTQ1NzcxNzI3ZWE0MWNlOWJkOTNmNzIwZWI3
NjAyZGE4M2IyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMTUxLDEwICsxNTEsMTAgQEAgYm9vbCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhp
Y3NDb250ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJU
aGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVR
U3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uKQogewogICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBvcHQgPSBpbml0U2xp
ZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKLSAgICBjb25zdCBRUG9pbnQgcG9zID0gc2Nyb2xs
YmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpOworICAgIGNv
bnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhw
b3NpdGlvbik7CiAgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CiAgICAgUVN0eWxl
RmFjYWRlOjpTdWJDb250cm9sIHNjID0gbV9xU3R5bGUtPmhpdFRlc3RTY3JvbGxCYXIob3B0LCBw
b3MpOwogICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCmluZGV4IGUwNGFmYWQxMjhkZjkz
OGZjNzY5N2M2OWZjZmFkNDM2YjdlMjc2YWQuLmY5YzJjZDVjMDZhYjFiYmYzOWNlODQ4YjA2NDI0
MTAwOWYxOWQ5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclRoZW1lUVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRU3R5bGUuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIo
U2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3Qp
OwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGll
bnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBh
cnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBvaW50Jik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNsaWVudCos
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2E4MDVkMmRiNmI4YjU5OGEy
NjVlYzg5MjBhNzgwMTUzYWQxYzQyMi4uZDVkYzUzNGU5ZmI5NjI4ZTFlZjFjY2Q2MmZiYTM2ZDBk
MWFlY2JjNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTExLTA3ICBSb2JlcnQgRmxhY2sg
IDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJlIGV2ZW50cyBv
biBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0
dXJlLXNjcm9sbGJhci5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0wNSAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1hcmsgc2V2
ZXJhbCBjb21wb3NpdGluZyB0ZXN0cyBhcyBvbmx5IGZhaWxpbmcgSW1hZ2UKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXIt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0
dXJlLXNjcm9sbGJhci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODYzOTE5YjNkOTk3YmZjN2Y4
ZDYyOWE0YWEzZWRjYjkxMTkxYWRiNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXItZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnRzIG9uIGEgc2Ny
b2xsIGJhci4gVGhlIHNjcm9sbGFibGUgZGl2IGJlbG93IHNob3VsZCBiZSBzbGlnaHRseSBzY3Jv
bGxlZCBkb3duIGlmIHN1Y2Nlc3NmdWwuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG1vdmluZ0Rpdi5zY3JvbGxUb3AgaXMgMAorUEFTUyBtb3ZpbmdEaXYuc2Nyb2xsVG9w
IGlzID49IDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dl
c3R1cmUtc2Nyb2xsYmFyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0
dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmE2YTdiYzRmNTAwY2RmYjli
MDA2OTQ2OGU5MDVkNWIwODg2NmFkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXIuaHRtbApAQCAtMCwwICsx
LDY3IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorI3Njcm9sbGFibGUg
eworICAgIGhlaWdodDogMzAwcHg7CisgICAgd2lkdGg6IDMwMHB4OworICAgIG92ZXJmbG93OiBz
Y3JvbGw7Cit9CisKKy5sYXJnZSB7CisgICAgaGVpZ2h0OiA2MDBweDsKK30KKzwvc3R5bGU+Cis8
L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0ic2Nyb2xsYWJsZSI+
CisgIDxkaXYgY2xhc3M9ImxhcmdlIj4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nRGl2OworCitmdW5jdGlvbiB2ZXJ0aWNh
bFNjcm9sbFRlc3QoKSB7CisgICAgbW92aW5nRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Njcm9sbGFibGUnKTsKKyAgICB2YXIgc2Nyb2xsYmFyWCA9IG1vdmluZ0Rpdi5vZmZzZXRMZWZ0
ICsgbW92aW5nRGl2Lm9mZnNldFdpZHRoIC0gNTsKKyAgICB2YXIgc2Nyb2xsVGh1bWJTYWZlT2Zm
c2V0ID0gODA7CisgICAgdmFyIHNjcm9sbGJhclkgPSBtb3ZpbmdEaXYub2Zmc2V0VG9wICsgc2Ny
b2xsVGh1bWJTYWZlT2Zmc2V0OworCisgICAgc2hvdWxkQmUoJ21vdmluZ0Rpdi5zY3JvbGxUb3An
LCAnMCcpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVUYXBEb3duKHNjcm9sbGJhclgsIHNjcm9s
bGJhclkpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVTY3JvbGxCZWdpbihzY3JvbGxiYXJYLCBz
Y3JvbGxiYXJZKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlU2Nyb2xsVXBkYXRlKDAsIDIwKTsK
KyAgICBldmVudFNlbmRlci5nZXN0dXJlU2Nyb2xsRW5kKDAsIDApOworICAgIHNob3VsZEJlR3Jl
YXRlclRoYW5PckVxdWFsKCdtb3ZpbmdEaXYuc2Nyb2xsVG9wJywgJzEnKTsKKyAgICAvLyBJZiB3
ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7
Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVidWcoJ0dlc3R1cmUg
ZXZlbnRzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGJyb2tlbicpOworICAg
IGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAg
IGludGVybmFscy5zZXR0aW5ncy5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7CisgICAg
aWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlvbignVGhpcyB0ZXN0
cyBzY3JvbGwgZ2VzdHVyZSBldmVudHMgb24gYSBzY3JvbGwgYmFyLiAnICsKKyAgICAgICAgICAg
ICdUaGUgc2Nyb2xsYWJsZSBkaXYgYmVsb3cgc2hvdWxkIGJlIHNsaWdodGx5IHNjcm9sbGVkIGRv
d24gJyArCisgICAgICAgICAgICAnaWYgc3VjY2Vzc2Z1bC4nKTsKKworICAgICAgICBpZiAoZXZl
bnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsVGVz
dCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3NhcnkoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1bXBSZW5kZXJUcmVl
LiIpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173915</attachid>
            <date>2012-11-13 09:55:47 -0800</date>
            <delta_ts>2012-11-13 15:18:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101516-20121113125347.patch</filename>
            <type>text/plain</type>
            <size>19485</size>
            <attacher name="Robert Flack">flackr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZDk3ZTI0ZGNmZTBj
YWEwZWNkOTFiYWUxMTA2ODM0MDc2OGNkYy4uN2FjYzg2MDA0Yjc0ZjIwNDRjZjE4YzAyYjdiNGJl
YmU3MTBhMDZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTA3ICBSb2Jl
cnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJl
IGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBhIGdlc3R1cmUgZXZlbnQgaGFuZGxlciB0byBzY3JvbGxiYXJz
IGFuZCBzZW5kcyBnZXN0dXJlcyBiZWdpbm5pbmcKKyAgICAgICAgb3ZlciBhIHNjcm9sbGJhciB0
byB0aGlzIGhhbmRsZXIgdG8gYWxsb3cgdG91Y2ggc2Nyb2xsaW5nIHNjcm9sbGJhcnMuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5o
dG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Z2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZURvd24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChT
Y3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6aGl0VGVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVFTdHls
ZSk6CisKIDIwMTItMTEtMTEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzQxNDQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzRiYWYwMmU4MTNkZGJiOTRmMTAxYjU5YWVj
NDAyNTc5NmQwNmEwZS4uYmUyMGUyNTAyYjI1MmIxODcyYjA4YTYzZTZhOWEzOWJhOGU2ZmNmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzk3LDYgKzM5Nyw3IEBAIHZv
aWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjZW5kaWYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCiAgICAgbV9zY3JvbGxHZXN0dXJlSGFuZGxpbmdOb2RlID0gMDsKKyAgICBtX3Njcm9sbGJh
ckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CiAjZW5kaWYKICAgICBtX21vdXNlTW92ZWREdXJh
dGlvblJ1bm5pbmdBdmVyYWdlID0gMDsKICAgICBtX2Jhc2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2
ZW50OjpOb1R5cGU7CkBAIC0yNTE5LDggKzI1MjAsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBldmVudFRhcmdldCA9IDA7Ci0g
ICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9s
bEVuZCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxVcGRhdGUpCisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChnZXN0dXJl
RXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgfHwgZ2VzdHVy
ZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKSB7Cisg
ICAgICAgIHNjcm9sbGJhciA9IG1fc2Nyb2xsYmFySGFuZGxpbmdTY3JvbGxHZXN0dXJlLmdldCgp
OwogICAgICAgICBldmVudFRhcmdldCA9IG1fc2Nyb2xsR2VzdHVyZUhhbmRsaW5nTm9kZS5nZXQo
KTsKKyAgICB9CiAKICAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBv
c2l0aW9uKCk7CiAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBl
ID0gSGl0VGVzdFJlcXVlc3Q6OlRvdWNoRXZlbnQ7CkBAIC0yNTM4LDEwICsyNTQyLDI3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAoIXNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2
ZSgpKQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seTsKIAotICAg
IGlmICghZXZlbnRUYXJnZXQgfHwgIShoaXRUeXBlICYgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
KSkgeworICAgIGlmICgoIXNjcm9sbGJhciAmJiAhZXZlbnRUYXJnZXQpIHx8ICEoaGl0VHlwZSAm
IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSkpIHsKICAgICAgICAgSW50UG9pbnQgaGl0VGVzdFBv
aW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGFkanVzdGVkUG9pbnQpOwot
ICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRl
c3RQb2ludCwgZmFsc2UsIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOwor
ICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRl
c3RQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycywgaGl0VHlwZSk7
CiAgICAgICAgIGV2ZW50VGFyZ2V0ID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKKyAgICAgICAgaWYg
KCFzY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZp
ZXcoKTsKKyAgICAgICAgICAgIHNjcm9sbGJhciA9IHZpZXcgPyB2aWV3LT5zY3JvbGxiYXJBdFBv
aW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFzY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXIgPSByZXN1bHQuc2Nyb2xsYmFyKCk7
CisgICAgfQorCisgICAgaWYgKHNjcm9sbGJhcikgeworICAgICAgICBib29sIGV2ZW50U3dhbGxv
d2VkID0gc2Nyb2xsYmFyLT5nZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAgICAgICAgaWYg
KGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2lu
ICYmIGV2ZW50U3dhbGxvd2VkKQorICAgICAgICAgICAgbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9s
bEdlc3R1cmUgPSBzY3JvbGxiYXI7CisgICAgICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCB8fCAhZXZlbnRTd2FsbG93ZWQp
CisgICAgICAgICAgICBtX3Njcm9sbGJhckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CisKKyAg
ICAgICAgaWYgKGV2ZW50U3dhbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCA5ZTcyNWRiYjVjMDAzYjkyMWNlNzIxNzg1NjAxZjk5MDcyYTA1ZjdmLi4yOGQ4MzQyNDIx
M2EwMWZkZDMzMDYxM2U0NGJiMWE0MWJmNmVhMmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKQEAgLTQ1Nyw2ICs0NTcsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQogICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05vZGU7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1cmU7CiAj
ZW5kaWYKIAogICAgIGRvdWJsZSBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVyYWdlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggOGZhNDE3YzZiM2RiMDk2Y2Uz
YWExN2YxNDExMzkyMmM0OTMwMDg2NS4uMjM2NWEyZjBlYWJkMjE3ZmE5ODMxNmJmNGJkNzUxNDgy
ZDM5NjA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0zMyw2ICsz
MywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCisjZW5kaWYKKwogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgI2luY2x1ZGVzIGFy
ZSBhIGxheWVyaW5nIHZpb2xhdGlvbiBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCiAjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCIKQEAg
LTM1MSw2ICszNTUsMzIgQEAgdm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJh
clBhcnQgcGFydCkKICAgICAgICAgdGhlbWUoKS0+aW52YWxpZGF0ZVBhcnQodGhpcywgbV9ob3Zl
cmVkUGFydCk7CiB9CiAKKyNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCitib29sIFNjcm9sbGJh
cjo6Z2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBldnQpCit7CisgICAg
aWYgKGV2dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd24pIHsKKyAgICAg
ICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBldnQucG9zaXRpb24oKSkp
OworICAgICAgICBtX3ByZXNzZWRQb3MgPSAob3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS54KCkg
OiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpLnkoKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBh
cnQgJiYgKGV2dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd25DYW5jZWwg
fHwgZXZ0LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsQmVnaW4pKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQgJiYg
ZXZ0LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKSB7CisgICAg
ICAgIG1vdmVUaHVtYihtX3ByZXNzZWRQb3MgKyAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyID8gZXZ0LmRlbHRhWCgpIDogZXZ0LmRlbHRhWSgpKSwgZmFsc2UpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGV2dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcCkgeworICAgICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQg
fHwgbV9wcmVzc2VkUGFydCA9PSBOb1BhcnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFy
dFNjcm9sbEdyYW51bGFyaXR5KCkpOworICAgIH0KKyAgICBzZXRQcmVzc2VkUGFydChOb1BhcnQp
OworICAgIG1fcHJlc3NlZFBvcyA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisK
IGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0
KQogewogICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewpAQCAtMzY4LDcgKzM5
OCw3IEBAIGJvb2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZ0KQogICAgIGlmIChtX3ByZXNzZWRQYXJ0ICE9IE5vUGFydCkKICAgICAgICAgbV9wcmVz
c2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOwogCi0gICAgU2Nyb2xsYmFyUGFydCBw
YXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBldnQpOworICAgIFNjcm9sbGJhclBhcnQgcGFy
dCA9IHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpOwogICAgIGlmIChwYXJ0
ICE9IG1faG92ZXJlZFBhcnQpIHsKICAgICAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0
KSB7CiAgICAgICAgICAgICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7CkBAIC00MTQsNyAr
NDQ0LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiBtb3VzZUV2ZW50KQogICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CiAgICAgICAgIC8vIG1f
aG92ZXJlZFBhcnQgd29uJ3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9y
IG1vdXNlRG93biwgc28gd2UgaGF2ZSB0byBoaXQgdGVzdAogICAgICAgICAvLyB0byByZWFsbHkg
a25vdyBpZiB0aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xsYmFyIG9uIGEgbW91c2VVcC4K
LSAgICAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3Vz
ZUV2ZW50KTsKKyAgICAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0
aGlzLCBtb3VzZUV2ZW50LnBvc2l0aW9uKCkpOwogICAgICAgICBpZiAocGFydCA9PSBOb1BhcnQp
CiAgICAgICAgICAgICBtX3Njcm9sbGFibGVBcmVhLT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlz
KTsKICAgICB9CkBAIC00MzEsNyArNDYxLDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlRG93bihj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKICAgICBpZiAoZXZ0LmJ1dHRvbigpID09IFJp
Z2h0QnV0dG9uKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IEhhbmRsZWQgYXMgY29u
dGV4dCBtZW51IGJ5IFF0IHJpZ2h0IG5vdy4gIFNob3VsZCBqdXN0IGF2b2lkIGV2ZW4gY2FsbGlu
ZyB0aGlzIG1ldGhvZCBvbiBhIHJpZ2h0IGNsaWNrIHRob3VnaC4KIAotICAgIHNldFByZXNzZWRQ
YXJ0KHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0KSk7CisgICAgc2V0UHJlc3NlZFBhcnQodGhl
bWUoKS0+aGl0VGVzdCh0aGlzLCBldnQucG9zaXRpb24oKSkpOwogICAgIGludCBwcmVzc2VkUG9z
ID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29u
dGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5n
V2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOwogICAgIAogICAgIGlmICgobV9wcmVzc2VkUGFy
dCA9PSBCYWNrVHJhY2tQYXJ0IHx8IG1fcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkg
JiYgdGhlbWUoKS0+c2hvdWxkQ2VudGVyT25UaHVtYih0aGlzLCBldnQpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5oCmluZGV4IDU3OGY3MDk4NTBiM2ZhOTA5YTNhNzY0MzU4Njc3MTRh
ODdjODQ1OTkuLmE2MjgyODZiMDk4MzE0OGU4ZGVmNGNjMzIzZWRiMDY1NTgxNmQ2ZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCkBAIC00MSw2ICs0MSwxMCBAQCBjbGFzcyBQbGF0
Zm9ybU1vdXNlRXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhclRo
ZW1lOwogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0dXJl
RXZlbnQ7CisjZW5kaWYKKwogY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CiAKQEAgLTEyMyw2ICsx
MjcsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1dpbmRvd0FjdGl2ZSgpIGNvbnN0OwogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorICAgIGJvb2wgZ2VzdHVyZUV2ZW50KGNvbnN0IFBs
YXRmb3JtR2VzdHVyZUV2ZW50Jik7CisjZW5kaWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJl
IHVzZWQgZm9yIHBsYXRmb3JtIHNjcm9sbGJhcnMgdG8gZ2l2ZSA6aG92ZXIgZmVlZGJhY2suICBU
aGV5IHdpbGwgbm90IGdldCBjYWxsZWQKICAgICAvLyB3aGVuIHRoZSBtb3VzZSB3ZW50IGRvd24g
aW4gYSBzY3JvbGxiYXIsIHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhlIHNjcm9sbGJhciB3aWxsIHN0
YXJ0CiAgICAgLy8gZ3JhYmJpbmcgYWxsIGV2ZW50cyBpbiB0aGF0IGNhc2UgYW55d2F5LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgKaW5kZXggY2NjYzJmOTI1NmZkMzIy
OGQzNDFmM2M2ZTkxNjU4YmM5YTU1NWRlMi4uMDFhYjA5ZTkxNTdjNjA1ZjhkNDc2MWI1OGU5MGI1
NmRlZTFkZjZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
VGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCkBA
IC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRW5hYmxlZFN0
YXRlKFNjcm9sbGJhclRoZW1lQ2xpZW50KikgeyB9OwogCiAgICAgdmlydHVhbCBib29sIHBhaW50
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
LypkYW1hZ2VSZWN0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBTY3JvbGxiYXJQ
YXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVz
dChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBvaW50JikgeyByZXR1cm4gTm9QYXJ0
OyB9CiAgICAgCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNv
bnRyb2xTaXplID0gUmVndWxhclNjcm9sbGJhcikgeyByZXR1cm4gMDsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKaW5kZXgg
Yjc4NGNjMzNkZWU0NjBhOGY3OTMyMGE0NmEzNmVlZDA4M2UwMWYyNS4uZDAyYThhYWI5YWQ3ODMy
ZWMyNmQwZWFjNDU2MTBlYmFkOTc5YzRjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcApAQCAtMTE1LDQxICsxMTUsNDEgQEAg
Ym9vbCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgR3JhcGhpY3NDb24KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFy
UGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCogc2Nyb2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBh
cnQgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQq
IHNjcm9sbGJhciwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAgIFNjcm9sbGJhclBh
cnQgcmVzdWx0ID0gTm9QYXJ0OwogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBJbnRQb2ludCBtb3VzZVBvc2l0aW9uID0gc2Nyb2xs
YmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpOwotICAgIG1v
dXNlUG9zaXRpb24ubW92ZShzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCkpOworICAgIElu
dFBvaW50IHRlc3RQb3NpdGlvbiA9IHNjcm9sbGJhci0+Y29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KHBvc2l0aW9uKTsKKyAgICB0ZXN0UG9zaXRpb24ubW92ZShzY3JvbGxiYXItPngoKSwgc2Ny
b2xsYmFyLT55KCkpOwogICAgIAotICAgIGlmICghc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250
YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBpZiAoIXNjcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29u
dGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIE5vUGFydDsKIAogICAgIHJlc3Vs
dCA9IFNjcm9sbGJhckJHUGFydDsKIAogICAgIEludFJlY3QgdHJhY2sgPSB0cmFja1JlY3Qoc2Ny
b2xsYmFyKTsKLSAgICBpZiAodHJhY2suY29udGFpbnMobW91c2VQb3NpdGlvbikpIHsKKyAgICBp
ZiAodHJhY2suY29udGFpbnModGVzdFBvc2l0aW9uKSkgewogICAgICAgICBJbnRSZWN0IGJlZm9y
ZVRodW1iUmVjdDsKICAgICAgICAgSW50UmVjdCB0aHVtYlJlY3Q7CiAgICAgICAgIEludFJlY3Qg
YWZ0ZXJUaHVtYlJlY3Q7CiAgICAgICAgIHNwbGl0VHJhY2soc2Nyb2xsYmFyLCB0cmFjaywgYmVm
b3JlVGh1bWJSZWN0LCB0aHVtYlJlY3QsIGFmdGVyVGh1bWJSZWN0KTsKLSAgICAgICAgaWYgKHRo
dW1iUmVjdC5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgaWYgKHRodW1iUmVjdC5j
b250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICAgICAgcmVzdWx0ID0gVGh1bWJQYXJ0Owot
ICAgICAgICBlbHNlIGlmIChiZWZvcmVUaHVtYlJlY3QuY29udGFpbnMobW91c2VQb3NpdGlvbikp
CisgICAgICAgIGVsc2UgaWYgKGJlZm9yZVRodW1iUmVjdC5jb250YWlucyh0ZXN0UG9zaXRpb24p
KQogICAgICAgICAgICAgcmVzdWx0ID0gQmFja1RyYWNrUGFydDsKLSAgICAgICAgZWxzZSBpZiAo
YWZ0ZXJUaHVtYlJlY3QuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgICAgIGVsc2UgaWYg
KGFmdGVyVGh1bWJSZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1
bHQgPSBGb3J3YXJkVHJhY2tQYXJ0OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQg
PSBUcmFja0JHUGFydDsKLSAgICB9IGVsc2UgaWYgKGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwg
QmFja0J1dHRvblN0YXJ0UGFydCkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgfSBlbHNl
IGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25TdGFydFBhcnQpLmNvbnRh
aW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgIHJlc3VsdCA9IEJhY2tCdXR0b25TdGFydFBhcnQ7
Ci0gICAgZWxzZSBpZiAoYmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFy
dCkuY29udGFpbnMobW91c2VQb3NpdGlvbikpCisgICAgZWxzZSBpZiAoYmFja0J1dHRvblJlY3Qo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAg
ICAgICAgcmVzdWx0ID0gQmFja0J1dHRvbkVuZFBhcnQ7Ci0gICAgZWxzZSBpZiAoZm9yd2FyZEJ1
dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KS5jb250YWlucyhtb3Vz
ZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25TdGFydFBhcnQpLmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgIHJl
c3VsdCA9IEZvcndhcmRCdXR0b25TdGFydFBhcnQ7Ci0gICAgZWxzZSBpZiAoZm9yd2FyZEJ1dHRv
blJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5kUGFydCkuY29udGFpbnMobW91c2VQb3Np
dGlvbikpCisgICAgZWxzZSBpZiAoZm9yd2FyZEJ1dHRvblJlY3Qoc2Nyb2xsYmFyLCBGb3J3YXJk
QnV0dG9uRW5kUGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQ7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCmluZGV4IGRmZDE1
ZWQxODg3ODMwOGExN2RhYzU0MDE4ZjU1NTYxOThiZjhiYjYuLjE4ZTQ2MTExM2U4ZDlkZDI5ODBi
NzJhOTYyM2Y1NTkwZGQzYjc1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBTY3JvbGxi
YXJUaGVtZUNvbXBvc2l0ZSA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZSB7CiBwdWJsaWM6CiAgICAg
Ly8gSW1wbGVtZW50IFNjcm9sbGJhclRoZW1lIGludGVyZmFjZQogICAgIHZpcnR1YWwgYm9vbCBw
YWludChTY3JvbGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpOwotICAgIHZpcnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9s
bGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVh
bCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlUGFydChTY3JvbGxiYXJUaGVtZUNs
aWVudCosIFNjcm9sbGJhclBhcnQpOwogICAgIHZpcnR1YWwgaW50IHRodW1iUG9zaXRpb24oU2Ny
b2xsYmFyVGhlbWVDbGllbnQqKTsKICAgICB2aXJ0dWFsIGludCB0aHVtYkxlbmd0aChTY3JvbGxi
YXJUaGVtZUNsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRU3R5bGUuY3BwCmluZGV4IGFjMGRjMzg0NDk2MTJjOTUxMTczYzQ0NjU3NjY2
MzllOWNiOTk5NmUuLmY4OTk0NTc3MTcyN2VhNDFjZTliZDkzZjcyMGViNzYwMmRhODNiMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5jcHAKQEAgLTE1MSwxMCArMTUxLDEwIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6OnBh
aW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLVNjcm9sbGJhclBhcnQgU2Nyb2xsYmFyVGhlbWVRU3R5bGU6Omhp
dFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50JiBldnQpCitTY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lUVN0eWxlOjpoaXRUZXN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
bikKIHsKICAgICBRU3R5bGVGYWNhZGVPcHRpb24gb3B0ID0gaW5pdFNsaWRlclN0eWxlT3B0aW9u
KHNjcm9sbGJhcik7Ci0gICAgY29uc3QgUVBvaW50IHBvcyA9IHNjcm9sbGJhci0+Y29udmVydEZy
b21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKTsKKyAgICBjb25zdCBRUG9pbnQgcG9z
ID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocG9zaXRpb24pOwogICAg
IG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwogICAgIFFTdHlsZUZhY2FkZTo6U3ViQ29u
dHJvbCBzYyA9IG1fcVN0eWxlLT5oaXRUZXN0U2Nyb2xsQmFyKG9wdCwgcG9zKTsKICAgICByZXR1
cm4gc2Nyb2xsYmFyUGFydChzYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaAppbmRleCBlMDRhZmFkMTI4ZGY5MzhmYzc2OTdjNjlmY2Zh
ZDQzNmI3ZTI3NmFkLi5mOWMyY2Q1YzA2YWIxYmJmMzljZTg0OGIwNjQyNDEwMDlmMTlkOTM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHls
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxl
LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludChTY3Jv
bGxiYXJUaGVtZUNsaWVudCosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKIAotICAgIHZpcnR1
YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Ny
b2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29s
IHNob3VsZENlbnRlck9uVGh1bWIoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMyYWU5ZGIyYzhmMzM0OTM2MWE3M2ExYTkwYTkzYzY1
OTkzYzNmOTAuLjJlM2VmM2Y3YzdhZGI5ZGE3YTI3YmNjMjdmOTBmYWE4OWRiOTBlNjcgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxMi0xMS0wNyAgUm9iZXJ0IEZsYWNrICA8ZmxhY2tyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBIYW5kbGUgZ2VzdHVyZSBldmVudHMgb24gc2Nyb2xsYmFycy4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTUxNgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBn
ZXN0dXJlIGV2ZW50IGhhbmRsZXIgdG8gc2Nyb2xsYmFycyBhbmQgc2VuZHMgZ2VzdHVyZXMgYmVn
aW5uaW5nCisgICAgICAgIG92ZXIgYSBzY3JvbGxiYXIgdG8gdGhpcyBoYW5kbGVyIHRvIGFsbG93
IHRvdWNoIHNjcm9sbGluZyBzY3JvbGxiYXJzLgorCisgICAgICAgICogZmFzdC9ldmVudHMvdG91
Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXIuaHRtbDogQWRk
ZWQuCisKIDIwMTItMTEtMTEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzQxNDQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xs
YmFyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUv
Z2VzdHVyZS1zY3JvbGxiYXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2MzkxOWIzZDk5N2Jm
YzdmOGQ2MjlhNGFhM2VkY2I5MTE5MWFkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDExIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGV2ZW50cyBvbiBh
IHNjcm9sbCBiYXIuIFRoZSBzY3JvbGxhYmxlIGRpdiBiZWxvdyBzaG91bGQgYmUgc2xpZ2h0bHkg
c2Nyb2xsZWQgZG93biBpZiBzdWNjZXNzZnVsLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBtb3ZpbmdEaXYuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgbW92aW5nRGl2LnNjcm9s
bFRvcCBpcyA+PSAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVy
ZS9nZXN0dXJlLXNjcm9sbGJhci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhNmE3YmM0ZjUwMGNk
ZmI5YjAwNjk0NjhlOTA1ZDViMDg4NjZhZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0bWwKQEAgLTAs
MCArMSw2NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyNzY3JvbGxh
YmxlIHsKKyAgICBoZWlnaHQ6IDMwMHB4OworICAgIHdpZHRoOiAzMDBweDsKKyAgICBvdmVyZmxv
dzogc2Nyb2xsOworfQorCisubGFyZ2UgeworICAgIGhlaWdodDogNjAwcHg7Cit9Cis8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KKzxkaXYgaWQ9InNjcm9sbGFi
bGUiPgorICA8ZGl2IGNsYXNzPSJsYXJnZSI+CisgIDwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIG1vdmluZ0RpdjsKKworZnVuY3Rpb24gdmVy
dGljYWxTY3JvbGxUZXN0KCkgeworICAgIG1vdmluZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzY3JvbGxhYmxlJyk7CisgICAgdmFyIHNjcm9sbGJhclggPSBtb3ZpbmdEaXYub2Zmc2V0
TGVmdCArIG1vdmluZ0Rpdi5vZmZzZXRXaWR0aCAtIDU7CisgICAgdmFyIHNjcm9sbFRodW1iU2Fm
ZU9mZnNldCA9IDgwOworICAgIHZhciBzY3JvbGxiYXJZID0gbW92aW5nRGl2Lm9mZnNldFRvcCAr
IHNjcm9sbFRodW1iU2FmZU9mZnNldDsKKworICAgIHNob3VsZEJlKCdtb3ZpbmdEaXYuc2Nyb2xs
VG9wJywgJzAnKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlVGFwRG93bihzY3JvbGxiYXJYLCBz
Y3JvbGxiYXJZKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlU2Nyb2xsQmVnaW4oc2Nyb2xsYmFy
WCwgc2Nyb2xsYmFyWSk7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVNjcm9sbFVwZGF0ZSgwLCAy
MCk7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVNjcm9sbEVuZCgwLCAwKTsKKyAgICBzaG91bGRC
ZUdyZWF0ZXJUaGFuT3JFcXVhbCgnbW92aW5nRGl2LnNjcm9sbFRvcCcsICcxJyk7CisgICAgLy8g
SWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3NlZC4KKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNl
ZCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNlc3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0
dXJlIGV2ZW50cyBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybSBvciBicm9rZW4nKTsK
KyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sK
KyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKHRydWUpOwor
ICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMg
dGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnRzIG9uIGEgc2Nyb2xsIGJhci4gJyArCisgICAgICAg
ICAgICAnVGhlIHNjcm9sbGFibGUgZGl2IGJlbG93IHNob3VsZCBiZSBzbGlnaHRseSBzY3JvbGxl
ZCBkb3duICcgKworICAgICAgICAgICAgJ2lmIHN1Y2Nlc3NmdWwuJyk7CisKKyAgICAgICAgaWYg
KGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMpCisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9s
bFRlc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRoaXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVy
VHJlZS4iKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174006</attachid>
            <date>2012-11-13 15:18:12 -0800</date>
            <delta_ts>2012-11-15 14:31:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101516-20121113181612.patch</filename>
            <type>text/plain</type>
            <size>20424</size>
            <attacher name="Robert Flack">flackr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MTgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM2ZDk3ZTI0ZGNmZTBj
YWEwZWNkOTFiYWUxMTA2ODM0MDc2OGNkYy4uN2FjYzg2MDA0Yjc0ZjIwNDRjZjE4YzAyYjdiNGJl
YmU3MTBhMDZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTA3ICBSb2Jl
cnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJl
IGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBhIGdlc3R1cmUgZXZlbnQgaGFuZGxlciB0byBzY3JvbGxiYXJz
IGFuZCBzZW5kcyBnZXN0dXJlcyBiZWdpbm5pbmcKKyAgICAgICAgb3ZlciBhIHNjcm9sbGJhciB0
byB0aGlzIGhhbmRsZXIgdG8gYWxsb3cgdG91Y2ggc2Nyb2xsaW5nIHNjcm9sbGJhcnMuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5o
dG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Z2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZURvd24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChT
Y3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6aGl0VGVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVFTdHls
ZSk6CisKIDIwMTItMTEtMTEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzQxNDQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggYzRiYWYwMmU4MTNkZGJiOTRmMTAxYjU5YWVj
NDAyNTc5NmQwNmEwZS4uYmUyMGUyNTAyYjI1MmIxODcyYjA4YTYzZTZhOWEzOWJhOGU2ZmNmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMzk3LDYgKzM5Nyw3IEBAIHZv
aWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjZW5kaWYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVO
VFMpCiAgICAgbV9zY3JvbGxHZXN0dXJlSGFuZGxpbmdOb2RlID0gMDsKKyAgICBtX3Njcm9sbGJh
ckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CiAjZW5kaWYKICAgICBtX21vdXNlTW92ZWREdXJh
dGlvblJ1bm5pbmdBdmVyYWdlID0gMDsKICAgICBtX2Jhc2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2
ZW50OjpOb1R5cGU7CkBAIC0yNTE5LDggKzI1MjAsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6Omhh
bmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlKiBldmVudFRhcmdldCA9IDA7Ci0g
ICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9s
bEVuZCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3Jv
bGxVcGRhdGUpCisgICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChnZXN0dXJl
RXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgfHwgZ2VzdHVy
ZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKSB7Cisg
ICAgICAgIHNjcm9sbGJhciA9IG1fc2Nyb2xsYmFySGFuZGxpbmdTY3JvbGxHZXN0dXJlLmdldCgp
OwogICAgICAgICBldmVudFRhcmdldCA9IG1fc2Nyb2xsR2VzdHVyZUhhbmRsaW5nTm9kZS5nZXQo
KTsKKyAgICB9CiAKICAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBv
c2l0aW9uKCk7CiAgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBl
ID0gSGl0VGVzdFJlcXVlc3Q6OlRvdWNoRXZlbnQ7CkBAIC0yNTM4LDEwICsyNTQyLDI3IEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJl
RXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAoIXNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2
ZSgpKQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seTsKIAotICAg
IGlmICghZXZlbnRUYXJnZXQgfHwgIShoaXRUeXBlICYgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5
KSkgeworICAgIGlmICgoIXNjcm9sbGJhciAmJiAhZXZlbnRUYXJnZXQpIHx8ICEoaGl0VHlwZSAm
IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSkpIHsKICAgICAgICAgSW50UG9pbnQgaGl0VGVzdFBv
aW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGFkanVzdGVkUG9pbnQpOwot
ICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRl
c3RQb2ludCwgZmFsc2UsIGZhbHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOwor
ICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRl
c3RQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycywgaGl0VHlwZSk7
CiAgICAgICAgIGV2ZW50VGFyZ2V0ID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKKyAgICAgICAgaWYg
KCFzY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZp
ZXcoKTsKKyAgICAgICAgICAgIHNjcm9sbGJhciA9IHZpZXcgPyB2aWV3LT5zY3JvbGxiYXJBdFBv
aW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFzY3JvbGxiYXIpCisgICAgICAgICAgICBzY3JvbGxiYXIgPSByZXN1bHQuc2Nyb2xsYmFyKCk7
CisgICAgfQorCisgICAgaWYgKHNjcm9sbGJhcikgeworICAgICAgICBib29sIGV2ZW50U3dhbGxv
d2VkID0gc2Nyb2xsYmFyLT5nZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAgICAgICAgaWYg
KGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2lu
ICYmIGV2ZW50U3dhbGxvd2VkKQorICAgICAgICAgICAgbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9s
bEdlc3R1cmUgPSBzY3JvbGxiYXI7CisgICAgICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCB8fCAhZXZlbnRTd2FsbG93ZWQp
CisgICAgICAgICAgICBtX3Njcm9sbGJhckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CisKKyAg
ICAgICAgaWYgKGV2ZW50U3dhbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCiAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApp
bmRleCA5ZTcyNWRiYjVjMDAzYjkyMWNlNzIxNzg1NjAxZjk5MDcyYTA1ZjdmLi4yOGQ4MzQyNDIx
M2EwMWZkZDMzMDYxM2U0NGJiMWE0MWJmNmVhMmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKQEAgLTQ1Nyw2ICs0NTcsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKEdFU1RVUkVf
RVZFTlRTKQogICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05vZGU7Cisg
ICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1cmU7CiAj
ZW5kaWYKIAogICAgIGRvdWJsZSBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVyYWdlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggOGZhNDE3YzZiM2RiMDk2Y2Uz
YWExN2YxNDExMzkyMmM0OTMwMDg2NS4uMmE4ZmE4NWE0YjFlMjEyN2UxOWZhNTI5NTU2ODZmZGE3
MTJmZTIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0zMyw2ICsz
MywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3JtR2VzdHVy
ZUV2ZW50LmgiCisjZW5kaWYKKwogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgI2luY2x1ZGVzIGFy
ZSBhIGxheWVyaW5nIHZpb2xhdGlvbiBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCiAjaW5jbHVkZSAi
QVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCIKQEAg
LTgwLDYgKzg0LDcgQEAgU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9s
bGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnQKICAgICAsIG1faG92ZXJlZFBh
cnQoTm9QYXJ0KQogICAgICwgbV9wcmVzc2VkUGFydChOb1BhcnQpCiAgICAgLCBtX3ByZXNzZWRQ
b3MoMCkKKyAgICAsIG1fc2Nyb2xsUG9zKDApCiAgICAgLCBtX2RyYWdnaW5nRG9jdW1lbnQoZmFs
c2UpCiAgICAgLCBtX2RvY3VtZW50RHJhZ1BvcygwKQogICAgICwgbV9lbmFibGVkKHRydWUpCkBA
IC0zNTEsNiArMzU2LDQ1IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChTY3JvbGxi
YXJQYXJ0IHBhcnQpCiAgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMsIG1faG92
ZXJlZFBhcnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBTY3JvbGxi
YXI6Omdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZ0KQoreworICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIHN3aXRjaCAoZXZ0LnR5cGUoKSkgeworICAgIGNh
c2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgICAgIHNldFByZXNzZWRQYXJ0
KHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpKTsKKyAgICAgICAgbV9wcmVz
c2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250
YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3duQ2FuY2VsOgorICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAgICAgICBpZiAobV9wcmVzc2Vk
UGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsUG9zID0gbV9wcmVzc2Vk
UG9zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOgorICAgICAgICBp
ZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsUG9z
ICs9IEhvcml6b250YWxTY3JvbGxiYXIgPyBldnQuZGVsdGFYKCkgOiBldnQuZGVsdGFZKCk7Cisg
ICAgICAgICAgICBtb3ZlVGh1bWIobV9zY3JvbGxQb3MsIGZhbHNlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1F
dmVudDo6R2VzdHVyZVNjcm9sbEVuZDoKKyAgICAgICAgbV9zY3JvbGxQb3MgPSAwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAgICAgIGlm
IChtX3ByZXNzZWRQYXJ0ICE9IFRodW1iUGFydCAmJiBtX3ByZXNzZWRQYXJ0ICE9IE5vUGFydCkK
KyAgICAgICAgICAgIGhhbmRsZWQgPSBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xsYWJsZUFy
ZWEtPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9s
bEdyYW51bGFyaXR5KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgc2V0UHJlc3NlZFBhcnQoTm9QYXJ0KTsKKyAgICBtX3ByZXNzZWRQ
b3MgPSAwOworICAgIHJldHVybiBoYW5kbGVkOworfQorI2VuZGlmCisKIGJvb2wgU2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewpAQCAtMzY4LDcgKzQxMiw3IEBAIGJvb2wgU2Ny
b2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogICAgIGlm
IChtX3ByZXNzZWRQYXJ0ICE9IE5vUGFydCkKICAgICAgICAgbV9wcmVzc2VkUG9zID0gKG9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2
dC5wb3NpdGlvbigpKS55KCkpOwogCi0gICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+
aGl0VGVzdCh0aGlzLCBldnQpOworICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1lKCktPmhp
dFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpOwogICAgIGlmIChwYXJ0ICE9IG1faG92ZXJlZFBh
cnQpIHsKICAgICAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7CiAgICAgICAgICAg
ICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7CkBAIC00MTQsNyArNDU4LDcgQEAgYm9vbCBT
Y3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQog
ICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CiAgICAgICAgIC8vIG1faG92ZXJlZFBhcnQgd29u
J3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9yIG1vdXNlRG93biwgc28g
d2UgaGF2ZSB0byBoaXQgdGVzdAogICAgICAgICAvLyB0byByZWFsbHkga25vdyBpZiB0aGUgbW91
c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xsYmFyIG9uIGEgbW91c2VVcC4KLSAgICAgICAgU2Nyb2xs
YmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50KTsKKyAgICAg
ICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50
LnBvc2l0aW9uKCkpOwogICAgICAgICBpZiAocGFydCA9PSBOb1BhcnQpCiAgICAgICAgICAgICBt
X3Njcm9sbGFibGVBcmVhLT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKICAgICB9CkBAIC00
MzEsNyArNDc1LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlRG93bihjb25zdCBQbGF0Zm9ybU1v
dXNlRXZlbnQmIGV2dCkKICAgICBpZiAoZXZ0LmJ1dHRvbigpID09IFJpZ2h0QnV0dG9uKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IEhhbmRsZWQgYXMgY29udGV4dCBtZW51IGJ5IFF0
IHJpZ2h0IG5vdy4gIFNob3VsZCBqdXN0IGF2b2lkIGV2ZW4gY2FsbGluZyB0aGlzIG1ldGhvZCBv
biBhIHJpZ2h0IGNsaWNrIHRob3VnaC4KIAotICAgIHNldFByZXNzZWRQYXJ0KHRoZW1lKCktPmhp
dFRlc3QodGhpcywgZXZ0KSk7CisgICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0VGVzdCh0
aGlzLCBldnQucG9zaXRpb24oKSkpOwogICAgIGludCBwcmVzc2VkUG9zID0gKG9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhl
dnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3Np
dGlvbigpKS55KCkpOwogICAgIAogICAgIGlmICgobV9wcmVzc2VkUGFydCA9PSBCYWNrVHJhY2tQ
YXJ0IHx8IG1fcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkgJiYgdGhlbWUoKS0+c2hv
dWxkQ2VudGVyT25UaHVtYih0aGlzLCBldnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
ci5oCmluZGV4IDU3OGY3MDk4NTBiM2ZhOTA5YTNhNzY0MzU4Njc3MTRhODdjODQ1OTkuLmRiYzBk
MTQ2YjcyYzFhYmVkOTJkNWI2NDM4MWQ4M2JiYmYyODI3YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5oCkBAIC00MSw2ICs0MSwxMCBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7
CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhclRoZW1lOwogCisjaWYgRU5B
QkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7CisjZW5kaWYK
KwogY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CiAKQEAgLTEyMyw2ICsxMjcsMTAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc1dpbmRvd0FjdGl2ZSgpIGNvbnN0OwogCisjaWYgRU5BQkxFKEdFU1RV
UkVfRVZFTlRTKQorICAgIGJvb2wgZ2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2
ZW50Jik7CisjZW5kaWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9yIHBsYXRm
b3JtIHNjcm9sbGJhcnMgdG8gZ2l2ZSA6aG92ZXIgZmVlZGJhY2suICBUaGV5IHdpbGwgbm90IGdl
dCBjYWxsZWQKICAgICAvLyB3aGVuIHRoZSBtb3VzZSB3ZW50IGRvd24gaW4gYSBzY3JvbGxiYXIs
IHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhlIHNjcm9sbGJhciB3aWxsIHN0YXJ0CiAgICAgLy8gZ3Jh
YmJpbmcgYWxsIGV2ZW50cyBpbiB0aGF0IGNhc2UgYW55d2F5LgpAQCAtMTgzLDYgKzE5MSw3IEBA
IHByb3RlY3RlZDoKICAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CiAgICAgU2Nyb2xs
YmFyUGFydCBtX3ByZXNzZWRQYXJ0OwogICAgIGludCBtX3ByZXNzZWRQb3M7CisgICAgZmxvYXQg
bV9zY3JvbGxQb3M7CiAgICAgYm9vbCBtX2RyYWdnaW5nRG9jdW1lbnQ7CiAgICAgaW50IG1fZG9j
dW1lbnREcmFnUG9zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaApp
bmRleCBjY2NjMmY5MjU2ZmQzMjI4ZDM0MWYzYzZlOTE2NThiYzlhNTU1ZGUyLi4wMWFiMDllOTE1
N2M2MDVmOGQ0NzYxYjU4ZTkwYjU2ZGVlMWRmNmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhclRoZW1lLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IH07CiAKICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQorICAgIHZpcnR1YWwg
U2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3QgSW50UG9p
bnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJU
aGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7IHJldHVy
biAwOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1l
Q29tcG9zaXRlLmNwcAppbmRleCBiNzg0Y2MzM2RlZTQ2MGE4Zjc5MzIwYTQ2YTM2ZWVkMDgzZTAx
ZjI1Li5kMDJhOGFhYjlhZDc4MzJlYzI2ZDBlYWM0NTYxMGViYWQ5NzljNGM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwCkBA
IC0xMTUsNDEgKzExNSw0MSBAQCBib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWludChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbgogICAgIHJldHVybiB0
cnVlOwogfQogCi1TY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpoaXRUZXN0
KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZ0KQorU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVzdChT
Y3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24p
CiB7CiAgICAgU2Nyb2xsYmFyUGFydCByZXN1bHQgPSBOb1BhcnQ7CiAgICAgaWYgKCFzY3JvbGxi
YXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFBvaW50IG1v
dXNlUG9zaXRpb24gPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQu
cG9zaXRpb24oKSk7Ci0gICAgbW91c2VQb3NpdGlvbi5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3Jv
bGxiYXItPnkoKSk7CisgICAgSW50UG9pbnQgdGVzdFBvc2l0aW9uID0gc2Nyb2xsYmFyLT5jb252
ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocG9zaXRpb24pOworICAgIHRlc3RQb3NpdGlvbi5tb3Zl
KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CiAgICAgCi0gICAgaWYgKCFzY3JvbGxi
YXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGlmICghc2Nyb2xs
YmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICByZXR1cm4g
Tm9QYXJ0OwogCiAgICAgcmVzdWx0ID0gU2Nyb2xsYmFyQkdQYXJ0OwogCiAgICAgSW50UmVjdCB0
cmFjayA9IHRyYWNrUmVjdChzY3JvbGxiYXIpOwotICAgIGlmICh0cmFjay5jb250YWlucyhtb3Vz
ZVBvc2l0aW9uKSkgeworICAgIGlmICh0cmFjay5jb250YWlucyh0ZXN0UG9zaXRpb24pKSB7CiAg
ICAgICAgIEludFJlY3QgYmVmb3JlVGh1bWJSZWN0OwogICAgICAgICBJbnRSZWN0IHRodW1iUmVj
dDsKICAgICAgICAgSW50UmVjdCBhZnRlclRodW1iUmVjdDsKICAgICAgICAgc3BsaXRUcmFjayhz
Y3JvbGxiYXIsIHRyYWNrLCBiZWZvcmVUaHVtYlJlY3QsIHRodW1iUmVjdCwgYWZ0ZXJUaHVtYlJl
Y3QpOwotICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAg
ICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICBy
ZXN1bHQgPSBUaHVtYlBhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKGJlZm9yZVRodW1iUmVjdC5jb250
YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYmVmb3JlVGh1bWJSZWN0LmNv
bnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1bHQgPSBCYWNrVHJhY2tQYXJ0
OwotICAgICAgICBlbHNlIGlmIChhZnRlclRodW1iUmVjdC5jb250YWlucyhtb3VzZVBvc2l0aW9u
KSkKKyAgICAgICAgZWxzZSBpZiAoYWZ0ZXJUaHVtYlJlY3QuY29udGFpbnModGVzdFBvc2l0aW9u
KSkKICAgICAgICAgICAgIHJlc3VsdCA9IEZvcndhcmRUcmFja1BhcnQ7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJlc3VsdCA9IFRyYWNrQkdQYXJ0OwotICAgIH0gZWxzZSBpZiAoYmFja0J1
dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KS5jb250YWlucyhtb3VzZVBv
c2l0aW9uKSkKKyAgICB9IGVsc2UgaWYgKGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwgQmFja0J1
dHRvblN0YXJ0UGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0g
QmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxi
YXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNl
IGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5jb250YWlu
cyh0ZXN0UG9zaXRpb24pKQogICAgICAgICByZXN1bHQgPSBCYWNrQnV0dG9uRW5kUGFydDsKLSAg
ICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFy
dFBhcnQpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGVsc2UgaWYgKGZvcndhcmRCdXR0
b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkuY29udGFpbnModGVzdFBv
c2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsKLSAgICBl
bHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0
KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVj
dChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KS5jb250YWlucyh0ZXN0UG9zaXRpb24p
KQogICAgICAgICByZXN1bHQgPSBGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29t
cG9zaXRlLmgKaW5kZXggZGZkMTVlZDE4ODc4MzA4YTE3ZGFjNTQwMThmNTU1NjE5OGJmOGJiNi4u
MThlNDYxMTEzZThkOWRkMjk4MGI3MmE5NjIzZjU1OTBkZDNiNzUzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCkBAIC0zNCw3ICsz
NCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNjcm9sbGJhclRo
ZW1lIHsKIHB1YmxpYzoKICAgICAvLyBJbXBsZW1lbnQgU2Nyb2xsYmFyVGhlbWUgaW50ZXJmYWNl
CiAgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdmlydHVhbCBTY3JvbGxi
YXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVt
ZUNsaWVudCosIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVQ
YXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CiAgICAgdmlydHVhbCBp
bnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIHZpcnR1YWwgaW50
IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKaW5kZXggYWMwZGMzODQ0
OTYxMmM5NTExNzNjNDQ2NTc2NjYzOWU5Y2I5OTk2ZS4uZjg5OTQ1NzcxNzI3ZWE0MWNlOWJkOTNm
NzIwZWI3NjAyZGE4M2IyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMTUxLDEwICsxNTEsMTAgQEAgYm9vbCBTY3Jv
bGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwg
R3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFydCBTY3Jv
bGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Nyb2xsYmFy
VGhlbWVRU3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBvcHQgPSBp
bml0U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKLSAgICBjb25zdCBRUG9pbnQgcG9zID0g
c2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9uKCkpOwor
ICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhwb3NpdGlvbik7CiAgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CiAgICAg
UVN0eWxlRmFjYWRlOjpTdWJDb250cm9sIHNjID0gbV9xU3R5bGUtPmhpdFRlc3RTY3JvbGxCYXIo
b3B0LCBwb3MpOwogICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCmluZGV4IGUwNGFmYWQx
MjhkZjkzOGZjNzY5N2M2OWZjZmFkNDM2YjdlMjc2YWQuLmY5YzJjZDVjMDZhYjFiYmYzOWNlODQ4
YjA2NDI0MTAwOWYxOWQ5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
U2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxD
b3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5l
clJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhl
bWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFNjcm9s
bGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBvaW50Jik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJUaGVtZUNs
aWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzJhZTlkYjJjOGYz
MzQ5MzYxYTczYTFhOTBhOTNjNjU5OTNjM2Y5MC4uMmUzZWYzZjdjN2FkYjlkYTdhMjdiY2MyN2Y5
MGZhYTg5ZGI5MGU2NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTExLTA3ICBSb2JlcnQg
RmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJlIGV2
ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkcyBhIGdlc3R1cmUgZXZlbnQgaGFuZGxlciB0byBzY3JvbGxiYXJzIGFu
ZCBzZW5kcyBnZXN0dXJlcyBiZWdpbm5pbmcKKyAgICAgICAgb3ZlciBhIHNjcm9sbGJhciB0byB0
aGlzIGhhbmRsZXIgdG8gYWxsb3cgdG91Y2ggc2Nyb2xsaW5nIHNjcm9sbGJhcnMuCisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJl
LXNjcm9sbGJhci5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0xMSAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEzNDE0NC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dl
c3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODYzOTE5YjNkOTk3YmZjN2Y4ZDYyOWE0YWEzZWRjYjkxMTkxYWRiNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1z
Y3JvbGxiYXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgdGVzdHMgc2Nyb2xs
IGdlc3R1cmUgZXZlbnRzIG9uIGEgc2Nyb2xsIGJhci4gVGhlIHNjcm9sbGFibGUgZGl2IGJlbG93
IHNob3VsZCBiZSBzbGlnaHRseSBzY3JvbGxlZCBkb3duIGlmIHN1Y2Nlc3NmdWwuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG1vdmluZ0Rpdi5zY3JvbGxUb3AgaXMgMAor
UEFTUyBtb3ZpbmdEaXYuc2Nyb2xsVG9wIGlzID49IDEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWQxNzVjNWIxMjBhZTg1MGQ5NDAyNGFmNzg5YThjMTZlODMyYTExNQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1z
Y3JvbGxiYXIuaHRtbApAQCAtMCwwICsxLDgzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorOjotd2Via2l0LXNjcm9sbGJhciB7CisgIGJhY2tncm91bmQtY29sb3I6ICNj
Y2M7CisgIGhlaWdodDogMTVweDsKKyAgd2lkdGg6IDE1cHg7Cit9CisKKzo6LXdlYmtpdC1zY3Jv
bGxiYXItYnV0dG9uIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKworOjotd2Via2l0LXNjcm9sbGJh
ci10aHVtYiB7CisgIGJhY2tncm91bmQtY29sb3I6ICM3Nzc7CisgIGhlaWdodDogMTVweDsKKyAg
d2lkdGg6IDE1cHg7Cit9CisKKyNzY3JvbGxhYmxlIHsKKyAgICBoZWlnaHQ6IDMwMHB4OworICAg
IHdpZHRoOiAzMDBweDsKKyAgICBvdmVyZmxvdzogc2Nyb2xsOworfQorCisubGFyZ2UgeworICAg
IGhlaWdodDogNjAwcHg7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCk7Ij4KKzxkaXYgaWQ9InNjcm9sbGFibGUiPgorICA8ZGl2IGNsYXNzPSJsYXJnZSI+Cisg
IDwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFy
IG1vdmluZ0RpdjsKKworZnVuY3Rpb24gdmVydGljYWxTY3JvbGxUZXN0KCkgeworICAgIG1vdmlu
Z0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY3JvbGxhYmxlJyk7CisgICAgdmFyIHNj
cm9sbGJhclggPSBtb3ZpbmdEaXYub2Zmc2V0TGVmdCArIG1vdmluZ0Rpdi5vZmZzZXRXaWR0aCAt
IDU7CisgICAgdmFyIHNjcm9sbFRodW1iU2FmZU9mZnNldCA9IDgwOworICAgIHZhciBzY3JvbGxi
YXJZID0gbW92aW5nRGl2Lm9mZnNldFRvcCArIHNjcm9sbFRodW1iU2FmZU9mZnNldDsKKworICAg
IHNob3VsZEJlKCdtb3ZpbmdEaXYuc2Nyb2xsVG9wJywgJzAnKTsKKyAgICBldmVudFNlbmRlci5n
ZXN0dXJlVGFwRG93bihzY3JvbGxiYXJYLCBzY3JvbGxiYXJZKTsKKyAgICBldmVudFNlbmRlci5n
ZXN0dXJlU2Nyb2xsQmVnaW4oc2Nyb2xsYmFyWCwgc2Nyb2xsYmFyWSk7CisgICAgZXZlbnRTZW5k
ZXIuZ2VzdHVyZVNjcm9sbFVwZGF0ZSgwLCAyMCk7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVNj
cm9sbEVuZCgwLCAwKTsKKyAgICBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgnbW92aW5nRGl2
LnNjcm9sbFRvcCcsICcxJyk7CisgICAgLy8gSWYgd2UndmUgZ290IGhlcmUsIHdlJ3ZlIHBhc3Nl
ZC4KKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOworfQorCitmdW5jdGlvbiBleGl0SWZOZWNl
c3NhcnkoKQoreworICAgIGRlYnVnKCdHZXN0dXJlIGV2ZW50cyBub3QgaW1wbGVtZW50ZWQgb24g
dGhpcyBwbGF0Zm9ybSBvciBicm9rZW4nKTsKKyAgICBpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwor
fQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0TW9j
a1Njcm9sbGJhcnNFbmFibGVkKHRydWUpOworICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsK
KyAgICAgICAgZGVzY3JpcHRpb24oJ1RoaXMgdGVzdHMgc2Nyb2xsIGdlc3R1cmUgZXZlbnRzIG9u
IGEgc2Nyb2xsIGJhci4gJyArCisgICAgICAgICAgICAnVGhlIHNjcm9sbGFibGUgZGl2IGJlbG93
IHNob3VsZCBiZSBzbGlnaHRseSBzY3JvbGxlZCBkb3duICcgKworICAgICAgICAgICAgJ2lmIHN1
Y2Nlc3NmdWwuJyk7CisKKyAgICAgICAgaWYgKGV2ZW50U2VuZGVyLmNsZWFyVG91Y2hQb2ludHMp
CisgICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbFRlc3QoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXhpdElmTmVjZXNzYXJ5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoIlRo
aXMgdGVzdCByZXF1aXJlcyBEdW1wUmVuZGVyVHJlZS4iKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174517</attachid>
            <date>2012-11-15 14:31:30 -0800</date>
            <delta_ts>2012-11-16 08:33:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101516-20121115172926.patch</filename>
            <type>text/plain</type>
            <size>22048</size>
            <attacher name="Robert Flack">flackr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NjMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ZjZjU3MTYzMWI4OWRi
ZjQ1ZmM5YmE2NzI5NjBjYTA0MDNiODgxOC4uODY2OGE2N2U3OGNmZDEzZGE3NDJmZjc0NmQ0MmUw
Y2VmMWMxNDYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTExLTA3ICBSb2Jl
cnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJl
IGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkcyBhIGdlc3R1cmUgZXZlbnQgaGFuZGxlciB0byBzY3JvbGxiYXJz
IGFuZCBzZW5kcyBnZXN0dXJlcyBiZWdpbm5pbmcKKyAgICAgICAgb3ZlciBhIHNjcm9sbGJhciB0
byB0aGlzIGhhbmRsZXIgdG8gYWxsb3cgdG91Y2ggc2Nyb2xsaW5nIHNjcm9sbGJhcnMuCisKKyAg
ICAgICAgVGVzdDogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5o
dG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlR2VzdHVyZUV2ZW50KToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Z2VzdHVyZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhcjo6bW91c2VNb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1v
dXNlVXApOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZURvd24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChT
Y3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6aGl0VGVzdCk6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVDb21wb3NpdGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmg6CisgICAgICAgIChTY3JvbGxiYXJUaGVtZVFTdHls
ZSk6CisKIDIwMTItMTEtMTQgIEhpZGVraSBZb3NoaWRhICA8eW9zaGlkYS1oeGFAbmVjc3QubmVj
LmNvLmpwPgogCiAgICAgICAgIFtXaW5DYWlyb10gRml4IGNhaXJvX3QqIG1lbW9yeSBsZWFrIGlu
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKaW5kZXggODViODNjMWMzYzk1ZDM3ODMxMDA1MGNmMWIzMjI2N2U5ZTFmZDY1NS4uMWQy
MjJlODJhNjdjMjQ2MmI2MTljY2YwMmMzNjdlYzgzMTE3ZTgxNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcApAQCAtMzk3LDYgKzM5Nyw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpj
bGVhcigpCiAjZW5kaWYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgbV9zY3JvbGxH
ZXN0dXJlSGFuZGxpbmdOb2RlID0gMDsKKyAgICBtX3Njcm9sbGJhckhhbmRsaW5nU2Nyb2xsR2Vz
dHVyZSA9IDA7CiAjZW5kaWYKICAgICBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVyYWdl
ID0gMDsKICAgICBtX2Jhc2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpOb1R5cGU7CkBAIC0y
NTE4LDggKzI1MTksMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChj
b25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBOb2RlKiBldmVudFRhcmdldCA9IDA7Ci0gICAgaWYgKGdlc3R1cmVFdmVu
dC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCB8fCBnZXN0dXJlRXZl
bnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGUpCisgICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSAwOworICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBs
YXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxFbmQgfHwgZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQ
bGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKSB7CisgICAgICAgIHNjcm9sbGJhciA9
IG1fc2Nyb2xsYmFySGFuZGxpbmdTY3JvbGxHZXN0dXJlLmdldCgpOwogICAgICAgICBldmVudFRh
cmdldCA9IG1fc2Nyb2xsR2VzdHVyZUhhbmRsaW5nTm9kZS5nZXQoKTsKKyAgICB9CiAKICAgICBJ
bnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CiAgICAgSGl0
VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6
OlRvdWNoRXZlbnQ7CkBAIC0yNTM3LDEwICsyNTQxLDI3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpo
YW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVu
dCkKICAgICBpZiAoIXNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2ZSgpKQogICAgICAgICBoaXRU
eXBlIHw9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seTsKIAotICAgIGlmICghZXZlbnRUYXJnZXQg
fHwgIShoaXRUeXBlICYgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KSkgeworICAgIGlmICgoIXNj
cm9sbGJhciAmJiAhZXZlbnRUYXJnZXQpIHx8ICEoaGl0VHlwZSAmIEhpdFRlc3RSZXF1ZXN0OjpS
ZWFkT25seSkpIHsKICAgICAgICAgSW50UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFtZS0+dmll
dygpLT53aW5kb3dUb0NvbnRlbnRzKGFkanVzdGVkUG9pbnQpOwotICAgICAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRlc3RQb2ludCwgZmFsc2UsIGZh
bHNlLCBEb250SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOworICAgICAgICBIaXRUZXN0UmVz
dWx0IHJlc3VsdCA9IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRlc3RQb2ludCwgZmFsc2UsIGZh
bHNlLCBTaG91bGRIaXRUZXN0U2Nyb2xsYmFycywgaGl0VHlwZSk7CiAgICAgICAgIGV2ZW50VGFy
Z2V0ID0gcmVzdWx0LnRhcmdldE5vZGUoKTsKKyAgICAgICAgaWYgKCFzY3JvbGxiYXIpIHsKKyAg
ICAgICAgICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICAgICAgICAg
IHNjcm9sbGJhciA9IHZpZXcgPyB2aWV3LT5zY3JvbGxiYXJBdFBvaW50KGdlc3R1cmVFdmVudC5w
b3NpdGlvbigpKSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzY3JvbGxiYXIpCisgICAg
ICAgICAgICBzY3JvbGxiYXIgPSByZXN1bHQuc2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYg
KHNjcm9sbGJhcikgeworICAgICAgICBib29sIGV2ZW50U3dhbGxvd2VkID0gc2Nyb2xsYmFyLT5n
ZXN0dXJlRXZlbnQoZ2VzdHVyZUV2ZW50KTsKKyAgICAgICAgaWYgKGdlc3R1cmVFdmVudC50eXBl
KCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luICYmIGV2ZW50U3dhbGxvd2Vk
KQorICAgICAgICAgICAgbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1cmUgPSBzY3JvbGxi
YXI7CisgICAgICAgIGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVNjcm9sbEVuZCB8fCAhZXZlbnRTd2FsbG93ZWQpCisgICAgICAgICAgICBtX3Nj
cm9sbGJhckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CisKKyAgICAgICAgaWYgKGV2ZW50U3dh
bGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50
VGFyZ2V0KSB7CkBAIC0yNjU3LDYgKzI2NzgsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRs
ZUdlc3R1cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmUK
ICAgICByZXR1cm4gaGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoZ2VzdHVyZUV2ZW50LCBTY3JvbGxC
eVBpeGVsV2hlZWxFdmVudCwgdHJ1ZSk7CiB9CiAKK2Jvb2wgRXZlbnRIYW5kbGVyOjppc1Njcm9s
bGJhckhhbmRsaW5nR2VzdHVyZXMoKQoreworICAgIHJldHVybiBtX3Njcm9sbGJhckhhbmRsaW5n
U2Nyb2xsR2VzdHVyZS5nZXQoKTsKK30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1
cmVTY3JvbGxDb3JlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFBs
YXRmb3JtV2hlZWxFdmVudEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGxhdGNoZWRXaGVl
bCkKIHsKICAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0
aWNrTXVsdGlwbGllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDllNzI1ZGJi
NWMwMDNiOTIxY2U3MjE3ODU2MDFmOTkwNzJhMDVmN2YuLjI0NjhmMjllZjg0MDI5ZWNhMzM3NjBl
MWVjYWZhZGFhNTNjMTlhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTcw
LDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZUdlc3R1cmVMb25nUHJlc3MoY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKICAgICBib29sIGhhbmRsZUdlc3R1cmVUd29GaW5n
ZXJUYXAoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKICAgICBib29sIGhhbmRsZUdlc3R1
cmVTY3JvbGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyAgICBib29sIGlz
U2Nyb2xsYmFySGFuZGxpbmdHZXN0dXJlcygpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hf
QURKVVNUTUVOVCkKQEAgLTQ1Nyw2ICs0NTgsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQogICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05v
ZGU7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1
cmU7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVy
YWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggOGZhNDE3YzZiM2Ri
MDk2Y2UzYWExN2YxNDExMzkyMmM0OTMwMDg2NS4uMmE4ZmE4NWE0YjFlMjEyN2UxOWZhNTI5NTU2
ODZmZGE3MTJmZTIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0z
Myw2ICszMywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3Jt
R2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgI2luY2x1
ZGVzIGFyZSBhIGxheWVyaW5nIHZpb2xhdGlvbiBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIu
aCIKQEAgLTgwLDYgKzg0LDcgQEAgU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnQKICAgICAsIG1faG92
ZXJlZFBhcnQoTm9QYXJ0KQogICAgICwgbV9wcmVzc2VkUGFydChOb1BhcnQpCiAgICAgLCBtX3By
ZXNzZWRQb3MoMCkKKyAgICAsIG1fc2Nyb2xsUG9zKDApCiAgICAgLCBtX2RyYWdnaW5nRG9jdW1l
bnQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50RHJhZ1BvcygwKQogICAgICwgbV9lbmFibGVkKHRy
dWUpCkBAIC0zNTEsNiArMzU2LDQ1IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChT
Y3JvbGxiYXJQYXJ0IHBhcnQpCiAgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMs
IG1faG92ZXJlZFBhcnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBT
Y3JvbGxiYXI6Omdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZ0KQor
eworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIHN3aXRjaCAoZXZ0LnR5cGUoKSkgewor
ICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgICAgIHNldFByZXNz
ZWRQYXJ0KHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpKTsKKyAgICAgICAg
bV9wcmVzc2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZy
b21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3duQ2FuY2VsOgorICAg
IGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAgICAgICBpZiAobV9w
cmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsUG9zID0gbV9w
cmVzc2VkUG9zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOgorICAg
ICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Ny
b2xsUG9zICs9IEhvcml6b250YWxTY3JvbGxiYXIgPyBldnQuZGVsdGFYKCkgOiBldnQuZGVsdGFZ
KCk7CisgICAgICAgICAgICBtb3ZlVGh1bWIobV9zY3JvbGxQb3MsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxh
dGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDoKKyAgICAgICAgbV9zY3JvbGxQb3MgPSAwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAg
ICAgIGlmIChtX3ByZXNzZWRQYXJ0ICE9IFRodW1iUGFydCAmJiBtX3ByZXNzZWRQYXJ0ICE9IE5v
UGFydCkKKyAgICAgICAgICAgIGhhbmRsZWQgPSBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFy
dFNjcm9sbEdyYW51bGFyaXR5KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgc2V0UHJlc3NlZFBhcnQoTm9QYXJ0KTsKKyAgICBtX3By
ZXNzZWRQb3MgPSAwOworICAgIHJldHVybiBoYW5kbGVkOworfQorI2VuZGlmCisKIGJvb2wgU2Ny
b2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAg
IGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewpAQCAtMzY4LDcgKzQxMiw3IEBAIGJv
b2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQog
ICAgIGlmIChtX3ByZXNzZWRQYXJ0ICE9IE5vUGFydCkKICAgICAgICAgbV9wcmVzc2VkUG9zID0g
KG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOwogCi0gICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhl
bWUoKS0+aGl0VGVzdCh0aGlzLCBldnQpOworICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1l
KCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpOwogICAgIGlmIChwYXJ0ICE9IG1faG92
ZXJlZFBhcnQpIHsKICAgICAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7CiAgICAg
ICAgICAgICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7CkBAIC00MTQsNyArNDU4LDcgQEAg
Ym9vbCBTY3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2
ZW50KQogICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CiAgICAgICAgIC8vIG1faG92ZXJlZFBh
cnQgd29uJ3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9yIG1vdXNlRG93
biwgc28gd2UgaGF2ZSB0byBoaXQgdGVzdAogICAgICAgICAvLyB0byByZWFsbHkga25vdyBpZiB0
aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xsYmFyIG9uIGEgbW91c2VVcC4KLSAgICAgICAg
U2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50KTsK
KyAgICAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3Vz
ZUV2ZW50LnBvc2l0aW9uKCkpOwogICAgICAgICBpZiAocGFydCA9PSBOb1BhcnQpCiAgICAgICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKICAgICB9
CkBAIC00MzEsNyArNDc1LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlRG93bihjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCkKICAgICBpZiAoZXZ0LmJ1dHRvbigpID09IFJpZ2h0QnV0dG9u
KQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IEhhbmRsZWQgYXMgY29udGV4dCBtZW51
IGJ5IFF0IHJpZ2h0IG5vdy4gIFNob3VsZCBqdXN0IGF2b2lkIGV2ZW4gY2FsbGluZyB0aGlzIG1l
dGhvZCBvbiBhIHJpZ2h0IGNsaWNrIHRob3VnaC4KIAotICAgIHNldFByZXNzZWRQYXJ0KHRoZW1l
KCktPmhpdFRlc3QodGhpcywgZXZ0KSk7CisgICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0
VGVzdCh0aGlzLCBldnQucG9zaXRpb24oKSkpOwogICAgIGludCBwcmVzc2VkUG9zID0gKG9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2
dC5wb3NpdGlvbigpKS55KCkpOwogICAgIAogICAgIGlmICgobV9wcmVzc2VkUGFydCA9PSBCYWNr
VHJhY2tQYXJ0IHx8IG1fcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkgJiYgdGhlbWUo
KS0+c2hvdWxkQ2VudGVyT25UaHVtYih0aGlzLCBldnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5oCmluZGV4IDU3OGY3MDk4NTBiM2ZhOTA5YTNhNzY0MzU4Njc3MTRhODdjODQ1OTku
LmRiYzBkMTQ2YjcyYzFhYmVkOTJkNWI2NDM4MWQ4M2JiYmYyODI3YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5oCkBAIC00MSw2ICs0MSwxMCBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNl
RXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhclRoZW1lOwogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7Cisj
ZW5kaWYKKwogY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CiAKQEAgLTEyMyw2ICsxMjcsMTAgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc1dpbmRvd0FjdGl2ZSgpIGNvbnN0OwogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorICAgIGJvb2wgZ2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50Jik7CisjZW5kaWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9y
IHBsYXRmb3JtIHNjcm9sbGJhcnMgdG8gZ2l2ZSA6aG92ZXIgZmVlZGJhY2suICBUaGV5IHdpbGwg
bm90IGdldCBjYWxsZWQKICAgICAvLyB3aGVuIHRoZSBtb3VzZSB3ZW50IGRvd24gaW4gYSBzY3Jv
bGxiYXIsIHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhlIHNjcm9sbGJhciB3aWxsIHN0YXJ0CiAgICAg
Ly8gZ3JhYmJpbmcgYWxsIGV2ZW50cyBpbiB0aGF0IGNhc2UgYW55d2F5LgpAQCAtMTgzLDYgKzE5
MSw3IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CiAgICAg
U2Nyb2xsYmFyUGFydCBtX3ByZXNzZWRQYXJ0OwogICAgIGludCBtX3ByZXNzZWRQb3M7CisgICAg
ZmxvYXQgbV9zY3JvbGxQb3M7CiAgICAgYm9vbCBtX2RyYWdnaW5nRG9jdW1lbnQ7CiAgICAgaW50
IG1fZG9jdW1lbnREcmFnUG9zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWUuaAppbmRleCBjY2NjMmY5MjU2ZmQzMjI4ZDM0MWYzYzZlOTE2NThiYzlhNTU1ZGUyLi4wMWFi
MDllOTE1N2M2MDVmOGQ0NzYxYjU4ZTkwYjU2ZGVlMWRmNmVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IH07
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQorICAgIHZp
cnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
SW50UG9pbnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3Jv
bGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7
IHJldHVybiAwOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
clRoZW1lQ29tcG9zaXRlLmNwcAppbmRleCBiNzg0Y2MzM2RlZTQ2MGE4Zjc5MzIwYTQ2YTM2ZWVk
MDgzZTAxZjI1Li5kMDJhOGFhYjlhZDc4MzJlYzI2ZDBlYWM0NTYxMGViYWQ5NzljNGM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUu
Y3BwCkBAIC0xMTUsNDEgKzExNSw0MSBAQCBib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpw
YWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1TY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpo
aXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZ0KQorU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0
VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgU2Nyb2xsYmFyUGFydCByZXN1bHQgPSBOb1BhcnQ7CiAgICAgaWYgKCFz
Y3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFBv
aW50IG1vdXNlUG9zaXRpb24gPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRv
dyhldnQucG9zaXRpb24oKSk7Ci0gICAgbW91c2VQb3NpdGlvbi5tb3ZlKHNjcm9sbGJhci0+eCgp
LCBzY3JvbGxiYXItPnkoKSk7CisgICAgSW50UG9pbnQgdGVzdFBvc2l0aW9uID0gc2Nyb2xsYmFy
LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocG9zaXRpb24pOworICAgIHRlc3RQb3NpdGlv
bi5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CiAgICAgCi0gICAgaWYgKCFz
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGlmICgh
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICBy
ZXR1cm4gTm9QYXJ0OwogCiAgICAgcmVzdWx0ID0gU2Nyb2xsYmFyQkdQYXJ0OwogCiAgICAgSW50
UmVjdCB0cmFjayA9IHRyYWNrUmVjdChzY3JvbGxiYXIpOwotICAgIGlmICh0cmFjay5jb250YWlu
cyhtb3VzZVBvc2l0aW9uKSkgeworICAgIGlmICh0cmFjay5jb250YWlucyh0ZXN0UG9zaXRpb24p
KSB7CiAgICAgICAgIEludFJlY3QgYmVmb3JlVGh1bWJSZWN0OwogICAgICAgICBJbnRSZWN0IHRo
dW1iUmVjdDsKICAgICAgICAgSW50UmVjdCBhZnRlclRodW1iUmVjdDsKICAgICAgICAgc3BsaXRU
cmFjayhzY3JvbGxiYXIsIHRyYWNrLCBiZWZvcmVUaHVtYlJlY3QsIHRodW1iUmVjdCwgYWZ0ZXJU
aHVtYlJlY3QpOwotICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24p
KQorICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAg
ICAgICByZXN1bHQgPSBUaHVtYlBhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKGJlZm9yZVRodW1iUmVj
dC5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYmVmb3JlVGh1bWJS
ZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1bHQgPSBCYWNrVHJh
Y2tQYXJ0OwotICAgICAgICBlbHNlIGlmIChhZnRlclRodW1iUmVjdC5jb250YWlucyhtb3VzZVBv
c2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYWZ0ZXJUaHVtYlJlY3QuY29udGFpbnModGVzdFBv
c2l0aW9uKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEZvcndhcmRUcmFja1BhcnQ7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IFRyYWNrQkdQYXJ0OwotICAgIH0gZWxzZSBpZiAo
YmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KS5jb250YWlucyht
b3VzZVBvc2l0aW9uKSkKKyAgICB9IGVsc2UgaWYgKGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwg
QmFja0J1dHRvblN0YXJ0UGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVz
dWx0ID0gQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChz
Y3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAg
ICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5j
b250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICByZXN1bHQgPSBCYWNrQnV0dG9uRW5kUGFy
dDsKLSAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0
b25TdGFydFBhcnQpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGVsc2UgaWYgKGZvcndh
cmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkuY29udGFpbnMo
dGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsK
LSAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25F
bmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChmb3J3YXJkQnV0
dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KS5jb250YWlucyh0ZXN0UG9z
aXRpb24pKQogICAgICAgICByZXN1bHQgPSBGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmgKaW5kZXggZGZkMTVlZDE4ODc4MzA4YTE3ZGFjNTQwMThmNTU1NjE5OGJm
OGJiNi4uMThlNDYxMTEzZThkOWRkMjk4MGI3MmE5NjIzZjU1OTBkZDNiNzUzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCkBAIC0z
NCw3ICszNCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNjcm9s
bGJhclRoZW1lIHsKIHB1YmxpYzoKICAgICAvLyBJbXBsZW1lbnQgU2Nyb2xsYmFyVGhlbWUgaW50
ZXJmYWNlCiAgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdmlydHVhbCBT
Y3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CiAgICAgdmly
dHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIHZpcnR1
YWwgaW50IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKaW5kZXggYWMw
ZGMzODQ0OTYxMmM5NTExNzNjNDQ2NTc2NjYzOWU5Y2I5OTk2ZS4uZjg5OTQ1NzcxNzI3ZWE0MWNl
OWJkOTNmNzIwZWI3NjAyZGE4M2IyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMTUxLDEwICsxNTEsMTAgQEAgYm9v
bCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFy
dCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBv
cHQgPSBpbml0U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKLSAgICBjb25zdCBRUG9pbnQg
cG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9u
KCkpOworICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhwb3NpdGlvbik7CiAgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7
CiAgICAgUVN0eWxlRmFjYWRlOjpTdWJDb250cm9sIHNjID0gbV9xU3R5bGUtPmhpdFRlc3RTY3Jv
bGxCYXIob3B0LCBwb3MpOwogICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCmluZGV4IGUw
NGFmYWQxMjhkZjkzOGZjNzY5N2M2OWZjZmFkNDM2YjdlMjc2YWQuLmY5YzJjZDVjMDZhYjFiYmYz
OWNlODQ4YjA2NDI0MTAwOWYxOWQ5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRT
Y3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGNvcm5lclJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFs
IFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBv
aW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggYzc3NjcwMTRmYjFlNjQ2ZGYzODdh
ZTZjYzljNTBkODYxYmJmNWJjMC4uZTNlZTYxZmM1YWNjNzI5NjZlZDg2NWUxZjcwMGVhNzI3Zjgy
YTgyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAt
NjkyLDYgKzY5Miw4IEBAIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQogCiAgICAgc3dpdGNoIChldmVudC50eXBlKSB7CiAg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDogeworICAgICAgICBpZiAo
bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aXNTY3JvbGxiYXJIYW5k
bGluZ0dlc3R1cmVzKCkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jbGllbnQtPmNh
bmNlbFNjaGVkdWxlZENvbnRlbnRJbnRlbnRzKCk7CiAgICAgICAgIG1fbGFzdFdoZWVsUG9zaXRp
b24gPSBXZWJQb2ludChldmVudC54LCBldmVudC55KTsKICAgICAgICAgbV9sYXN0V2hlZWxHbG9i
YWxQb3NpdGlvbiA9IFdlYlBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2ZW50Lmdsb2JhbFkpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGZhZjEzYzNmZmMzODQxZDQwNmRiNjIxMDBiMjljN2Y3NjQ0NTc4NTcuLjdlNTkzYzQ1MDE3
MzM0OTkxOTQ4YTc2OWQzNTIyNmM4MGUyMzljMzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
Mi0xMS0wNyAgUm9iZXJ0IEZsYWNrICA8ZmxhY2tyQGNocm9taXVtLm9yZz4KKworICAgICAgICBI
YW5kbGUgZ2VzdHVyZSBldmVudHMgb24gc2Nyb2xsYmFycy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTUxNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBnZXN0dXJlIGV2ZW50IGhhbmRsZXIg
dG8gc2Nyb2xsYmFycyBhbmQgc2VuZHMgZ2VzdHVyZXMgYmVnaW5uaW5nCisgICAgICAgIG92ZXIg
YSBzY3JvbGxiYXIgdG8gdGhpcyBoYW5kbGVyIHRvIGFsbG93IHRvdWNoIHNjcm9sbGluZyBzY3Jv
bGxiYXJzLgorCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNj
cm9sbGJhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXIuaHRtbDogQWRkZWQuCisKIDIwMTItMTEtMTQgIFNh
bWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgT3B0aW1pemUg
cGFpbnRpbmcgb2YgY29tcG9zaXRlZCBzY3JvbGxpbmcgbGF5ZXJzCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1cmUvZ2VzdHVyZS1z
Y3JvbGxiYXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2MzkxOWIzZDk5N2JmYzdmOGQ2Mjlh
NGFhM2VkY2I5MTE5MWFkYjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitUaGlzIHRlc3RzIHNjcm9sbCBnZXN0dXJlIGV2ZW50cyBvbiBhIHNjcm9sbCBi
YXIuIFRoZSBzY3JvbGxhYmxlIGRpdiBiZWxvdyBzaG91bGQgYmUgc2xpZ2h0bHkgc2Nyb2xsZWQg
ZG93biBpZiBzdWNjZXNzZnVsLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBtb3ZpbmdEaXYuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgbW92aW5nRGl2LnNjcm9sbFRvcCBpcyA+
PSAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJl
LXNjcm9sbGJhci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9n
ZXN0dXJlLXNjcm9sbGJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkMTc1YzViMTIwYWU4NTBkOTQwMjRh
Zjc4OWE4YzE2ZTgzMmExMTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0bWwKQEAgLTAsMCArMSw4MyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKzo6LXdlYmtpdC1zY3JvbGxi
YXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOworICBoZWlnaHQ6IDE1cHg7CisgIHdpZHRo
OiAxNXB4OworfQorCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7CisgIGRpc3BsYXk6IG5v
bmU7Cit9CisKKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgeworICBiYWNrZ3JvdW5kLWNvbG9y
OiAjNzc3OworICBoZWlnaHQ6IDE1cHg7CisgIHdpZHRoOiAxNXB4OworfQorCisjc2Nyb2xsYWJs
ZSB7CisgICAgaGVpZ2h0OiAzMDBweDsKKyAgICB3aWR0aDogMzAwcHg7CisgICAgb3ZlcmZsb3c6
IHNjcm9sbDsKK30KKworLmxhcmdlIHsKKyAgICBoZWlnaHQ6IDYwMHB4OworfQorPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+Cis8ZGl2IGlkPSJzY3JvbGxhYmxl
Ij4KKyAgPGRpdiBjbGFzcz0ibGFyZ2UiPgorICA8L2Rpdj4KKzwvZGl2PgorCis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBtb3ZpbmdEaXY7CisKK2Z1bmN0aW9uIHZlcnRp
Y2FsU2Nyb2xsVGVzdCgpIHsKKyAgICBtb3ZpbmdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnc2Nyb2xsYWJsZScpOworICAgIHZhciBzY3JvbGxiYXJYID0gbW92aW5nRGl2Lm9mZnNldExl
ZnQgKyBtb3ZpbmdEaXYub2Zmc2V0V2lkdGggLSA1OworICAgIHZhciBzY3JvbGxUaHVtYlNhZmVP
ZmZzZXQgPSA4MDsKKyAgICB2YXIgc2Nyb2xsYmFyWSA9IG1vdmluZ0Rpdi5vZmZzZXRUb3AgKyBz
Y3JvbGxUaHVtYlNhZmVPZmZzZXQ7CisKKyAgICBzaG91bGRCZSgnbW92aW5nRGl2LnNjcm9sbFRv
cCcsICcwJyk7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVRhcERvd24oc2Nyb2xsYmFyWCwgc2Ny
b2xsYmFyWSk7CisgICAgZXZlbnRTZW5kZXIuZ2VzdHVyZVNjcm9sbEJlZ2luKHNjcm9sbGJhclgs
IHNjcm9sbGJhclkpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVTY3JvbGxVcGRhdGUoMCwgMjAp
OworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVTY3JvbGxFbmQoMCwgMCk7CisgICAgc2hvdWxkQmVH
cmVhdGVyVGhhbk9yRXF1YWwoJ21vdmluZ0Rpdi5zY3JvbGxUb3AnLCAnMScpOworICAgIC8vIElm
IHdlJ3ZlIGdvdCBoZXJlLCB3ZSd2ZSBwYXNzZWQuCisgICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQo
KTsKK30KKworZnVuY3Rpb24gZXhpdElmTmVjZXNzYXJ5KCkKK3sKKyAgICBkZWJ1ZygnR2VzdHVy
ZSBldmVudHMgbm90IGltcGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0gb3IgYnJva2VuJyk7Cisg
ICAgaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7Cisg
ICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZCh0cnVlKTsKKyAg
ICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7CisgICAgICAgIGRlc2NyaXB0aW9uKCdUaGlzIHRl
c3RzIHNjcm9sbCBnZXN0dXJlIGV2ZW50cyBvbiBhIHNjcm9sbCBiYXIuICcgKworICAgICAgICAg
ICAgJ1RoZSBzY3JvbGxhYmxlIGRpdiBiZWxvdyBzaG91bGQgYmUgc2xpZ2h0bHkgc2Nyb2xsZWQg
ZG93biAnICsKKyAgICAgICAgICAgICdpZiBzdWNjZXNzZnVsLicpOworCisgICAgICAgIGlmIChl
dmVudFNlbmRlci5jbGVhclRvdWNoUG9pbnRzKQorICAgICAgICAgICAgdmVydGljYWxTY3JvbGxU
ZXN0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4aXRJZk5lY2Vzc2FyeSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCJUaGlzIHRlc3QgcmVxdWlyZXMgRHVtcFJlbmRlclRy
ZWUuIik7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174694</attachid>
            <date>2012-11-16 08:33:56 -0800</date>
            <delta_ts>2012-11-16 10:18:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101516-20121116113151.patch</filename>
            <type>text/plain</type>
            <size>23027</size>
            <attacher name="Robert Flack">flackr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0OTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA1YWM2NTc5N2M2MTcw
NmQxMjdhMjk1YzhjNGZkNWYyYmJmOWI3YS4uMmE3OTAyODFiZTYzODM0ZDU1YTQ2Y2Q3NDMyZTcy
OTliZDhmOWQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEyLTExLTE2ICBSb2Jl
cnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEhhbmRsZSBnZXN0dXJl
IGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21l
cy4KKworICAgICAgICBBZGRzIGEgZ2VzdHVyZSBldmVudCBoYW5kbGVyIHRvIHNjcm9sbGJhcnMg
YW5kIHNlbmRzIGdlc3R1cmVzIGJlZ2lubmluZworICAgICAgICBvdmVyIGEgc2Nyb2xsYmFyIHRv
IHRoaXMgaGFuZGxlciB0byBhbGxvdyB0b3VjaCBzY3JvbGxpbmcgc2Nyb2xsYmFycy4KKworICAg
ICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Nyb2xsYmFyLmh0
bWwKKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpo
YW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjppc1Nj
cm9sbGJhckhhbmRsaW5nR2VzdHVyZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKEV2ZW50SGFuZGxlcik6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6U2Ny
b2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
OjpnZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6bW91c2VVcCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXI6Om1vdXNlRG93bik6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFy
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNjcm9sbGJhcik6CisgICAgICAgICog
cGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lOjpoaXRUZXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0VGVz
dCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaDoKKyAgICAg
ICAgKFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJUaGVtZVFTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVFT
dHlsZTo6aGl0VGVzdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5
bGUuaDoKKyAgICAgICAgKFNjcm9sbGJhclRoZW1lUVN0eWxlKToKKwogMjAxMi0xMS0xNiAgRXVn
ZW5lIEtseXVjaG5pa292ICA8ZXVzdGFzLmJ1Z0BnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogV29ya2Fyb3VuZCB0byBzaG93IHNob3J0Y3V0cyBmb3IgcGFuZWxzIHRoYXQgaGFz
bid0IGJlZW4gbG9hZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiOWY5OTUxMjNj
NDNlMGVjZDAyODEwODE0YmIxMDFjMTFhYmExNzhkLi5lY2U2ZTMzOGUzZDY0ZjdhNDQwZmM3MjFk
NWRlMTU0N2M3ZjI3ZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
IEBACisyMDEyLTExLTE2ICBSb2JlcnQgRmxhY2sgIDxmbGFja3JAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEhhbmRsZSBnZXN0dXJlIGV2ZW50cyBvbiBzY3JvbGxiYXJzLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNTE2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KKworICAgICAgICBBZGRzIGEgZ2VzdHVyZSBldmVudCBo
YW5kbGVyIHRvIHNjcm9sbGJhcnMgYW5kIHNlbmRzIGdlc3R1cmVzIGJlZ2lubmluZworICAgICAg
ICBvdmVyIGEgc2Nyb2xsYmFyIHRvIHRoaXMgaGFuZGxlciB0byBhbGxvdyB0b3VjaCBzY3JvbGxp
bmcgc2Nyb2xsYmFycy4KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorCiAyMDEyLTExLTE2
ICBQZXRlciBCZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLiAgUm9sbGVkIERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXgg
M2FjOTVlNjliODU3YmU0Yzc0ZDgyMjlhNDI4ZGM1ZTZlOThiMDZiNS4uM2E3NzM5ZmJlMmE4NDNh
ZmYyNmU3ODlmNzU0YjNmODcyMzRkOGFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcApAQCAtMzk3LDYgKzM5Nyw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhcigpCiAjZW5k
aWYKICNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCiAgICAgbV9zY3JvbGxHZXN0dXJlSGFuZGxp
bmdOb2RlID0gMDsKKyAgICBtX3Njcm9sbGJhckhhbmRsaW5nU2Nyb2xsR2VzdHVyZSA9IDA7CiAj
ZW5kaWYKICAgICBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVyYWdlID0gMDsKICAgICBt
X2Jhc2VFdmVudFR5cGUgPSBQbGF0Zm9ybUV2ZW50OjpOb1R5cGU7CkBAIC0yNTIwLDggKzI1MjEs
MTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYgZ2VzdHVyZUV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBOb2RlKiBldmVudFRhcmdldCA9IDA7Ci0gICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0g
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZCB8fCBnZXN0dXJlRXZlbnQudHlwZSgpID09
IFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVTY3JvbGxVcGRhdGUpCisgICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIgPSAwOworICAgIGlmIChnZXN0dXJlRXZlbnQudHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6
Okdlc3R1cmVTY3JvbGxFbmQgfHwgZ2VzdHVyZUV2ZW50LnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50
OjpHZXN0dXJlU2Nyb2xsVXBkYXRlKSB7CisgICAgICAgIHNjcm9sbGJhciA9IG1fc2Nyb2xsYmFy
SGFuZGxpbmdTY3JvbGxHZXN0dXJlLmdldCgpOwogICAgICAgICBldmVudFRhcmdldCA9IG1fc2Ny
b2xsR2VzdHVyZUhhbmRsaW5nTm9kZS5nZXQoKTsKKyAgICB9CiAKICAgICBJbnRQb2ludCBhZGp1
c3RlZFBvaW50ID0gZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCk7CiAgICAgSGl0VGVzdFJlcXVlc3Q6
OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBlID0gSGl0VGVzdFJlcXVlc3Q6OlRvdWNoRXZlbnQ7
CkBAIC0yNTM5LDEwICsyNTQzLDI3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVHZXN0dXJl
RXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKICAgICBpZiAo
IXNob3VsZEdlc3R1cmVzVHJpZ2dlckFjdGl2ZSgpKQogICAgICAgICBoaXRUeXBlIHw9IEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seTsKIAotICAgIGlmICghZXZlbnRUYXJnZXQgfHwgIShoaXRUeXBl
ICYgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5KSkgeworICAgIGlmICgoIXNjcm9sbGJhciAmJiAh
ZXZlbnRUYXJnZXQpIHx8ICEoaGl0VHlwZSAmIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSkpIHsK
ICAgICAgICAgSW50UG9pbnQgaGl0VGVzdFBvaW50ID0gbV9mcmFtZS0+dmlldygpLT53aW5kb3dU
b0NvbnRlbnRzKGFkanVzdGVkUG9pbnQpOwotICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9
IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRlc3RQb2ludCwgZmFsc2UsIGZhbHNlLCBEb250SGl0
VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUpOworICAgICAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9
IGhpdFRlc3RSZXN1bHRBdFBvaW50KGhpdFRlc3RQb2ludCwgZmFsc2UsIGZhbHNlLCBTaG91bGRI
aXRUZXN0U2Nyb2xsYmFycywgaGl0VHlwZSk7CiAgICAgICAgIGV2ZW50VGFyZ2V0ID0gcmVzdWx0
LnRhcmdldE5vZGUoKTsKKyAgICAgICAgaWYgKCFzY3JvbGxiYXIpIHsKKyAgICAgICAgICAgIEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKTsKKyAgICAgICAgICAgIHNjcm9sbGJhciA9
IHZpZXcgPyB2aWV3LT5zY3JvbGxiYXJBdFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpKSA6
IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgICAgICBzY3Jv
bGxiYXIgPSByZXN1bHQuc2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYgKHNjcm9sbGJhcikg
eworICAgICAgICBib29sIGV2ZW50U3dhbGxvd2VkID0gc2Nyb2xsYmFyLT5nZXN0dXJlRXZlbnQo
Z2VzdHVyZUV2ZW50KTsKKyAgICAgICAgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZv
cm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luICYmIGV2ZW50U3dhbGxvd2VkKQorICAgICAgICAg
ICAgbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1cmUgPSBzY3JvbGxiYXI7CisgICAgICAg
IGVsc2UgaWYgKGdlc3R1cmVFdmVudC50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNj
cm9sbEVuZCB8fCAhZXZlbnRTd2FsbG93ZWQpCisgICAgICAgICAgICBtX3Njcm9sbGJhckhhbmRs
aW5nU2Nyb2xsR2VzdHVyZSA9IDA7CisKKyAgICAgICAgaWYgKGV2ZW50U3dhbGxvd2VkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGV2ZW50VGFyZ2V0KSB7CkBA
IC0yNjU5LDYgKzI2ODAsMTEgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3Jv
bGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmUKICAgICByZXR1cm4g
aGFuZGxlR2VzdHVyZVNjcm9sbENvcmUoZ2VzdHVyZUV2ZW50LCBTY3JvbGxCeVBpeGVsV2hlZWxF
dmVudCwgdHJ1ZSk7CiB9CiAKK2Jvb2wgRXZlbnRIYW5kbGVyOjppc1Njcm9sbGJhckhhbmRsaW5n
R2VzdHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Njcm9sbGJhckhhbmRsaW5nU2Nyb2xs
R2VzdHVyZS5nZXQoKTsKK30KKwogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVTY3Jv
bGxDb3JlKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJlRXZlbnQsIFBsYXRmb3Jt
V2hlZWxFdmVudEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGxhdGNoZWRXaGVlbCkKIHsK
ICAgICBjb25zdCBmbG9hdCB0aWNrRGl2aXNvciA9IChmbG9hdClXaGVlbEV2ZW50Ojp0aWNrTXVs
dGlwbGllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IDAwYWQwYTQwOGM3ODFl
ZmRjMjZhMjk3NzUxZDcwZjYzMDk5MGY5M2YuLjQyNDE1NzMwNGU2M2M0ZDUxZmVkN2NlYjdhZTU4
YmI3NDYxZmRiYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTcyLDYgKzE3
Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhbmRsZUdlc3R1cmVMb25nUHJlc3MoY29uc3QgUGxh
dGZvcm1HZXN0dXJlRXZlbnQmKTsKICAgICBib29sIGhhbmRsZUdlc3R1cmVUd29GaW5nZXJUYXAo
Y29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKICAgICBib29sIGhhbmRsZUdlc3R1cmVTY3Jv
bGxVcGRhdGUoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyAgICBib29sIGlzU2Nyb2xs
YmFySGFuZGxpbmdHZXN0dXJlcygpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hf
QURKVVNUTUVOVCkKQEAgLTQ2MCw2ICs0NjEsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKEdF
U1RVUkVfRVZFTlRTKQogICAgIFJlZlB0cjxOb2RlPiBtX3Njcm9sbEdlc3R1cmVIYW5kbGluZ05v
ZGU7CisgICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9zY3JvbGxiYXJIYW5kbGluZ1Njcm9sbEdlc3R1
cmU7CiAjZW5kaWYKIAogICAgIGRvdWJsZSBtX21vdXNlTW92ZWREdXJhdGlvblJ1bm5pbmdBdmVy
YWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKaW5kZXggOGZhNDE3YzZiM2Ri
MDk2Y2UzYWExN2YxNDExMzkyMmM0OTMwMDg2NS4uMmE4ZmE4NWE0YjFlMjEyN2UxOWZhNTI5NTU2
ODZmZGE3MTJmZTIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCkBAIC0z
Myw2ICszMywxMCBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3Jt
R2VzdHVyZUV2ZW50LmgiCisjZW5kaWYKKwogLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgI2luY2x1
ZGVzIGFyZSBhIGxheWVyaW5nIHZpb2xhdGlvbiBhbmQgc2hvdWxkIGJlIHJlbW92ZWQuCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxiYXIu
aCIKQEAgLTgwLDYgKzg0LDcgQEAgU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnQKICAgICAsIG1faG92
ZXJlZFBhcnQoTm9QYXJ0KQogICAgICwgbV9wcmVzc2VkUGFydChOb1BhcnQpCiAgICAgLCBtX3By
ZXNzZWRQb3MoMCkKKyAgICAsIG1fc2Nyb2xsUG9zKDApCiAgICAgLCBtX2RyYWdnaW5nRG9jdW1l
bnQoZmFsc2UpCiAgICAgLCBtX2RvY3VtZW50RHJhZ1BvcygwKQogICAgICwgbV9lbmFibGVkKHRy
dWUpCkBAIC0zNTEsNiArMzU2LDQ1IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChT
Y3JvbGxiYXJQYXJ0IHBhcnQpCiAgICAgICAgIHRoZW1lKCktPmludmFsaWRhdGVQYXJ0KHRoaXMs
IG1faG92ZXJlZFBhcnQpOwogfQogCisjaWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorYm9vbCBT
Y3JvbGxiYXI6Omdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYgZXZ0KQor
eworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworICAgIHN3aXRjaCAoZXZ0LnR5cGUoKSkgewor
ICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVRhcERvd246CisgICAgICAgIHNldFByZXNz
ZWRQYXJ0KHRoZW1lKCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpKTsKKyAgICAgICAg
bV9wcmVzc2VkUG9zID0gKG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZy
b21Db250YWluaW5nV2luZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXBEb3duQ2FuY2VsOgorICAg
IGNhc2UgUGxhdGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEJlZ2luOgorICAgICAgICBpZiAobV9w
cmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Nyb2xsUG9zID0gbV9w
cmVzc2VkUG9zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlU2Nyb2xsVXBkYXRlOgorICAg
ICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKKyAgICAgICAgICAgIG1fc2Ny
b2xsUG9zICs9IEhvcml6b250YWxTY3JvbGxiYXIgPyBldnQuZGVsdGFYKCkgOiBldnQuZGVsdGFZ
KCk7CisgICAgICAgICAgICBtb3ZlVGh1bWIobV9zY3JvbGxQb3MsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxh
dGZvcm1FdmVudDo6R2VzdHVyZVNjcm9sbEVuZDoKKyAgICAgICAgbV9zY3JvbGxQb3MgPSAwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtRXZlbnQ6Okdlc3R1cmVUYXA6CisgICAg
ICAgIGlmIChtX3ByZXNzZWRQYXJ0ICE9IFRodW1iUGFydCAmJiBtX3ByZXNzZWRQYXJ0ICE9IE5v
UGFydCkKKyAgICAgICAgICAgIGhhbmRsZWQgPSBtX3Njcm9sbGFibGVBcmVhICYmIG1fc2Nyb2xs
YWJsZUFyZWEtPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFy
dFNjcm9sbEdyYW51bGFyaXR5KCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgc2V0UHJlc3NlZFBhcnQoTm9QYXJ0KTsKKyAgICBtX3By
ZXNzZWRQb3MgPSAwOworICAgIHJldHVybiBoYW5kbGVkOworfQorI2VuZGlmCisKIGJvb2wgU2Ny
b2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAg
IGlmIChtX3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewpAQCAtMzY4LDcgKzQxMiw3IEBAIGJv
b2wgU2Nyb2xsYmFyOjptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQog
ICAgIGlmIChtX3ByZXNzZWRQYXJ0ICE9IE5vUGFydCkKICAgICAgICAgbV9wcmVzc2VkUG9zID0g
KG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGV2dC5wb3NpdGlvbigpKS55KCkpOwogCi0gICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhl
bWUoKS0+aGl0VGVzdCh0aGlzLCBldnQpOworICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IHRoZW1l
KCktPmhpdFRlc3QodGhpcywgZXZ0LnBvc2l0aW9uKCkpOwogICAgIGlmIChwYXJ0ICE9IG1faG92
ZXJlZFBhcnQpIHsKICAgICAgICAgaWYgKG1fcHJlc3NlZFBhcnQgIT0gTm9QYXJ0KSB7CiAgICAg
ICAgICAgICBpZiAocGFydCA9PSBtX3ByZXNzZWRQYXJ0KSB7CkBAIC00MTQsNyArNDU4LDcgQEAg
Ym9vbCBTY3JvbGxiYXI6Om1vdXNlVXAoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2
ZW50KQogICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKSB7CiAgICAgICAgIC8vIG1faG92ZXJlZFBh
cnQgd29uJ3QgYmUgdXBkYXRlZCB1bnRpbCB0aGUgbmV4dCBtb3VzZU1vdmVkIG9yIG1vdXNlRG93
biwgc28gd2UgaGF2ZSB0byBoaXQgdGVzdAogICAgICAgICAvLyB0byByZWFsbHkga25vdyBpZiB0
aGUgbW91c2UgaGFzIGV4aXRlZCB0aGUgc2Nyb2xsYmFyIG9uIGEgbW91c2VVcC4KLSAgICAgICAg
U2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3VzZUV2ZW50KTsK
KyAgICAgICAgU2Nyb2xsYmFyUGFydCBwYXJ0ID0gdGhlbWUoKS0+aGl0VGVzdCh0aGlzLCBtb3Vz
ZUV2ZW50LnBvc2l0aW9uKCkpOwogICAgICAgICBpZiAocGFydCA9PSBOb1BhcnQpCiAgICAgICAg
ICAgICBtX3Njcm9sbGFibGVBcmVhLT5tb3VzZUV4aXRlZFNjcm9sbGJhcih0aGlzKTsKICAgICB9
CkBAIC00MzEsNyArNDc1LDcgQEAgYm9vbCBTY3JvbGxiYXI6Om1vdXNlRG93bihjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2dCkKICAgICBpZiAoZXZ0LmJ1dHRvbigpID09IFJpZ2h0QnV0dG9u
KQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRklYTUU6IEhhbmRsZWQgYXMgY29udGV4dCBtZW51
IGJ5IFF0IHJpZ2h0IG5vdy4gIFNob3VsZCBqdXN0IGF2b2lkIGV2ZW4gY2FsbGluZyB0aGlzIG1l
dGhvZCBvbiBhIHJpZ2h0IGNsaWNrIHRob3VnaC4KIAotICAgIHNldFByZXNzZWRQYXJ0KHRoZW1l
KCktPmhpdFRlc3QodGhpcywgZXZ0KSk7CisgICAgc2V0UHJlc3NlZFBhcnQodGhlbWUoKS0+aGl0
VGVzdCh0aGlzLCBldnQucG9zaXRpb24oKSkpOwogICAgIGludCBwcmVzc2VkUG9zID0gKG9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dp
bmRvdyhldnQucG9zaXRpb24oKSkueCgpIDogY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2
dC5wb3NpdGlvbigpKS55KCkpOwogICAgIAogICAgIGlmICgobV9wcmVzc2VkUGFydCA9PSBCYWNr
VHJhY2tQYXJ0IHx8IG1fcHJlc3NlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCkgJiYgdGhlbWUo
KS0+c2hvdWxkQ2VudGVyT25UaHVtYih0aGlzLCBldnQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5oCmluZGV4IDU3OGY3MDk4NTBiM2ZhOTA5YTNhNzY0MzU4Njc3MTRhODdjODQ1OTku
LmRiYzBkMTQ2YjcyYzFhYmVkOTJkNWI2NDM4MWQ4M2JiYmYyODI3YjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhci5oCkBAIC00MSw2ICs0MSwxMCBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNl
RXZlbnQ7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGJhclRoZW1lOwogCisj
aWYgRU5BQkxFKEdFU1RVUkVfRVZFTlRTKQorY2xhc3MgUGxhdGZvcm1HZXN0dXJlRXZlbnQ7Cisj
ZW5kaWYKKwogY2xhc3MgU2Nyb2xsYmFyIDogcHVibGljIFdpZGdldCwKICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNsaWVudCB7CiAKQEAgLTEyMyw2ICsxMjcsMTAgQEAg
cHVibGljOgogCiAgICAgYm9vbCBpc1dpbmRvd0FjdGl2ZSgpIGNvbnN0OwogCisjaWYgRU5BQkxF
KEdFU1RVUkVfRVZFTlRTKQorICAgIGJvb2wgZ2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2Vz
dHVyZUV2ZW50Jik7CisjZW5kaWYKKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgZm9y
IHBsYXRmb3JtIHNjcm9sbGJhcnMgdG8gZ2l2ZSA6aG92ZXIgZmVlZGJhY2suICBUaGV5IHdpbGwg
bm90IGdldCBjYWxsZWQKICAgICAvLyB3aGVuIHRoZSBtb3VzZSB3ZW50IGRvd24gaW4gYSBzY3Jv
bGxiYXIsIHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhlIHNjcm9sbGJhciB3aWxsIHN0YXJ0CiAgICAg
Ly8gZ3JhYmJpbmcgYWxsIGV2ZW50cyBpbiB0aGF0IGNhc2UgYW55d2F5LgpAQCAtMTgzLDYgKzE5
MSw3IEBAIHByb3RlY3RlZDoKICAgICBTY3JvbGxiYXJQYXJ0IG1faG92ZXJlZFBhcnQ7CiAgICAg
U2Nyb2xsYmFyUGFydCBtX3ByZXNzZWRQYXJ0OwogICAgIGludCBtX3ByZXNzZWRQb3M7CisgICAg
ZmxvYXQgbV9zY3JvbGxQb3M7CiAgICAgYm9vbCBtX2RyYWdnaW5nRG9jdW1lbnQ7CiAgICAgaW50
IG1fZG9jdW1lbnREcmFnUG9zOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhl
bWUuaAppbmRleCBjY2NjMmY5MjU2ZmQzMjI4ZDM0MWYzYzZlOTE2NThiYzlhNTU1ZGUyLi4wMWFi
MDllOTE1N2M2MDVmOGQ0NzYxYjU4ZTkwYjU2ZGVlMWRmNmVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGJhclRoZW1lLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoU2Nyb2xsYmFyVGhlbWVDbGllbnQqKSB7IH07
CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiAvKmRhbWFnZVJlY3QqLykgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVu
dCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIHsgcmV0dXJuIE5vUGFydDsgfQorICAgIHZp
cnR1YWwgU2Nyb2xsYmFyUGFydCBoaXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgY29uc3Qg
SW50UG9pbnQmKSB7IHJldHVybiBOb1BhcnQ7IH0KICAgICAKICAgICB2aXJ0dWFsIGludCBzY3Jv
bGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKSB7
IHJldHVybiAwOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhclRoZW1lQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJh
clRoZW1lQ29tcG9zaXRlLmNwcAppbmRleCBiNzg0Y2MzM2RlZTQ2MGE4Zjc5MzIwYTQ2YTM2ZWVk
MDgzZTAxZjI1Li5kMDJhOGFhYjlhZDc4MzJlYzI2ZDBlYWM0NTYxMGViYWQ5NzljNGM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUu
Y3BwCkBAIC0xMTUsNDEgKzExNSw0MSBAQCBib29sIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpw
YWludChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1TY3JvbGxiYXJQYXJ0IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpo
aXRUZXN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZ0KQorU2Nyb2xsYmFyUGFydCBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZTo6aGl0
VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24pCiB7CiAgICAgU2Nyb2xsYmFyUGFydCByZXN1bHQgPSBOb1BhcnQ7CiAgICAgaWYgKCFz
Y3JvbGxiYXItPmVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAgIEludFBv
aW50IG1vdXNlUG9zaXRpb24gPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRv
dyhldnQucG9zaXRpb24oKSk7Ci0gICAgbW91c2VQb3NpdGlvbi5tb3ZlKHNjcm9sbGJhci0+eCgp
LCBzY3JvbGxiYXItPnkoKSk7CisgICAgSW50UG9pbnQgdGVzdFBvc2l0aW9uID0gc2Nyb2xsYmFy
LT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cocG9zaXRpb24pOworICAgIHRlc3RQb3NpdGlv
bi5tb3ZlKHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXItPnkoKSk7CiAgICAgCi0gICAgaWYgKCFz
Y3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGlmICgh
c2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICBy
ZXR1cm4gTm9QYXJ0OwogCiAgICAgcmVzdWx0ID0gU2Nyb2xsYmFyQkdQYXJ0OwogCiAgICAgSW50
UmVjdCB0cmFjayA9IHRyYWNrUmVjdChzY3JvbGxiYXIpOwotICAgIGlmICh0cmFjay5jb250YWlu
cyhtb3VzZVBvc2l0aW9uKSkgeworICAgIGlmICh0cmFjay5jb250YWlucyh0ZXN0UG9zaXRpb24p
KSB7CiAgICAgICAgIEludFJlY3QgYmVmb3JlVGh1bWJSZWN0OwogICAgICAgICBJbnRSZWN0IHRo
dW1iUmVjdDsKICAgICAgICAgSW50UmVjdCBhZnRlclRodW1iUmVjdDsKICAgICAgICAgc3BsaXRU
cmFjayhzY3JvbGxiYXIsIHRyYWNrLCBiZWZvcmVUaHVtYlJlY3QsIHRodW1iUmVjdCwgYWZ0ZXJU
aHVtYlJlY3QpOwotICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKG1vdXNlUG9zaXRpb24p
KQorICAgICAgICBpZiAodGh1bWJSZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAg
ICAgICByZXN1bHQgPSBUaHVtYlBhcnQ7Ci0gICAgICAgIGVsc2UgaWYgKGJlZm9yZVRodW1iUmVj
dC5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYmVmb3JlVGh1bWJS
ZWN0LmNvbnRhaW5zKHRlc3RQb3NpdGlvbikpCiAgICAgICAgICAgICByZXN1bHQgPSBCYWNrVHJh
Y2tQYXJ0OwotICAgICAgICBlbHNlIGlmIChhZnRlclRodW1iUmVjdC5jb250YWlucyhtb3VzZVBv
c2l0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoYWZ0ZXJUaHVtYlJlY3QuY29udGFpbnModGVzdFBv
c2l0aW9uKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEZvcndhcmRUcmFja1BhcnQ7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJlc3VsdCA9IFRyYWNrQkdQYXJ0OwotICAgIH0gZWxzZSBpZiAo
YmFja0J1dHRvblJlY3Qoc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KS5jb250YWlucyht
b3VzZVBvc2l0aW9uKSkKKyAgICB9IGVsc2UgaWYgKGJhY2tCdXR0b25SZWN0KHNjcm9sbGJhciwg
QmFja0J1dHRvblN0YXJ0UGFydCkuY29udGFpbnModGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVz
dWx0ID0gQmFja0J1dHRvblN0YXJ0UGFydDsKLSAgICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChz
Y3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAg
ICBlbHNlIGlmIChiYWNrQnV0dG9uUmVjdChzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KS5j
b250YWlucyh0ZXN0UG9zaXRpb24pKQogICAgICAgICByZXN1bHQgPSBCYWNrQnV0dG9uRW5kUGFy
dDsKLSAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0
b25TdGFydFBhcnQpLmNvbnRhaW5zKG1vdXNlUG9zaXRpb24pKQorICAgIGVsc2UgaWYgKGZvcndh
cmRCdXR0b25SZWN0KHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkuY29udGFpbnMo
dGVzdFBvc2l0aW9uKSkKICAgICAgICAgcmVzdWx0ID0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDsK
LSAgICBlbHNlIGlmIChmb3J3YXJkQnV0dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25F
bmRQYXJ0KS5jb250YWlucyhtb3VzZVBvc2l0aW9uKSkKKyAgICBlbHNlIGlmIChmb3J3YXJkQnV0
dG9uUmVjdChzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KS5jb250YWlucyh0ZXN0UG9z
aXRpb24pKQogICAgICAgICByZXN1bHQgPSBGb3J3YXJkQnV0dG9uRW5kUGFydDsKICAgICByZXR1
cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyVGhlbWVDb21wb3NpdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmgKaW5kZXggZGZkMTVlZDE4ODc4MzA4YTE3ZGFjNTQwMThmNTU1NjE5OGJm
OGJiNi4uMThlNDYxMTEzZThkOWRkMjk4MGI3MmE5NjIzZjU1OTBkZDNiNzUzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5oCkBAIC0z
NCw3ICszNCw3IEBAIGNsYXNzIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIDogcHVibGljIFNjcm9s
bGJhclRoZW1lIHsKIHB1YmxpYzoKICAgICAvLyBJbXBsZW1lbnQgU2Nyb2xsYmFyVGhlbWUgaW50
ZXJmYWNlCiAgICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7Ci0gICAgdmlydHVhbCBT
Y3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxi
YXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVQYXJ0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgU2Nyb2xsYmFyUGFydCk7CiAgICAgdmly
dHVhbCBpbnQgdGh1bWJQb3NpdGlvbihTY3JvbGxiYXJUaGVtZUNsaWVudCopOwogICAgIHZpcnR1
YWwgaW50IHRodW1iTGVuZ3RoKFNjcm9sbGJhclRoZW1lQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5jcHAKaW5kZXggYWMw
ZGMzODQ0OTYxMmM5NTExNzNjNDQ2NTc2NjYzOWU5Y2I5OTk2ZS4uZjg5OTQ1NzcxNzI3ZWE0MWNl
OWJkOTNmNzIwZWI3NjAyZGE4M2IyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmNwcApAQCAtMTUxLDEwICsxNTEsMTAgQEAgYm9v
bCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotU2Nyb2xsYmFyUGFy
dCBTY3JvbGxiYXJUaGVtZVFTdHlsZTo6aGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKK1Njcm9sbGJhclBhcnQgU2Ny
b2xsYmFyVGhlbWVRU3R5bGU6OmhpdFRlc3QoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJh
ciwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQogewogICAgIFFTdHlsZUZhY2FkZU9wdGlvbiBv
cHQgPSBpbml0U2xpZGVyU3R5bGVPcHRpb24oc2Nyb2xsYmFyKTsKLSAgICBjb25zdCBRUG9pbnQg
cG9zID0gc2Nyb2xsYmFyLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvc2l0aW9u
KCkpOworICAgIGNvbnN0IFFQb2ludCBwb3MgPSBzY3JvbGxiYXItPmNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhwb3NpdGlvbik7CiAgICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7
CiAgICAgUVN0eWxlRmFjYWRlOjpTdWJDb250cm9sIHNjID0gbV9xU3R5bGUtPmhpdFRlc3RTY3Jv
bGxCYXIob3B0LCBwb3MpOwogICAgIHJldHVybiBzY3JvbGxiYXJQYXJ0KHNjKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVFTdHlsZS5oCmluZGV4IGUw
NGFmYWQxMjhkZjkzOGZjNzY5N2M2OWZjZmFkNDM2YjdlMjc2YWQuLmY5YzJjZDVjMDZhYjFiYmYz
OWNlODQ4YjA2NDI0MTAwOWYxOWQ5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUVN0eWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRU3R5bGUuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIHBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50KiwgR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRT
Y3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3Qm
IGNvcm5lclJlY3QpOwogCi0gICAgdmlydHVhbCBTY3JvbGxiYXJQYXJ0IGhpdFRlc3QoU2Nyb2xs
YmFyVGhlbWVDbGllbnQqLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAgICB2aXJ0dWFs
IFNjcm9sbGJhclBhcnQgaGl0VGVzdChTY3JvbGxiYXJUaGVtZUNsaWVudCosIGNvbnN0IEludFBv
aW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXJU
aGVtZUNsaWVudCosIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggMDY1MTZlNGE4ZmIxMDMzZjdiOTIw
YjY2ZDk2YTc3YjJiZGVkOTgwNi4uMTNiODgxYzkxODQ4NTA5ZTBlZWY2NDY3YThjM2U3ZGNlYzhl
YWJiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAt
NjkyLDYgKzY5Miw4IEBAIGJvb2wgV2ViVmlld0ltcGw6OmhhbmRsZUdlc3R1cmVFdmVudChjb25z
dCBXZWJHZXN0dXJlRXZlbnQmIGV2ZW50KQogCiAgICAgc3dpdGNoIChldmVudC50eXBlKSB7CiAg
ICAgY2FzZSBXZWJJbnB1dEV2ZW50OjpHZXN0dXJlRmxpbmdTdGFydDogeworICAgICAgICBpZiAo
bWFpbkZyYW1lSW1wbCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+aXNTY3JvbGxiYXJIYW5k
bGluZ0dlc3R1cmVzKCkpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9jbGllbnQtPmNh
bmNlbFNjaGVkdWxlZENvbnRlbnRJbnRlbnRzKCk7CiAgICAgICAgIG1fbGFzdFdoZWVsUG9zaXRp
b24gPSBXZWJQb2ludChldmVudC54LCBldmVudC55KTsKICAgICAgICAgbV9sYXN0V2hlZWxHbG9i
YWxQb3NpdGlvbiA9IFdlYlBvaW50KGV2ZW50Lmdsb2JhbFgsIGV2ZW50Lmdsb2JhbFkpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IGJmODBiZGZkNzY4NjJkZDQxZjhkYmFkOGZhMzU4YzAxZGNhY2YxMjIuLjU1Nzk1M2YzMzgw
NTE0MjMxYWQ0MjgwNjlkZGM1YTc1NjQwNzE4YjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
Mi0xMS0xNiAgUm9iZXJ0IEZsYWNrICA8ZmxhY2tyQGNocm9taXVtLm9yZz4KKworICAgICAgICBI
YW5kbGUgZ2VzdHVyZSBldmVudHMgb24gc2Nyb2xsYmFycy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTUxNgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudG9uaW8gR29tZXMuCisKKyAgICAgICAgQWRkcyBhIGdlc3R1cmUgZXZlbnQgaGFuZGxlciB0
byBzY3JvbGxiYXJzIGFuZCBzZW5kcyBnZXN0dXJlcyBiZWdpbm5pbmcKKyAgICAgICAgb3ZlciBh
IHNjcm9sbGJhciB0byB0aGlzIGhhbmRsZXIgdG8gYWxsb3cgdG91Y2ggc2Nyb2xsaW5nIHNjcm9s
bGJhcnMuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJlL2dlc3R1cmUtc2Ny
b2xsYmFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvdG91Y2gv
Z2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5odG1sOiBBZGRlZC4KKwogMjAxMi0xMS0xNiAgU3Vk
YXJzYW5hIE5hZ2luZW5pICA8c3VkYXJzYW5hLm5hZ2luZW5pQGludGVsLmNvbT4KIAogICAgICAg
ICBbRUZMXSBHYXJkZW5pbmcgZmFpbHVyZSBjYXNlcyBvbiBFRkwgYnVpbGQgYm90cwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9s
bGJhci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9nZXN0dXJl
L2dlc3R1cmUtc2Nyb2xsYmFyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NjM5MTliM2Q5OTdi
ZmM3ZjhkNjI5YTRhYTNlZGNiOTExOTFhZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMSBAQAorVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBldmVudHMgb24g
YSBzY3JvbGwgYmFyLiBUaGUgc2Nyb2xsYWJsZSBkaXYgYmVsb3cgc2hvdWxkIGJlIHNsaWdodGx5
IHNjcm9sbGVkIGRvd24gaWYgc3VjY2Vzc2Z1bC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgbW92aW5nRGl2LnNjcm9sbFRvcCBpcyAwCitQQVNTIG1vdmluZ0Rpdi5zY3Jv
bGxUb3AgaXMgPj0gMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2dlc3R1
cmUvZ2VzdHVyZS1zY3JvbGxiYXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNo
L2dlc3R1cmUvZ2VzdHVyZS1zY3JvbGxiYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZDE3NWM1YjEyMGFl
ODUwZDk0MDI0YWY3ODlhOGMxNmU4MzJhMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvdG91Y2gvZ2VzdHVyZS9nZXN0dXJlLXNjcm9sbGJhci5odG1sCkBAIC0w
LDAgKzEsODMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cis6Oi13ZWJr
aXQtc2Nyb2xsYmFyIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKKyAgaGVpZ2h0OiAxNXB4
OworICB3aWR0aDogMTVweDsKK30KKworOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24geworICBk
aXNwbGF5OiBub25lOworfQorCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogIzc3NzsKKyAgaGVpZ2h0OiAxNXB4OworICB3aWR0aDogMTVweDsKK30KKwor
I3Njcm9sbGFibGUgeworICAgIGhlaWdodDogMzAwcHg7CisgICAgd2lkdGg6IDMwMHB4OworICAg
IG92ZXJmbG93OiBzY3JvbGw7Cit9CisKKy5sYXJnZSB7CisgICAgaGVpZ2h0OiA2MDBweDsKK30K
Kzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorPGRpdiBpZD0i
c2Nyb2xsYWJsZSI+CisgIDxkaXYgY2xhc3M9ImxhcmdlIj4KKyAgPC9kaXY+Cis8L2Rpdj4KKwor
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit2YXIgbW92aW5nRGl2OworCitmdW5j
dGlvbiB2ZXJ0aWNhbFNjcm9sbFRlc3QoKSB7CisgICAgbW92aW5nRGl2ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3Njcm9sbGFibGUnKTsKKyAgICB2YXIgc2Nyb2xsYmFyWCA9IG1vdmluZ0Rp
di5vZmZzZXRMZWZ0ICsgbW92aW5nRGl2Lm9mZnNldFdpZHRoIC0gNTsKKyAgICB2YXIgc2Nyb2xs
VGh1bWJTYWZlT2Zmc2V0ID0gODA7CisgICAgdmFyIHNjcm9sbGJhclkgPSBtb3ZpbmdEaXYub2Zm
c2V0VG9wICsgc2Nyb2xsVGh1bWJTYWZlT2Zmc2V0OworCisgICAgc2hvdWxkQmUoJ21vdmluZ0Rp
di5zY3JvbGxUb3AnLCAnMCcpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVUYXBEb3duKHNjcm9s
bGJhclgsIHNjcm9sbGJhclkpOworICAgIGV2ZW50U2VuZGVyLmdlc3R1cmVTY3JvbGxCZWdpbihz
Y3JvbGxiYXJYLCBzY3JvbGxiYXJZKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlU2Nyb2xsVXBk
YXRlKDAsIDIwKTsKKyAgICBldmVudFNlbmRlci5nZXN0dXJlU2Nyb2xsRW5kKDAsIDApOworICAg
IHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCdtb3ZpbmdEaXYuc2Nyb2xsVG9wJywgJzEnKTsK
KyAgICAvLyBJZiB3ZSd2ZSBnb3QgaGVyZSwgd2UndmUgcGFzc2VkLgorICAgIGlzU3VjY2Vzc2Z1
bGx5UGFyc2VkKCk7Cit9CisKK2Z1bmN0aW9uIGV4aXRJZk5lY2Vzc2FyeSgpCit7CisgICAgZGVi
dWcoJ0dlc3R1cmUgZXZlbnRzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIG9yIGJy
b2tlbicpOworICAgIGlzU3VjY2Vzc2Z1bGx5UGFyc2VkKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRl
c3QoKQoreworICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQo
dHJ1ZSk7CisgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICBkZXNjcmlwdGlv
bignVGhpcyB0ZXN0cyBzY3JvbGwgZ2VzdHVyZSBldmVudHMgb24gYSBzY3JvbGwgYmFyLiAnICsK
KyAgICAgICAgICAgICdUaGUgc2Nyb2xsYWJsZSBkaXYgYmVsb3cgc2hvdWxkIGJlIHNsaWdodGx5
IHNjcm9sbGVkIGRvd24gJyArCisgICAgICAgICAgICAnaWYgc3VjY2Vzc2Z1bC4nKTsKKworICAg
ICAgICBpZiAoZXZlbnRTZW5kZXIuY2xlYXJUb3VjaFBvaW50cykKKyAgICAgICAgICAgIHZlcnRp
Y2FsU2Nyb2xsVGVzdCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleGl0SWZOZWNlc3Nh
cnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIER1
bXBSZW5kZXJUcmVlLiIpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>