<?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>83044</bug_id>
          
          <creation_ts>2012-04-03 10:15:52 -0700</creation_ts>
          <short_desc>[Qt][WK2] Refactor the gesture recognizers</short_desc>
          <delta_ts>2012-04-17 09:41:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>Qt</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>83033</dependson>
          <blocked>76773</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andras Becsi">abecsi</reporter>
          <assigned_to name="Andras Becsi">abecsi</assigned_to>
          <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>594594</commentid>
    <comment_count>0</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-03 10:15:52 -0700</bug_when>
    <thetext>The transition between different gestures is not as smooth as it should be. The gesture recognizers need some refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602118</commentid>
    <comment_count>1</comment_count>
      <attachid>137091</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-13 08:42:31 -0700</bug_when>
    <thetext>Created attachment 137091
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603302</commentid>
    <comment_count>2</comment_count>
      <attachid>137091</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-04-16 11:32:48 -0700</bug_when>
    <thetext>Comment on attachment 137091
proposed patch

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

I like this a lot. Much red, much clearer code, less indentation :). A few comments below. I&apos;m sure Kenneth will want to have a look, too :)

&gt; Source/WebKit2/UIProcess/qt/QtPinchGestureRecognizer.cpp:58
&gt; +    case GestureRecognitionStarted:
&gt; +    case GestureRecognized:
&gt; +        if (m_state == GestureRecognitionStarted) {

Wouldn&apos;t it be easier to read to use a &quot;fall-through&quot;?

    switch (m_state) {
    case GestureRecognitionStarted:
        const qreal pinchDistance = ...;
        ...
        // fall through
    case GestureRecognized:
       const qreal totalScaleFactor =

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:477
&gt; +    QList&lt;QTouchEvent::TouchPoint&gt; activeTouchPoints;

It might be worth it to reserve() on the list (with touchPoints.size()).

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:479
&gt; +    for (int i = 0; i &lt; touchPoints.size(); ++i) {

According to the coding style I don&apos;t think you need curly braces here.

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:484
&gt; +    if (!activeTouchPoints.size()) {

Readability nitpick-preference: Since you&apos;re also comparing against 1 and 2, I think comparing against 0 is clearer than the ! syntax. (IMHO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603470</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-16 15:00:28 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 137091 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137091&amp;action=review
&gt; 
&gt; I like this a lot. Much red, much clearer code, less indentation :). A few comments below. I&apos;m sure Kenneth will want to have a look, too :)

It should be :-) we discussed a lot how to improve it. I will have a proper look at it, but I guess that will first be after I arrive in the US. I hope that is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603474</commentid>
    <comment_count>4</comment_count>
      <attachid>137091</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-16 15:03:44 -0700</bug_when>
    <thetext>Comment on attachment 137091
proposed patch

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

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:479
&gt;&gt; +    for (int i = 0; i &lt; touchPoints.size(); ++i) {
&gt; 
&gt; According to the coding style I don&apos;t think you need curly braces here.

You do indeed, the content of the for loop is more than one actual (not logical) line. Same counts if we add comments inside

&gt;&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:484
&gt;&gt; +    if (!activeTouchPoints.size()) {
&gt; 
&gt; Readability nitpick-preference: Since you&apos;re also comparing against 1 and 2, I think comparing against 0 is clearer than the ! syntax. (IMHO)

The code style says to never compare against 0. So this is following the webkit style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603535</commentid>
    <comment_count>5</comment_count>
      <attachid>137091</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-04-16 16:11:52 -0700</bug_when>
    <thetext>Comment on attachment 137091
proposed patch

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

I notice that the pinch recognizer is never cancelled, only finished. There is also no code handling more than two fingers.

&gt; Source/WebKit2/ChangeLog:10
&gt; +        on the basis of how many active touch points the current touch event has.
&gt; +        Active touch points are pressed, moved or stationary and the number of these

I would like a newline between these lines

&gt; Source/WebKit2/UIProcess/qt/QtPanGestureRecognizer.cpp:90
&gt; +    reset();

im wondering how much reset is doing now, and whether we can get rid of it (it is virtual right now I believe)

&gt; Source/WebKit2/UIProcess/qt/QtPanGestureRecognizer.h:39
&gt;  class QtPanGestureRecognizer : public QtGestureRecognizer {

That inheriting might not make much sense anymore

&gt; Source/WebKit2/UIProcess/qt/QtPinchGestureRecognizer.cpp:50
&gt; +    const qreal currentSpanDistance = QLineF(point1.screenPos(), point2.screenPos()).length();

FingerDistance?

&gt; Source/WebKit2/UIProcess/qt/QtPinchGestureRecognizer.cpp:66
&gt; +            // touch points in order to avoid the jump caused by skipping all the

by the events who were skipped between the recognition start and the actual recognition.

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:485
&gt; +        if (touchPoints.size() == 1)

Maybe comment would make this easier to understand, like: // No active touch points, one finger lifted.

Or int fingersLifted = touchPoints.size()

&gt; Source/WebKit2/UIProcess/qt/QtWebPageEventHandler.cpp:490
&gt; +        m_pinchGestureRecognizer.finish();

I guess this should be cancel().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604084</commentid>
    <comment_count>6</comment_count>
      <attachid>137548</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-17 09:40:44 -0700</bug_when>
    <thetext>Created attachment 137548
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>604087</commentid>
    <comment_count>7</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2012-04-17 09:41:43 -0700</bug_when>
    <thetext>Committed r114389: &lt;http://trac.webkit.org/changeset/114389&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137091</attachid>
            <date>2012-04-13 08:42:31 -0700</date>
            <delta_ts>2012-04-17 09:40:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-Qt-WK2-Refactor-the-gesture-recognizers.patch</filename>
            <type>text/plain</type>
            <size>26829</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAyYmJhZmRhNmZjMWVkODg0ZWM3MTA4NDdlZDdmNzVmZGY5Mzc3MDY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFRodSwgMTIgQXByIDIwMTIgMjA6Mzc6MjEgKzAyMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdW1dLMl0gUmVmYWN0b3IgdGhlIGdlc3R1cmUgcmVjb2duaXplcnMKCi0tLQogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKysrKysr
CiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAg
ODIgKysrKysrLS0tLS0tLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuaCAgfCAgIDE2ICsrLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJl
Y29nbml6ZXIuY3BwICAgICAgfCAgMTI5ICsrKysrKy0tLS0tLS0tLS0tLS0tCiAuLi4vVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oICAgICAgICB8ICAgMzEgKy0tLS0KIC4u
Li9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAgICAgICAgIHwgICAzOCAr
KystLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmgg
IHwgICAgNyArLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwICAgfCAgICA2ICsKIC4uLi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmggICAgIHwgICAgMyArCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmNwcCB8ICAgMzggKysrKy0tCiAxMCBmaWxlcyBjaGFuZ2VkLCAxOTEgaW5zZXJ0
aW9ucygrKSwgMjEwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA2MTY1NzE3Li42Njc3YmNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTItMDQtMTIgIEFuZHJhcyBCZWNzaSAg
PGFuZHJhcy5iZWNzaUBub2tpYS5jb20+CisKKyAgICAgICAgW1F0XVtXSzJdIFJlZmFjdG9yIHRo
ZSBnZXN0dXJlIHJlY29nbml6ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04MzA0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIHNpbXBsZSBkZWNpc2lvbiB0cmVl
IGluIHRoZSB3ZWIgcGFnZSBldmVudCBoYW5kbGVyCisgICAgICAgIG9uIHRoZSBiYXNpcyBvZiBo
b3cgbWFueSBhY3RpdmUgdG91Y2ggcG9pbnRzIHRoZSBjdXJyZW50IHRvdWNoIGV2ZW50IGhhcy4K
KyAgICAgICAgQWN0aXZlIHRvdWNoIHBvaW50cyBhcmUgcHJlc3NlZCwgbW92ZWQgb3Igc3RhdGlv
bmFyeSBhbmQgdGhlIG51bWJlciBvZiB0aGVzZQorICAgICAgICBmdWxseSBkZXRlcm1pbmUgd2hp
Y2ggZ2VzdHVyZSByZWNvZ25pemVyIHNob3VsZCBiZSB1cGRhdGVkLCBjYW5jZWxsZWQgb3IKKyAg
ICAgICAgZmluaXNoZWQuCisgICAgICAgIFRoaXMgbmV3IHN0cnVjdHVyZSBtYWtlcyB0aGUgaW50
ZXJuYWwgc3RhdGVzIG9mIHRoZSBwaW5jaCBhbmQgcGFuIGdlc3R1cmUKKyAgICAgICAgcmVjb2du
aXplcnMgaW5kZXBlbmRlbnQgZnJvbSB0aGUgZXZlbnQgdHlwZSwgdGh1cyBtYWtlcyBpdCBwb3Nz
aWJsZSB0byBoYW5kbGUKKyAgICAgICAgdGhlIHRyYW5zaXRpb25zIGJldHdlZW4gdGhlc2UgZ2Vz
dHVyZXMgaW4gb25lIGNlbnRyYWxpemVkIHBsYWNlIHdoaWNoIHJlZHVjZXMKKyAgICAgICAgY29k
ZSBkdXBsaWNhdGlvbiBhbmQgY29tcGxleGl0eSBhbmQgZml4ZXMgc29tZSBpc3N1ZXMgcmVnYXJk
aW5nIGluY29ycmVjdGx5CisgICAgICAgIGhhbmRsZWQgdHJhbnNpdGlvbnMuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0
UGFuR2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmg6CisgICAgICAgIChRdFBhbkdlc3R1
cmVSZWNvZ25pemVyKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNv
Z25pemVyLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlF0UGluY2hH
ZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1
cmVSZWNvZ25pemVyOjpmaW5pc2gpOgorICAgICAgICAoV2ViS2l0OjpRdFBpbmNoR2VzdHVyZVJl
Y29nbml6ZXI6OmNhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJl
UmVjb2duaXplci5oOgorICAgICAgICAoUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OndpdGhpbkRpc3RhbmNlKToKKyAgICAgICAg
KFdlYktpdDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnNpbmdsZVRhcFRpbWVvdXQp
OgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjp0YXBBbmRIb2xkVGlt
ZW91dCk6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnJlc2V0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oOgorICAgICAg
ICAoUXRUYXBHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0Vmll
d3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0Vmlld3BvcnRJ
bnRlcmFjdGlvbkVuZ2luZTo6cGluY2hHZXN0dXJlQ2FuY2VsbGVkKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5o
OgorICAgICAgICAoUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAgICAgKFF0V2ViUGFnZUV2
ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcnMpOgorICAgICAgICAoUXRXZWJQYWdl
RXZlbnRIYW5kbGVyOjpkb25lV2l0aFRvdWNoRXZlbnQpOgorCiAyMDEyLTA0LTEzICBEaW51IEph
Y29iICA8ZGludS5qYWNvYkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIFRpdGxlIGlu
IE1pbmlCcm93c2VyIGlzIG5vdCB1cGRhdGVkIGZvciBhIHBhZ2Ugd2l0aCBubyB0aXRsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6
ZXIuY3BwCmluZGV4IDI4Y2U0NTUuLjBjMGRjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5jcHAKQEAgLTI3LDcgKzI3
LDYgQEAKICNpbmNsdWRlICJRdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgiCiAKICNpbmNsdWRlICJR
dFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlIDxRVG91Y2hFdmVudD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKQEAgLTM3LDcxICszNiw1OCBAQCBRdFBhbkdlc3R1cmVSZWNvZ25pemVy
OjpRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2ZW50SGFuZGxlciogZXZlbnRIYW5k
bAogICAgIHJlc2V0KCk7CiB9CiAKLWJvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6cmVjb2du
aXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCkKK2Jvb2wgUXRQYW5HZXN0dXJlUmVjb2duaXpl
cjo6dXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50LCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiB7CiAgICAgaWYgKCFpbnRlcmFjdGlvbkVuZ2luZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBQYW4gZ2VzdHVyZSBhbHdheXMgc3Rh
cnRzIG9uIFRvdWNoQmVnaW4gdW5sZXNzIHRoZSBlbmdpbmUgaXMgc3VzcGVuZGVkLCBvcgotICAg
IC8vIHdlIGlnbm9yZWQgdGhlIGV2ZW50LgotICAgIGlmIChtX3N0YXRlID09IE5vR2VzdHVyZSAm
JiBldmVudC0+dHlwZSgpICE9IFFFdmVudDo6VG91Y2hCZWdpbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gSGF2aW5nIG11bHRpcGxlIHRvdWNoIHBvaW50cyBjYW5jZWwgdGhlIHBh
bm5pbmcgZ2VzdHVyZS4KLSAgICBpZiAoZXZlbnQtPnRvdWNoUG9pbnRzKCkuc2l6ZSgpID4gMSkg
ewotICAgICAgICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkKLSAgICAgICAgICAg
IGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKLSAgICAgICAgcmVz
ZXQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBtX2xhc3RQb3NpdGlvbiA9
IHRvdWNoUG9pbnQucG9zKCk7CisgICAgbV9sYXN0RXZlbnRUaW1lc3RhbXBNaWxsaXMgPSBldmVu
dFRpbWVzdGFtcE1pbGxpczsKIAotICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0
b3VjaFBvaW50ID0gZXZlbnQtPnRvdWNoUG9pbnRzKCkuZmlyc3QoKTsKLQotICAgIHN3aXRjaCAo
ZXZlbnQtPnR5cGUoKSkgewotICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgotICAgICAgICBB
U1NFUlQobV9zdGF0ZSA9PSBOb0dlc3R1cmUpOworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
IGNhc2UgTm9HZXN0dXJlOgogICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml0aW9uU3Rh
cnRlZDsKLSAgICAgICAgbV9maXJzdFBvc2l0aW9uID0gdG91Y2hQb2ludC5zY3JlZW5Qb3MoKTsK
LSAgICAgICAgbV90b3VjaEJlZ2luLnJlc2V0KG5ldyBRVG91Y2hFdmVudCgqZXZlbnQpKTsKKyAg
ICAgICAgbV9maXJzdFNjcmVlblBvc2l0aW9uID0gdG91Y2hQb2ludC5zY2VuZVBvcygpOwogICAg
ICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5jYW5jZWxTY3JvbGxBbmltYXRpb24oKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgUUV2ZW50OjpUb3VjaFVwZGF0ZTogewotICAgICAg
ICBBU1NFUlQobV9zdGF0ZSAhPSBOb0dlc3R1cmUpOwotICAgICAgICBpZiAobV9zdGF0ZSA9PSBH
ZXN0dXJlUmVjb2duaXRpb25TdGFydGVkKSB7Ci0gICAgICAgICAgICAvLyBUbyBzdGFydCB0aGUg
Z2VzdHVyZSwgdGhlIGRlbHRhIGZyb20gc3RhcnQgaW4gc2NyZWVuIGNvb3JkaW5hdGVzCi0gICAg
ICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRoZSB0cmlnZ2VyIHRocmVzaG9sZC4KLSAg
ICAgICAgICAgIFFQb2ludEYgdG90YWxPZmZzZXRGcm9tU3RhcnQodG91Y2hQb2ludC5zY3JlZW5Q
b3MoKSAtIG1fZmlyc3RQb3NpdGlvbik7Ci0gICAgICAgICAgICBpZiAocUFicyh0b3RhbE9mZnNl
dEZyb21TdGFydC54KCkpIDwgcGFubmluZ0luaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQg
JiYgcUFicyh0b3RhbE9mZnNldEZyb21TdGFydC55KCkpIDwgcGFubmluZ0luaXRpYWxUcmlnZ2Vy
RGlzdGFuY2VUaHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgICAgICBBU1NFUlQo
bV90b3VjaEJlZ2luKTsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1
cmVTdGFydGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50LT50aW1lc3RhbXAoKSk7Ci0gICAgICAg
IH0KKyAgICBjYXNlIEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQ6IHsKKyAgICAgICAgLy8gVG8g
c3RhcnQgdGhlIGdlc3R1cmUsIHRoZSBkZWx0YSBmcm9tIHN0YXJ0IGluIHNjcmVlbiBjb29yZGlu
YXRlcworICAgICAgICAvLyBtdXN0IGJlIGJpZ2dlciB0aGFuIHRoZSB0cmlnZ2VyIHRocmVzaG9s
ZC4KKyAgICAgICAgUVBvaW50RiB0b3RhbE9mZnNldEZyb21TdGFydCh0b3VjaFBvaW50LnNjZW5l
UG9zKCkgLSBtX2ZpcnN0U2NyZWVuUG9zaXRpb24pOworICAgICAgICBpZiAocUFicyh0b3RhbE9m
ZnNldEZyb21TdGFydC54KCkpIDwgcGFubmluZ0luaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hv
bGQgJiYgcUFicyh0b3RhbE9mZnNldEZyb21TdGFydC55KCkpIDwgcGFubmluZ0luaXRpYWxUcmln
Z2VyRGlzdGFuY2VUaHJlc2hvbGQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgQVNTRVJUKG1fc3RhdGUgPT0gR2VzdHVyZVJlY29nbml6ZWQpOwotICAgICAgICBpbnRlcmFj
dGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaFBvaW50LnBvcygpLCBl
dmVudC0+dGltZXN0YW1wKCkpOworICAgICAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml6ZWQ7
CisgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVTdGFydGVkKHRvdWNoUG9p
bnQucG9zKCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQotICAgIGNhc2UgUUV2ZW50OjpUb3VjaEVuZDoKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0g
R2VzdHVyZVJlY29nbml6ZWQpIHsKLSAgICAgICAgICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBh
bkdlc3R1cmVFbmRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudC0+dGltZXN0YW1wKCkpOwotICAg
ICAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQpOwotICAg
ICAgICByZXNldCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHZXN0dXJlUmVj
b2duaXplZDoKKyAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RV
cGRhdGUodG91Y2hQb2ludC5wb3MoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFF0UGFuR2VzdHVyZVJlY29nbml6
ZXI6OnJlc2V0KCkKK3ZvaWQgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6ZmluaXNoKGNvbnN0IFFU
b3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBN
aWxsaXMpCiB7Ci0gICAgUXRHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKTsKLSAgICBtX2ZpcnN0
UG9zaXRpb24gPSBRUG9pbnRGKCk7CisgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaW50ZXJhY3Rpb25FbmdpbmUoKSk7CisgICAgaW50
ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZUVuZGVkKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50
VGltZXN0YW1wTWlsbGlzKTsKKyAgICByZXNldCgpOworfQorCit2b2lkIFF0UGFuR2VzdHVyZVJl
Y29nbml6ZXI6OmNhbmNlbCgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gTm9HZXN0dXJlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlRW5kZWQo
bV9sYXN0UG9zaXRpb24sIG1fbGFzdEV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICBpbnRlcmFj
dGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlQ2FuY2VsbGVkKCk7CisgICAgcmVzZXQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaAppbmRleCBlMWU5ZmYzLi5jMzU1MTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXpl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25p
emVyLmgKQEAgLTMwLDExICszMCw3IEBACiAKICNpbmNsdWRlIDxRUG9pbnRGPgogI2luY2x1ZGUg
PFFTY29wZWRQb2ludGVyPgotI2luY2x1ZGUgPFF0Q29yZS9RdEdsb2JhbD4KLQotUVRfQkVHSU5f
TkFNRVNQQUNFCi1jbGFzcyBRVG91Y2hFdmVudDsKLVFUX0VORF9OQU1FU1BBQ0UKKyNpbmNsdWRl
IDxRVG91Y2hFdmVudD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQzLDEyICszOSwxNCBA
QCBjb25zdCBxcmVhbCBwYW5uaW5nSW5pdGlhbFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCA9IDUu
OwogY2xhc3MgUXRQYW5HZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBRdEdlc3R1cmVSZWNvZ25p
emVyIHsKIHB1YmxpYzoKICAgICBRdFBhbkdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2ZW50
SGFuZGxlciopOwotICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50Kik7Ci0gICAg
dm9pZCByZXNldCgpOworICAgIGJvb2wgdXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBv
aW50JiwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICB2b2lkIGZpbmlzaChjb25z
dCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKLSAgICBRUG9pbnRGIG1fZmlyc3RQb3Np
dGlvbjsKLSAgICBRU2NvcGVkUG9pbnRlcjxRVG91Y2hFdmVudD4gbV90b3VjaEJlZ2luOworICAg
IFFQb2ludEYgbV9maXJzdFNjcmVlblBvc2l0aW9uOworICAgIFFQb2ludEYgbV9sYXN0UG9zaXRp
b247CisgICAgcWludDY0IG1fbGFzdEV2ZW50VGltZXN0YW1wTWlsbGlzOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9x
dC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuY3BwCmluZGV4IDc2OTlhZDMuLjA4M2VkYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29n
bml6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVy
ZVJlY29nbml6ZXIuY3BwCkBAIC0zMywxNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y29uc3QgcXJlYWwgcGluY2hJbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkID0gNS47CiAK
LXN0YXRpYyBpbmxpbmUgaW50IGZpbmRUb3VjaFBvaW50SW5kZXgoY29uc3QgUUxpc3Q8UVRvdWNo
RXZlbnQ6OlRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50cywgY29uc3QgUXRQaW5jaEdlc3R1cmVSZWNv
Z25pemVyOjpUb3VjaFBvaW50SW5mb3JtYXRpb24mIHBvaW50SW5mb3JtYXRpb24pCi17Ci0gICAg
Y29uc3QgaW50IHRvdWNoQ291bnQgPSB0b3VjaFBvaW50cy5zaXplKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCB0b3VjaENvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgUVRvdWNoRXZlbnQ6
OlRvdWNoUG9pbnQmIHRvdWNoUG9pbnQgPSB0b3VjaFBvaW50cy5hdChpKTsKLSAgICAgICAgaWYg
KHRvdWNoUG9pbnQuaWQoKSA9PSBwb2ludEluZm9ybWF0aW9uLmlkKQotICAgICAgICAgICAgcmV0
dXJuIGk7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQogc3RhdGljIGlubGluZSBRUG9pbnRG
IGNvbXB1dGVQaW5jaENlbnRlcihjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQx
LCBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQyKQogewogICAgIHJldHVybiAo
cG9pbnQxLnBvcygpICsgcG9pbnQyLnBvcygpKSAvIDIuMGY7CkBAIC01NSwxMDMgKzQ0LDU5IEBA
IFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyKFF0V2Vi
UGFnZUV2ZW50SGFuZGxlciogZXZlbnRICiAgICAgcmVzZXQoKTsKIH0KIAotYm9vbCBRdFBpbmNo
R2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiti
b29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6dXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpU
b3VjaFBvaW50JiBwb2ludDEsIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDIp
CiB7Ci0gICAgaWYgKCFpbnRlcmFjdGlvbkVuZ2luZSgpKQorICAgIEFTU0VSVChpbnRlcmFjdGlv
bkVuZ2luZSgpKTsKKyAgICBjb25zdCBxcmVhbCBjdXJyZW50U3BhbkRpc3RhbmNlID0gUUxpbmVG
KHBvaW50MS5zY3JlZW5Qb3MoKSwgcG9pbnQyLnNjcmVlblBvcygpKS5sZW5ndGgoKTsKKyAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vR2VzdHVyZToKKyAgICAgICAgbV9pbml0aWFs
U3BhbkRpc3RhbmNlID0gY3VycmVudFNwYW5EaXN0YW5jZTsKKyAgICAgICAgbV9zdGF0ZSA9IEdl
c3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQ7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNv
bnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgdG91Y2hQb2ludHMgPSBldmVudC0+
dG91Y2hQb2ludHMoKTsKLSAgICBpZiAodG91Y2hQb2ludHMuc2l6ZSgpIDwgMikgewotICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkKLSAgICAgICAgICAgIGludGVyYWN0
aW9uRW5naW5lKCktPnBpbmNoR2VzdHVyZUVuZGVkKCk7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsK
LSAgICBjYXNlIFFFdmVudDo6VG91Y2hCZWdpbjoKLSAgICBjYXNlIFFFdmVudDo6VG91Y2hVcGRh
dGU6Ci0gICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewotICAgICAgICBjYXNlIE5vR2VzdHVyZToK
LSAgICAgICAgICAgIGluaXRpYWxpemVHZXN0dXJlKHRvdWNoUG9pbnRzKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkOgot
ICAgICAgICBjYXNlIEdlc3R1cmVSZWNvZ25pemVkOgotICAgICAgICAgICAgQVNTRVJUKG1fcG9p
bnQxLmlzVmFsaWQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9wb2ludDIuaXNWYWxpZCgpKTsK
LQotICAgICAgICAgICAgY29uc3QgaW50IHBvaW50MUluZGV4ID0gZmluZFRvdWNoUG9pbnRJbmRl
eCh0b3VjaFBvaW50cywgbV9wb2ludDEpOwotICAgICAgICAgICAgaWYgKHBvaW50MUluZGV4IDwg
MCkgewotICAgICAgICAgICAgICAgIHJlc2V0KCk7CisgICAgY2FzZSBHZXN0dXJlUmVjb2duaXRp
b25TdGFydGVkOgorICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZWQ6CisgICAgICAgIGlmIChtX3N0
YXRlID09IEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIGNvbnN0IHFy
ZWFsIHBpbmNoRGlzdGFuY2UgPSBxQWJzKGN1cnJlbnRTcGFuRGlzdGFuY2UgLSBtX2luaXRpYWxT
cGFuRGlzdGFuY2UpOworICAgICAgICAgICAgaWYgKHBpbmNoRGlzdGFuY2UgPCBwaW5jaEluaXRp
YWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgaW50IHBvaW50MkluZGV4ID0gZmlu
ZFRvdWNoUG9pbnRJbmRleCh0b3VjaFBvaW50cywgbV9wb2ludDIpOwotICAgICAgICAgICAgaWYg
KHBvaW50MkluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBR
VG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQxID0gdG91Y2hQb2ludHMuYXQocG9pbnQxSW5k
ZXgpOwotICAgICAgICAgICAgY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50MiA9
IHRvdWNoUG9pbnRzLmF0KHBvaW50MkluZGV4KTsKLSAgICAgICAgICAgIGlmIChtX3N0YXRlID09
IEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhlIGdlc3R1cmUgc2hvdWxkIG9ubHkgc3RhcnQgaWYgdGhlIHRvdWNoIGV2ZW50cyB3ZXJlIG5v
dCBhY2NlcHRlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHRvdWNoIHNlcXVlbmNlLgotICAgICAgICAg
ICAgICAgIGNvbnN0IHFyZWFsIHBpbmNoRGlzdGFuY2UgPSBxQWJzKFFMaW5lRihwb2ludDEuc2Ny
ZWVuUG9zKCksIHBvaW50Mi5zY3JlZW5Qb3MoKSkubGVuZ3RoKCkgLSBRTGluZUYobV9wb2ludDEu
aW5pdGlhbFNjcmVlblBvc2l0aW9uLCBtX3BvaW50Mi5pbml0aWFsU2NyZWVuUG9zaXRpb24pLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICBpZiAocGluY2hEaXN0YW5jZSA8IHBpbmNoSW5pdGlh
bFRyaWdnZXJEaXN0YW5jZVRocmVzaG9sZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplZDsKLSAgICAg
ICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVTdGFydGVkKGNvbXB1
dGVQaW5jaENlbnRlcihwb2ludDEsIHBvaW50MikpOworICAgICAgICAgICAgbV9zdGF0ZSA9IEdl
c3R1cmVSZWNvZ25pemVkOworICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hH
ZXN0dXJlU3RhcnRlZChjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpKTsKIAotICAg
ICAgICAgICAgICAgIC8vIFdlIHJlc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uIHRvIHRoZSBwcmV2
aW91cyBwb3NpdGlvbiBpbiBvcmRlciB0byBhdm9pZCB0aGUganVtcCBjYXVzZWQKLSAgICAgICAg
ICAgICAgICAvLyBieSBza2lwcGluZyBhbGwgdGhlIGV2ZW50cyBiZXR3ZWVuIHRoZSBiZWdpbm5p
bmcgYW5kIHdoZW4gdGhlIHRocmVzaG9sZCBpcyBoaXQuCi0gICAgICAgICAgICAgICAgbV9wb2lu
dDEuaW5pdGlhbFBvc2l0aW9uID0gcG9pbnQxLmxhc3RQb3MoKTsKLSAgICAgICAgICAgICAgICBt
X3BvaW50MS5pbml0aWFsU2NyZWVuUG9zaXRpb24gPSBwb2ludDEubGFzdFNjcmVlblBvcygpOwot
ICAgICAgICAgICAgICAgIG1fcG9pbnQyLmluaXRpYWxQb3NpdGlvbiA9IHBvaW50Mi5sYXN0UG9z
KCk7Ci0gICAgICAgICAgICAgICAgbV9wb2ludDIuaW5pdGlhbFNjcmVlblBvc2l0aW9uID0gcG9p
bnQyLmxhc3RTY3JlZW5Qb3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCht
X3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKTsKLSAgICAgICAgICAgIGNvbnN0IHFyZWFsIGN1
cnJlbnRTcGFuRGlzdGFuY2UgPSBRTGluZUYocG9pbnQxLnNjcmVlblBvcygpLCBwb2ludDIuc2Ny
ZWVuUG9zKCkpLmxlbmd0aCgpOwotICAgICAgICAgICAgY29uc3QgcXJlYWwgaW5pdGlhbFNwYW5E
aXN0YW5jZSA9IFFMaW5lRihtX3BvaW50MS5pbml0aWFsU2NyZWVuUG9zaXRpb24sIG1fcG9pbnQy
LmluaXRpYWxTY3JlZW5Qb3NpdGlvbikubGVuZ3RoKCk7Ci0gICAgICAgICAgICBjb25zdCBxcmVh
bCB0b3RhbFNjYWxlRmFjdG9yID0gY3VycmVudFNwYW5EaXN0YW5jZSAvIGluaXRpYWxTcGFuRGlz
dGFuY2U7Ci0gICAgICAgICAgICBjb25zdCBRUG9pbnRGIHRvdWNoQ2VudGVySW5WaWV3Q29vcmRp
bmF0ZXMgPSBjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpOwotICAgICAgICAgICAg
aW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSh0b3VjaENlbnRl
ckluVmlld0Nvb3JkaW5hdGVzLCB0b3RhbFNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyBXZSByZXNldCB0aGUg
aW5pdGlhbCBzcGFuIGRpc3RhbmNlIHRvIHRoZSBjdXJyZW50IGRpc3RhbmNlIG9mIHRoZQorICAg
ICAgICAgICAgLy8gdG91Y2ggcG9pbnRzIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBqdW1wIGNhdXNl
ZCBieSBza2lwcGluZyBhbGwgdGhlCisgICAgICAgICAgICAvLyBldmVudHMgYmV0d2VlbiB0aGUg
YmVnaW5uaW5nIGFuZCB3aGVuIHRoZSB0aHJlc2hvbGQgaXMgaGl0LgorICAgICAgICAgICAgbV9p
bml0aWFsU3BhbkRpc3RhbmNlID0gY3VycmVudFNwYW5EaXN0YW5jZTsKICAgICAgICAgfQorICAg
ICAgICBBU1NFUlQobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCk7CisgICAgICAgIGNvbnN0
IHFyZWFsIHRvdGFsU2NhbGVGYWN0b3IgPSBjdXJyZW50U3BhbkRpc3RhbmNlIC8gbV9pbml0aWFs
U3BhbkRpc3RhbmNlOworICAgICAgICBjb25zdCBRUG9pbnRGIHRvdWNoQ2VudGVySW5WaWV3Q29v
cmRpbmF0ZXMgPSBjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpOworICAgICAgICBp
bnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoQ2VudGVy
SW5WaWV3Q29vcmRpbmF0ZXMsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgotICAgICAgICBp
ZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJhY3Rp
b25FbmdpbmUoKS0+cGluY2hHZXN0dXJlRW5kZWQoKTsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXNldCgpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICB9CiAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCit2b2lkIFF0UGluY2hH
ZXN0dXJlUmVjb2duaXplcjo6ZmluaXNoKCkKIHsKLSAgICBRdEdlc3R1cmVSZWNvZ25pemVyOjpy
ZXNldCgpOwotICAgIG1fcG9pbnQxID0gVG91Y2hQb2ludEluZm9ybWF0aW9uKCk7Ci0gICAgbV9w
b2ludDIgPSBUb3VjaFBvaW50SW5mb3JtYXRpb24oKTsKKyAgICBpZiAobV9zdGF0ZSA9PSBOb0dl
c3R1cmUpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChpbnRlcmFjdGlvbkVuZ2luZSgp
KTsKKyAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVFbmRlZCgpOworICAgIHJl
c2V0KCk7CiB9CiAKLXZvaWQgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjppbml0aWFsaXplR2Vz
dHVyZShjb25zdCBRTGlzdDxRVG91Y2hFdmVudDo6VG91Y2hQb2ludD4mIHRvdWNoUG9pbnRzKQor
dm9pZCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCgpCiB7Ci0gICAgQVNTRVJUKCFt
X3BvaW50MS5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVCghbV9wb2ludDIuaXNWYWxpZCgpKTsKLQot
ICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkOworICAgIGlmIChtX3N0YXRl
ID09IE5vR2VzdHVyZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wb2ludDEgPSBUb3VjaFBv
aW50SW5mb3JtYXRpb24odG91Y2hQb2ludHMuYXQoMCkpOwotICAgIG1fcG9pbnQyID0gVG91Y2hQ
b2ludEluZm9ybWF0aW9uKHRvdWNoUG9pbnRzLmF0KDEpKTsKLQotICAgIEFTU0VSVChtX3BvaW50
MS5pc1ZhbGlkKCkpOwotICAgIEFTU0VSVChtX3BvaW50Mi5pc1ZhbGlkKCkpOworICAgIEFTU0VS
VChpbnRlcmFjdGlvbkVuZ2luZSgpKTsKKyAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdl
c3R1cmVDYW5jZWxsZWQoKTsKKyAgICByZXNldCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXgg
N2RkM2Q5MS4uNTUwNGU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaApAQCAtMzIsMTAgKzMyLDYgQEAKICNpbmNs
dWRlIDxRdENvcmUvUUxpc3Q+CiAjaW5jbHVkZSA8UXRDb3JlL1FQb2ludEY+CiAKLVFUX0JFR0lO
X05BTUVTUEFDRQotY2xhc3MgUVRvdWNoRXZlbnQ7Ci1RVF9FTkRfTkFNRVNQQUNFCi0KIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIgOiBwdWJsaWMg
UXRHZXN0dXJlUmVjb2duaXplciB7CkBAIC01MSwzMyArNDcsMTQgQEAgcHVibGljOgogICAgIH07
CiAKICAgICBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIoUXRXZWJQYWdlRXZlbnRIYW5kbGVyKik7
Ci0gICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqKTsKLSAgICB2b2lkIHJlc2V0
KCk7CisgICAgYm9vbCB1cGRhdGUoY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50
MSwgY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50Mik7CisgICAgdm9pZCBmaW5p
c2goKTsKKyAgICB2b2lkIGNhbmNlbCgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdGlhbGl6
ZUdlc3R1cmUoY29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+JiB0b3VjaFBvaW50
cyk7Ci0KLSAgICBUb3VjaFBvaW50SW5mb3JtYXRpb24gbV9wb2ludDE7Ci0gICAgVG91Y2hQb2lu
dEluZm9ybWF0aW9uIG1fcG9pbnQyOworICAgIHFyZWFsIG1faW5pdGlhbFNwYW5EaXN0YW5jZTsK
IH07CiAKLWlubGluZSBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OlRvdWNoUG9pbnRJbmZvcm1h
dGlvbjo6VG91Y2hQb2ludEluZm9ybWF0aW9uKCkKLSAgICA6IGlkKC0xKQotewotfQotCi1pbmxp
bmUgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpUb3VjaFBvaW50SW5mb3JtYXRpb246OlRvdWNo
UG9pbnRJbmZvcm1hdGlvbihjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2lu
dCkKLSAgICA6IGlkKHRvdWNoUG9pbnQuaWQoKSkKLSAgICAsIGluaXRpYWxTY3JlZW5Qb3NpdGlv
bih0b3VjaFBvaW50LnNjcmVlblBvcygpKQotICAgICwgaW5pdGlhbFBvc2l0aW9uKHRvdWNoUG9p
bnQucG9zKCkpCi17Ci19Ci0KLWlubGluZSBib29sIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6
VG91Y2hQb2ludEluZm9ybWF0aW9uOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaWQg
Pj0gMDsKLX0KLQogfQogCiAjZW5kaWYgLyogUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyX2ggKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNv
Z25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNv
Z25pemVyLmNwcAppbmRleCA2NTA5YjJmLi5lNjQ0MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwCkBAIC0zOSwz
NCArMzksMjcgQEAgUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6UXRUYXBHZXN0dXJlUmVjb2duaXpl
cihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKIAogYm9vbCBRdFRhcEdlc3R1cmVS
ZWNvZ25pemVyOjp3aXRoaW5EaXN0YW5jZShjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYg
dG91Y2hQb2ludCwgaW50IGRpc3RhbmNlKQogewotICAgIHJldHVybiBRTGluZUYodG91Y2hQb2lu
dC5zY3JlZW5Qb3MoKSwgbV9sYXN0VG91Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpLnNj
cmVlblBvcygpKS5sZW5ndGgoKSA8IGRpc3RhbmNlOworICAgIHJldHVybiBRTGluZUYodG91Y2hQ
b2ludC5zY3JlZW5Qb3MoKSwgbV9sYXN0VG91Y2hQb2ludC5zY3JlZW5Qb3MoKSkubGVuZ3RoKCkg
PCBkaXN0YW5jZTsKIH0KIAotYm9vbCBRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUo
Y29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpCiti
b29sIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShRRXZlbnQ6OlR5cGUgZXZlbnRUeXBl
LCBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCkKIHsKICAgICBBU1NF
UlQobV9ldmVudEhhbmRsZXIpOwogCi0gICAgaWYgKGV2ZW50LT50b3VjaFBvaW50cygpLnNpemUo
KSAhPSAxKSB7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCA9IGV2ZW50
LT50b3VjaFBvaW50cygpLmZpcnN0KCk7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsK
KyAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewogICAgIGNhc2UgUUV2ZW50OjpUb3VjaEJlZ2luOgog
ICAgICAgICBtX2RvdWJsZVRhcFRpbWVyLnN0b3AoKTsgLy8gQ2FuY2VsIG90aGVyIHBlbmRpbmcg
c2luZ2xlIHRhcCBldmVudC4KIAogICAgICAgICBBU1NFUlQoIW1fdGFwQW5kSG9sZFRpbWVyLmlz
QWN0aXZlKCkpOwogICAgICAgICBtX3RhcEFuZEhvbGRUaW1lci5zdGFydCh0YXBBbmRIb2xkVGlt
ZSwgdGhpcyk7CiAKLSAgICAgICAgaWYgKG1fbGFzdFRvdWNoRXZlbnQgJiYgd2l0aGluRGlzdGFu
Y2UodG91Y2hQb2ludCwgbWF4RG91YmxlVGFwRGlzdGFuY2UpKQorICAgICAgICBpZiAobV9sYXN0
VG91Y2hQb2ludC5pZCgpICE9IC0xICYmIHdpdGhpbkRpc3RhbmNlKHRvdWNoUG9pbnQsIG1heERv
dWJsZVRhcERpc3RhbmNlKSkKICAgICAgICAgICAgIG1fY2FuZGlkYXRlID0gRG91YmxlVGFwQ2Fu
ZGlkYXRlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fY2FuZGlkYXRlID0gU2luZ2xl
VGFwQ2FuZGlkYXRlOwogICAgICAgICAgICAgLy8gVGhlIGJlbG93IGluIGZhY3RzIHJlc2V0cyBh
bnkgcHJldmlvdXMgc2luZ2xlIHRhcCBldmVudC4KICAgICAgICAgICAgIG1fZXZlbnRIYW5kbGVy
LT5oYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCh0b3VjaFBvaW50KTsKLSAgICAgICAgICAg
IG1fbGFzdFRvdWNoRXZlbnQgPSBhZG9wdFB0cihuZXcgUVRvdWNoRXZlbnQoKmV2ZW50KSk7Cisg
ICAgICAgICAgICBtX2xhc3RUb3VjaFBvaW50ID0gdG91Y2hQb2ludDsKICAgICAgICAgICAgIG1f
ZG91YmxlVGFwVGltZXIuc3RhcnQobWF4RG91YmxlVGFwSW50ZXJ2YWwsIHRoaXMpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtOTgsMzAgKzkxLDM1IEBAIGJvb2wgUXRUYXBHZXN0dXJl
UmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBldmVudCwgcWludDY0IGV2
ZW50VGltCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6
ZXI6OmNhbmNlbCgpCit7CisgICAgaWYgKG1fY2FuZGlkYXRlID09IEludmFsaWQpCisgICAgICAg
IHJldHVybjsKKworICAgIHJlc2V0KCk7Cit9CisKIHZvaWQgUXRUYXBHZXN0dXJlUmVjb2duaXpl
cjo6c2luZ2xlVGFwVGltZW91dCgpCiB7CiAgICAgLy8gRmluZ2VyIGlzIHN0aWxsIHByZXNzZWQs
IGlnbm9yZS4KICAgICBpZiAobV90YXBBbmRIb2xkVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgQVNTRVJUKG1fbGFzdFRvdWNoRXZlbnQpOwotICAgIGNvbnN0IFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50ID0gbV9sYXN0VG91Y2hFdmVudC0+dG91Y2hQ
b2ludHMoKS5maXJzdCgpOworICAgIEFTU0VSVChtX2xhc3RUb3VjaFBvaW50LmlkKCkgIT0gLTEp
OwogCiAgICAgaWYgKG1fY2FuZGlkYXRlID09IFNpbmdsZVRhcENhbmRpZGF0ZSkgewogICAgICAg
ICBtX2V2ZW50SGFuZGxlci0+aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFwRXZlbnQoUVRvdWNoRXZl
bnQ6OlRvdWNoUG9pbnQoKSk7Ci0gICAgICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVTaW5nbGVU
YXBFdmVudCh0b3VjaFBvaW50KTsKKyAgICAgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVNpbmds
ZVRhcEV2ZW50KG1fbGFzdFRvdWNoUG9pbnQpOwogICAgIH0KICAgICByZXNldCgpOwogfQogCiB2
b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRhcEFuZEhvbGRUaW1lb3V0KCkKIHsKLSAgICBB
U1NFUlQobV9sYXN0VG91Y2hFdmVudCk7CisgICAgQVNTRVJUKG1fbGFzdFRvdWNoUG9pbnQuaWQo
KSAhPSAtMSk7CiAjaWYgMCAvLyBObyBzdXBwb3J0IGZvciBzeW50aGV0aWMgY29udGV4dCBtZW51
cyBpbiBXSzIgeWV0LgotICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBv
aW50ID0gbV9sYXN0VG91Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpOwotCiAgICAgbV9l
dmVudEhhbmRsZXItPmhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50KFFUb3VjaEV2ZW50OjpU
b3VjaFBvaW50KCkpOwotICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVUYXBBbmRIb2xkRXZlbnQo
dG91Y2hQb2ludCk7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVRhcEFuZEhvbGRFdmVudCht
X2xhc3RUb3VjaFBvaW50KTsKICNlbmRpZgogICAgIHJlc2V0KCk7CiB9CkBAIC0xMzQsNyArMTMy
LDcgQEAgdm9pZCBRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCiAgICAgbV9jYW5kaWRh
dGUgPSBJbnZhbGlkOwogICAgIG1fdGFwQW5kSG9sZFRpbWVyLnN0b3AoKTsKICAgICBtX2RvdWJs
ZVRhcFRpbWVyLnN0b3AoKTsKLSAgICBtX2xhc3RUb3VjaEV2ZW50LmNsZWFyKCk7CisgICAgbV9s
YXN0VG91Y2hQb2ludC5zZXRJZCgtMSk7CiAKICAgICBRdEdlc3R1cmVSZWNvZ25pemVyOjpyZXNl
dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2Vz
dHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1
cmVSZWNvZ25pemVyLmgKaW5kZXggN2NhN2ZmOS4uYWUyZWNkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5oCkBAIC00Nyw4
ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUXRUYXBHZXN0dXJlUmVjb2duaXpl
ciA6IHB1YmxpYyBRT2JqZWN0LCBwcml2YXRlIFF0R2VzdHVyZVJlY29nbml6ZXIgewogcHVibGlj
OgogICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIoUXRXZWJQYWdlRXZlbnRIYW5kbGVyKik7Ci0g
ICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqLCBxaW50NjQgZXZlbnRUaW1lc3Rh
bXBNaWxsaXMpOwotICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHVwZGF0ZShRRXZlbnQ6OlR5
cGUgZXZlbnRUeXBlLCBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYpOworICAgIHZvaWQg
Y2FuY2VsKCk7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQq
KTsKQEAgLTU2LDExICs1NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB0YXBBbmRIb2xkVGlt
ZW91dCgpOwogCiBwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKICAgICBib29sIHdpdGhpbkRp
c3RhbmNlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiwgaW50IGRpc3RhbmNlKTsKIAog
ICAgIFFCYXNpY1RpbWVyIG1fZG91YmxlVGFwVGltZXI7CiAgICAgUUJhc2ljVGltZXIgbV90YXBB
bmRIb2xkVGltZXI7Ci0gICAgT3duUHRyPFFUb3VjaEV2ZW50PiBtX2xhc3RUb3VjaEV2ZW50Owor
ICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IG1fbGFzdFRvdWNoUG9pbnQ7CiAKICAgICBlbnVt
IHsKICAgICAgICAgSW52YWxpZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKaW5kZXggMWIyYzkzYS4u
OTIxMDI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3Bv
cnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKQEAgLTU3Miw2ICs1NzIsMTIgQEAgdm9p
ZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVyZUVuZGVkKCkKICAgICAg
ICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CiB9CiAKK3ZvaWQgUXRWaWV3cG9ydElu
dGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQoreworICAgIG1fcGluY2hT
dGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7Cit9CisK
IHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtU2l6ZUNoYW5nZWQoKQogewog
ICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgc21hcnRlci4gV2hhdCBoYXBwZW5z
IGlmIGl0IHJlc2l6ZXMgd2hlbiB3ZSB3ZXJlIGludGVyYWN0aW5nPwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5o
CmluZGV4IDE1YzMyMTYuLmMyZmRhMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmgKQEAgLTgyLDkgKzgy
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFNjcm9sbEFuaW1hdGlvbigpOwogCiAgICAg
Ym9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7CisKICAgICB2b2lkIHBhbkdlc3R1cmVTdGFy
dGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OwogICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3QgUVBvaW50RiYgcG9zaXRp
b24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgdm9pZCBwYW5HZXN0dXJlRW5k
ZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CisKICAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKIAogICAgIGJvb2wgc2NhbGVBbmlt
YXRpb25BY3RpdmUoKSBjb25zdDsKQEAgLTk0LDYgKzk2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
cGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENlbnRlckluVmlld3BvcnRD
b29yZGluYXRlcyk7CiAgICAgdm9pZCBwaW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKGNvbnN0IFFQ
b2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBxcmVhbCB0b3RhbFNjYWxl
RmFjdG9yKTsKICAgICB2b2lkIHBpbmNoR2VzdHVyZUVuZGVkKCk7CisgICAgdm9pZCBwaW5jaEdl
c3R1cmVDYW5jZWxsZWQoKTsKIAogICAgIHZvaWQgem9vbVRvQXJlYUdlc3R1cmVFbmRlZChjb25z
dCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdldEFyZWEpOwogICAgIHZv
aWQgZm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFyZWEsIGNvbnN0IFFSZWN0
RiYgdGFyZ2V0QXJlYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
UXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDEwMjY2ZTYuLjZhM2M1MGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwCkBAIC0zNzMsOSArMzczLDkgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmhhbmRs
ZVRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogCiB2b2lkIFF0V2ViUGFnZUV2ZW50SGFu
ZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcnMoKQogewotICAgIG1fcGFuR2VzdHVyZVJlY29n
bml6ZXIucmVzZXQoKTsKLSAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKLSAg
ICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgbV9wYW5HZXN0dXJlUmVjb2du
aXplci5jYW5jZWwoKTsKKyAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuY2FuY2VsKCk7Cisg
ICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5jYW5jZWwoKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0
SW5wdXRQYW5lbFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNDcyLDE2ICs0NzIsMzIgQEAgdm9p
ZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVudChjb25zdCBOYXRpdmVX
ZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICBpZiAobV9pbnRlcmFjdGlvbkVuZ2luZS0+c2NhbGVB
bmltYXRpb25BY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYW5HZXN0dXJlUmVj
b2duaXplci5yZWNvZ25pemUoZXYpOwotICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5yZWNv
Z25pemUoZXYpOworICAgIGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgdG91
Y2hQb2ludHMgPSBldi0+dG91Y2hQb2ludHMoKTsKKyAgICBxaW50NjQgZXZlbnRUaW1lc3RhbXBN
aWxsaXMgPSBldi0+dGltZXN0YW1wKCk7CisgICAgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9p
bnQ+IGFjdGl2ZVRvdWNoUG9pbnRzOwogCi0gICAgaWYgKG1fcGFuR2VzdHVyZVJlY29nbml6ZXIu
aXNSZWNvZ25pemVkKCkgfHwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXplZCgp
KQotICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9tIHNlY29uZCB0byBtaWxs
aXNlY29uZC4KLSAgICAgICAgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzID0gc3RhdGljX2Nh
c3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEwMDApOwotICAgICAgICBtX3RhcEdlc3R1
cmVSZWNvZ25pemVyLnJlY29nbml6ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdG91Y2hQb2ludHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KHRvdWNoUG9pbnRzW2ldLnN0YXRlKCkgIT0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCkKKyAgICAg
ICAgICAgIGFjdGl2ZVRvdWNoUG9pbnRzIDw8IHRvdWNoUG9pbnRzW2ldOworICAgIH0KKworICAg
IGlmICghYWN0aXZlVG91Y2hQb2ludHMuc2l6ZSgpKSB7CisgICAgICAgIGlmICh0b3VjaFBvaW50
cy5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5maW5pc2go
dG91Y2hQb2ludHMuZmlyc3QoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgICAgICBlbHNl
CisgICAgICAgICAgIG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5maW5pc2goKTsKKyAgICB9IGVs
c2UgaWYgKGFjdGl2ZVRvdWNoUG9pbnRzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIG1fcGluY2hH
ZXN0dXJlUmVjb2duaXplci5maW5pc2goKTsKKyAgICAgICAgbV9wYW5HZXN0dXJlUmVjb2duaXpl
ci51cGRhdGUoYWN0aXZlVG91Y2hQb2ludHMuZmlyc3QoKSwgZXZlbnRUaW1lc3RhbXBNaWxsaXMp
OworICAgIH0gZWxzZSBpZiAoYWN0aXZlVG91Y2hQb2ludHMuc2l6ZSgpID09IDIpIHsKKyAgICAg
ICAgbV9wYW5HZXN0dXJlUmVjb2duaXplci5jYW5jZWwoKTsKKyAgICAgICAgbV9waW5jaEdlc3R1
cmVSZWNvZ25pemVyLnVwZGF0ZShhY3RpdmVUb3VjaFBvaW50cy5maXJzdCgpLCBhY3RpdmVUb3Vj
aFBvaW50cy5sYXN0KCkpOwogICAgIH0KKworICAgIGlmIChtX3Bhbkdlc3R1cmVSZWNvZ25pemVy
LmlzUmVjb2duaXplZCgpIHx8IG1fcGluY2hHZXN0dXJlUmVjb2duaXplci5pc1JlY29nbml6ZWQo
KSkKKyAgICAgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5jYW5jZWwoKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIudXBkYXRlKGV2LT50eXBlKCksIHRvdWNoUG9p
bnRzLmZpcnN0KCkpOwogfQogI2VuZGlmCiAKLS0gCjEuNy4xMAoK
</data>
<flag name="review"
          id="142075"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137548</attachid>
            <date>2012-04-17 09:40:44 -0700</date>
            <delta_ts>2012-04-17 09:40:44 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>0001-Qt-WK2-Refactor-the-gesture-recognizers.patch</filename>
            <type>text/plain</type>
            <size>27195</size>
            <attacher name="Andras Becsi">abecsi</attacher>
            
              <data encoding="base64">RnJvbSAwYWUzOTI5OWUxYWY4ZDdiNjBmZTQ5NDdhYzFmMjA1MDBiYmQ5MTM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyYXMgQmVjc2kgPGFuZHJhcy5iZWNzaUBub2tpYS5jb20+
CkRhdGU6IFR1ZSwgMTcgQXByIDIwMTIgMTg6Mjg6MDMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBb
UXRdW1dLMl0gUmVmYWN0b3IgdGhlIGdlc3R1cmUgcmVjb2duaXplcnMKCi0tLQogU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUxICsrKysrKysr
CiAuLi4vVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuY3BwICAgICAgICB8ICAg
ODIgKysrKysrLS0tLS0tLQogLi4uL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuaCAgfCAgIDE2ICsrLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJl
Y29nbml6ZXIuY3BwICAgICAgfCAgMTI5ICsrKysrKy0tLS0tLS0tLS0tLS0tCiAuLi4vVUlQcm9j
ZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5oICAgICAgICB8ICAgMzEgKy0tLS0KIC4u
Li9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5jcHAgICAgICAgIHwgICAzOCAr
KystLS0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmgg
IHwgICAgNyArLQogLi4uL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUu
Y3BwICAgfCAgICA2ICsKIC4uLi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5n
aW5lLmggICAgIHwgICAgMyArCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZl
bnRIYW5kbGVyLmNwcCB8ICAgNDYgKysrKystLQogMTAgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2Vy
dGlvbnMoKyksIDIxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGQyMDY5Ny4uMTUyMWU5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTA0LTE3ICBBbmRyYXMgQmVjc2kg
IDxhbmRyYXMuYmVjc2lAbm9raWEuY29tPgorCisgICAgICAgIFtRdF1bV0syXSBSZWZhY3RvciB0
aGUgZ2VzdHVyZSByZWNvZ25pemVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODMwNDQKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRl
IENocmlzdGlhbnNlbiBhbmQgU2ltb24gSGF1c21hbm4uCisKKyAgICAgICAgVGhpcyBwYXRjaCBp
bXBsZW1lbnRzIGEgc2ltcGxlIGRlY2lzaW9uIHRyZWUgaW4gdGhlIHdlYiBwYWdlIGV2ZW50IGhh
bmRsZXIKKyAgICAgICAgb24gdGhlIGJhc2lzIG9mIGhvdyBtYW55IGFjdGl2ZSB0b3VjaCBwb2lu
dHMgdGhlIGN1cnJlbnQgdG91Y2ggZXZlbnQgaGFzLgorCisgICAgICAgIEFjdGl2ZSB0b3VjaCBw
b2ludHMgYXJlIHByZXNzZWQsIG1vdmVkIG9yIHN0YXRpb25hcnkgYW5kIHRoZSBudW1iZXIgb2Yg
dGhlc2UKKyAgICAgICAgZnVsbHkgZGV0ZXJtaW5lIHdoaWNoIGdlc3R1cmUgcmVjb2duaXplciBz
aG91bGQgYmUgdXBkYXRlZCwgY2FuY2VsbGVkIG9yCisgICAgICAgIGZpbmlzaGVkLgorCisgICAg
ICAgIFRoaXMgbmV3IHN0cnVjdHVyZSBtYWtlcyB0aGUgaW50ZXJuYWwgc3RhdGVzIG9mIHRoZSBw
aW5jaCBhbmQgcGFuIGdlc3R1cmUKKyAgICAgICAgcmVjb2duaXplcnMgaW5kZXBlbmRlbnQgZnJv
bSB0aGUgZXZlbnQgdHlwZSwgdGh1cyBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYW5kbGUKKyAgICAg
ICAgdGhlIHRyYW5zaXRpb25zIGJldHdlZW4gdGhlc2UgZ2VzdHVyZXMgaW4gb25lIGNlbnRyYWxp
emVkIHBsYWNlIHdoaWNoIHJlZHVjZXMKKyAgICAgICAgY29kZSBkdXBsaWNhdGlvbiBhbmQgY29t
cGxleGl0eSBhbmQgZml4ZXMgc29tZSBpc3N1ZXMgcmVnYXJkaW5nIGluY29ycmVjdGx5CisgICAg
ICAgIGhhbmRsZWQgdHJhbnNpdGlvbnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRQYW5H
ZXN0dXJlUmVjb2duaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29n
bml6ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0UGFuR2VzdHVyZVJlY29nbml6ZXI6
OmZpbmlzaCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpRdFBhbkdlc3R1
cmVSZWNvZ25pemVyOjpjYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1
cmVSZWNvZ25pemVyLmg6CisgICAgICAgIChRdFBhbkdlc3R1cmVSZWNvZ25pemVyKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6dXBk
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpmaW5pc2gp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAg
ICAgICAgKFF0UGluY2hHZXN0dXJlUmVjb2duaXplcik6CisgICAgICAgICogVUlQcm9jZXNzL3F0
L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpRdFRhcEdlc3R1
cmVSZWNvZ25pemVyOjp3aXRoaW5EaXN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2Vz
dHVyZVJlY29nbml6ZXI6OnVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlF0VGFwR2VzdHVyZVJl
Y29nbml6ZXI6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpR
dFRhcEdlc3R1cmVSZWNvZ25pemVyOjpzaW5nbGVUYXBUaW1lb3V0KToKKyAgICAgICAgKFdlYktp
dDo6UXRUYXBHZXN0dXJlUmVjb2duaXplcjo6dGFwQW5kSG9sZFRpbWVvdXQpOgorICAgICAgICAo
V2ViS2l0OjpRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuaDoKKyAgICAgICAgKFF0VGFwR2VzdHVyZVJl
Y29nbml6ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25F
bmdpbmUuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRW
aWV3cG9ydEludGVyYWN0aW9uRW5naW5lLmg6CisgICAgICAgIChRdFZpZXdwb3J0SW50ZXJhY3Rp
b25FbmdpbmUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIu
Y3BwOgorICAgICAgICAoUXRXZWJQYWdlRXZlbnRIYW5kbGVyOjpyZXNldEdlc3R1cmVSZWNvZ25p
emVycyk6CisgICAgICAgIChRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVu
dCk6CisKIDIwMTItMDQtMTcgIEFsbGFuIFNhbmRmZWxkIEplbnNlbiAgPGFsbGFuLmplbnNlbkBu
b2tpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTEzMTcyKSBXaGVlbCBldmVudHMgYXJl
IHNjcm9sbGluZyBpbnZlcnNlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCAyOGNlNDU1Li4wYzBkYzljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQYW5HZXN0dXJlUmVjb2du
aXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJl
Y29nbml6ZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUXRQYW5HZXN0dXJlUmVj
b2duaXplci5oIgogCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVk
ZSA8UVRvdWNoRXZlbnQ+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC0zNyw3MSArMzYsNTgg
QEAgUXRQYW5HZXN0dXJlUmVjb2duaXplcjo6UXRQYW5HZXN0dXJlUmVjb2duaXplcihRdFdlYlBh
Z2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKICAgICByZXNldCgpOwogfQogCi1ib29sIFF0UGFu
R2VzdHVyZVJlY29nbml6ZXI6OnJlY29nbml6ZShjb25zdCBRVG91Y2hFdmVudCogZXZlbnQpCiti
b29sIFF0UGFuR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShjb25zdCBRVG91Y2hFdmVudDo6VG91
Y2hQb2ludCYgdG91Y2hQb2ludCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogewogICAg
IGlmICghaW50ZXJhY3Rpb25FbmdpbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Ly8gUGFuIGdlc3R1cmUgYWx3YXlzIHN0YXJ0cyBvbiBUb3VjaEJlZ2luIHVubGVzcyB0aGUgZW5n
aW5lIGlzIHN1c3BlbmRlZCwgb3IKLSAgICAvLyB3ZSBpZ25vcmVkIHRoZSBldmVudC4KLSAgICBp
ZiAobV9zdGF0ZSA9PSBOb0dlc3R1cmUgJiYgZXZlbnQtPnR5cGUoKSAhPSBRRXZlbnQ6OlRvdWNo
QmVnaW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEhhdmluZyBtdWx0aXBsZSB0
b3VjaCBwb2ludHMgY2FuY2VsIHRoZSBwYW5uaW5nIGdlc3R1cmUuCi0gICAgaWYgKGV2ZW50LT50
b3VjaFBvaW50cygpLnNpemUoKSA+IDEpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR2VzdHVy
ZVJlY29nbml6ZWQpCi0gICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJl
Q2FuY2VsbGVkKCk7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgbV9sYXN0UG9zaXRpb24gPSB0b3VjaFBvaW50LnBvcygpOworICAgIG1fbGFzdEV2
ZW50VGltZXN0YW1wTWlsbGlzID0gZXZlbnRUaW1lc3RhbXBNaWxsaXM7CiAKLSAgICBjb25zdCBR
VG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCA9IGV2ZW50LT50b3VjaFBvaW50cygp
LmZpcnN0KCk7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKCkpIHsKLSAgICBjYXNlIFFFdmVu
dDo6VG91Y2hCZWdpbjoKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gTm9HZXN0dXJlKTsKKyAg
ICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vR2VzdHVyZToKICAgICAgICAgbV9zdGF0
ZSA9IEdlc3R1cmVSZWNvZ25pdGlvblN0YXJ0ZWQ7Ci0gICAgICAgIG1fZmlyc3RQb3NpdGlvbiA9
IHRvdWNoUG9pbnQuc2NyZWVuUG9zKCk7Ci0gICAgICAgIG1fdG91Y2hCZWdpbi5yZXNldChuZXcg
UVRvdWNoRXZlbnQoKmV2ZW50KSk7CisgICAgICAgIG1fZmlyc3RTY3JlZW5Qb3NpdGlvbiA9IHRv
dWNoUG9pbnQuc2NlbmVQb3MoKTsKICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+Y2FuY2Vs
U2Nyb2xsQW5pbWF0aW9uKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIFFFdmVu
dDo6VG91Y2hVcGRhdGU6IHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gTm9HZXN0dXJlKTsK
LSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR2VzdHVyZVJlY29nbml0aW9uU3RhcnRlZCkgewotICAg
ICAgICAgICAgLy8gVG8gc3RhcnQgdGhlIGdlc3R1cmUsIHRoZSBkZWx0YSBmcm9tIHN0YXJ0IGlu
IHNjcmVlbiBjb29yZGluYXRlcwotICAgICAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIgdGhhbiB0
aGUgdHJpZ2dlciB0aHJlc2hvbGQuCi0gICAgICAgICAgICBRUG9pbnRGIHRvdGFsT2Zmc2V0RnJv
bVN0YXJ0KHRvdWNoUG9pbnQuc2NyZWVuUG9zKCkgLSBtX2ZpcnN0UG9zaXRpb24pOwotICAgICAg
ICAgICAgaWYgKHFBYnModG90YWxPZmZzZXRGcm9tU3RhcnQueCgpKSA8IHBhbm5pbmdJbml0aWFs
VHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkICYmIHFBYnModG90YWxPZmZzZXRGcm9tU3RhcnQueSgp
KSA8IHBhbm5pbmdJbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbV9zdGF0ZSA9IEdlc3R1cmVSZWNvZ25p
emVkOwotICAgICAgICAgICAgQVNTRVJUKG1fdG91Y2hCZWdpbik7Ci0gICAgICAgICAgICBpbnRl
cmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlU3RhcnRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVu
dC0+dGltZXN0YW1wKCkpOwotICAgICAgICB9CisgICAgY2FzZSBHZXN0dXJlUmVjb2duaXRpb25T
dGFydGVkOiB7CisgICAgICAgIC8vIFRvIHN0YXJ0IHRoZSBnZXN0dXJlLCB0aGUgZGVsdGEgZnJv
bSBzdGFydCBpbiBzY3JlZW4gY29vcmRpbmF0ZXMKKyAgICAgICAgLy8gbXVzdCBiZSBiaWdnZXIg
dGhhbiB0aGUgdHJpZ2dlciB0aHJlc2hvbGQuCisgICAgICAgIFFQb2ludEYgdG90YWxPZmZzZXRG
cm9tU3RhcnQodG91Y2hQb2ludC5zY2VuZVBvcygpIC0gbV9maXJzdFNjcmVlblBvc2l0aW9uKTsK
KyAgICAgICAgaWYgKHFBYnModG90YWxPZmZzZXRGcm9tU3RhcnQueCgpKSA8IHBhbm5pbmdJbml0
aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkICYmIHFBYnModG90YWxPZmZzZXRGcm9tU3RhcnQu
eSgpKSA8IHBhbm5pbmdJbml0aWFsVHJpZ2dlckRpc3RhbmNlVGhyZXNob2xkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNv
Z25pemVkKTsKLSAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZVJlcXVlc3RV
cGRhdGUodG91Y2hQb2ludC5wb3MoKSwgZXZlbnQtPnRpbWVzdGFtcCgpKTsKKyAgICAgICAgbV9z
dGF0ZSA9IEdlc3R1cmVSZWNvZ25pemVkOworICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5w
YW5HZXN0dXJlU3RhcnRlZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBjYXNlIFFFdmVudDo6VG91Y2hFbmQ6
Ci0gICAgICAgIGlmIChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKSB7Ci0gICAgICAgICAg
ICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5wYW5HZXN0dXJlRW5kZWQodG91Y2hQb2ludC5wb3MoKSwg
ZXZlbnQtPnRpbWVzdGFtcCgpKTsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBHZXN0dXJl
UmVjb2duaXRpb25TdGFydGVkKTsKLSAgICAgICAgcmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgR2VzdHVyZVJlY29nbml6ZWQ6CisgICAgICAgIGludGVyYWN0aW9uRW5n
aW5lKCktPnBhbkdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNoUG9pbnQucG9zKCksIGV2ZW50VGlt
ZXN0YW1wTWlsbGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgpCit2b2lkIFF0UGFuR2VzdHVyZVJl
Y29nbml6ZXI6OmZpbmlzaChjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2lu
dCwgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzKQogewotICAgIFF0R2VzdHVyZVJlY29nbml6
ZXI6OnJlc2V0KCk7Ci0gICAgbV9maXJzdFBvc2l0aW9uID0gUVBvaW50RigpOworICAgIGlmICht
X3N0YXRlID09IE5vR2VzdHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGludGVy
YWN0aW9uRW5naW5lKCkpOworICAgIGludGVyYWN0aW9uRW5naW5lKCktPnBhbkdlc3R1cmVFbmRl
ZCh0b3VjaFBvaW50LnBvcygpLCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CisgICAgcmVzZXQoKTsK
K30KKwordm9pZCBRdFBhbkdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwoKQoreworICAgIGlmICht
X3N0YXRlID09IE5vR2VzdHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50ZXJhY3Rpb25F
bmdpbmUoKS0+cGFuR2VzdHVyZUVuZGVkKG1fbGFzdFBvc2l0aW9uLCBtX2xhc3RFdmVudFRpbWVz
dGFtcE1pbGxpcyk7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGFuR2VzdHVyZUNhbmNlbGxl
ZCgpOworICAgIHJlc2V0KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFBhbkdlc3R1cmVSZWNvZ25pemVyLmgKaW5k
ZXggZTFlOWZmMy4uYzM1NTE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1F0UGFuR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQYW5HZXN0dXJlUmVjb2duaXplci5oCkBAIC0zMCwxMSArMzAsNyBAQAogCiAjaW5j
bHVkZSA8UVBvaW50Rj4KICNpbmNsdWRlIDxRU2NvcGVkUG9pbnRlcj4KLSNpbmNsdWRlIDxRdENv
cmUvUXRHbG9iYWw+Ci0KLVFUX0JFR0lOX05BTUVTUEFDRQotY2xhc3MgUVRvdWNoRXZlbnQ7Ci1R
VF9FTkRfTkFNRVNQQUNFCisjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC00MywxMiArMzksMTQgQEAgY29uc3QgcXJlYWwgcGFubmluZ0luaXRpYWxUcmln
Z2VyRGlzdGFuY2VUaHJlc2hvbGQgPSA1LjsKIGNsYXNzIFF0UGFuR2VzdHVyZVJlY29nbml6ZXIg
OiBwdWJsaWMgUXRHZXN0dXJlUmVjb2duaXplciB7CiBwdWJsaWM6CiAgICAgUXRQYW5HZXN0dXJl
UmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqKTsKLSAgICBib29sIHJlY29nbml6ZShj
b25zdCBRVG91Y2hFdmVudCopOwotICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHVwZGF0ZShj
b25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYsIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxp
cyk7CisgICAgdm9pZCBmaW5pc2goY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAgIHZvaWQgY2FuY2VsKCk7CiAKIHByaXZhdGU6
Ci0gICAgUVBvaW50RiBtX2ZpcnN0UG9zaXRpb247Ci0gICAgUVNjb3BlZFBvaW50ZXI8UVRvdWNo
RXZlbnQ+IG1fdG91Y2hCZWdpbjsKKyAgICBRUG9pbnRGIG1fZmlyc3RTY3JlZW5Qb3NpdGlvbjsK
KyAgICBRUG9pbnRGIG1fbGFzdFBvc2l0aW9uOworICAgIHFpbnQ2NCBtX2xhc3RFdmVudFRpbWVz
dGFtcE1pbGxpczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2duaXplci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcApp
bmRleCA3Njk5YWQzLi45ODdkMzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmNwcApAQCAtMzMsMTcgKzMzLDYg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNvbnN0IHFyZWFsIHBpbmNoSW5pdGlhbFRyaWdnZXJE
aXN0YW5jZVRocmVzaG9sZCA9IDUuOwogCi1zdGF0aWMgaW5saW5lIGludCBmaW5kVG91Y2hQb2lu
dEluZGV4KGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50PiYgdG91Y2hQb2ludHMs
IGNvbnN0IFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6VG91Y2hQb2ludEluZm9ybWF0aW9uJiBw
b2ludEluZm9ybWF0aW9uKQotewotICAgIGNvbnN0IGludCB0b3VjaENvdW50ID0gdG91Y2hQb2lu
dHMuc2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG91Y2hDb3VudDsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50ID0gdG91Y2hQ
b2ludHMuYXQoaSk7Ci0gICAgICAgIGlmICh0b3VjaFBvaW50LmlkKCkgPT0gcG9pbnRJbmZvcm1h
dGlvbi5pZCkKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgUVBvaW50RiBjb21wdXRlUGluY2hDZW50ZXIoY29uc3QgUVRvdWNo
RXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50MSwgY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQm
IHBvaW50MikKIHsKICAgICByZXR1cm4gKHBvaW50MS5wb3MoKSArIHBvaW50Mi5wb3MoKSkgLyAy
LjBmOwpAQCAtNTUsMTAzICs0NCw1OSBAQCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OlF0UGlu
Y2hHZXN0dXJlUmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SAogICAgIHJl
c2V0KCk7CiB9CiAKLWJvb2wgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpyZWNvZ25pemUoY29u
c3QgUVRvdWNoRXZlbnQqIGV2ZW50KQorYm9vbCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OnVw
ZGF0ZShjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgcG9pbnQxLCBjb25zdCBRVG91Y2hF
dmVudDo6VG91Y2hQb2ludCYgcG9pbnQyKQogewotICAgIGlmICghaW50ZXJhY3Rpb25FbmdpbmUo
KSkKKyAgICBBU1NFUlQoaW50ZXJhY3Rpb25FbmdpbmUoKSk7CisgICAgY29uc3QgcXJlYWwgY3Vy
cmVudEZpbmdlckRpc3RhbmNlID0gUUxpbmVGKHBvaW50MS5zY3JlZW5Qb3MoKSwgcG9pbnQyLnNj
cmVlblBvcygpKS5sZW5ndGgoKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5v
R2VzdHVyZToKKyAgICAgICAgbV9pbml0aWFsRmluZ2VyRGlzdGFuY2UgPSBjdXJyZW50RmluZ2Vy
RGlzdGFuY2U7CisgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkOwog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBRTGlzdDxRVG91Y2hFdmVudDo6VG91
Y2hQb2ludD4mIHRvdWNoUG9pbnRzID0gZXZlbnQtPnRvdWNoUG9pbnRzKCk7Ci0gICAgaWYgKHRv
dWNoUG9pbnRzLnNpemUoKSA8IDIpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR2VzdHVyZVJl
Y29nbml6ZWQpCi0gICAgICAgICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVF
bmRlZCgpOwotICAgICAgICByZXNldCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgc3dpdGNoIChldmVudC0+dHlwZSgpKSB7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoQmVn
aW46Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoVXBkYXRlOgotICAgICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKLSAgICAgICAgY2FzZSBOb0dlc3R1cmU6Ci0gICAgICAgICAgICBpbml0aWFsaXplR2Vz
dHVyZSh0b3VjaFBvaW50cyk7CisgICAgY2FzZSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkOiB7
CisgICAgICAgIGNvbnN0IHFyZWFsIHBpbmNoRGlzdGFuY2UgPSBxQWJzKGN1cnJlbnRGaW5nZXJE
aXN0YW5jZSAtIG1faW5pdGlhbEZpbmdlckRpc3RhbmNlKTsKKyAgICAgICAgaWYgKHBpbmNoRGlz
dGFuY2UgPCBwaW5jaEluaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgR2VzdHVyZVJlY29nbml0aW9uU3RhcnRlZDoK
LSAgICAgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplZDoKLSAgICAgICAgICAgIEFTU0VSVChtX3Bv
aW50MS5pc1ZhbGlkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnQyLmlzVmFsaWQoKSk7
CisgICAgICAgIG1fc3RhdGUgPSBHZXN0dXJlUmVjb2duaXplZDsKKyAgICAgICAgaW50ZXJhY3Rp
b25FbmdpbmUoKS0+cGluY2hHZXN0dXJlU3RhcnRlZChjb21wdXRlUGluY2hDZW50ZXIocG9pbnQx
LCBwb2ludDIpKTsKIAotICAgICAgICAgICAgY29uc3QgaW50IHBvaW50MUluZGV4ID0gZmluZFRv
dWNoUG9pbnRJbmRleCh0b3VjaFBvaW50cywgbV9wb2ludDEpOwotICAgICAgICAgICAgaWYgKHBv
aW50MUluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uc3QgaW50IHBv
aW50MkluZGV4ID0gZmluZFRvdWNoUG9pbnRJbmRleCh0b3VjaFBvaW50cywgbV9wb2ludDIpOwot
ICAgICAgICAgICAgaWYgKHBvaW50MkluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIHJlc2V0
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQorICAgICAg
ICAvLyBXZSByZXNldCB0aGUgaW5pdGlhbCBzcGFuIGRpc3RhbmNlIHRvIHRoZSBjdXJyZW50IGRp
c3RhbmNlIG9mIHRoZQorICAgICAgICAvLyB0b3VjaCBwb2ludHMgaW4gb3JkZXIgdG8gYXZvaWQg
dGhlIGp1bXAgY2F1c2VkIGJ5IHRoZSBldmVudHMgd2hpY2gKKyAgICAgICAgLy8gd2VyZSBza2lw
cGVkIGJldHdlZW4gdGhlIHJlY29nbml0aW9uIHN0YXJ0IGFuZCB0aGUgYWN0dWFsIHJlY29nbml0
aW9uLgorICAgICAgICBtX2luaXRpYWxGaW5nZXJEaXN0YW5jZSA9IGN1cnJlbnRGaW5nZXJEaXN0
YW5jZTsKIAotICAgICAgICAgICAgY29uc3QgUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQmIHBvaW50
MSA9IHRvdWNoUG9pbnRzLmF0KHBvaW50MUluZGV4KTsKLSAgICAgICAgICAgIGNvbnN0IFFUb3Vj
aEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDIgPSB0b3VjaFBvaW50cy5hdChwb2ludDJJbmRleCk7
Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBHZXN0dXJlUmVjb2duaXRpb25TdGFydGVkKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBnZXN0dXJlIHNob3VsZCBvbmx5IHN0YXJ0
IGlmIHRoZSB0b3VjaCBldmVudHMgd2VyZSBub3QgYWNjZXB0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRo
ZSB0b3VjaCBzZXF1ZW5jZS4KLSAgICAgICAgICAgICAgICBjb25zdCBxcmVhbCBwaW5jaERpc3Rh
bmNlID0gcUFicyhRTGluZUYocG9pbnQxLnNjcmVlblBvcygpLCBwb2ludDIuc2NyZWVuUG9zKCkp
Lmxlbmd0aCgpIC0gUUxpbmVGKG1fcG9pbnQxLmluaXRpYWxTY3JlZW5Qb3NpdGlvbiwgbV9wb2lu
dDIuaW5pdGlhbFNjcmVlblBvc2l0aW9uKS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHBpbmNoRGlzdGFuY2UgPCBwaW5jaEluaXRpYWxUcmlnZ2VyRGlzdGFuY2VUaHJlc2hvbGQpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBtX3N0YXRl
ID0gR2VzdHVyZVJlY29nbml6ZWQ7Ci0gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUo
KS0+cGluY2hHZXN0dXJlU3RhcnRlZChjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIp
KTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIHJlc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uIHRv
IHRoZSBwcmV2aW91cyBwb3NpdGlvbiBpbiBvcmRlciB0byBhdm9pZCB0aGUganVtcCBjYXVzZWQK
LSAgICAgICAgICAgICAgICAvLyBieSBza2lwcGluZyBhbGwgdGhlIGV2ZW50cyBiZXR3ZWVuIHRo
ZSBiZWdpbm5pbmcgYW5kIHdoZW4gdGhlIHRocmVzaG9sZCBpcyBoaXQuCi0gICAgICAgICAgICAg
ICAgbV9wb2ludDEuaW5pdGlhbFBvc2l0aW9uID0gcG9pbnQxLmxhc3RQb3MoKTsKLSAgICAgICAg
ICAgICAgICBtX3BvaW50MS5pbml0aWFsU2NyZWVuUG9zaXRpb24gPSBwb2ludDEubGFzdFNjcmVl
blBvcygpOwotICAgICAgICAgICAgICAgIG1fcG9pbnQyLmluaXRpYWxQb3NpdGlvbiA9IHBvaW50
Mi5sYXN0UG9zKCk7Ci0gICAgICAgICAgICAgICAgbV9wb2ludDIuaW5pdGlhbFNjcmVlblBvc2l0
aW9uID0gcG9pbnQyLmxhc3RTY3JlZW5Qb3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEFTU0VSVChtX3N0YXRlID09IEdlc3R1cmVSZWNvZ25pemVkKTsKLSAgICAgICAgICAgIGNvbnN0
IHFyZWFsIGN1cnJlbnRTcGFuRGlzdGFuY2UgPSBRTGluZUYocG9pbnQxLnNjcmVlblBvcygpLCBw
b2ludDIuc2NyZWVuUG9zKCkpLmxlbmd0aCgpOwotICAgICAgICAgICAgY29uc3QgcXJlYWwgaW5p
dGlhbFNwYW5EaXN0YW5jZSA9IFFMaW5lRihtX3BvaW50MS5pbml0aWFsU2NyZWVuUG9zaXRpb24s
IG1fcG9pbnQyLmluaXRpYWxTY3JlZW5Qb3NpdGlvbikubGVuZ3RoKCk7Ci0gICAgICAgICAgICBj
b25zdCBxcmVhbCB0b3RhbFNjYWxlRmFjdG9yID0gY3VycmVudFNwYW5EaXN0YW5jZSAvIGluaXRp
YWxTcGFuRGlzdGFuY2U7Ci0gICAgICAgICAgICBjb25zdCBRUG9pbnRGIHRvdWNoQ2VudGVySW5W
aWV3Q29vcmRpbmF0ZXMgPSBjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpOwotICAg
ICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlUmVxdWVzdFVwZGF0ZSh0
b3VjaENlbnRlckluVmlld0Nvb3JkaW5hdGVzLCB0b3RhbFNjYWxlRmFjdG9yKTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBRRXZlbnQ6OlRvdWNoRW5kOgotICAgICAgICBpZiAobV9zdGF0ZSA9
PSBHZXN0dXJlUmVjb2duaXplZCkgewotICAgICAgICAgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+
cGluY2hHZXN0dXJlRW5kZWQoKTsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXNldCgpOworICAgICAgICAvLyBmYWxs
IHRocm91Z2gKKyAgICB9CisgICAgY2FzZSBHZXN0dXJlUmVjb2duaXplZDoKKyAgICAgICAgY29u
c3QgcXJlYWwgdG90YWxTY2FsZUZhY3RvciA9IGN1cnJlbnRGaW5nZXJEaXN0YW5jZSAvIG1faW5p
dGlhbEZpbmdlckRpc3RhbmNlOworICAgICAgICBjb25zdCBRUG9pbnRGIHRvdWNoQ2VudGVySW5W
aWV3Q29vcmRpbmF0ZXMgPSBjb21wdXRlUGluY2hDZW50ZXIocG9pbnQxLCBwb2ludDIpOworICAg
ICAgICBpbnRlcmFjdGlvbkVuZ2luZSgpLT5waW5jaEdlc3R1cmVSZXF1ZXN0VXBkYXRlKHRvdWNo
Q2VudGVySW5WaWV3Q29vcmRpbmF0ZXMsIHRvdGFsU2NhbGVGYWN0b3IpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgfQogCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6cmVzZXQoKQor
dm9pZCBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OmZpbmlzaCgpCiB7Ci0gICAgUXRHZXN0dXJl
UmVjb2duaXplcjo6cmVzZXQoKTsKLSAgICBtX3BvaW50MSA9IFRvdWNoUG9pbnRJbmZvcm1hdGlv
bigpOwotICAgIG1fcG9pbnQyID0gVG91Y2hQb2ludEluZm9ybWF0aW9uKCk7CisgICAgaWYgKG1f
c3RhdGUgPT0gTm9HZXN0dXJlKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaW50ZXJh
Y3Rpb25FbmdpbmUoKSk7CisgICAgaW50ZXJhY3Rpb25FbmdpbmUoKS0+cGluY2hHZXN0dXJlRW5k
ZWQoKTsKKyAgICByZXNldCgpOwogfQogCi12b2lkIFF0UGluY2hHZXN0dXJlUmVjb2duaXplcjo6
aW5pdGlhbGl6ZUdlc3R1cmUoY29uc3QgUUxpc3Q8UVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQ+JiB0
b3VjaFBvaW50cykKK3ZvaWQgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpjYW5jZWwoKQogewot
ICAgIEFTU0VSVCghbV9wb2ludDEuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQoIW1fcG9pbnQyLmlz
VmFsaWQoKSk7Ci0KLSAgICBtX3N0YXRlID0gR2VzdHVyZVJlY29nbml0aW9uU3RhcnRlZDsKKyAg
ICBpZiAobV9zdGF0ZSA9PSBOb0dlc3R1cmUpCisgICAgICAgIHJldHVybjsKIAotICAgIG1fcG9p
bnQxID0gVG91Y2hQb2ludEluZm9ybWF0aW9uKHRvdWNoUG9pbnRzLmF0KDApKTsKLSAgICBtX3Bv
aW50MiA9IFRvdWNoUG9pbnRJbmZvcm1hdGlvbih0b3VjaFBvaW50cy5hdCgxKSk7Ci0KLSAgICBB
U1NFUlQobV9wb2ludDEuaXNWYWxpZCgpKTsKLSAgICBBU1NFUlQobV9wb2ludDIuaXNWYWxpZCgp
KTsKKyAgICBBU1NFUlQoaW50ZXJhY3Rpb25FbmdpbmUoKSk7CisgICAgaW50ZXJhY3Rpb25Fbmdp
bmUoKS0+cGluY2hHZXN0dXJlQ2FuY2VsbGVkKCk7CisgICAgcmVzZXQoKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2du
aXplci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0UGluY2hHZXN0dXJlUmVjb2du
aXplci5oCmluZGV4IDdkZDNkOTEuLjgxOGVlZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFBpbmNoR2VzdHVyZVJlY29nbml6ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyLmgKQEAgLTMyLDEwICsz
Miw2IEBACiAjaW5jbHVkZSA8UXRDb3JlL1FMaXN0PgogI2luY2x1ZGUgPFF0Q29yZS9RUG9pbnRG
PgogCi1RVF9CRUdJTl9OQU1FU1BBQ0UKLWNsYXNzIFFUb3VjaEV2ZW50OwotUVRfRU5EX05BTUVT
UEFDRQotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUXRQaW5jaEdlc3R1cmVSZWNvZ25p
emVyIDogcHVibGljIFF0R2VzdHVyZVJlY29nbml6ZXIgewpAQCAtNTEsMzMgKzQ3LDE0IEBAIHB1
YmxpYzoKICAgICB9OwogCiAgICAgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyKFF0V2ViUGFnZUV2
ZW50SGFuZGxlciopOwotICAgIGJvb2wgcmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50Kik7Ci0g
ICAgdm9pZCByZXNldCgpOworICAgIGJvb2wgdXBkYXRlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3Vj
aFBvaW50JiBwb2ludDEsIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiBwb2ludDIpOwor
ICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBjYW5jZWwoKTsKIAogcHJpdmF0ZToKLSAgICB2
b2lkIGluaXRpYWxpemVHZXN0dXJlKGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50
PiYgdG91Y2hQb2ludHMpOwotCi0gICAgVG91Y2hQb2ludEluZm9ybWF0aW9uIG1fcG9pbnQxOwot
ICAgIFRvdWNoUG9pbnRJbmZvcm1hdGlvbiBtX3BvaW50MjsKKyAgICBxcmVhbCBtX2luaXRpYWxG
aW5nZXJEaXN0YW5jZTsKIH07CiAKLWlubGluZSBRdFBpbmNoR2VzdHVyZVJlY29nbml6ZXI6OlRv
dWNoUG9pbnRJbmZvcm1hdGlvbjo6VG91Y2hQb2ludEluZm9ybWF0aW9uKCkKLSAgICA6IGlkKC0x
KQotewotfQotCi1pbmxpbmUgUXRQaW5jaEdlc3R1cmVSZWNvZ25pemVyOjpUb3VjaFBvaW50SW5m
b3JtYXRpb246OlRvdWNoUG9pbnRJbmZvcm1hdGlvbihjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQ
b2ludCYgdG91Y2hQb2ludCkKLSAgICA6IGlkKHRvdWNoUG9pbnQuaWQoKSkKLSAgICAsIGluaXRp
YWxTY3JlZW5Qb3NpdGlvbih0b3VjaFBvaW50LnNjcmVlblBvcygpKQotICAgICwgaW5pdGlhbFBv
c2l0aW9uKHRvdWNoUG9pbnQucG9zKCkpCi17Ci19Ci0KLWlubGluZSBib29sIFF0UGluY2hHZXN0
dXJlUmVjb2duaXplcjo6VG91Y2hQb2ludEluZm9ybWF0aW9uOjppc1ZhbGlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaWQgPj0gMDsKLX0KLQogfQogCiAjZW5kaWYgLyogUXRQaW5jaEdlc3R1cmVS
ZWNvZ25pemVyX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9R
dFRhcEdlc3R1cmVSZWNvZ25pemVyLmNwcAppbmRleCA2NTA5YjJmLi5lNjQ0MzFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2duaXplci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6
ZXIuY3BwCkBAIC0zOSwzNCArMzksMjcgQEAgUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6UXRUYXBH
ZXN0dXJlUmVjb2duaXplcihRdFdlYlBhZ2VFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGwKIAogYm9v
bCBRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjp3aXRoaW5EaXN0YW5jZShjb25zdCBRVG91Y2hFdmVu
dDo6VG91Y2hQb2ludCYgdG91Y2hQb2ludCwgaW50IGRpc3RhbmNlKQogewotICAgIHJldHVybiBR
TGluZUYodG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgbV9sYXN0VG91Y2hFdmVudC0+dG91Y2hQb2lu
dHMoKS5maXJzdCgpLnNjcmVlblBvcygpKS5sZW5ndGgoKSA8IGRpc3RhbmNlOworICAgIHJldHVy
biBRTGluZUYodG91Y2hQb2ludC5zY3JlZW5Qb3MoKSwgbV9sYXN0VG91Y2hQb2ludC5zY3JlZW5Q
b3MoKSkubGVuZ3RoKCkgPCBkaXN0YW5jZTsKIH0KIAotYm9vbCBRdFRhcEdlc3R1cmVSZWNvZ25p
emVyOjpyZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqIGV2ZW50LCBxaW50NjQgZXZlbnRUaW1l
c3RhbXBNaWxsaXMpCitib29sIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnVwZGF0ZShRRXZlbnQ6
OlR5cGUgZXZlbnRUeXBlLCBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91Y2hQb2lu
dCkKIHsKICAgICBBU1NFUlQobV9ldmVudEhhbmRsZXIpOwogCi0gICAgaWYgKGV2ZW50LT50b3Vj
aFBvaW50cygpLnNpemUoKSAhPSAxKSB7Ci0gICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2ludCYgdG91
Y2hQb2ludCA9IGV2ZW50LT50b3VjaFBvaW50cygpLmZpcnN0KCk7Ci0KLSAgICBzd2l0Y2ggKGV2
ZW50LT50eXBlKCkpIHsKKyAgICBzd2l0Y2ggKGV2ZW50VHlwZSkgewogICAgIGNhc2UgUUV2ZW50
OjpUb3VjaEJlZ2luOgogICAgICAgICBtX2RvdWJsZVRhcFRpbWVyLnN0b3AoKTsgLy8gQ2FuY2Vs
IG90aGVyIHBlbmRpbmcgc2luZ2xlIHRhcCBldmVudC4KIAogICAgICAgICBBU1NFUlQoIW1fdGFw
QW5kSG9sZFRpbWVyLmlzQWN0aXZlKCkpOwogICAgICAgICBtX3RhcEFuZEhvbGRUaW1lci5zdGFy
dCh0YXBBbmRIb2xkVGltZSwgdGhpcyk7CiAKLSAgICAgICAgaWYgKG1fbGFzdFRvdWNoRXZlbnQg
JiYgd2l0aGluRGlzdGFuY2UodG91Y2hQb2ludCwgbWF4RG91YmxlVGFwRGlzdGFuY2UpKQorICAg
ICAgICBpZiAobV9sYXN0VG91Y2hQb2ludC5pZCgpICE9IC0xICYmIHdpdGhpbkRpc3RhbmNlKHRv
dWNoUG9pbnQsIG1heERvdWJsZVRhcERpc3RhbmNlKSkKICAgICAgICAgICAgIG1fY2FuZGlkYXRl
ID0gRG91YmxlVGFwQ2FuZGlkYXRlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG1fY2Fu
ZGlkYXRlID0gU2luZ2xlVGFwQ2FuZGlkYXRlOwogICAgICAgICAgICAgLy8gVGhlIGJlbG93IGlu
IGZhY3RzIHJlc2V0cyBhbnkgcHJldmlvdXMgc2luZ2xlIHRhcCBldmVudC4KICAgICAgICAgICAg
IG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVQb3RlbnRpYWxTaW5nbGVUYXBFdmVudCh0b3VjaFBvaW50
KTsKLSAgICAgICAgICAgIG1fbGFzdFRvdWNoRXZlbnQgPSBhZG9wdFB0cihuZXcgUVRvdWNoRXZl
bnQoKmV2ZW50KSk7CisgICAgICAgICAgICBtX2xhc3RUb3VjaFBvaW50ID0gdG91Y2hQb2ludDsK
ICAgICAgICAgICAgIG1fZG91YmxlVGFwVGltZXIuc3RhcnQobWF4RG91YmxlVGFwSW50ZXJ2YWws
IHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtOTgsMzAgKzkxLDM1IEBAIGJv
b2wgUXRUYXBHZXN0dXJlUmVjb2duaXplcjo6cmVjb2duaXplKGNvbnN0IFFUb3VjaEV2ZW50KiBl
dmVudCwgcWludDY0IGV2ZW50VGltCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFF0VGFw
R2VzdHVyZVJlY29nbml6ZXI6OmNhbmNlbCgpCit7CisgICAgaWYgKG1fY2FuZGlkYXRlID09IElu
dmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIHJlc2V0KCk7Cit9CisKIHZvaWQgUXRUYXBH
ZXN0dXJlUmVjb2duaXplcjo6c2luZ2xlVGFwVGltZW91dCgpCiB7CiAgICAgLy8gRmluZ2VyIGlz
IHN0aWxsIHByZXNzZWQsIGlnbm9yZS4KICAgICBpZiAobV90YXBBbmRIb2xkVGltZXIuaXNBY3Rp
dmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fbGFzdFRvdWNoRXZlbnQpOwot
ICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiB0b3VjaFBvaW50ID0gbV9sYXN0VG91
Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5maXJzdCgpOworICAgIEFTU0VSVChtX2xhc3RUb3VjaFBv
aW50LmlkKCkgIT0gLTEpOwogCiAgICAgaWYgKG1fY2FuZGlkYXRlID09IFNpbmdsZVRhcENhbmRp
ZGF0ZSkgewogICAgICAgICBtX2V2ZW50SGFuZGxlci0+aGFuZGxlUG90ZW50aWFsU2luZ2xlVGFw
RXZlbnQoUVRvdWNoRXZlbnQ6OlRvdWNoUG9pbnQoKSk7Ci0gICAgICAgIG1fZXZlbnRIYW5kbGVy
LT5oYW5kbGVTaW5nbGVUYXBFdmVudCh0b3VjaFBvaW50KTsKKyAgICAgICAgbV9ldmVudEhhbmRs
ZXItPmhhbmRsZVNpbmdsZVRhcEV2ZW50KG1fbGFzdFRvdWNoUG9pbnQpOwogICAgIH0KICAgICBy
ZXNldCgpOwogfQogCiB2b2lkIFF0VGFwR2VzdHVyZVJlY29nbml6ZXI6OnRhcEFuZEhvbGRUaW1l
b3V0KCkKIHsKLSAgICBBU1NFUlQobV9sYXN0VG91Y2hFdmVudCk7CisgICAgQVNTRVJUKG1fbGFz
dFRvdWNoUG9pbnQuaWQoKSAhPSAtMSk7CiAjaWYgMCAvLyBObyBzdXBwb3J0IGZvciBzeW50aGV0
aWMgY29udGV4dCBtZW51cyBpbiBXSzIgeWV0LgotICAgIGNvbnN0IFFUb3VjaEV2ZW50OjpUb3Vj
aFBvaW50JiB0b3VjaFBvaW50ID0gbV9sYXN0VG91Y2hFdmVudC0+dG91Y2hQb2ludHMoKS5maXJz
dCgpOwotCiAgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVBvdGVudGlhbFNpbmdsZVRhcEV2ZW50
KFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50KCkpOwotICAgIG1fZXZlbnRIYW5kbGVyLT5oYW5kbGVU
YXBBbmRIb2xkRXZlbnQodG91Y2hQb2ludCk7CisgICAgbV9ldmVudEhhbmRsZXItPmhhbmRsZVRh
cEFuZEhvbGRFdmVudChtX2xhc3RUb3VjaFBvaW50KTsKICNlbmRpZgogICAgIHJlc2V0KCk7CiB9
CkBAIC0xMzQsNyArMTMyLDcgQEAgdm9pZCBRdFRhcEdlc3R1cmVSZWNvZ25pemVyOjpyZXNldCgp
CiAgICAgbV9jYW5kaWRhdGUgPSBJbnZhbGlkOwogICAgIG1fdGFwQW5kSG9sZFRpbWVyLnN0b3Ao
KTsKICAgICBtX2RvdWJsZVRhcFRpbWVyLnN0b3AoKTsKLSAgICBtX2xhc3RUb3VjaEV2ZW50LmNs
ZWFyKCk7CisgICAgbV9sYXN0VG91Y2hQb2ludC5zZXRJZCgtMSk7CiAKICAgICBRdEdlc3R1cmVS
ZWNvZ25pemVyOjpyZXNldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFRhcEdlc3R1cmVSZWNvZ25pemVyLmgKaW5kZXggN2NhN2ZmOS4uYWUyZWNkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0VGFwR2VzdHVyZVJlY29nbml6
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRUYXBHZXN0dXJlUmVjb2du
aXplci5oCkBAIC00Nyw4ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgUXRUYXBH
ZXN0dXJlUmVjb2duaXplciA6IHB1YmxpYyBRT2JqZWN0LCBwcml2YXRlIFF0R2VzdHVyZVJlY29n
bml6ZXIgewogcHVibGljOgogICAgIFF0VGFwR2VzdHVyZVJlY29nbml6ZXIoUXRXZWJQYWdlRXZl
bnRIYW5kbGVyKik7Ci0gICAgYm9vbCByZWNvZ25pemUoY29uc3QgUVRvdWNoRXZlbnQqLCBxaW50
NjQgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOwotICAgIHZvaWQgcmVzZXQoKTsKKyAgICBib29sIHVw
ZGF0ZShRRXZlbnQ6OlR5cGUgZXZlbnRUeXBlLCBjb25zdCBRVG91Y2hFdmVudDo6VG91Y2hQb2lu
dCYpOworICAgIHZvaWQgY2FuY2VsKCk7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHRpbWVyRXZl
bnQoUVRpbWVyRXZlbnQqKTsKQEAgLTU2LDExICs1NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCB0YXBBbmRIb2xkVGltZW91dCgpOwogCiBwcml2YXRlOgorICAgIHZvaWQgcmVzZXQoKTsKICAg
ICBib29sIHdpdGhpbkRpc3RhbmNlKGNvbnN0IFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50JiwgaW50
IGRpc3RhbmNlKTsKIAogICAgIFFCYXNpY1RpbWVyIG1fZG91YmxlVGFwVGltZXI7CiAgICAgUUJh
c2ljVGltZXIgbV90YXBBbmRIb2xkVGltZXI7Ci0gICAgT3duUHRyPFFUb3VjaEV2ZW50PiBtX2xh
c3RUb3VjaEV2ZW50OworICAgIFFUb3VjaEV2ZW50OjpUb3VjaFBvaW50IG1fbGFzdFRvdWNoUG9p
bnQ7CiAKICAgICBlbnVtIHsKICAgICAgICAgSW52YWxpZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAK
aW5kZXggYWNlMDJhOS4uYmJhYTdhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFjdGlvbkVuZ2luZS5jcHAKQEAgLTU3OSw2
ICs1NzksMTIgQEAgdm9pZCBRdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmU6OnBpbmNoR2VzdHVy
ZUVuZGVkKCkKICAgICAgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVyLmNsZWFyKCk7CiB9CiAKK3Zv
aWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjpwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKQor
eworICAgIG1fcGluY2hTdGFydFNjYWxlID0gLTE7CisgICAgbV9zY2FsZVVwZGF0ZURlZmVycmVy
LmNsZWFyKCk7Cit9CisKIHZvaWQgUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5lOjppdGVtU2l6
ZUNoYW5nZWQoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgc21hcnRl
ci4gV2hhdCBoYXBwZW5zIGlmIGl0IHJlc2l6ZXMgd2hlbiB3ZSB3ZXJlIGludGVyYWN0aW5nPwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRlcmFj
dGlvbkVuZ2luZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0Vmlld3BvcnRJbnRl
cmFjdGlvbkVuZ2luZS5oCmluZGV4IGUyM2QzYTUuLjNkNTg4OTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFZpZXdwb3J0SW50ZXJhY3Rpb25FbmdpbmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRWaWV3cG9ydEludGVyYWN0aW9uRW5naW5l
LmgKQEAgLTc1LDkgKzc1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNhbmNlbFNjcm9sbEFuaW1h
dGlvbigpOwogCiAgICAgYm9vbCBwYW5HZXN0dXJlQWN0aXZlKCkgY29uc3Q7CisKICAgICB2b2lk
IHBhbkdlc3R1cmVTdGFydGVkKGNvbnN0IFFQb2ludEYmIHBvc2l0aW9uLCBxaW50NjQgZXZlbnRU
aW1lc3RhbXBNaWxsaXMpOwogICAgIHZvaWQgcGFuR2VzdHVyZVJlcXVlc3RVcGRhdGUoY29uc3Qg
UVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRpbWVzdGFtcE1pbGxpcyk7CiAgICAgdm9p
ZCBwYW5HZXN0dXJlRW5kZWQoY29uc3QgUVBvaW50RiYgcG9zaXRpb24sIHFpbnQ2NCBldmVudFRp
bWVzdGFtcE1pbGxpcyk7CisKICAgICB2b2lkIHBhbkdlc3R1cmVDYW5jZWxsZWQoKTsKIAogICAg
IGJvb2wgc2NhbGVBbmltYXRpb25BY3RpdmUoKSBjb25zdDsKQEAgLTg3LDYgKzg5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgcGluY2hHZXN0dXJlU3RhcnRlZChjb25zdCBRUG9pbnRGJiBwaW5jaENl
bnRlckluVmlld3BvcnRDb29yZGluYXRlcyk7CiAgICAgdm9pZCBwaW5jaEdlc3R1cmVSZXF1ZXN0
VXBkYXRlKGNvbnN0IFFQb2ludEYmIHBpbmNoQ2VudGVySW5WaWV3cG9ydENvb3JkaW5hdGVzLCBx
cmVhbCB0b3RhbFNjYWxlRmFjdG9yKTsKICAgICB2b2lkIHBpbmNoR2VzdHVyZUVuZGVkKCk7Cisg
ICAgdm9pZCBwaW5jaEdlc3R1cmVDYW5jZWxsZWQoKTsKIAogICAgIHZvaWQgem9vbVRvQXJlYUdl
c3R1cmVFbmRlZChjb25zdCBRUG9pbnRGJiB0b3VjaFBvaW50LCBjb25zdCBRUmVjdEYmIHRhcmdl
dEFyZWEpOwogICAgIHZvaWQgZm9jdXNFZGl0YWJsZUFyZWEoY29uc3QgUVJlY3RGJiBjYXJldEFy
ZWEsIGNvbnN0IFFSZWN0RiYgdGFyZ2V0QXJlYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VFdmVudEhhbmRsZXIuY3BwCmluZGV4IDEwMjY2ZTYuLmI3
ODM2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VF
dmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBh
Z2VFdmVudEhhbmRsZXIuY3BwCkBAIC0zNzMsOSArMzczLDkgQEAgdm9pZCBRdFdlYlBhZ2VFdmVu
dEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoUVRvdWNoRXZlbnQqIGV2ZW50KQogCiB2b2lkIFF0
V2ViUGFnZUV2ZW50SGFuZGxlcjo6cmVzZXRHZXN0dXJlUmVjb2duaXplcnMoKQogewotICAgIG1f
cGFuR2VzdHVyZVJlY29nbml6ZXIucmVzZXQoKTsKLSAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6
ZXIucmVzZXQoKTsKLSAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7CisgICAgbV9w
YW5HZXN0dXJlUmVjb2duaXplci5jYW5jZWwoKTsKKyAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6
ZXIuY2FuY2VsKCk7CisgICAgbV90YXBHZXN0dXJlUmVjb2duaXplci5jYW5jZWwoKTsKIH0KIAog
c3RhdGljIHZvaWQgc2V0SW5wdXRQYW5lbFZpc2libGUoYm9vbCB2aXNpYmxlKQpAQCAtNDcyLDE2
ICs0NzIsNDAgQEAgdm9pZCBRdFdlYlBhZ2VFdmVudEhhbmRsZXI6OmRvbmVXaXRoVG91Y2hFdmVu
dChjb25zdCBOYXRpdmVXZWJUb3VjaEV2ZW50JiBldmVudCwKICAgICBpZiAobV9pbnRlcmFjdGlv
bkVuZ2luZS0+c2NhbGVBbmltYXRpb25BY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9wYW5HZXN0dXJlUmVjb2duaXplci5yZWNvZ25pemUoZXYpOwotICAgIG1fcGluY2hHZXN0dXJl
UmVjb2duaXplci5yZWNvZ25pemUoZXYpOworICAgIGNvbnN0IFFMaXN0PFFUb3VjaEV2ZW50OjpU
b3VjaFBvaW50PiYgdG91Y2hQb2ludHMgPSBldi0+dG91Y2hQb2ludHMoKTsKKyAgICBjb25zdCBp
bnQgdG91Y2hQb2ludENvdW50ID0gdG91Y2hQb2ludHMuc2l6ZSgpOworICAgIHFpbnQ2NCBldmVu
dFRpbWVzdGFtcE1pbGxpcyA9IGV2LT50aW1lc3RhbXAoKTsKKyAgICBRTGlzdDxRVG91Y2hFdmVu
dDo6VG91Y2hQb2ludD4gYWN0aXZlVG91Y2hQb2ludHM7CisgICAgYWN0aXZlVG91Y2hQb2ludHMu
cmVzZXJ2ZSh0b3VjaFBvaW50Q291bnQpOwogCi0gICAgaWYgKG1fcGFuR2VzdHVyZVJlY29nbml6
ZXIuaXNSZWNvZ25pemVkKCkgfHwgbV9waW5jaEdlc3R1cmVSZWNvZ25pemVyLmlzUmVjb2duaXpl
ZCgpKQotICAgICAgICBtX3RhcEdlc3R1cmVSZWNvZ25pemVyLnJlc2V0KCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGV2ZW50IHRpbWVzdGFtcCBmcm9tIHNlY29uZCB0byBt
aWxsaXNlY29uZC4KLSAgICAgICAgcWludDY0IGV2ZW50VGltZXN0YW1wTWlsbGlzID0gc3RhdGlj
X2Nhc3Q8cWludDY0PihldmVudC50aW1lc3RhbXAoKSAqIDEwMDApOwotICAgICAgICBtX3RhcEdl
c3R1cmVSZWNvZ25pemVyLnJlY29nbml6ZShldiwgZXZlbnRUaW1lc3RhbXBNaWxsaXMpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdG91Y2hQb2ludENvdW50OyArK2kpIHsKKyAgICAgICAgaWYg
KHRvdWNoUG9pbnRzW2ldLnN0YXRlKCkgIT0gUXQ6OlRvdWNoUG9pbnRSZWxlYXNlZCkKKyAgICAg
ICAgICAgIGFjdGl2ZVRvdWNoUG9pbnRzIDw8IHRvdWNoUG9pbnRzW2ldOworICAgIH0KKworICAg
IGNvbnN0IGludCBhY3RpdmVUb3VjaFBvaW50Q291bnQgPSBhY3RpdmVUb3VjaFBvaW50cy5zaXpl
KCk7CisKKyAgICBpZiAoIWFjdGl2ZVRvdWNoUG9pbnRDb3VudCkgeworICAgICAgICBpZiAodG91
Y2hQb2ludENvdW50ID09IDEpCisgICAgICAgICAgIC8vIE5vIGFjdGl2ZSB0b3VjaCBwb2ludHMs
IG9uZSBmaW5nZXIgcmVsZWFzZWQuCisgICAgICAgICAgIG1fcGFuR2VzdHVyZVJlY29nbml6ZXIu
ZmluaXNoKHRvdWNoUG9pbnRzLmZpcnN0KCksIGV2ZW50VGltZXN0YW1wTWlsbGlzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuZmluaXNoKCk7Cisg
ICAgfSBlbHNlIGlmIChhY3RpdmVUb3VjaFBvaW50Q291bnQgPT0gMSkgeworICAgICAgICAvLyBJ
ZiB0aGUgcGluY2ggZ2VzdHVyZSByZWNvZ25pemVyIHdhcyBwcmV2aW91c2x5IGluIGFjdGl2ZSBz
dGF0ZSB0aGUgY29udGVudCBtaWdodAorICAgICAgICAvLyBiZSBvdXQgb2YgdmFsaWQgem9vbSBi
b3VuZGFyaWVzLCB0aHVzIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBwaW5jaCBnZXN0dXJlIGhlcmUu
CisgICAgICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgdGhlIGNvbnRlbnQgdG8gdmFsaWQgem9vbSBs
ZXZlbHMgYmVmb3JlIHRoZSBwYW4gZ2VzdHVyZSBpcyBzdGFydGVkLgorICAgICAgICBtX3BpbmNo
R2VzdHVyZVJlY29nbml6ZXIuZmluaXNoKCk7CisgICAgICAgIG1fcGFuR2VzdHVyZVJlY29nbml6
ZXIudXBkYXRlKGFjdGl2ZVRvdWNoUG9pbnRzLmZpcnN0KCksIGV2ZW50VGltZXN0YW1wTWlsbGlz
KTsKKyAgICB9IGVsc2UgaWYgKGFjdGl2ZVRvdWNoUG9pbnRDb3VudCA9PSAyKSB7CisgICAgICAg
IG1fcGFuR2VzdHVyZVJlY29nbml6ZXIuY2FuY2VsKCk7CisgICAgICAgIG1fcGluY2hHZXN0dXJl
UmVjb2duaXplci51cGRhdGUoYWN0aXZlVG91Y2hQb2ludHMuZmlyc3QoKSwgYWN0aXZlVG91Y2hQ
b2ludHMubGFzdCgpKTsKICAgICB9CisKKyAgICBpZiAobV9wYW5HZXN0dXJlUmVjb2duaXplci5p
c1JlY29nbml6ZWQoKSB8fCBtX3BpbmNoR2VzdHVyZVJlY29nbml6ZXIuaXNSZWNvZ25pemVkKCkp
CisgICAgICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIuY2FuY2VsKCk7CisgICAgZWxzZSBpZiAo
dG91Y2hQb2ludENvdW50ID09IDEpCisgICAgICAgIG1fdGFwR2VzdHVyZVJlY29nbml6ZXIudXBk
YXRlKGV2LT50eXBlKCksIHRvdWNoUG9pbnRzLmZpcnN0KCkpOwogfQogI2VuZGlmCiAKLS0gCjEu
Ny4xMAoK
</data>

          </attachment>
      

    </bug>

</bugzilla>