<?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>67171</bug_id>
          
          <creation_ts>2011-08-29 17:28:17 -0700</creation_ts>
          <short_desc>requestAnimationFrame doesn&apos;t throttle on Mac</short_desc>
          <delta_ts>2012-01-03 17:28:58 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/webkit/SpiritBox.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>64591</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>dino</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>jamesr</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>458587</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-08-29 17:28:17 -0700</bug_when>
    <thetext>The demos at the WebGL repository run at hundreds of FPS on Mac. They use requestAnimationFrame, which is not throttled and should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459787</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-08-31 11:42:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/10054266&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459886</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-08-31 13:52:39 -0700</bug_when>
    <thetext>We should also throttle to 1 fps or below in inactive tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460635</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-01 11:36:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; We should also throttle to 1 fps or below in inactive tabs.

Please read the discussion on public-web-perf@w3.org about this.  Currently in Chrome we throttle inactive tabs completely, but Firefox fires at a very low rate.  We&apos;ve considered moving to a 0.1Hz throttle for inactive tabs, but haven&apos;t done this yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465140</commentid>
    <comment_count>4</comment_count>
      <attachid>106946</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-09 17:32:59 -0700</bug_when>
    <thetext>Created attachment 106946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465145</commentid>
    <comment_count>5</comment_count>
      <attachid>106946</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-09-09 17:43:58 -0700</bug_when>
    <thetext>Comment on attachment 106946
Patch

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

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:40
&gt; +#define MaximumAnimationInterval 0.015

This is a minimum interval, not a maximum

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:142
&gt; +    double scheduleTime = MaximumAnimationInterval - (currentTime() - m_timeSinceLastAnimationFrame);

scheduleTime is not an absolute time, it&apos;s an interval. The name should reflect this. Call it &apos;delay&apos; maybe.

Is currentTime() the right thing to use? I thought we had a &quot;time for all the current animations&quot; value.

I find this hard to read. Is m_timeSinceLastAnimationFrame just there for clamping? If so, what&apos;s MaximumAnimationInterval for?

m_timeSinceLastAnimationFrame is also poorly named. It&apos;s not an interval, it&apos;s an absolute time.

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:155
&gt; +    m_timeSinceLastAnimationFrame = currentTime();

Is currentTime() the right thing to use again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465152</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-09 18:10:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 106946 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106946&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:40
&gt; &gt; +#define MaximumAnimationInterval 0.015
&gt; 
&gt; This is a minimum interval, not a maximum
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:142
&gt; &gt; +    double scheduleTime = MaximumAnimationInterval - (currentTime() - m_timeSinceLastAnimationFrame);
&gt; 
&gt; scheduleTime is not an absolute time, it&apos;s an interval. The name should reflect this. Call it &apos;delay&apos; maybe.
&gt; 
&gt; Is currentTime() the right thing to use? I thought we had a &quot;time for all the current animations&quot; value.
&gt; 
&gt; I find this hard to read. Is m_timeSinceLastAnimationFrame just there for clamping? If so, what&apos;s MaximumAnimationInterval for?
&gt; 
&gt; m_timeSinceLastAnimationFrame is also poorly named. It&apos;s not an interval, it&apos;s an absolute time.

Everything above has been changed...

&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:155
&gt; &gt; +    m_timeSinceLastAnimationFrame = currentTime();
&gt; 
&gt; Is currentTime() the right thing to use again?

This is what we were using with the old implementation, so I think we should keep it, at least until we get the CSS Animations to fire off rAF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465153</commentid>
    <comment_count>7</comment_count>
      <attachid>106949</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-09 18:12:24 -0700</bug_when>
    <thetext>Created attachment 106949
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465166</commentid>
    <comment_count>8</comment_count>
      <attachid>106949</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-09-09 18:42:44 -0700</bug_when>
    <thetext>Comment on attachment 106949
Patch

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

&gt; Source/WebCore/dom/ScriptedAnimationController.cpp:145
&gt; +    double scheduleDelay = max(MinimumAnimationInterval - (currentTime() - m_lastAnimationFrameTime), 0.0);

You can use max&lt;double&gt; to avoid the &quot;0.0&quot;.

&gt; Source/WebCore/dom/ScriptedAnimationController.h:76
&gt; +    Timer&lt;ScriptedAnimationController&gt; m_animationTimer;\

I don&apos;t think this compiled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465292</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-10 06:58:12 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 106949 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=106949&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.cpp:145
&gt; &gt; +    double scheduleDelay = max(MinimumAnimationInterval - (currentTime() - m_lastAnimationFrameTime), 0.0);

Done

&gt; 
&gt; You can use max&lt;double&gt; to avoid the &quot;0.0&quot;.
&gt; 
&gt; &gt; Source/WebCore/dom/ScriptedAnimationController.h:76
&gt; &gt; +    Timer&lt;ScriptedAnimationController&gt; m_animationTimer;\
&gt; 
&gt; I don&apos;t think this compiled.

Yeah, I don&apos;t know where that came from. Gone now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465295</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-10 07:20:07 -0700</bug_when>
    <thetext>Committed r94908: &lt;http://trac.webkit.org/changeset/94908&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465766</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-12 13:38:19 -0700</bug_when>
    <thetext>Is there any particular reason why you picked 15ms instead of 16ms (or possibly a repeating pattern of 16,17,17,16,17,17,... to try to match up with 60Hz displays)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465793</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-09-12 14:23:55 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Is there any particular reason why you picked 15ms instead of 16ms (or possibly a repeating pattern of 16,17,17,16,17,17,... to try to match up with 60Hz displays)?

Well, there&apos;s no &quot;matching up&quot; going on. So the best we could do it tune the number to 60hz so we don&apos;t, on average, render more times that is being displayed. The problem with setting the number to 16.67ms is that in many cases that will cause you to miss a 60Hz rate due to the overhead of firing the timer and servicing the event. So 15ms mostly avoid renders that will never be seen, but will prevent the overhead from causing a framerate miss.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529201</commentid>
    <comment_count>13</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-01-03 17:28:58 -0800</bug_when>
    <thetext>I disagree this patch.
I think each platform (ex&gt; webview) should throttle FPS, not WebCore.

I have the counter example.
If 2d canvas has heavy animation, it is possible that requestAnimationFrame is called several times per one update of WebView.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106946</attachid>
            <date>2011-09-09 17:32:59 -0700</date>
            <delta_ts>2011-09-09 18:12:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67171-20110909173303.patch</filename>
            <type>text/plain</type>
            <size>21882</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ4NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM5
ZjQxM2RjZmIzNDcwZTdhNWEwYWNiN2NlMzA0N2Y4N2IwMTFkNGIuLmZmYjAxZWQyYTQwMjRmYmI4
MDk5ZWZlNzczMzgyYzZjMGMxOGYxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDExLTA5LTA5ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4K
KworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZG9lc24ndCB0aHJvdHRsZSBvbiBNYWMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgV1RG
X1VTRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUiB0byBhbGxvdyBhbnkgcGxhdGZvcm0g
dG8gcnVuCisgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSBjYWxsYmFja3Mgb24gYSBUaW1l
ciBkZWZpbmVkIGluIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci4KKyAgICAgICAgQ3VycmVu
dGx5IG9ubHkgZW5hYmxlZCBmb3IgUExBVEZPUk0oTUFDKQorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisKIDIwMTEtMDktMDggIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5NDgxMSk6IEFzc2VydGlvbiBmYWlsdXJlIGlu
IDIgd29ya2VyIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggYzQw
MjUwZmUzYWI1MGJhNGMyMTU4MGM3YmUwYTQ5Nzc1MzVkNTU2Mi4uYTYxNDkwYzg4Nzk1OWZhNjMz
MWZhYTNlYWY4NzY5YWQ3Y2IwZjEzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aApAQCAtMTE3MCw0ICsxMTcwLDggQEAKICNkZWZpbmUgV1RGX1VTRV9BVkZPVU5EQVRJT04gMQog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIFdURl9VU0VfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfVElNRVIgMQorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDgzZDdmMGJiMjM5MjIyMzRlMjkzZTA3NTczNzE0Zjk3NTRmZTA1MDMu
LmZiYzA1MDAzY2U1ZDkzZGJiMmZmZWJiMGY5MzkwOGIxYTUzMzAwMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wOS0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgdGhyb3R0bGUgb24g
TWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHVzZSBhIFRpbWVyIGluIFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcgorICAgICAgICBvbiBNYWMsIHJhdGhlciB0aGFuIHJ1bkxvb3BPYnNlcnZl
cnMuIFRoZSBUaW1lciBpcyB0aHJvdHRsZWQgdG8gZmlyZSBubworICAgICAgICBmYXN0ZXIgdGhh
biBldmVyeSAxNW1zLiBJdCBpcyBiZWhpbmQgYSBXVEZfVVNFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FX1RJTUVSCisgICAgICAgIGZsYWcgYW5kIGNhbiBiZSB1c2VkIGJ5IGFueSBpbXBsZW1lbnRh
dGlvbiwgYnV0IGN1cnJlbnRseSBpdCBpcyBvbmx5IGVuYWJsZWQKKyAgICAgICAgYnkgUExBVEZP
Uk0oTUFDKS4KKworICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpyZWdpc3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5p
bWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgICogZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdl
L0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNjaGVkdWxlQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorCiAyMDExLTA5LTA4ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGEgV2ViS2l0
QW5pbWF0aW9uRXZlbnQgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDBjNzAzNTkwM2VlZDBhNDE0MzVm
MWVkNjNkYzZkOTE3YmVhNWFjMjkuLmVhNjk4ODIyNjg5ZGViZTViYTU1N2E4YzBlYWEwOWQyYzBh
ZDRhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC0zMywxMiArMzMsMjMgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIgogCisjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorCisvLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNh
biBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgorI2RlZmluZSBNYXhpbXVtQW5pbWF0aW9u
SW50ZXJ2YWwgMC4wMTUKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNjcmlwdGVk
QW5pbWF0aW9uQ29udHJvbGxlcjo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3VtZW50
KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX25leHRDYWxs
YmFja0lkKDApCiAgICAgLCBtX3N1c3BlbmRDb3VudCgwKQorI2lmIFVTRShSRVFVRVNUX0FOSU1B
VElPTl9GUkFNRV9USU1FUikKKyAgICAsIG1fYW5pbWF0aW9uVGltZXIodGhpcywgJlNjcmlwdGVk
QW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fdGltZVNp
bmNlTGFzdEFuaW1hdGlvbkZyYW1lKDApCisjZW5kaWYKIHsKIH0KIApAQCAtNTEsOCArNjIsNyBA
QCB2b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lKCkKIHsKICAgICAtLW1f
c3VzcGVuZENvdW50OwogICAgIGlmICghbV9zdXNwZW5kQ291bnQgJiYgbV9jYWxsYmFja3Muc2l6
ZSgpKQotICAgICAgICBpZiAoRnJhbWVWaWV3KiBmdiA9IG1fZG9jdW1lbnQtPnZpZXcoKSkKLSAg
ICAgICAgICAgIGZ2LT5zY2hlZHVsZUFuaW1hdGlvbigpOworICAgICAgICBzY2hlZHVsZUFuaW1h
dGlvbigpOwogfQogCiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OkNhbGxiYWNrSWQgU2Ny
aXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpyZWdpc3RlckNhbGxiYWNrKFBhc3NSZWZQdHI8UmVx
dWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2s+IGNhbGxiYWNrLCBFbGVtZW50KiBhbmltYXRpb25F
bGVtZW50KQpAQCAtNjMsOCArNzMsNyBAQCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OkNh
bGxiYWNrSWQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpyZWdpc3RlckNhbAogICAgIGNh
bGxiYWNrLT5tX2VsZW1lbnQgPSBhbmltYXRpb25FbGVtZW50OwogICAgIG1fY2FsbGJhY2tzLmFw
cGVuZChjYWxsYmFjayk7CiAgICAgaWYgKCFtX3N1c3BlbmRDb3VudCkKLSAgICAgICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IG1fZG9jdW1lbnQtPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXctPnNj
aGVkdWxlQW5pbWF0aW9uKCk7CisgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAgICAgcmV0
dXJuIGlkOwogfQogCkBAIC0xMjQsOSArMTMzLDI5IEBAIHZvaWQgU2NyaXB0ZWRBbmltYXRpb25D
b250cm9sbGVyOjpzZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKERPTVRpbWVTdGFtcCB0aW1lKQog
ICAgIH0KIAogICAgIGlmIChtX2NhbGxiYWNrcy5zaXplKCkpCi0gICAgICAgIGlmIChGcmFtZVZp
ZXcqIHZpZXcgPSBtX2RvY3VtZW50LT52aWV3KCkpCi0gICAgICAgICAgICB2aWV3LT5zY2hlZHVs
ZUFuaW1hdGlvbigpOworICAgICAgICBzY2hlZHVsZUFuaW1hdGlvbigpOwogfQorICAgIAordm9p
ZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlQW5pbWF0aW9uKCkKK3sKKyNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCisgICAgZG91YmxlIHNjaGVkdWxl
VGltZSA9IE1heGltdW1BbmltYXRpb25JbnRlcnZhbCAtIChjdXJyZW50VGltZSgpIC0gbV90aW1l
U2luY2VMYXN0QW5pbWF0aW9uRnJhbWUpOworICAgIGlmIChzY2hlZHVsZVRpbWUgPCAwKQorICAg
ICAgICBzY2hlZHVsZVRpbWUgPSAwOworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90
KHNjaGVkdWxlVGltZSk7CisjZWxzZQorICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1f
ZG9jdW1lbnQtPnZpZXcoKSkKKyAgICAgICAgZnJhbWVWaWV3LT5zY2hlZHVsZUFuaW1hdGlvbigp
OworI2VuZGlmCit9CisKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCit2
b2lkIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1l
cjxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAgICBtX3RpbWVTaW5jZUxhc3RB
bmltYXRpb25GcmFtZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgc2VydmljZVNjcmlwdGVkQW5pbWF0
aW9ucyhtX3RpbWVTaW5jZUxhc3RBbmltYXRpb25GcmFtZSk7Cit9CisjZW5kaWYKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmgKaW5k
ZXggNzE0MTk2ODllNzcxZjdmMmJhZDhkZjcyOGVjYWVlNmQyNDI4YjEyZS4uY2FiMTlhM2IzMDk2
ZjBmNTU0YmZmYjRiZThmMDgyMGY3NWRmYjYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMjgsNiArMjgsOSBAQAogCiAjaWYg
RU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogI2luY2x1ZGUgIkRPTVRpbWVTdGFtcC5o
IgorI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUikKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01OCwxMiArNjEsMjEg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNjcmlwdGVkQW5pbWF0aW9uQ29u
dHJvbGxlcihEb2N1bWVudCopOworICAgIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxSZXF1
ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjaz4gPiBDYWxsYmFja0xpc3Q7CiAgICAgQ2FsbGJhY2tM
aXN0IG1fY2FsbGJhY2tzOwogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgQ2FsbGJh
Y2tJZCBtX25leHRDYWxsYmFja0lkOwogICAgIGludCBtX3N1c3BlbmRDb3VudDsKKworICAgIHZv
aWQgc2NoZWR1bGVBbmltYXRpb24oKTsKKworI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RV9USU1FUikKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8U2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyPiopOworICAgIFRpbWVyPFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxl
cj4gbV9hbmltYXRpb25UaW1lcjtcCisgICAgZG91YmxlIG1fdGltZVNpbmNlTGFzdEFuaW1hdGlv
bkZyYW1lOworI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRW1wdHlDbGllbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgK
aW5kZXggY2VkYjMzMzZlODRjYmIxMjk3ZDlmMjY3YzNjZWY5YWUxMWJkNTU5OC4uNzVjNTM1YThm
MDIyNWE4YzIwY2YyYzlkYjNjODA4OGFmZjFjZTNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaApAQCAtMTY0LDcgKzE2NCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVElMRURf
QkFDS0lOR19TVE9SRSkKICAgICB2aXJ0dWFsIHZvaWQgZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVk
KGNvbnN0IEludFBvaW50JikgeyB9CiAjZW5kaWYKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFu
aW1hdGlvbigpIHsgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBkNmNiNjhh
NzNmZTBlM2NjNjRkMDI1YWUxNTJjZTk4NjYwYWU4NDI4Li44ZGUwN2Y0ZThhN2RiMGJmMDY5MzQw
MGVhNGQ4OTI1MDU0Yzg5YjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC01MTQsNyArNTE0
LDkgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhp
ZGRlblVudGlsTW91c2VNb3ZlcykKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
CiB2b2lkIENocm9tZTo6c2NoZWR1bGVBbmltYXRpb24oKQogeworI2lmICFVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7
CisjZW5kaWYKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAz
YzlhNzVhZDc0YmM0ZWU1ZjFhNjExNjg1NTVjZDY0ZGZkYzAyOWNlLi4wYWQ3NjYxM2MxODQzMGRk
YjNjYzIwN2NlMDlmYWU5ZmZkZTlhMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
QEAgLTE1OSw3ICsxNTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzY3JvbGxiYXJzTW9kZURpZENoYW5nZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVh
bCB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpICYmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsKICNlbmRpZgogICAgICAgICAvLyBFbmQg
bWV0aG9kcyB1c2VkIGJ5IEhvc3RXaW5kb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMzM2NTI4MzYz
YTc4YzI1ZWZhYTMxZGJkZDRjMGJhZWQ3YzY1NDBmNS4uMWY2ZWIzOGY5ZDgwOTQzMWQ5YWQ0Mzg1
ODgwNmM0NDYxMWFjZTBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEx
LTA5LTA5ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICByZXF1
ZXN0QW5pbWF0aW9uRnJhbWUgZG9lc24ndCB0aHJvdHRsZSBvbiBNYWMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTcxCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBydW5Mb29wT2JzZXJ2ZXIg
Zm9yIHJlcXVlc3RBbmltYXRpb25GcmFtZS4gSXQncyBub3cKKyAgICAgICAgZG9uZSBieSBhIFRp
bWVyIGluIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlciBpbiBXZWJDb3JlLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKC1bV2ViVmlldyBfY2xvc2VdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdE
YXRhLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKwogMjAxMS0wOS0w
OCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQ29t
cGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBk
YzQ3ZTg3NjMzZDRhNDIzYmIxMjJiZmJjNmFjMjNlYmZjNzRkMDlhLi5iZDJkM2NhMjg5M2Q0ZDg1
YTNjN2I5MjJmNzQyNWJkZTcyM2ViNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTI4LDEwICsxMjgsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpOwog
Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgICAgICB2aXJ0dWFsIHZv
aWQgc2NoZWR1bGVBbmltYXRpb24oKTsKLSNlbmRpZgotCiAgICAgdmlydHVhbCBXZWJDb3JlOjpG
bG9hdFJlY3QgY3VzdG9tSGlnaGxpZ2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpB
dG9taWNTdHJpbmcmIHR5cGUsCiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGlu
ZVJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChXZWJDb3JlOjpO
b2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggOTZkNjU3ZTEx
NTE1NzZjNzA5MzJmNmM2ZmI3ZWE1ZGRkZDRmMWVmYi4uY2Y1Y2RjZTg1ZGI3MzE5NzUyMTYwN2Q1
YjUyMjNlNzA1ZmI4YTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtOTQyLDE1ICs5NDIsNiBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3luYygpCiAKICNlbmRpZgogCi0j
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnNjaGVkdWxlQW5pbWF0aW9uKCkKLXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgW21fd2ViVmlldyBfc2NoZWR1bGVBbmltYXRpb25dOwotICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShWSURFTykKIAogYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnN1cHBvcnRzRnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAyNTI5NTc5ZGIxNjUwYTNkMmY3
MTRlMDI3M2VjODFlYWY4MTk0Nzg4Li5jZjEwOTk0YTYwNmNmYzU5ZDIxYTI5NGMwYWM2ZGNjOTc3
NTk4ODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
KysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0zOTUsOSArMzk1
LDYgQEAgRmluZE9wdGlvbnMgY29yZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucykKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAtICh2b2lkKV9jbGVhckxheWVyU3luY0xv
b3BPYnNlcnZlcjsKICNlbmRpZgotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
LS0gKHZvaWQpX3Vuc2NoZWR1bGVBbmltYXRpb247Ci0jZW5kaWYKICNpZiBFTkFCTEUoR0xJQl9T
VVBQT1JUKQogLSAodm9pZClfY2xlYXJHbGliTG9vcE9ic2VydmVyOwogI2VuZGlmCkBAIC0xMjI2
LDEwICsxMjIzLDYgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkK
ICAgICBbc2VsZiBfY2xlYXJMYXllclN5bmNMb29wT2JzZXJ2ZXJdOwogI2VuZGlmCiAgICAgCi0j
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIFtzZWxmIF91bnNjaGVkdWxl
QW5pbWF0aW9uXTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKEdMSUJfU1VQUE9SVCkKICAgICBbc2Vs
ZiBfY2xlYXJHbGliTG9vcE9ic2VydmVyXTsKICNlbmRpZgpAQCAtNTkyOSwxOCArNTkyMiw2IEBA
IHN0YXRpYyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQog
fQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0tICh2b2lk
KV91bnNjaGVkdWxlQW5pbWF0aW9uCi17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+cmVxdWVzdEFuaW1h
dGlvbkZyYW1lUnVuTG9vcE9ic2VydmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxv
b3BPYnNlcnZlckludmFsaWRhdGUoX3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxv
b3BPYnNlcnZlcik7Ci0gICAgQ0ZSZWxlYXNlKF9wcml2YXRlLT5yZXF1ZXN0QW5pbWF0aW9uRnJh
bWVSdW5Mb29wT2JzZXJ2ZXIpOwotICAgIF9wcml2YXRlLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVS
dW5Mb29wT2JzZXJ2ZXIgPSAwOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoR0xJQl9TVVBQT1JU
KQogLSAodm9pZClfY2xlYXJHbGliTG9vcE9ic2VydmVyCiB7CkBAIC02MjIwLDM0ICs2MjAxLDYg
QEAgc3RhdGljIHZvaWQgbGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29w
T2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGkKIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCi1zdGF0aWMgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5M
b29wT2JzZXJ2ZXJDYWxsYmFjayhDRlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZp
dHksIHZvaWQqIGluZm8pCi17Ci0gICAgV2ViVmlldyAqd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViVmlldyo+KGluZm8pOwotICAgIFt3ZWJWaWV3IF91bnNjaGVkdWxlQW5pbWF0aW9uXTsK
LSAgICAKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gW3dlYlZpZXcgX21haW5Db3JlRnJhbWVdKQot
ICAgICAgICBpZiAoRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKQotICAgICAg
ICAgICAgZnJhbWVWaWV3LT5zZXJ2aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRz
VG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUoKSkpOwotfQotCi0tICh2b2lkKV9zY2hlZHVsZUFu
aW1hdGlvbgotewotICAgIGlmICghX3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxv
b3BPYnNlcnZlcikgewotICAgICAgICBDRlJ1bkxvb3BSZWYgY3VycmVudFJ1bkxvb3AgPSBDRlJ1
bkxvb3BHZXRDdXJyZW50KCk7Ci0gICAgCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB3YWtlIHVw
IHRoZSBsb29wIG9yIHRoZSBvYnNlcnZlciBjb3VsZCBiZSBkZWxheWVkIHVudGlsIHNvbWUgb3Ro
ZXIgc291cmNlIGZpcmVzLgotICAgICAgICBDRlJ1bkxvb3BXYWtlVXAoY3VycmVudFJ1bkxvb3Ap
OwotCi0gICAgICAgIC8vIFJ1biBiZWZvcmUgdGhlIGxheWVyU3luY1J1bkxvb3BPYnNlcnZlciwg
d2hpY2ggaGFzIG9yZGVyIE5TRGlzcGxheVdpbmRvd1J1bkxvb3BPcmRlcmluZyArIDIuCi0gICAg
ICAgIGNvbnN0IENGSW5kZXggcnVuTG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9vcE9y
ZGVyaW5nICsgMTsKLSAgICAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7
IDAsIHNlbGYsIDAsIDAsIDAgfTsKLSAgICAgICAgX3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25G
cmFtZVJ1bkxvb3BPYnNlcnZlciA9IENGUnVuTG9vcE9ic2VydmVyQ3JlYXRlKDAsIGtDRlJ1bkxv
b3BCZWZvcmVXYWl0aW5nIHwga0NGUnVuTG9vcEV4aXQsIE5PLCBydW5Mb29wT3JkZXIsIHJlcXVl
c3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlckNhbGxiYWNrLCAmY29udGV4dCk7Ci0gICAg
ICAgIENGUnVuTG9vcEFkZE9ic2VydmVyKGN1cnJlbnRSdW5Mb29wLCBfcHJpdmF0ZS0+cmVxdWVz
dEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwot
ICAgIH0KLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKQogCiAtICh2b2lkKV9lbnRlckZ1
bGxzY3JlZW5Gb3JOb2RlOihXZWJDb3JlOjpOb2RlKilub2RlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXdEYXRhLmgKaW5kZXggZGQ5NjhkYTJkYWNkZDY2NDg1Yjk1ZDMxMWY0YWVhZDE0
ZmI3ZGRlMi4uYTA3M2ViMTNiODM2OTQ1OWMzMGU4NTAwNjNhZjY4NTAzNGE4OTlmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0RhdGEuaApAQCAtMTU1LDEwICsxNTUsNiBAQCBl
eHRlcm4gaW50IHBsdWdpbkRhdGFiYXNlQ2xpZW50Q291bnQ7CiAgICAgQ0ZSdW5Mb29wT2JzZXJ2
ZXJSZWYgbGF5ZXJTeW5jUnVuTG9vcE9ic2VydmVyOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgcmVxdWVzdEFu
aW1hdGlvbkZyYW1lUnVuTG9vcE9ic2VydmVyOwotI2VuZGlmCi0KICAgICBOU1Bhc3RlYm9hcmQg
Kmluc2VydGlvblBhc3RlYm9hcmQ7CiAgICAgICAgICAgICAKICAgICBOU1NpemUgbGFzdExheW91
dFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRl
cm5hbC5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAppbmRl
eCBhMTA3YjhmOTJhNDNjMDQ1YmRhMzM5ZWM1M2EyZjg0N2MwNWViZGZmLi40M2I5YjA4ZDUxNWRm
NmYyMjI5Y2M4NmM3YjM4NDI0NGI1OGYyMDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlld0ludGVybmFsLmgKQEAgLTkzLDEwICs5Myw2IEBAIFdlYkNvcmU6OkZpbmRPcHRp
b25zIGNvcmVPcHRpb25zKFdlYkZpbmRPcHRpb25zIG9wdGlvbnMpOwogLSAodm9pZClfc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyU3luYzsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotLSAodm9pZClfc2NoZWR1bGVBbmltYXRpb247Ci0jZW5kaWYKLQogI2lm
IEVOQUJMRShHTElCX1NVUFBPUlQpCiAtICh2b2lkKV9zY2hlZHVsZUdsaWJDb250ZXh0SXRlcmF0
aW9uczsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDkwMmJjZDBkNmZjZTY3N2U3ZGU5MTU3NTE2NWMx
ZmU0ZWMwMDNkNDUuLjkyNGFlMjkxODA4ZDk0M2UyNGRkYWY4ZTcxNDE4NDJmODA5ZjY5NWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0wOS0wOSAgQ2hyaXMgTWFycmluICA8Y21h
cnJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3Qg
dGhyb3R0bGUgb24gTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NzE3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZWQgcnVuTG9vcE9ic2VydmVyIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUu
IEl0J3Mgbm93CisgICAgICAgIGRvbmUgYnkgYSBUaW1lciBpbiBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIgaW4gV2ViQ29yZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6fldlYlBhZ2UpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tOgorCiAyMDExLTA5LTA4ICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzk3NDIzOTM+IFNwZWxsIGNoZWNr
aW5nIGEgdGV4dCBhcmVhIGNhdXNlcyB0aGUgcGFnZSB0byByZWxvYWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAppbmRleCA5NjMyYzgwYTgyMTgzNThjOGZkZTJjNWZjNTg3NmJhMTM4MzIxMTVhLi44
MGQ4OTIyYTU1MWJhMzQ5MDZmNmZjM2Q3ZWU0NWY4MWRmMzkxM2EzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCkBAIC02NTQsMTMgKzY1NCw2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAg
ICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvckhpZGRlblVu
dGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpKTsKIH0KIAotI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUFu
aW1hdGlvbigpCi17Ci0gICAgbV9wYWdlLT5zY2hlZHVsZUFuaW1hdGlvbigpOwotfQotI2VuZGlm
Ci0KIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDg2MDE2
NjY5YzJiNTBjMTBiMzY2MDk4MTRmMmQ4YTRkYzU0NjE5MzcuLmIyMjIyYWMyYzc1ZGUwZDkwOTcy
Zjc5M2FlMjcyMTM1ODA2ZjMyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTcyLDEwICsx
NzIsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29y
ZTo6Q3Vyc29yJik7CiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VN
b3Zlcyhib29sKTsKIAotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKLSNlbmRpZgotCiAgICAgLy8gTm90aWZp
Y2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5j
dGlvbgogICAgIC8vIHdpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNob3Vs
ZCBiZSB2ZXJ5IGZhc3QuCiAgICAgdmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25z
dCBXZWJDb3JlOjpOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggZjM0NmQxM2IyNDI2ZDE1ZjU3Mzg1NzBkMjU1MTliNTQ0Zjc0NzRk
Zi4uYjZiN2M4NWIwODUxYjNkYTlmZTMwNjM1OWQyMDJiMjE1Zjg3YzIxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjYyLDEyICsyNjIs
NiBAQCBXZWJQYWdlOjp+V2ViUGFnZSgpCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgQVNTRVJU
KG1fcGx1Z2luVmlld3MuaXNFbXB0eSgpKTsKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKLSAgICB1bnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci0gICAgQVNTRVJUKCFtX3JlcXVl
c3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlcik7Ci0jZW5kaWYKLQogI2VuZGlmCiAKICNp
Zm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAppbmRleCAxNmQ0OTg4ODMzYzdkMzFmOWJhOTM4MGMyZDJiZDAxNGI1ZWUxMjZiLi43MTc5OTAx
ODk5MmUwZDU2ZjYyNDBiMWMxMGVjMzc5YTc3YzQ2Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTM1MSwxMCArMzUxLDYgQEAgcHVibGljOgog
ICAgIHZvaWQgYWNjZXB0c0ZpcnN0TW91c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBXZWJLaXQ6
OldlYk1vdXNlRXZlbnQmLCBib29sJiByZXN1bHQpOwogICAgIGJvb2wgcGVyZm9ybU5vbkVkaXRp
bmdCZWhhdmlvckZvclNlbGVjdG9yKGNvbnN0IFN0cmluZyYpOwogCi0jaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB2
b2lkIHVuc2NoZWR1bGVBbmltYXRpb24oKTsKLSNlbmRpZgogI2VsaWYgUExBVEZPUk0oV0lOKQog
ICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJp
bmcpOwogICAgIHZvaWQgc2V0Q29tcG9zaXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGNvbXBvc2l0
aW9uU3RyaW5nLCBjb25zdCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGlu
ZT4mIHVuZGVybGluZXMsIHVpbnQ2NF90IGN1cnNvclBvc2l0aW9uKTsKQEAgLTYxMiwxMSArNjA4
LDYgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIG1fa2V5Ym9hcmRF
dmVudEJlaW5nSW50ZXJwcmV0ZWQ7CiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJB
TUUpCi0gICAgc3RhdGljIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9ic2VydmVy
Q2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2aXR5LCB2b2lkKik7
Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcE9ic2VydmVyUmVmPiBtX3JlcXVlc3RBbmltYXRpb25G
cmFtZVJ1bkxvb3BPYnNlcnZlcjsKLSNlbmRpZgotCiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAg
Ly8gT3VyIHZpZXcncyB3aW5kb3cgKGluIHRoZSBVSSBwcm9jZXNzKS4KICAgICBIV05EIG1fbmF0
aXZlV2luZG93OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCmluZGV4IDFlMmJjZGQ1NDJmOGExNWU5NGIxNmEwMzRjOWQ5OWU5NjFj
NjRlOTguLmFmMzVhOTdlNGE1ODEwMjQ2NjYxYTJmYWU5NWQ4ZGZjNjIyZThhNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
QEAgLTMwLDcgKzMwLDYgQEAKICNpbXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQg
IkRhdGFSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkVkaXRvclN0YXRlLmgiCi0jaW1wb3J0ICJMYXll
clRyZWVIb3N0Q0FNYWMuaCIKICNpbXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCAiV2ViRXZlbnQuaCIKQEAgLTU4NCw0NSArNTgz
LDYgQEAgYm9vbCBXZWJQYWdlOjpwZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3RvcikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmIEVOQUJM
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZvaWQgV2ViUGFnZTo6cmVxdWVzdEFuaW1hdGlv
bkZyYW1lUnVuTG9vcE9ic2VydmVyQ2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVu
TG9vcEFjdGl2aXR5LCB2b2lkKiBjb250ZXh0KQotewotICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBz
dGF0aWNfY2FzdDxXZWJQYWdlKj4oY29udGV4dCk7Ci0gICAgd2ViUGFnZS0+dW5zY2hlZHVsZUFu
aW1hdGlvbigpOwotICAgIAotICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb3V0c2lkZSBvZiB0aGUg
bm9ybWFsIGV2ZW50IGxvb3Agc28gd3JhcCBpbiBhbiBhdXRvcmVsZWFzZSBwb29sCi0gICAgTlNB
dXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsK
LSAgICBpZiAod2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkgJiYgd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXcoKSkKLSAgICAgICAgd2ViUGFnZS0+Y29yZVBhZ2Uo
KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0
U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpKTsKLSAgICBbcG9vbCBkcmFpbl07
Ci19Ci0KLXZvaWQgV2ViUGFnZTo6c2NoZWR1bGVBbmltYXRpb24oKQotewotICAgIGlmICghbV9y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29w
UmVmIGN1cnJlbnRSdW5Mb29wID0gQ0ZSdW5Mb29wR2V0Q3VycmVudCgpOwotICAgIAotICAgICAg
ICAvLyBNYWtlIHN1cmUgd2Ugd2FrZSB1cCB0aGUgbG9vcCBvciB0aGUgb2JzZXJ2ZXIgY291bGQg
YmUgZGVsYXllZCB1bnRpbCBzb21lIG90aGVyIHNvdXJjZSBmaXJlcy4KLSAgICAgICAgQ0ZSdW5M
b29wV2FrZVVwKGN1cnJlbnRSdW5Mb29wKTsKLQotICAgICAgICAvLyBSdW4gYmVmb3JlIHRoZSBm
bHVzaFBlbmRpbmdMYXllckNoYW5nZXNSdW5Mb29wT2JzZXJ2ZXIsIHdoaWNoIGhhcyBvcmRlciBD
b3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyIC0gMS4KLSAgICAgICAgY29uc3QgQ0ZJbmRleCBydW5M
b29wT3JkZXIgPSBDb3JlQW5pbWF0aW9uUnVuTG9vcE9yZGVyIC0gMjsKLSAgICAgICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICAg
ICAgbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIuYWRvcHRDRihDRlJ1bkxv
b3BPYnNlcnZlckNyZWF0ZSgwLCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BF
eGl0LCBmYWxzZSwgcnVuTG9vcE9yZGVyLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2Jz
ZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQpKTsKLQotICAgICAgICBDRlJ1bkxvb3BBZGRPYnNlcnZl
cihjdXJyZW50UnVuTG9vcCwgbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIu
Z2V0KCksIGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYlBhZ2U6
OnVuc2NoZWR1bGVBbmltYXRpb24oKQotewotICAgIGlmIChtX3JlcXVlc3RBbmltYXRpb25GcmFt
ZVJ1bkxvb3BPYnNlcnZlcikgewotICAgICAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUo
bV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCkpOwotICAgICAgICBt
X3JlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlciA9IG51bGxwdHI7Ci0gICAgfQot
fQotI2VuZGlmCi0KIGJvb2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2
ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106949</attachid>
            <date>2011-09-09 18:12:24 -0700</date>
            <delta_ts>2011-09-09 18:42:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67171-20110909181228.patch</filename>
            <type>text/plain</type>
            <size>21861</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ4NjIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM5
ZjQxM2RjZmIzNDcwZTdhNWEwYWNiN2NlMzA0N2Y4N2IwMTFkNGIuLmZmYjAxZWQyYTQwMjRmYmI4
MDk5ZWZlNzczMzgyYzZjMGMxOGYxMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDExLTA5LTA5ICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4K
KworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZG9lc24ndCB0aHJvdHRsZSBvbiBNYWMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3MTcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgV1RG
X1VTRV9SRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9USU1FUiB0byBhbGxvdyBhbnkgcGxhdGZvcm0g
dG8gcnVuCisgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSBjYWxsYmFja3Mgb24gYSBUaW1l
ciBkZWZpbmVkIGluIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci4KKyAgICAgICAgQ3VycmVu
dGx5IG9ubHkgZW5hYmxlZCBmb3IgUExBVEZPUk0oTUFDKQorCisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisKIDIwMTEtMDktMDggIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxl
LmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHI5NDgxMSk6IEFzc2VydGlvbiBmYWlsdXJlIGlu
IDIgd29ya2VyIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggYzQw
MjUwZmUzYWI1MGJhNGMyMTU4MGM3YmUwYTQ5Nzc1MzVkNTU2Mi4uYTYxNDkwYzg4Nzk1OWZhNjMz
MWZhYTNlYWY4NzY5YWQ3Y2IwZjEzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aApAQCAtMTE3MCw0ICsxMTcwLDggQEAKICNkZWZpbmUgV1RGX1VTRV9BVkZPVU5EQVRJT04gMQog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIFdURl9VU0VfUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfVElNRVIgMQorI2VuZGlmCisKICNlbmRpZiAvKiBXVEZfUGxhdGZvcm1faCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDgzZDdmMGJiMjM5MjIyMzRlMjkzZTA3NTczNzE0Zjk3NTRmZTA1MDMu
LmZiYzA1MDAzY2U1ZDkzZGJiMmZmZWJiMGY5MzkwOGIxYTUzMzAwMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxMS0wOS0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5j
b20+CisKKyAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgdGhyb3R0bGUgb24g
TWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENoYW5n
ZWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIHVzZSBhIFRpbWVyIGluIFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcgorICAgICAgICBvbiBNYWMsIHJhdGhlciB0aGFuIHJ1bkxvb3BPYnNlcnZl
cnMuIFRoZSBUaW1lciBpcyB0aHJvdHRsZWQgdG8gZmlyZSBubworICAgICAgICBmYXN0ZXIgdGhh
biBldmVyeSAxNW1zLiBJdCBpcyBiZWhpbmQgYSBXVEZfVVNFX1JFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FX1RJTUVSCisgICAgICAgIGZsYWcgYW5kIGNhbiBiZSB1c2VkIGJ5IGFueSBpbXBsZW1lbnRh
dGlvbiwgYnV0IGN1cnJlbnRseSBpdCBpcyBvbmx5IGVuYWJsZWQKKyAgICAgICAgYnkgUExBVEZP
Uk0oTUFDKS4KKworICAgICAgICAqIGRvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyOjpTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOjpyZWdpc3RlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNjaGVkdWxlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5p
bWF0aW9uVGltZXJGaXJlZCk6CisgICAgICAgICogZG9tL1NjcmlwdGVkQW5pbWF0aW9uQ29udHJv
bGxlci5oOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdl
L0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNjaGVkdWxlQW5pbWF0aW9u
KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorCiAyMDExLTA5LTA4ICBLZW50YXJv
IEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IGEgV2ViS2l0
QW5pbWF0aW9uRXZlbnQgY29uc3RydWN0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IDBjNzAzNTkwM2VlZDBhNDE0MzVm
MWVkNjNkYzZkOTE3YmVhNWFjMjkuLjY3MjdlMDdhY2I3NmMzMWFhZGMyOGE0YmE2YmFmODFmZGY1
ODQ1OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCkBAIC0zMywxMiArMzMsMjYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVDYWxsYmFjay5oIgogCisjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNs
dWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8gQWxs
b3cgYSBsaXR0bGUgbW9yZSB0aGFuIDYwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVhc3Qg
aGl0IHRoYXQgZnJhbWUgcmF0ZS4KKyNkZWZpbmUgTWluaW11bUFuaW1hdGlvbkludGVydmFsIDAu
MDE1CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OlNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcihEb2N1bWVudCogZG9jdW1lbnQp
CiAgICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQogICAgICwgbV9uZXh0Q2FsbGJhY2tJZCgwKQog
ICAgICwgbV9zdXNwZW5kQ291bnQoMCkKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
VElNRVIpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHRoaXMsICZTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OmFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2xhc3RBbmltYXRpb25GcmFt
ZVRpbWUoMCkKKyNlbmRpZgogewogfQogCkBAIC01MSw4ICs2NSw3IEBAIHZvaWQgU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyOjpyZXN1bWUoKQogewogICAgIC0tbV9zdXNwZW5kQ291bnQ7CiAg
ICAgaWYgKCFtX3N1c3BlbmRDb3VudCAmJiBtX2NhbGxiYWNrcy5zaXplKCkpCi0gICAgICAgIGlm
IChGcmFtZVZpZXcqIGZ2ID0gbV9kb2N1bWVudC0+dmlldygpKQotICAgICAgICAgICAgZnYtPnNj
aGVkdWxlQW5pbWF0aW9uKCk7CisgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiB9CiAKIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Q2FsbGJhY2tJZCBTY3JpcHRlZEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlZ2lzdGVyQ2FsbGJhY2soUGFzc1JlZlB0cjxSZXF1ZXN0QW5pbWF0aW9uRnJh
bWVDYWxsYmFjaz4gY2FsbGJhY2ssIEVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQpCkBAIC02Myw4
ICs3Niw3IEBAIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6Q2FsbGJhY2tJZCBTY3JpcHRl
ZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlZ2lzdGVyQ2FsCiAgICAgY2FsbGJhY2stPm1fZWxlbWVu
dCA9IGFuaW1hdGlvbkVsZW1lbnQ7CiAgICAgbV9jYWxsYmFja3MuYXBwZW5kKGNhbGxiYWNrKTsK
ICAgICBpZiAoIW1fc3VzcGVuZENvdW50KQotICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0g
bV9kb2N1bWVudC0+dmlldygpKQotICAgICAgICAgICAgdmlldy0+c2NoZWR1bGVBbmltYXRpb24o
KTsKKyAgICAgICAgc2NoZWR1bGVBbmltYXRpb24oKTsKICAgICByZXR1cm4gaWQ7CiB9CiAKQEAg
LTEyNCw5ICsxMzYsMjcgQEAgdm9pZCBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZp
Y2VTY3JpcHRlZEFuaW1hdGlvbnMoRE9NVGltZVN0YW1wIHRpbWUpCiAgICAgfQogCiAgICAgaWYg
KG1fY2FsbGJhY2tzLnNpemUoKSkKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZG9j
dW1lbnQtPnZpZXcoKSkKLSAgICAgICAgICAgIHZpZXctPnNjaGVkdWxlQW5pbWF0aW9uKCk7Cisg
ICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uKCk7Cit9CisgICAgCit2b2lkIFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlcjo6c2NoZWR1bGVBbmltYXRpb24oKQoreworI2lmIFVTRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRV9USU1FUikKKyAgICBkb3VibGUgc2NoZWR1bGVEZWxheSA9IG1heChNaW5p
bXVtQW5pbWF0aW9uSW50ZXJ2YWwgLSAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFuaW1hdGlvbkZy
YW1lVGltZSksIDAuMCk7CisgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3Qoc2NoZWR1
bGVEZWxheSk7CisjZWxzZQorICAgIGlmIChGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1fZG9jdW1l
bnQtPnZpZXcoKSkKKyAgICAgICAgZnJhbWVWaWV3LT5zY2hlZHVsZUFuaW1hdGlvbigpOworI2Vu
ZGlmCit9CisKKyNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIpCit2b2lkIFNj
cmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3Jp
cHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+KikKK3sKKyAgICBtX2xhc3RBbmltYXRpb25GcmFtZVRp
bWUgPSBjdXJyZW50VGltZSgpOworICAgIHNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMobV9sYXN0
QW5pbWF0aW9uRnJhbWVUaW1lKTsKIH0KKyNlbmRpZgogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaAppbmRleCA3MTQxOTY4OWU3NzFm
N2YyYmFkOGRmNzI4ZWNhZWU2ZDI0MjhiMTJlLi41ZTYzYjk1MWRkMWNjYWE5ZmEyY2RiOWExYWJi
Y2EwMzZlNTM0ZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRBbmlt
YXRpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlci5oCkBAIC0yOCw2ICsyOCw5IEBACiAKICNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCiAjaW5jbHVkZSAiRE9NVGltZVN0YW1wLmgiCisjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorI2luY2x1ZGUgIlRpbWVyLmgiCisjZW5kaWYKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU4LDEyICs2MSwyMSBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgU2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyKERvY3VtZW50
Kik7CisgICAgCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFJlcXVlc3RBbmltYXRpb25GcmFt
ZUNhbGxiYWNrPiA+IENhbGxiYWNrTGlzdDsKICAgICBDYWxsYmFja0xpc3QgbV9jYWxsYmFja3M7
CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBDYWxsYmFja0lkIG1fbmV4dENhbGxi
YWNrSWQ7CiAgICAgaW50IG1fc3VzcGVuZENvdW50OworCisgICAgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpOworCisjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX1RJTUVSKQorICAgIHZv
aWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+
Kik7CisgICAgVGltZXI8U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlvblRp
bWVyO1wKKyAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uRnJhbWVUaW1lOworI2VuZGlmCiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKaW5kZXggY2VkYjMzMzZlODRjYmIx
Mjk3ZDlmMjY3YzNjZWY5YWUxMWJkNTU5OC4uNzVjNTM1YThmMDIyNWE4YzIwY2YyYzlkYjNjODA4
OGFmZjFjZTNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaApAQCAtMTY0LDcg
KzE2NCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZWdhdGVkU2Nyb2xsUmVxdWVzdGVkKGNvbnN0IEludFBvaW50JikgeyB9
CiAjZW5kaWYKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisjaWYgRU5BQkxF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKSAmJiAhVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
X1RJTUVSKQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIHsgfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBkNmNiNjhhNzNmZTBlM2NjNjRkMDI1YWUxNTJj
ZTk4NjYwYWU4NDI4Li44ZGUwN2Y0ZThhN2RiMGJmMDY5MzQwMGVhNGQ4OTI1MDU0Yzg5YjY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC01MTQsNyArNTE0LDkgQEAgdm9pZCBDaHJvbWU6OnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykK
ICNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiB2b2lkIENocm9tZTo6c2NoZWR1
bGVBbmltYXRpb24oKQogeworI2lmICFVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfVElNRVIp
CiAgICAgbV9jbGllbnQtPnNjaGVkdWxlQW5pbWF0aW9uKCk7CisjZW5kaWYKIH0KICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCAzYzlhNzVhZDc0YmM0ZWU1ZjFhNjEx
Njg1NTVjZDY0ZGZkYzAyOWNlLi4wYWQ3NjYxM2MxODQzMGRkYjNjYzIwN2NlMDlmYWU5ZmZkZTlh
MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTE1OSw3ICsxNTksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxiYXJzTW9kZURp
ZENoYW5nZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihjb25z
dCBDdXJzb3ImKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCkgPSAwOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpICYmICFVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfVElNRVIpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpID0gMDsKICNlbmRpZgogICAgICAgICAvLyBFbmQgbWV0aG9kcyB1c2VkIGJ5IEhvc3RX
aW5kb3cuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggMzM2NTI4MzYzYTc4YzI1ZWZhYTMxZGJkZDRjMGJh
ZWQ3YzY1NDBmNS4uMWY2ZWIzOGY5ZDgwOTQzMWQ5YWQ0Mzg1ODgwNmM0NDYxMWFjZTBiNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDExLTA5LTA5ICBDaHJpcyBNYXJyaW4g
IDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZG9l
c24ndCB0aHJvdHRsZSBvbiBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY3MTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUmVtb3ZlZCBydW5Mb29wT2JzZXJ2ZXIgZm9yIHJlcXVlc3RBbmltYXRpb25G
cmFtZS4gSXQncyBub3cKKyAgICAgICAgZG9uZSBieSBhIFRpbWVyIGluIFNjcmlwdGVkQW5pbWF0
aW9uQ29udHJvbGxlciBpbiBXZWJDb3JlLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBf
Y2xvc2VdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXdEYXRhLmg6CisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3SW50ZXJuYWwuaDoKKwogMjAxMS0wOS0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBK
U0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBkYzQ3ZTg3NjMzZDRhNDIzYmIxMjJi
ZmJjNmFjMjNlYmZjNzRkMDlhLi5iZDJkM2NhMjg5M2Q0ZDg1YTNjN2I5MjJmNzQyNWJkZTcyM2Vi
NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaApAQCAtMTI4LDEwICsxMjgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpOwogCi0jaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQotICAgICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24o
KTsKLSNlbmRpZgotCiAgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgY3VzdG9tSGlnaGxp
Z2h0UmVjdChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9taWNTdHJpbmcmIHR5cGUsCiAg
ICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgbGluZVJlY3QpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChXZWJDb3JlOjpOb2RlKiwgY29uc3QgV1RGOjpBdG9t
aWNTdHJpbmcmIHR5cGUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggOTZkNjU3ZTExNTE1NzZjNzA5MzJmNmM2ZmI3ZWE1
ZGRkZDRmMWVmYi4uY2Y1Y2RjZTg1ZGI3MzE5NzUyMTYwN2Q1YjUyMjNlNzA1ZmI4YTUwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbQpAQCAtOTQyLDE1ICs5NDIsNiBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVD
b21wb3NpdGluZ0xheWVyU3luYygpCiAKICNlbmRpZgogCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNjaGVkdWxlQW5pbWF0aW9uKCkK
LXsKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW21fd2ViVmlldyBfc2No
ZWR1bGVBbmltYXRpb25dOwotICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci19Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShWSURFTykKIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN1cHBvcnRz
RnVsbHNjcmVlbkZvck5vZGUoY29uc3QgTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQppbmRleCAyNTI5NTc5ZGIxNjUwYTNkMmY3MTRlMDI3M2VjODFlYWY4MTk0Nzg4
Li5jZjEwOTk0YTYwNmNmYzU5ZDIxYTI5NGMwYWM2ZGNjOTc3NTk4ODViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0zOTUsOSArMzk1LDYgQEAgRmluZE9wdGlvbnMgY29y
ZU9wdGlvbnMoV2ViRmluZE9wdGlvbnMgb3B0aW9ucykKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAtICh2b2lkKV9jbGVhckxheWVyU3luY0xvb3BPYnNlcnZlcjsKICNlbmRpZgot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLS0gKHZvaWQpX3Vuc2NoZWR1bGVB
bmltYXRpb247Ci0jZW5kaWYKICNpZiBFTkFCTEUoR0xJQl9TVVBQT1JUKQogLSAodm9pZClfY2xl
YXJHbGliTG9vcE9ic2VydmVyOwogI2VuZGlmCkBAIC0xMjI2LDEwICsxMjIzLDYgQEAgc3RhdGlj
IGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKICAgICBbc2VsZiBfY2xlYXJMYXll
clN5bmNMb29wT2JzZXJ2ZXJdOwogI2VuZGlmCiAgICAgCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotICAgIFtzZWxmIF91bnNjaGVkdWxlQW5pbWF0aW9uXTsKLSNlbmRpZgot
CiAjaWYgRU5BQkxFKEdMSUJfU1VQUE9SVCkKICAgICBbc2VsZiBfY2xlYXJHbGliTG9vcE9ic2Vy
dmVyXTsKICNlbmRpZgpAQCAtNTkyOSwxOCArNTkyMiw2IEBAIHN0YXRpYyBpbmxpbmUgdWludDY0
X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQogfQogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0tICh2b2lkKV91bnNjaGVkdWxlQW5pbWF0aW9u
Ci17Ci0gICAgaWYgKCFfcHJpdmF0ZS0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9ic2Vy
dmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUo
X3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlcik7Ci0gICAgQ0ZS
ZWxlYXNlKF9wcml2YXRlLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIpOwot
ICAgIF9wcml2YXRlLT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIgPSAwOwot
fQotI2VuZGlmCi0KICNpZiBFTkFCTEUoR0xJQl9TVVBQT1JUKQogLSAodm9pZClfY2xlYXJHbGli
TG9vcE9ic2VydmVyCiB7CkBAIC02MjIwLDM0ICs2MjAxLDYgQEAgc3RhdGljIHZvaWQgbGF5ZXJT
eW5jUnVuTG9vcE9ic2VydmVyQ2FsbEJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9v
cEFjdGkKIAogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi1z
dGF0aWMgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXJDYWxsYmFjayhD
RlJ1bkxvb3BPYnNlcnZlclJlZiwgQ0ZSdW5Mb29wQWN0aXZpdHksIHZvaWQqIGluZm8pCi17Ci0g
ICAgV2ViVmlldyAqd2ViVmlldyA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViVmlldyo+KGluZm8pOwot
ICAgIFt3ZWJWaWV3IF91bnNjaGVkdWxlQW5pbWF0aW9uXTsKLSAgICAKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gW3dlYlZpZXcgX21haW5Db3JlRnJhbWVdKQotICAgICAgICBpZiAoRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpKQotICAgICAgICAgICAgZnJhbWVWaWV3LT5zZXJ2
aWNlU2NyaXB0ZWRBbmltYXRpb25zKGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVu
dFRpbWUoKSkpOwotfQotCi0tICh2b2lkKV9zY2hlZHVsZUFuaW1hdGlvbgotewotICAgIGlmICgh
X3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlcikgewotICAgICAg
ICBDRlJ1bkxvb3BSZWYgY3VycmVudFJ1bkxvb3AgPSBDRlJ1bkxvb3BHZXRDdXJyZW50KCk7Ci0g
ICAgCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSB3YWtlIHVwIHRoZSBsb29wIG9yIHRoZSBvYnNl
cnZlciBjb3VsZCBiZSBkZWxheWVkIHVudGlsIHNvbWUgb3RoZXIgc291cmNlIGZpcmVzLgotICAg
ICAgICBDRlJ1bkxvb3BXYWtlVXAoY3VycmVudFJ1bkxvb3ApOwotCi0gICAgICAgIC8vIFJ1biBi
ZWZvcmUgdGhlIGxheWVyU3luY1J1bkxvb3BPYnNlcnZlciwgd2hpY2ggaGFzIG9yZGVyIE5TRGlz
cGxheVdpbmRvd1J1bkxvb3BPcmRlcmluZyArIDIuCi0gICAgICAgIGNvbnN0IENGSW5kZXggcnVu
TG9vcE9yZGVyID0gTlNEaXNwbGF5V2luZG93UnVuTG9vcE9yZGVyaW5nICsgMTsKLSAgICAgICAg
Q0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7IDAsIHNlbGYsIDAsIDAsIDAgfTsK
LSAgICAgICAgX3ByaXZhdGUtPnJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlciA9
IENGUnVuTG9vcE9ic2VydmVyQ3JlYXRlKDAsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nIHwga0NG
UnVuTG9vcEV4aXQsIE5PLCBydW5Mb29wT3JkZXIsIHJlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxv
b3BPYnNlcnZlckNhbGxiYWNrLCAmY29udGV4dCk7Ci0gICAgICAgIENGUnVuTG9vcEFkZE9ic2Vy
dmVyKGN1cnJlbnRSdW5Mb29wLCBfcHJpdmF0ZS0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9v
cE9ic2VydmVyLCBrQ0ZSdW5Mb29wQ29tbW9uTW9kZXMpOwotICAgIH0KLX0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogCiAtICh2b2lkKV9lbnRlckZ1bGxzY3JlZW5Gb3JOb2RlOihXZWJD
b3JlOjpOb2RlKilub2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXdEYXRhLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdEYXRhLmgKaW5k
ZXggZGQ5NjhkYTJkYWNkZDY2NDg1Yjk1ZDMxMWY0YWVhZDE0ZmI3ZGRlMi4uYTA3M2ViMTNiODM2
OTQ1OWMzMGU4NTAwNjNhZjY4NTAzNGE4OTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJWaWV3RGF0YS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld0RhdGEuaApAQCAtMTU1LDEwICsxNTUsNiBAQCBleHRlcm4gaW50IHBsdWdpbkRhdGFi
YXNlQ2xpZW50Q291bnQ7CiAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgbGF5ZXJTeW5jUnVuTG9v
cE9ic2VydmVyOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUp
Ci0gICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9i
c2VydmVyOwotI2VuZGlmCi0KICAgICBOU1Bhc3RlYm9hcmQgKmluc2VydGlvblBhc3RlYm9hcmQ7
CiAgICAgICAgICAgICAKICAgICBOU1NpemUgbGFzdExheW91dFNpemU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktp
dC9tYWMvV2ViVmlldy9XZWJWaWV3SW50ZXJuYWwuaAppbmRleCBhMTA3YjhmOTJhNDNjMDQ1YmRh
MzM5ZWM1M2EyZjg0N2MwNWViZGZmLi40M2I5YjA4ZDUxNWRmNmYyMjI5Y2M4NmM3YjM4NDI0NGI1
OGYyMDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXdJbnRl
cm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlld0ludGVybmFsLmgK
QEAgLTkzLDEwICs5Myw2IEBAIFdlYkNvcmU6OkZpbmRPcHRpb25zIGNvcmVPcHRpb25zKFdlYkZp
bmRPcHRpb25zIG9wdGlvbnMpOwogLSAodm9pZClfc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyU3lu
YzsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotLSAodm9p
ZClfc2NoZWR1bGVBbmltYXRpb247Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShHTElCX1NVUFBPUlQp
CiAtICh2b2lkKV9zY2hlZHVsZUdsaWJDb250ZXh0SXRlcmF0aW9uczsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDkwMmJjZDBkNmZjZTY3N2U3ZGU5MTU3NTE2NWMxZmU0ZWMwMDNkNDUuLjkyNGFlMjkx
ODA4ZDk0M2UyNGRkYWY4ZTcxNDE4NDJmODA5ZjY5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAxMS0wOS0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgdGhyb3R0bGUgb24gTWFjCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzE3MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgcnVuTG9v
cE9ic2VydmVyIGZvciByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIEl0J3Mgbm93CisgICAgICAgIGRv
bmUgYnkgYSBUaW1lciBpbiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIgaW4gV2ViQ29yZS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6fldlYlBhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
OgorCiAyMDExLTA5LTA4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzk3NDIzOTM+IFNwZWxsIGNoZWNraW5nIGEgdGV4dCBhcmVhIGNhdXNl
cyB0aGUgcGFnZSB0byByZWxvYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA5NjMyYzgw
YTgyMTgzNThjOGZkZTJjNWZjNTg3NmJhMTM4MzIxMTVhLi44MGQ4OTIyYTU1MWJhMzQ5MDZmNmZj
M2Q3ZWU0NWY4MWRmMzkxM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC02NTQsMTMg
KzY1NCw2IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5V
bnRpbE1vdXNlTW92ZXMpKTsKIH0KIAotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKLXZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUFuaW1hdGlvbigpCi17Ci0gICAgbV9w
YWdlLT5zY2hlZHVsZUFuaW1hdGlvbigpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50Ojpmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDg2MDE2NjY5YzJiNTBjMTBiMzY2MDk4MTRm
MmQ4YTRkYzU0NjE5MzcuLmIyMjIyYWMyYzc1ZGUwZDkwOTcyZjc5M2FlMjcyMTM1ODA2ZjMyOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMTcyLDEwICsxNzIsNiBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAgICAgdmly
dHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKTsKIAotI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKTsKLSNlbmRpZgotCiAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVu
IGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4gVGhpcyBmdW5jdGlvbgogICAgIC8vIHdpbGwgYmUg
Y2FsbGVkIGZyZXF1ZW50bHksIHNvIGhhbmRsaW5nIHNob3VsZCBiZSB2ZXJ5IGZhc3QuCiAgICAg
dmlydHVhbCB2b2lkIGZvcm1TdGF0ZURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpOb2RlKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZjM0
NmQxM2IyNDI2ZDE1ZjU3Mzg1NzBkMjU1MTliNTQ0Zjc0NzRkZi4uYjZiN2M4NWIwODUxYjNkYTlm
ZTMwNjM1OWQyMDJiMjE1Zjg3YzIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjYyLDEyICsyNjIsNiBAQCBXZWJQYWdlOjp+V2ViUGFn
ZSgpCiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgQVNTRVJUKG1fcGx1Z2luVmlld3MuaXNFbXB0
eSgpKTsKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB1bnNjaGVk
dWxlQW5pbWF0aW9uKCk7Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxv
b3BPYnNlcnZlcik7Ci0jZW5kaWYKLQogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxNmQ0OTg4ODMzYzdk
MzFmOWJhOTM4MGMyZDJiZDAxNGI1ZWUxMjZiLi43MTc5OTAxODk5MmUwZDU2ZjYyNDBiMWMxMGVj
Mzc5YTc3YzQ2Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKQEAgLTM1MSwxMCArMzUxLDYgQEAgcHVibGljOgogICAgIHZvaWQgYWNjZXB0c0ZpcnN0
TW91c2UoaW50IGV2ZW50TnVtYmVyLCBjb25zdCBXZWJLaXQ6OldlYk1vdXNlRXZlbnQmLCBib29s
JiByZXN1bHQpOwogICAgIGJvb2wgcGVyZm9ybU5vbkVkaXRpbmdCZWhhdmlvckZvclNlbGVjdG9y
KGNvbnN0IFN0cmluZyYpOwogCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQot
ICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB2b2lkIHVuc2NoZWR1bGVBbmltYXRp
b24oKTsKLSNlbmRpZgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgY29uZmlybUNvbXBv
c2l0aW9uKGNvbnN0IFN0cmluZyYgY29tcG9zaXRpb25TdHJpbmcpOwogICAgIHZvaWQgc2V0Q29t
cG9zaXRpb24oY29uc3QgV1RGOjpTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nLCBjb25zdCBXVEY6
OlZlY3RvcjxXZWJDb3JlOjpDb21wb3NpdGlvblVuZGVybGluZT4mIHVuZGVybGluZXMsIHVpbnQ2
NF90IGN1cnNvclBvc2l0aW9uKTsKQEAgLTYxMiwxMSArNjA4LDYgQEAgcHJpdmF0ZToKIAogICAg
IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQ7
CiAKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgc3RhdGljIHZvaWQg
cmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9ic2VydmVyQ2FsbGJhY2soQ0ZSdW5Mb29wT2Jz
ZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2aXR5LCB2b2lkKik7Ci0gICAgUmV0YWluUHRyPENGUnVu
TG9vcE9ic2VydmVyUmVmPiBtX3JlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlcjsK
LSNlbmRpZgotCiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgLy8gT3VyIHZpZXcncyB3aW5kb3cg
KGluIHRoZSBVSSBwcm9jZXNzKS4KICAgICBIV05EIG1fbmF0aXZlV2luZG93OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4
IDFlMmJjZGQ1NDJmOGExNWU5NGIxNmEwMzRjOWQ5OWU5NjFjNjRlOTguLmFmMzVhOTdlNGE1ODEw
MjQ2NjYxYTJmYWU5NWQ4ZGZjNjIyZThhNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTMwLDcgKzMwLDYgQEAKICNp
bXBvcnQgIkF0dHJpYnV0ZWRTdHJpbmcuaCIKICNpbXBvcnQgIkRhdGFSZWZlcmVuY2UuaCIKICNp
bXBvcnQgIkVkaXRvclN0YXRlLmgiCi0jaW1wb3J0ICJMYXllclRyZWVIb3N0Q0FNYWMuaCIKICNp
bXBvcnQgIlBsdWdpblZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgog
I2ltcG9ydCAiV2ViRXZlbnQuaCIKQEAgLTU4NCw0NSArNTgzLDYgQEAgYm9vbCBXZWJQYWdlOjpw
ZXJmb3JtTm9uRWRpdGluZ0JlaGF2aW9yRm9yU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rv
cikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9G
UkFNRSkKLXZvaWQgV2ViUGFnZTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lUnVuTG9vcE9ic2VydmVy
Q2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2aXR5LCB2b2lkKiBj
b250ZXh0KQotewotICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlKj4o
Y29udGV4dCk7Ci0gICAgd2ViUGFnZS0+dW5zY2hlZHVsZUFuaW1hdGlvbigpOwotICAgIAotICAg
IC8vIFRoaXMgZ2V0cyBjYWxsZWQgb3V0c2lkZSBvZiB0aGUgbm9ybWFsIGV2ZW50IGxvb3Agc28g
d3JhcCBpbiBhbiBhdXRvcmVsZWFzZSBwb29sCi0gICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wg
PSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLSAgICBpZiAod2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+bWFpbkZyYW1lKCkgJiYgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkt
PnZpZXcoKSkKLSAgICAgICAgd2ViUGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCktPnZpZXco
KS0+c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1w
KGN1cnJlbnRUaW1lKCkpKTsKLSAgICBbcG9vbCBkcmFpbl07Ci19Ci0KLXZvaWQgV2ViUGFnZTo6
c2NoZWR1bGVBbmltYXRpb24oKQotewotICAgIGlmICghbV9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVS
dW5Mb29wT2JzZXJ2ZXIpIHsKLSAgICAgICAgQ0ZSdW5Mb29wUmVmIGN1cnJlbnRSdW5Mb29wID0g
Q0ZSdW5Mb29wR2V0Q3VycmVudCgpOwotICAgIAotICAgICAgICAvLyBNYWtlIHN1cmUgd2Ugd2Fr
ZSB1cCB0aGUgbG9vcCBvciB0aGUgb2JzZXJ2ZXIgY291bGQgYmUgZGVsYXllZCB1bnRpbCBzb21l
IG90aGVyIHNvdXJjZSBmaXJlcy4KLSAgICAgICAgQ0ZSdW5Mb29wV2FrZVVwKGN1cnJlbnRSdW5M
b29wKTsKLQotICAgICAgICAvLyBSdW4gYmVmb3JlIHRoZSBmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXNSdW5Mb29wT2JzZXJ2ZXIsIHdoaWNoIGhhcyBvcmRlciBDb3JlQW5pbWF0aW9uUnVuTG9vcE9y
ZGVyIC0gMS4KLSAgICAgICAgY29uc3QgQ0ZJbmRleCBydW5Mb29wT3JkZXIgPSBDb3JlQW5pbWF0
aW9uUnVuTG9vcE9yZGVyIC0gMjsKLSAgICAgICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNv
bnRleHQgPSB7IDAsIHRoaXMsIDAsIDAsIDAgfTsKLSAgICAgICAgbV9yZXF1ZXN0QW5pbWF0aW9u
RnJhbWVSdW5Mb29wT2JzZXJ2ZXIuYWRvcHRDRihDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZSgwLCBr
Q0ZSdW5Mb29wQmVmb3JlV2FpdGluZyB8IGtDRlJ1bkxvb3BFeGl0LCBmYWxzZSwgcnVuTG9vcE9y
ZGVyLCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRl
eHQpKTsKLQotICAgICAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihjdXJyZW50UnVuTG9vcCwgbV9y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCksIGtDRlJ1bkxvb3BDb21t
b25Nb2Rlcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYlBhZ2U6OnVuc2NoZWR1bGVBbmltYXRpb24o
KQotewotICAgIGlmIChtX3JlcXVlc3RBbmltYXRpb25GcmFtZVJ1bkxvb3BPYnNlcnZlcikgewot
ICAgICAgICBDRlJ1bkxvb3BPYnNlcnZlckludmFsaWRhdGUobV9yZXF1ZXN0QW5pbWF0aW9uRnJh
bWVSdW5Mb29wT2JzZXJ2ZXIuZ2V0KCkpOwotICAgICAgICBtX3JlcXVlc3RBbmltYXRpb25GcmFt
ZVJ1bkxvb3BPYnNlcnZlciA9IG51bGxwdHI7Ci0gICAgfQotfQotI2VuZGlmCi0KIGJvb2wgV2Vi
UGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmKQogewogICAgIHJldHVybiBmYWxzZTsK
</data>
<flag name="review"
          id="103510"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>