<?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>214870</bug_id>
          
          <creation_ts>2020-07-28 03:55:59 -0700</creation_ts>
          <short_desc>[WPE][Pointer Events] Add support for touch based pointer events</short_desc>
          <delta_ts>2023-05-11 08:45:30 -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>WPE WebKit</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=202789</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=233498</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>204115</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Marco Felsch">m.felsch</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bst</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>clord</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kangil.han</cc>
    
    <cc>m.felsch</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1675565</commentid>
    <comment_count>0</comment_count>
    <who name="Marco Felsch">m.felsch</who>
    <bug_when>2020-07-28 03:55:59 -0700</bug_when>
    <thetext>[WPE][Pointer Events] Add support for touch based pointer events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675569</commentid>
    <comment_count>1</comment_count>
      <attachid>405348</attachid>
    <who name="Marco Felsch">m.felsch</who>
    <bug_when>2020-07-28 04:33:22 -0700</bug_when>
    <thetext>Created attachment 405348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675581</commentid>
    <comment_count>2</comment_count>
    <who name="Marco Felsch">m.felsch</who>
    <bug_when>2020-07-28 05:51:05 -0700</bug_when>
    <thetext>Damn, I missed a few #ifdef. The new version will fix this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675582</commentid>
    <comment_count>3</comment_count>
      <attachid>405352</attachid>
    <who name="Marco Felsch">m.felsch</who>
    <bug_when>2020-07-28 06:05:01 -0700</bug_when>
    <thetext>Created attachment 405352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707888</commentid>
    <comment_count>4</comment_count>
    <who name="Marco Felsch">m.felsch</who>
    <bug_when>2020-11-16 10:39:26 -0800</bug_when>
    <thetext>Hi,

I know I have to rework at least the drop of POINTER_EVENTS and runtime check but can you give me some feedback. Is this RFC completely wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770144</commentid>
    <comment_count>5</comment_count>
      <attachid>405352</attachid>
    <who name="Chris Lord">clord</who>
    <bug_when>2021-06-16 04:11:54 -0700</bug_when>
    <thetext>Comment on attachment 405352
Patch

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

I&apos;m not a reviewer, so unfortunately this will just be a drive-by review. For what it&apos;s worth, this overall looks good to me, modulo the things I&apos;ve commented on.

&gt; Source/WebCore/dom/PointerEvent.cpp:96
&gt; +#if ENABLE(TOUCH_EVENTS) &amp;&amp; PLATFORM(WPE)

These constructors should probably go in a separate dom/wpe/PointerEventWPE.cpp if they&apos;re truly WPE-specific, to mimic how this has been done for iOS. In the case that multiple platforms start using this, they can be moved at that point I would suppose.

&gt; Source/WebCore/dom/PointerEvent.cpp:99
&gt; +    // FIXME:

nit, no need for the newline after this FIXME. Also, s/according the/according to the/

&gt; Source/WebCore/dom/PointerEvent.h:-84
&gt; -#if ENABLE(TOUCH_EVENTS) &amp;&amp; PLATFORM(IOS_FAMILY)

nit; I think nested #if&apos;s tend to be avoided in new code. This can be left alone and a separate #if ENABLE(TOUCH_EVENTS) &amp;&amp; PLATFORM(WPE) could be added afterwards.

&gt; Source/WebCore/dom/PointerEvent.h:131
&gt; +    // We have contact with the touch surface for most events except when we&apos;ve released the touch or canceled it.

This comment is misaligned. Also, while I personally prefer your indentation, I&apos;d have left the below as it was originally, to make it easier to see that this is just a code move.

&gt; Source/WebCore/dom/PointerEvent.h:-128
&gt; -#if ENABLE(TOUCH_EVENTS) &amp;&amp; PLATFORM(IOS_FAMILY)

Same nit as before re nested #ifs.

&gt; Source/WebCore/page/EventHandler.cpp:4082
&gt; +static const AtomString&amp; pointerEventNameForTouchPointState(PlatformTouchPoint::State state)

This is only used when ENABLE(POINTER_EVENTS) &amp;&amp; PLATFORM(WPE) - this should be declared in a block with matching conditionals to where it gets used.

&gt; Source/WebCore/page/EventHandler.cpp:4094
&gt; +        // TouchStationary state is not converted to touch events, so fall through to assert.

I couldn&apos;t easily follow the logic below in EventHandler::handleTouchEvent, but it didn&apos;t immediately look like a TouchStationary event wouldn&apos;t be passed to this function - could you explain how this gets handled so that this ought to never happen?

&gt; Source/WebCore/page/PointerCaptureController.cpp:193
&gt; +static Ref&lt;PointerEvent&gt; createPointerEvent(const String&amp; type, const PlatformTouchEvent&amp; platformTouchEvent, unsigned index, bool isPrimary, WindowProxy&amp; view, const Touch* touch)

I think it would make for a slightly cleaner look elsewhere to reorder these so that the unused-on-WPE parameters come last and have defaults so that they can be ommitted when calling this function.

&gt; Source/WebCore/page/PointerCaptureController.cpp:336
&gt; +        dispatchEventForTouch(*touch-&gt;target(), PlatformTouchEvent() /* Don&apos;t care */, 0 /* Don&apos;t care */, isPrimary, view, type.string(), touch);

I don&apos;t think these /* Don&apos;t care */ comments are necessary.

&gt; Source/WebCore/page/PointerCaptureController.h:-62
&gt; -#if ENABLE(TOUCH_EVENTS) &amp;&amp; PLATFORM(IOS_FAMILY)

Same nit here as before regarding nested #ifs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817811</commentid>
    <comment_count>6</comment_count>
      <attachid>405352</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-11-25 08:29:21 -0800</bug_when>
    <thetext>Comment on attachment 405352
Patch

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

Thanks! Patch looks good overall :)

But there are some issues that need to be fixed before landing:

1. If you can please upload a new version of it rebased and ensuring the the layout tests run on WPE (unskipping them, for that you have to put this line &quot;pointerevents/ios [ Pass ]&quot; in the file LayoutTests/platform/wpe/TestExpectations) and if they all pass, then a bonus point would be renaming that directory from ios to touch and also renaming the related lines on LayoutTests/platform/wpe/TestExpectations and LayoutTests/TestExpectations)

2. Please take a look at the previous comments from Chris and try to address them

I&apos;m setting r- to make clear a new version of the patch is needed in order to continue with the review process.

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests needed because we can reuse the tests from:
&gt; +        LayoutTests/pointerevents/ios/

Those tests are skipped on the main TestExpectation file.
If they work for WPE as well, then this patch should unskip them on the WPE TestExpectation file.
It can be also a good idea to rename the directory to something like LayoutTests/pointerevents/touch as that seems more appropriate if they work in WPE

&gt;&gt; Source/WebCore/page/PointerCaptureController.cpp:336
&gt;&gt; +        dispatchEventForTouch(*touch-&gt;target(), PlatformTouchEvent() /* Don&apos;t care */, 0 /* Don&apos;t care */, isPrimary, view, type.string(), touch);
&gt; 
&gt; I don&apos;t think these /* Don&apos;t care */ comments are necessary.

Agree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825143</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2021-12-17 11:10:25 -0800</bug_when>
    <thetext>I was puzzled to realize that we were not running any tests for pointerevents, all of them were skipped on all platforms. So on r287196 I unskiped them and now on WPE (and GTK) we are running some of those tests.

Regarding the tests of pointerevents/ios :

 1. Those are crashing and I tested this patch and it didn&apos;t fixed them. They continue to crash

 2. I&apos;m not sure this pointerevents/ios tests can run on other platforms than iOS. So forget my previous suggestion of renaming this to pointerevents/touch

Since those tests are skipped by default (they crash) and you want to test if your patch fixes them you have to add this line:

pointerevents/ios [ Pass ]

At the bottom of the file LayoutTests/platform/wpe/TestExpectations

And then you run the tests like this:

$ Tools/Scripts/run-webkit-tests --debug-rwt-logging --release --wpe pointerevents/ios

If your patch fixes one of those tests but not all, then you can white-list that specific test by adding a line like

pointerevents/ios/touch-action-none.html [ Pass ]


You can try to run also the tests imported from WPT by telling run-webkit-tests to run the tests from imported/w3c/web-platform-tests/pointerevents

But note that we have the bad habit of having for those imported tests expectations that contain FAIL lines. That means that if your patch fixes something there, it may appear as a failure on run-webkit-tests. You have to check the text diff and see if your patch is removing &quot;expected failures&quot; and adding &quot;expected passes&quot;. If that is the case then the patch is good, you have to update the -expected.txt for that test inside the LayoutTest directory with the new -actual.txt generated. Then run-webkit-tests will stop complaining and will give the result as a pass.

If you have any doubt feel free to ask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1930900</commentid>
    <comment_count>8</comment_count>
      <attachid>405352</attachid>
    <who name="Bastian Krause">bst</who>
    <bug_when>2023-02-03 09:20:49 -0800</bug_when>
    <thetext>Comment on attachment 405352
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:4094
&gt;&gt; +        // TouchStationary state is not converted to touch events, so fall through to assert.
&gt; 
&gt; I couldn&apos;t easily follow the logic below in EventHandler::handleTouchEvent, but it didn&apos;t immediately look like a TouchStationary event wouldn&apos;t be passed to this function - could you explain how this gets handled so that this ought to never happen?

AFAICS this follows the same logic as eventNameForTouchPointState() does, which follows the same assumption. handleTouchPointerEvent() also contains the same note about TouchStationary, so I think this applies here as well.

&gt;&gt; Source/WebCore/page/PointerCaptureController.cpp:193
&gt;&gt; +static Ref&lt;PointerEvent&gt; createPointerEvent(const String&amp; type, const PlatformTouchEvent&amp; platformTouchEvent, unsigned index, bool isPrimary, WindowProxy&amp; view, const Touch* touch)
&gt; 
&gt; I think it would make for a slightly cleaner look elsewhere to reorder these so that the unused-on-WPE parameters come last and have defaults so that they can be ommitted when calling this function.

I can&apos;t see the advantage here, this is a static function that is called from platform-unspecific code, so where would these defaults help exactly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1930912</commentid>
    <comment_count>9</comment_count>
    <who name="Bastian Krause">bst</who>
    <bug_when>2023-02-03 10:16:09 -0800</bug_when>
    <thetext>Note: I&apos;m taking over for Marco, I&apos;ve revisited all feedback, did various manual testing, added some improvements and had a look at the tests. I&apos;ll create a PR on GitHub with an updated version next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1931364</commentid>
    <comment_count>10</comment_count>
    <who name="Bastian Krause">bst</who>
    <bug_when>2023-02-06 07:11:08 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/9688</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1954713</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-05-11 08:45:24 -0700</bug_when>
    <thetext>Committed 263969@main (84e4a4ae1e89): &lt;https://commits.webkit.org/263969@main&gt;

Reviewed commits have been landed. Closing PR #9688 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405348</attachid>
            <date>2020-07-28 04:33:22 -0700</date>
            <delta_ts>2020-07-28 06:04:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214870-20200728133321.patch</filename>
            <type>text/plain</type>
            <size>20846</size>
            <attacher name="Marco Felsch">m.felsch</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZjNWVlODgxYmI1MjMy
ZjVhNTE0NGI4ZTA4MmNjYWU1YzE0NDJlMS4uMmI5MTU0Mjc3NDU5MTY0YzYyZjFlODY5M2I5ZDVi
YWYyMWZhNTI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA3LTI4ICBNYXJj
byBGZWxzY2ggIDxtLmZlbHNjaEBwZW5ndXRyb25peC5kZT4KKworICAgICAgICBbV1BFXVtQb2lu
dGVyIEV2ZW50c10gQWRkIHN1cHBvcnQgZm9yIHRvdWNoIGJhc2VkIHBvaW50ZXIgZXZlbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4NzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgbmVlZGVkIGJlY2F1c2Ugd2UgY2FuIHJldXNlIHRoZSB0ZXN0cyBmcm9tOgorICAgICAgICBM
YXlvdXRUZXN0cy9wb2ludGVyZXZlbnRzL2lvcy8KKworICAgICAgICBDdXJyZW50bHkgYWxsIG5v
bi1BcHBsZSBwb3J0cyBzdXBwb3J0aW5nIG9ubHkgcG9pbnRlciBldmVudHMgb2YgdHlwZQorICAg
ICAgICAnbW91c2UnIGJlY2F1c2UgdGhleSBhIG1hcHBlZCAxOjEgdG8gbW91c2VFdmVudHMuIFRo
aXMgY29tbWl0IGFkZHMKKyAgICAgICAgdGhlIHBvaW50ZXIgZXZlbnQgc3VwcG9ydCBmb3IgdG91
Y2hFdmVudHMgZm9yIHRoZSBXUEUgcG9ydC4gV2l0aAorICAgICAgICB0aGlzIHBhdGNoIGl0IHNo
b3VsZCBiZSBlYXN5IGZvciBvdGhlciBwb3J0cyB0byBhZGQgdGhlIHBvaW50ZXIKKyAgICAgICAg
ZXZlbnQgc3VwcG9ydCBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgQWRkaW5nIFBvaW50ZXIg
RXZlbnRzIGZvciB0b3VjaCBpbnZvbHZlZCBzZXZlcmFsIHN0ZXBzOgorICAgICAgICAKKyAgICAg
ICAgMSkgUmVmYWN0b3JpbmcKKyAgICAgICAgCisgICAgICAgIEkgcmVmYWN0b3JlZCB0aGUgUG9p
bnRlckNhcHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KCkKKyAg
ICAgICAgZnVuY3Rpb24gdG8gcmV1c2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBjb2RlIGFuZCB0byBl
bnN1cmUgdGhlIGNvcnJlY3QKKyAgICAgICAgcG9pbnRlciBldmVudCBiZWhhdmlvdXIuIFRoZSBw
b2ludGVyIGV2ZW50IGdldHMgZGlzcGF0Y2hlZCByaWdodCBiZWZvcmUKKyAgICAgICAgdGhlIHRv
dWNoIGV2ZW50IHNpbmNlIHRoaXMgaXMgdGhlIGJlaGF2aW91ciBJIHNhdyBvbiBteSBpT1MgZGV2
aWNlCisgICAgICAgIGNhbGxpbmcgdGhpcyB0ZXN0IHdlYnNpdGU6CisgICAgICAgICAgaHR0cHM6
Ly9wYXRyaWNraGxhdWtlLmdpdGh1Yi5pby90b3VjaC90ZXN0cy9ldmVudC1saXN0ZW5lci5odG1s
CisgICAgICAgIEZ1cnRoZXJtb3JlIEkgbW92ZWQgdGhlIGlPUyBzcGVjaWZpYyBoZWxwZXJzOgor
ICAgICAgICAgIC0gYnV0dG9uRm9yVHlwZSgpIGFuZAorICAgICAgICAgIC0gYnV0dG9uc0ZvclR5
cGUoKQorICAgICAgICB0byB0aGUgY29yZSBQb2ludGVyRXZlbnQgY2xhc3MgdG8gbWFrZSBpdCBh
Y2Nlc3NpYmxlIGZvciBvdGhlciBwb3J0cy4KKyAgICAgICAgCisgICAgICAgIDIpIE5ldyBQb2lu
dGVyQ2FwdHVyZUNvbnRyb2xsZXIgZGlwYXRjaCBmdW5jdGlvbgorICAgICAgICAKKyAgICAgICAg
VGhlIG5ldyBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRGb3JUb3VjaExp
c3QoKSBmdW5jdGlvbiBpcworICAgICAgICBjYWxsZWQgZHVyaW5nIHRoZSBFdmVudEhhbmRsZXI6
OmhhbmRsZVRvdWNoRXZlbnQoKSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMKKyAgICAgICAgZnVuY3Rp
b24gZG9lcyBhIGdvb2Qgam9iIHRvIGV4dHJhY3QgdGhlIGNoYW5nZWRUb3VjaCBldmVudHMuIFRo
ZXJlIGFyZQorICAgICAgICBubyByZWFzb25zIHRvIG5vdCByZXVzZSB0aGlzIGNvZGUuCisgICAg
ICAgIAorICAgICAgICAzKSBOZXcgUG9pbnRlckV2ZW50IGNvbnN0cnVjdG9yL2NyZWF0ZSBwYWly
CisgICAgICAgIAorICAgICAgICBUaGUgY3VycmVudCBub24gaU9TIHBvcnQgaXMgbWlzc2luZyBh
IGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBwb2ludGVyCisgICAgICAgIGV2ZW50cyBmcm9tIGEgZ2l2
ZW4gJ1RvdWNoJyBwb2ludC4gVGhlcmVmb3JlIGEgbmV3IFBvaW50ZXJFdmVudAorICAgICAgICBj
b25zdHJ1Y3RvciBhbmQgUG9pbnRlckV2ZW50OjpjcmVhdGUoKSBwYWlyIGlzIGFkZGVkLiBDdXJy
ZW50bHkgd2UgZG9uJ3QKKyAgICAgICAgc3VwcG9ydCB0aGUgcHJlc3N1cmUgaW5mb3JtYXRpb24u
IFRoaXMgY2FuIGJlIGFkZHJlc3NlZCBsYXRlci4KKworCisgICAgICAgICogZG9tL1BvaW50ZXJF
dmVudC5jcHA6IE5ldyBjcmVhdGUvY29uc3RydWN0b3IgcGFpciB0byBiZSBhYmxlIHRvIGNyZWF0
ZSBwb2ludGVyIGV2ZW50cyBmcm9tIGEgJ1RvdWNoJyBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6
OlBvaW50ZXJFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJFdmVudDo6
UG9pbnRlckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1faXNQcmltYXJ5KToKKyAgICAgICAg
KiBkb20vUG9pbnRlckV2ZW50Lmg6CisgICAgICAgICogZG9tL2lvcy9Qb2ludGVyRXZlbnRJT1Mu
Y3BwOiBNb3ZlIGJ1dHRvbkZvclR5cGUoKSBhbmQgYnV0dG9uc0ZvclR5cGUoKSB0byBnbG9iYWwg
UG9pbnRlckV2ZW50LmNwcCBjbGFzcy4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
IEFkZCBzdXBwb3J0IGZvciBwb2ludGVyIGV2ZW50cyBvZiB0eXBlICd0b3VjaCcuCisgICAgICAg
IChXZWJDb3JlOjpwb2ludGVyRXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKTogSGVscGVyIHRv
IG1hcCB0b3VjaCB0byBwb2ludGVyIGV2ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6IEFkZCBwb2ludGVyY2FwdHVyZSBjb250cm9sbGVyIGV2
ZW50IGRpc3BhdGNoLgorICAgICAgICAqIHBhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmNw
cDogUmVmYWN0b3IgdGhlIGNvZGUgdG8gcmV1c2UgdGhlIGJhc2UgZm9yIGlvcyBhbmQgbm9uLWlv
cyBwb3J0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvaW50ZXJFdmVudCk6IEhlbHBlciB0
byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgUG9pbnRlckV2ZW50OjpjcmVhdGUoKSBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVu
dEZvclRvdWNoKTogUmVmYWN0b3JlZCBjb3JlIGZ1bmN0aW9uIHRvIGhhbmRsZSBwb2ludGVyIGV2
ZW50cyBvZiB0eXBlICd0b3VjaCcuCisgICAgICAgIChXZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNv
bnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRGb3JUb3VjaEF0SW5kZXgpOiBpb3MgcG9ydCBhY2Nlc3Nv
ciBmdW5jdGlvbiAobm8gZnVuY2lvbmFsIGNoYW5nZXMpLgorICAgICAgICAoV2ViQ29yZTo6UG9p
bnRlckNhcHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hMaXN0KTogbm9uLWlv
cyBwb3J0IGFjY2Vzc29yIGZ1bmN0aW9uLgorICAgICAgICAqIHBhZ2UvUG9pbnRlckNhcHR1cmVD
b250cm9sbGVyLmg6IFNlZSBhYm92ZS4KKwogMjAyMC0wNy0yOCAgTWFyY28gRmVsc2NoICA8bS5m
ZWxzY2hAcGVuZ3V0cm9uaXguZGU+CiAKICAgICAgICAgQWRkIG1pc3NpbmcgTG9nZ2luZyBzdXBw
b3J0IGZvciB0b3VjaCBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2lu
dGVyRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5jcHAKaW5kZXgg
NmU4ODFkMTczZWQ0MzU5MmY5M2U2ZWNhMjE5NGRjMWQwZDRlOTNjMy4uODEzODkzMGE1NTcxZWEw
YzU0MjU4OWFiOTNiNGRkNjRlZTVkMjNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1BvaW50ZXJFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5j
cHAKQEAgLTkzLDYgKzkzLDE5IEBAIFJlZjxQb2ludGVyRXZlbnQ+IFBvaW50ZXJFdmVudDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgUG9pbnRlcklEIHBvaW50ZXJJZCwKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBQb2ludGVyRXZlbnQodHlwZSwgcG9pbnRlcklkLCBwb2ludGVyVHlwZSwg
aXNQcmltYXJ5KSk7CiB9CiAKK1JlZjxQb2ludGVyRXZlbnQ+IFBvaW50ZXJFdmVudDo6Y3JlYXRl
KGNvbnN0IFN0cmluZyYgdHlwZSwgUmVmPFdpbmRvd1Byb3h5PiYmIHZpZXcsIGNvbnN0IFRvdWNo
JiB0b3VjaCwgSXNQcmltYXJ5IGlzUHJpbWFyeSkKK3sKKyAgICAvLyBGSVhNRToKKyAgICAvLyBQ
cmVzc3VyZSBpcyBub3Qgc3VwcG9ydGVkIGN1cnJlbnRseS4gSW4gdGhpcyBjYXNlIHRoZSBwcmVz
c3VyZSBzaG91bGQgYmUgc2V0IHRvIDAuNSB3aGVuIGluICdhY3RpdmUgYnV0dG9ucyBzdGF0ZScK
KyAgICAvLyBhbmQgdG8gMCBvdGhlcndpc2UgYWNjb3JkaW5nIHRoZSBzcGVjaWZpY2F0aW9uIFsx
XS4KKyAgICAvLyBbMV0gaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI3BvaW50
ZXJldmVudC1pbnRlcmZhY2UKKyAgICBmbG9hdCBwcmVzc3VyZSA9IDAuNTsKKyAgICBpZiAodHlw
ZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcnVwRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCku
cG9pbnRlcm91dEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJsZWF2ZUV2ZW50
KQorICAgICAgICBwcmVzc3VyZSA9IDA7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQb2lu
dGVyRXZlbnQodHlwZSwgV1RGTW92ZSh2aWV3KSwgdG91Y2gsIHByZXNzdXJlLCBpc1ByaW1hcnkp
KTsKK30KKwogUG9pbnRlckV2ZW50OjpQb2ludGVyRXZlbnQoKSA9IGRlZmF1bHQ7CiAKIFBvaW50
ZXJFdmVudDo6UG9pbnRlckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEluaXQmJiBpbml0
aWFsaXplcikKQEAgLTEyNCw2ICsxMzcsMTUgQEAgUG9pbnRlckV2ZW50OjpQb2ludGVyRXZlbnQo
Y29uc3QgQXRvbVN0cmluZyYgdHlwZSwgUG9pbnRlcklEIHBvaW50ZXJJZCwgY29uc3QgU3QKIHsK
IH0KIAorUG9pbnRlckV2ZW50OjpQb2ludGVyRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwg
UmVmPFdpbmRvd1Byb3h5PiYmIHZpZXcsIGNvbnN0IFRvdWNoJiB0b3VjaCwgY29uc3QgZmxvYXQg
cHJlc3N1cmUsIElzUHJpbWFyeSBpc1ByaW1hcnkpCisgICAgOiBNb3VzZUV2ZW50KHR5cGUsIHR5
cGVDYW5CdWJibGUodHlwZSksIHR5cGVJc0NhbmNlbGFibGUodHlwZSksIHR5cGVJc0NvbXBvc2Vk
KHR5cGUpLCBXVEZNb3ZlKHZpZXcpLCAwLCB7IHRvdWNoLnNjcmVlblgoKSwgdG91Y2guc2NyZWVu
WSgpIH0sIHsgdG91Y2guY2xpZW50WCgpLCB0b3VjaC5jbGllbnRZKCkgfSwgeyB9LCBidXR0b25G
b3JUeXBlKHR5cGUpLCBidXR0b25zRm9yVHlwZSh0eXBlKSwgMCwgdG91Y2gudGFyZ2V0KCkpCisg
ICAgLCBtX3BvaW50ZXJJZCh0b3VjaC5pZGVudGlmaWVyKCkpCisgICAgLCBtX3ByZXNzdXJlKHBy
ZXNzdXJlKQorICAgICwgbV9wb2ludGVyVHlwZShQb2ludGVyRXZlbnQ6OnRvdWNoUG9pbnRlclR5
cGUoKSkKKyAgICAsIG1faXNQcmltYXJ5KGlzUHJpbWFyeSA9PSBJc1ByaW1hcnk6OlllcykKK3sK
K30KKwogUG9pbnRlckV2ZW50Ojp+UG9pbnRlckV2ZW50KCkgPSBkZWZhdWx0OwogCiBFdmVudElu
dGVyZmFjZSBQb2ludGVyRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b2ludGVyRXZlbnQuaAppbmRleCBhZjdhNmIzYzlhZjhhMzE4Mjc1MWY3Mzc2ODA2YzU0M2VkYTEy
N2ZmLi41NDFmNjQ2YmI1OWZlZjZkMmVhODE3NmUyOTg3MzdlYmU3YzQwNWFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9pbnRlckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1BvaW50ZXJFdmVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVu
dC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQb2ludGVySUQuaCIKKyNpbmNsdWRl
ICJUb3VjaC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTgxLDkgKzgyLDEzIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPFBvaW50ZXJFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgc2hvcnQgYnV0dG9uLCBjb25zdCBNb3VzZUV2ZW50Jik7CiAgICAgc3RhdGljIFJl
ZjxQb2ludGVyRXZlbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIFBvaW50ZXJJRCwgY29u
c3QgU3RyaW5nJiBwb2ludGVyVHlwZSwgSXNQcmltYXJ5ID0gSXNQcmltYXJ5OjpObyk7CiAKLSNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzdGF0aWMgUmVm
PFBvaW50ZXJFdmVudD4gY3JlYXRlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYsIHVuc2lnbmVk
IHRvdWNoSW5kZXgsIGJvb2wgaXNQcmltYXJ5LCBSZWY8V2luZG93UHJveHk+JiYpOwogICAgIHN0
YXRpYyBSZWY8UG9pbnRlckV2ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmLCB1bnNpZ25lZCB0b3VjaEluZGV4LCBib29sIGlzUHJpbWFyeSwg
UmVmPFdpbmRvd1Byb3h5PiYmKTsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICBzdGF0aWMgUmVm
PFBvaW50ZXJFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIFJlZjxXaW5kb3dQcm94eT4mJiwg
Y29uc3QgVG91Y2gmLCBJc1ByaW1hcnkgPSBJc1ByaW1hcnk6Ok5vKTsKKyNlbmRpZgogI2VuZGlm
CiAKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBtb3VzZVBvaW50ZXJUeXBlKCk7CkBAIC0xMjAs
MTMgKzEyNSwyNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDYW5CdWJibGUgdHlwZUNhbkJ1YmJs
ZShjb25zdCBBdG9tU3RyaW5nJiB0eXBlKSB7IHJldHVybiB0eXBlSXNFbnRlck9yTGVhdmUodHlw
ZSkgPyBDYW5CdWJibGU6Ok5vIDogQ2FuQnViYmxlOjpZZXM7IH0KICAgICBzdGF0aWMgSXNDYW5j
ZWxhYmxlIHR5cGVJc0NhbmNlbGFibGUoY29uc3QgQXRvbVN0cmluZyYgdHlwZSkgeyByZXR1cm4g
dHlwZUlzRW50ZXJPckxlYXZlKHR5cGUpID8gSXNDYW5jZWxhYmxlOjpObyA6IElzQ2FuY2VsYWJs
ZTo6WWVzOyB9CiAgICAgc3RhdGljIElzQ29tcG9zZWQgdHlwZUlzQ29tcG9zZWQoY29uc3QgQXRv
bVN0cmluZyYgdHlwZSkgeyByZXR1cm4gdHlwZUlzRW50ZXJPckxlYXZlKHR5cGUpID8gSXNDb21w
b3NlZDo6Tm8gOiBJc0NvbXBvc2VkOjpZZXM7IH0KKyAgICBzdGF0aWMgc2hvcnQgYnV0dG9uRm9y
VHlwZShjb25zdCBBdG9tU3RyaW5nJiB0eXBlKSB7IHJldHVybiB0eXBlID09IGV2ZW50TmFtZXMo
KS5wb2ludGVybW92ZUV2ZW50ID8gLTEgOiAwOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0
IGJ1dHRvbnNGb3JUeXBlKGNvbnN0IEF0b21TdHJpbmcmIHR5cGUpCisgICAgeworICAgIC8vIFdl
IGhhdmUgY29udGFjdCB3aXRoIHRoZSB0b3VjaCBzdXJmYWNlIGZvciBtb3N0IGV2ZW50cyBleGNl
cHQgd2hlbiB3ZSd2ZSByZWxlYXNlZCB0aGUgdG91Y2ggb3IgY2FuY2VsZWQgaXQuCisgICAgICAg
IHJldHVybiAodHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcnVwRXZlbnQKKyAgICAgICAgICAg
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJvdXRFdmVudAorICAgICAgICAgICAgfHwg
dHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcmxlYXZlRXZlbnQKKyAgICAgICAgICAgIHx8IHR5
cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJjYW5jZWxFdmVudCkgPyAwIDogMTsKKyAgICB9CisK
IAogICAgIFBvaW50ZXJFdmVudCgpOwogICAgIFBvaW50ZXJFdmVudChjb25zdCBBdG9tU3RyaW5n
JiwgSW5pdCYmKTsKICAgICBQb2ludGVyRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgc2hv
cnQgYnV0dG9uLCBjb25zdCBNb3VzZUV2ZW50Jik7CiAgICAgUG9pbnRlckV2ZW50KGNvbnN0IEF0
b21TdHJpbmcmIHR5cGUsIFBvaW50ZXJJRCwgY29uc3QgU3RyaW5nJiBwb2ludGVyVHlwZSwgSXNQ
cmltYXJ5KTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICBQb2ludGVyRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgY29uc3QgUGxhdGZvcm1Ub3Vj
aEV2ZW50JiwgSXNDYW5jZWxhYmxlIGlzQ2FuY2VsYWJsZSwgdW5zaWduZWQgdG91Y2hJbmRleCwg
Ym9vbCBpc1ByaW1hcnksIFJlZjxXaW5kb3dQcm94eT4mJik7CisjZWxpZiBQTEFURk9STShXUEUp
CisgICAgUG9pbnRlckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBSZWY8V2luZG93UHJveHk+JiYs
IGNvbnN0IFRvdWNoJiwgZmxvYXQsIElzUHJpbWFyeSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAg
UG9pbnRlcklEIG1fcG9pbnRlcklkIHsgbW91c2VQb2ludGVySUQgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9pb3MvUG9pbnRlckV2ZW50SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9pb3MvUG9pbnRlckV2ZW50SU9TLmNwcAppbmRleCBkYzExZWQyZmYxY2Q0MTFkY2QzMmJk
YWVjMTllYTZlZmI3YzJjMDE2Li5lMmJjMzhiMDIxZGJlMjFkOGFkOGJlOWVlZjQ0OTNlOWM5NWRk
NjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vaW9zL1BvaW50ZXJFdmVudElPUy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL2lvcy9Qb2ludGVyRXZlbnRJT1MuY3BwCkBAIC01
MCwxNyArNTAsNiBAQCBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcG9pbnRlckV2ZW50VHlwZShQ
bGF0Zm9ybVRvdWNoUG9pbnQ6OlRvdWNoUGhhc2VUeXBlIHBoYQogICAgIHJldHVybiBudWxsQXRv
bSgpOwogfQogCi1zdGF0aWMgc2hvcnQgYnV0dG9uRm9yVHlwZShjb25zdCBBdG9tU3RyaW5nJiB0
eXBlKQotewotICAgIHJldHVybiB0eXBlID09IGV2ZW50TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50
ID8gLTEgOiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYnV0dG9uc0ZvclR5cGUoY29u
c3QgQXRvbVN0cmluZyYgdHlwZSkKLXsKLSAgICAvLyBXZSBoYXZlIGNvbnRhY3Qgd2l0aCB0aGUg
dG91Y2ggc3VyZmFjZSBmb3IgbW9zdCBldmVudHMgZXhjZXB0IHdoZW4gd2UndmUgcmVsZWFzZWQg
dGhlIHRvdWNoIG9yIGNhbmNlbGVkIGl0LgotICAgIHJldHVybiAodHlwZSA9PSBldmVudE5hbWVz
KCkucG9pbnRlcnVwRXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcm91dEV2ZW50
IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJsZWF2ZUV2ZW50IHx8IHR5cGUgPT0gZXZl
bnROYW1lcygpLnBvaW50ZXJjYW5jZWxFdmVudCkgPyAwIDogMTsKLX0KLQogUmVmPFBvaW50ZXJF
dmVudD4gUG9pbnRlckV2ZW50OjpjcmVhdGUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVu
dCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgaXNQcmltYXJ5LCBSZWY8V2luZG93UHJveHk+JiYgdmll
dykKIHsKICAgICBjb25zdCBhdXRvJiB0eXBlID0gcG9pbnRlckV2ZW50VHlwZShldmVudC50b3Vj
aFBoYXNlQXRJbmRleChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmlu
ZGV4IGFmMTUyYzBhNDlhM2Y5NWI2OThlMmRiYTE4MTNmODM3MjM5MTE0MDEuLjBiMjkzMmVlZDE1
Njg0NWViZmNkZmQwZDBiMTIwM2I0MTNlOWFjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKQEAgLTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQbHVnaW5E
b2N1bWVudC5oIgorI2luY2x1ZGUgIlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgpAQCAtNDA3OCw2ICs0MDc5LDI1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRh
dGVMYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2V0T3JDbGVh
CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhRU5BQkxFKElPU19UT1VDSF9FVkVO
VFMpCitzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcG9pbnRlckV2ZW50TmFtZUZvclRvdWNoUG9p
bnRTdGF0ZShQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDoKKyAg
ICAgICAgcmV0dXJuIGV2ZW50TmFtZXMoKS5wb2ludGVydXBFdmVudDsKKyAgICBjYXNlIFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQ6CisgICAgICAgIHJldHVybiBldmVudE5hbWVz
KCkucG9pbnRlcmNhbmNlbEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3Vj
aFByZXNzZWQ6CisgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucG9pbnRlcmRvd25FdmVudDsK
KyAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZDoKKyAgICAgICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBv
aW50OjpUb3VjaFN0YXRpb25hcnk6CisgICAgICAgIC8vIFRvdWNoU3RhdGlvbmFyeSBzdGF0ZSBp
cyBub3QgY29udmVydGVkIHRvIHRvdWNoIGV2ZW50cywgc28gZmFsbCB0aHJvdWdoIHRvIGFzc2Vy
dC4KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIGVtcHR5QXRvbSgpOworICAgIH0KK30KKwogc3RhdGljIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50TmFtZUZvclRvdWNoUG9pbnRTdGF0ZShQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHN0
YXRlKQogewogICAgIHN3aXRjaCAoc3RhdGUpIHsKQEAgLTQyOTUsNiArNDMxNSw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYg
ZXZlbnQpCiAgICAgICAgIGJvb2wgaXNUb3VjaENhbmNlbEV2ZW50ID0gKHN0YXRlID09IFBsYXRm
b3JtVG91Y2hQb2ludDo6VG91Y2hDYW5jZWxsZWQpOwogICAgICAgICBSZWZQdHI8VG91Y2hMaXN0
PiYgZWZmZWN0aXZlVG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3Vj
aGVzKTsKICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgc3RhdGVOYW1lKGV2ZW50TmFtZUZvclRv
dWNoUG9pbnRTdGF0ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlPihzdGF0
ZSkpKTsKKyAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgcG9pbnRlclN0YXRlTmFtZShwb2ludGVy
RXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVG91Y2hQb2lu
dDo6U3RhdGU+KHN0YXRlKSkpOwogCiAgICAgICAgIGZvciAoYXV0byYgdGFyZ2V0IDogY2hhbmdl
ZFRvdWNoZXNbc3RhdGVdLm1fdGFyZ2V0cykgewogICAgICAgICAgICAgQVNTRVJUKGlzPE5vZGU+
KHRhcmdldCkpOwpAQCAtNDMwNCw2ICs0MzI1LDEzIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAKICAgICAgICAg
ICAgIFJlZjxUb3VjaEV2ZW50PiB0b3VjaEV2ZW50ID0gVG91Y2hFdmVudDo6Y3JlYXRlKGVmZmVj
dGl2ZVRvdWNoZXMuZ2V0KCksIHRhcmdldFRvdWNoZXMuZ2V0KCksIGNoYW5nZWRUb3VjaGVzW3N0
YXRlXS5tX3RvdWNoZXMuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3RhdGVOYW1lLCBkb3duY2Fz
dDxOb2RlPigqdGFyZ2V0KS5kb2N1bWVudCgpLndpbmRvd1Byb3h5KCksIHsgfSwgZXZlbnQubW9k
aWZpZXJzKCkpOworI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5UUykgJiYgUExBVEZPUk0oV1BFKQor
ICAgICAgICAgICAgLy8gRGlzcGF0Y2ggcG9pbnRlciBldmVudHMgYmVmb3JlIHRvdWNoIGV2ZW50
cworICAgICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkucG9pbnRlckV2ZW50c0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHBvaW50
ZXJDb250cm9sbGVyID0gbV9mcmFtZS5wYWdlKCktPnBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcigp
OworICAgICAgICAgICAgICAgIHBvaW50ZXJDb250cm9sbGVyLmRpc3BhdGNoRXZlbnRGb3JUb3Vj
aExpc3QocG9pbnRlclN0YXRlTmFtZSwgKnRvdWNoRXZlbnQtPmNoYW5nZWRUb3VjaGVzKCksICp0
b3VjaEV2ZW50LT52aWV3KCkpOworICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICB0
YXJnZXQtPmRpc3BhdGNoRXZlbnQodG91Y2hFdmVudCk7CiAgICAgICAgICAgICBzd2FsbG93ZWRF
dmVudCA9IHN3YWxsb3dlZEV2ZW50IHx8IHRvdWNoRXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8
fCB0b3VjaEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5jcHAKaW5kZXggOTcyMTg3MjQ5
ZTE5ZDE3ZDM3N2VlYTMxZjZiNzI5YmVmYmY0YjcwZS4uZTc3MTBhOWI1ZGI3YzZkMjMyMGVlYzZj
NDE4NmVjNWVmNjVmODk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVy
Q2FwdHVyZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUG9pbnRlckNh
cHR1cmVDb250cm9sbGVyLmNwcApAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlICJQb2ludGVy
TG9ja0NvbnRyb2xsZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNp
bmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKKyNpbmNsdWRlICJUb3VjaC5oIgorI2luY2x1
ZGUgIlRvdWNoTGlzdC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUG9pbnRl
ckNhcHR1cmVDb250cm9sbGVyOjpQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIoUGFnZSYgcGFnZSkK
QEAgLTE4Myw3ICsxODksMjEgQEAgYm9vbCBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OnByZXZl
bnRzQ29tcGF0aWJpbGl0eU1vdXNlRXZlbnRzRm9ySWRlbnRpZmllcihQb2kKICAgICByZXR1cm4g
aXRlcmF0b3IgIT0gbV9hY3RpdmVQb2ludGVySWRzVG9DYXB0dXJpbmdEYXRhLmVuZCgpICYmIGl0
ZXJhdG9yLT52YWx1ZS5wcmV2ZW50c0NvbXBhdGliaWxpdHlNb3VzZUV2ZW50czsKIH0KIAotI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykgJiYgKFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdQRSkp
CitzdGF0aWMgUmVmPFBvaW50ZXJFdmVudD4gY3JlYXRlUG9pbnRlckV2ZW50KGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBwbGF0Zm9ybVRvdWNoRXZlbnQsIHVu
c2lnbmVkIGluZGV4LCBib29sIGlzUHJpbWFyeSwgV2luZG93UHJveHkmIHZpZXcsIGNvbnN0IFRv
dWNoKiB0b3VjaCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmICh0eXBlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFBvaW50ZXJFdmVudDo6Y3JlYXRlKHBsYXRmb3JtVG91
Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldyk7CisgICAgcmV0dXJuIFBvaW50ZXJFdmVu
dDo6Y3JlYXRlKHR5cGUsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmll
dyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9ybVRvdWNoRXZlbnQpOworICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGlzUHJpbWFyeSk7CisKKyAgICBy
ZXR1cm4gUG9pbnRlckV2ZW50OjpjcmVhdGUodHlwZSwgdmlldywgKnRvdWNoKTsKKyNlbmRpZgor
fQogc3RhdGljIGJvb2wgaGllcmFyY2h5SGFzQ2FwdHVyaW5nRXZlbnRMaXN0ZW5lcnMoRWxlbWVu
dCogdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudE5hbWUpCiB7CiAgICAgZm9yIChDb250
YWluZXJOb2RlKiBjdXJyID0gdGFyZ2V0OyBjdXJyOyBjdXJyID0gY3Vyci0+cGFyZW50SW5Db21w
b3NlZFRyZWUoKSkgewpAQCAtMTkzLDEyICsyMTMsMTIgQEAgc3RhdGljIGJvb2wgaGllcmFyY2h5
SGFzQ2FwdHVyaW5nRXZlbnRMaXN0ZW5lcnMoRWxlbWVudCogdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUG9pbnRlckNhcHR1cmVDb250cm9sbGVy
OjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0
IFBsYXRmb3JtVG91Y2hFdmVudCYgcGxhdGZvcm1Ub3VjaEV2ZW50LCB1bnNpZ25lZCBpbmRleCwg
Ym9vbCBpc1ByaW1hcnksIFdpbmRvd1Byb3h5JiB2aWV3KQordm9pZCBQb2ludGVyQ2FwdHVyZUNv
bnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRGb3JUb3VjaChFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHBsYXRmb3JtVG91Y2hFdmVudCwgdW5zaWduZWQgaW5kZXgs
IGJvb2wgaXNQcmltYXJ5LCBXaW5kb3dQcm94eSYgdmlldywgY29uc3QgU3RyaW5nJiB0eXBlLCBj
b25zdCBUb3VjaCogdG91Y2gpCiB7CiAgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KHRhcmdldCkpOwog
CiAgICAgYXV0byBkaXNwYXRjaE92ZXJPck91dEV2ZW50ID0gWyZdKGNvbnN0IFN0cmluZyYgdHlw
ZSwgRXZlbnRUYXJnZXQqIHRhcmdldCkgewotICAgICAgICBkaXNwYXRjaEV2ZW50KFBvaW50ZXJF
dmVudDo6Y3JlYXRlKHR5cGUsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwg
dmlldyksIHRhcmdldCk7CisgICAgICAgIGRpc3BhdGNoRXZlbnQoY3JlYXRlUG9pbnRlckV2ZW50
KHR5cGUsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldywgdG91Y2gp
LCB0YXJnZXQpOwogICAgIH07CiAKICAgICBhdXRvIGRpc3BhdGNoRW50ZXJPckxlYXZlRXZlbnQg
PSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlKSB7CkBAIC0yMjAsMTQgKzI0MCwxNCBAQCB2b2lkIFBv
aW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVudEZvclRvdWNoQXRJbmRleChFdmVu
dFRhcmdldCYgdGFyZ2V0LAogCiAgICAgICAgIGlmICh0eXBlID09IGV2ZW50TmFtZXMoKS5wb2lu
dGVyZW50ZXJFdmVudCkgewogICAgICAgICAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogV1RGOjpt
YWtlUmV2ZXJzZWRSYW5nZSh0YXJnZXRDaGFpbikpCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hF
dmVudChQb2ludGVyRXZlbnQ6OmNyZWF0ZSh0eXBlLCBwbGF0Zm9ybVRvdWNoRXZlbnQsIGluZGV4
LCBpc1ByaW1hcnksIHZpZXcpLCBlbGVtZW50LnB0cigpKTsKKyAgICAgICAgICAgICAgICBkaXNw
YXRjaEV2ZW50KGNyZWF0ZVBvaW50ZXJFdmVudCh0eXBlLCBwbGF0Zm9ybVRvdWNoRXZlbnQsIGlu
ZGV4LCBpc1ByaW1hcnksIHZpZXcsIHRvdWNoKSwgZWxlbWVudC5wdHIoKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiB0YXJnZXRDaGFpbikKLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KFBvaW50ZXJFdmVudDo6Y3JlYXRlKHR5cGUsIHBs
YXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldyksIGVsZW1lbnQucHRyKCkp
OworICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoY3JlYXRlUG9pbnRlckV2ZW50KHR5cGUs
IHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldywgdG91Y2gpLCBlbGVt
ZW50LnB0cigpKTsKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvIHBvaW50ZXJFdmVudCA9
IFBvaW50ZXJFdmVudDo6Y3JlYXRlKHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFy
eSwgdmlldyk7CisgICAgYXV0byBwb2ludGVyRXZlbnQgPSBjcmVhdGVQb2ludGVyRXZlbnQodHlw
ZSwgcGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3LCB0b3VjaCk7IAog
CiAgICAgYXV0byYgY2FwdHVyaW5nRGF0YSA9IGVuc3VyZUNhcHR1cmluZ0RhdGFGb3JQb2ludGVy
RXZlbnQocG9pbnRlckV2ZW50KTsKIApAQCAtMjY4LDcgKzI4OCw3IEBAIHZvaWQgUG9pbnRlckNh
cHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0
JiB0YXJnZXQsCiAKICAgICAgICAgZm9yIChhdXRvJiBjaGFpbiA6IGxlZnRFbGVtZW50c0NoYWlu
KSB7CiAgICAgICAgICAgICBpZiAoaGFzQ2FwdHVyaW5nUG9pbnRlckxlYXZlTGlzdGVuZXIgfHwg
Y2hhaW4tPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5wb2ludGVybGVhdmVFdmVudCkp
Ci0gICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChQb2ludGVyRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkucG9pbnRlcmxlYXZlRXZlbnQsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlz
UHJpbWFyeSwgdmlldyksIGNoYWluLnB0cigpKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEV2
ZW50KGNyZWF0ZVBvaW50ZXJFdmVudChldmVudE5hbWVzKCkucG9pbnRlcmxlYXZlRXZlbnQsIHBs
YXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldywgdG91Y2gpLCBjaGFpbi5w
dHIoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3VycmVudFRhcmdldCkKQEAgLTI3Niw3
ICsyOTYsNyBAQCB2b2lkIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVudEZv
clRvdWNoQXRJbmRleChFdmVudFRhcmdldCYgdGFyZ2V0LAogCiAgICAgICAgIGZvciAoYXV0byYg
Y2hhaW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKGVudGVyZWRFbGVtZW50c0NoYWluKSkgewog
ICAgICAgICAgICAgaWYgKGhhc0NhcHR1cmluZ1BvaW50ZXJFbnRlckxpc3RlbmVyIHx8IGNoYWlu
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkucG9pbnRlcmVudGVyRXZlbnQpKQotICAg
ICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoUG9pbnRlckV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnBvaW50ZXJlbnRlckV2ZW50LCBwbGF0Zm9ybVRvdWNoRXZlbnQsIGluZGV4LCBpc1ByaW1h
cnksIHZpZXcpLCBjaGFpbi5wdHIoKSk7CisgICAgICAgICAgICAgICAgZGlzcGF0Y2hFdmVudChj
cmVhdGVQb2ludGVyRXZlbnQoZXZlbnROYW1lcygpLnBvaW50ZXJlbnRlckV2ZW50LCBwbGF0Zm9y
bVRvdWNoRXZlbnQsIGluZGV4LCBpc1ByaW1hcnksIHZpZXcsIHRvdWNoKSwgY2hhaW4ucHRyKCkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yOTksNyArMzE5LDI1IEBAIHZvaWQgUG9pbnRlckNh
cHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0
JiB0YXJnZXQsCiAgICAgICAgIGNhcHR1cmluZ0RhdGEucHJldmlvdXNUYXJnZXQgPSBudWxscHRy
OwogICAgIH0KIH0KKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCit2b2lkIFBvaW50ZXJDYXB0
dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVudEZvclRvdWNoQXRJbmRleChFdmVudFRhcmdldCYg
dGFyZ2V0LCBjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmIHBsYXRmb3JtVG91Y2hFdmVudCwgdW5z
aWduZWQgaW5kZXgsIGJvb2wgaXNQcmltYXJ5LCBXaW5kb3dQcm94eSYgdmlldykKK3sKKyAgICBk
aXNwYXRjaEV2ZW50Rm9yVG91Y2godGFyZ2V0LCBwbGF0Zm9ybVRvdWNoRXZlbnQsIGluZGV4LCBp
c1ByaW1hcnksIHZpZXcpOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9STShXUEUpCit2b2lkIFBv
aW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVudEZvclRvdWNoTGlzdChjb25zdCBB
dG9tU3RyaW5nJiB0eXBlLCBjb25zdCBUb3VjaExpc3QmIHRvdWNoZXMsIFdpbmRvd1Byb3h5JiB2
aWV3LCBib29sIGlzUHJpbWFyeSkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0b3VjaGVzLmxl
bmd0aCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAg
ICAgICBjb25zdCBUb3VjaCogdG91Y2ggPSB0b3VjaGVzLml0ZW0oaSk7CisgICAgICAgIGRpc3Bh
dGNoRXZlbnRGb3JUb3VjaCgqdG91Y2gtPnRhcmdldCgpLCBQbGF0Zm9ybVRvdWNoRXZlbnQoKSAv
KiBEb24ndCBjYXJlICovLCAwIC8qIERvbid0IGNhcmUgKi8sIGlzUHJpbWFyeSwgdmlldywgdHlw
ZS5zdHJpbmcoKSwgdG91Y2gpOworICAgIH0KK30KICNlbmRpZgorI2VuZGlmIC8qIEVOQUJMRShU
T1VDSF9FVkVOVFMpICYmIChQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXUEUpKSAq
LwogCiBSZWZQdHI8UG9pbnRlckV2ZW50PiBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OnBvaW50
ZXJFdmVudEZvck1vdXNlRXZlbnQoY29uc3QgTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5oCmluZGV4IGU5
YzcwNTg5N2Q0ZTM0NjYwZmJhYmE0NGUzOTMzMGFjYTViMTc0YWYuLjJmZjc0YzQ1NTlkMDQyNGJk
NTRjMWZjNDNlM2RmMWI1N2IzNGUxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Qb2lu
dGVyQ2FwdHVyZUNvbnRyb2xsZXIuaApAQCAtNDAsNiArNDAsOCBAQCBjbGFzcyBNb3VzZUV2ZW50
OwogY2xhc3MgUGFnZTsKIGNsYXNzIFBsYXRmb3JtVG91Y2hFdmVudDsKIGNsYXNzIFBvaW50ZXJF
dmVudDsKK2NsYXNzIFRvdWNoOworY2xhc3MgVG91Y2hMaXN0OwogY2xhc3MgV2luZG93UHJveHk7
CiAKIGNsYXNzIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlciB7CkBAIC01OSw4ICs2MSwxMiBAQCBw
dWJsaWM6CiAKICAgICBSZWZQdHI8UG9pbnRlckV2ZW50PiBwb2ludGVyRXZlbnRGb3JNb3VzZUV2
ZW50KGNvbnN0IE1vdXNlRXZlbnQmKTsKIAotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIHZvaWQgZGlzcGF0Y2hFdmVudEZvclRvdWNoQXRJbmRleChFdmVu
dFRhcmdldCYsIGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYsIHVuc2lnbmVkLCBib29sIGlzUHJp
bWFyeSwgV2luZG93UHJveHkmKTsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICB2b2lkIGRpc3Bh
dGNoRXZlbnRGb3JUb3VjaExpc3QoY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IFRvdWNoTGlzdCYs
IFdpbmRvd1Byb3h5JiwgYm9vbCA9IGZhbHNlKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRvdWNoV2l0aElkZW50aWZpZXJXYXNSZW1vdmVkKFBvaW50ZXJJRCk7
CkBAIC03NCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IENhcHR1cmluZ0RhdGEgewog
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gcGVuZGluZ1RhcmdldE92ZXJyaWRlOwogICAgICAgICBS
ZWZQdHI8RWxlbWVudD4gdGFyZ2V0T3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAoUExB
VEZPUk0oSU9TX0ZBTUlMWSkgfHwgIFBMQVRGT1JNKFdQRSkpCiAgICAgICAgIFJlZlB0cjxFbGVt
ZW50PiBwcmV2aW91c1RhcmdldDsKICNlbmRpZgogICAgICAgICBTdHJpbmcgcG9pbnRlclR5cGU7
CkBAIC04OCw2ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgQ2FwdHVyaW5nRGF0YSYgZW5zdXJlQ2Fw
dHVyaW5nRGF0YUZvclBvaW50ZXJFdmVudChjb25zdCBQb2ludGVyRXZlbnQmKTsKICAgICB2b2lk
IHBvaW50ZXJFdmVudFdpbGxCZURpc3BhdGNoZWQoY29uc3QgUG9pbnRlckV2ZW50JiwgRXZlbnRU
YXJnZXQqKTsKICAgICB2b2lkIHBvaW50ZXJFdmVudFdhc0Rpc3BhdGNoZWQoY29uc3QgUG9pbnRl
ckV2ZW50Jik7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50Rm9yVG91Y2goRXZlbnRUYXJnZXQmLCBj
b25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmLCB1bnNpZ25lZCwgYm9vbCwgV2luZG93UHJveHkmLCBj
b25zdCBTdHJpbmcmID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgVG91Y2gqID0gbnVsbHB0cik7CiAK
ICAgICBQYWdlJiBtX3BhZ2U7CiAgICAgLy8gV2hpbGUgUG9pbnRlcklEIGlzIGRlZmluZWQgYXMg
aW50MzJfdCwgd2UgdXNlIGludDY0X3QgaGVyZSBzbyB0aGF0IHdlIG1heSB1c2UgYSB2YWx1ZSBv
dXRzaWRlIG9mIHRoZSBpbnQzMl90IHJhbmdlIHRvIGhhdmUgc2FmZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405352</attachid>
            <date>2020-07-28 06:05:01 -0700</date>
            <delta_ts>2021-11-25 08:29:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214870-20200728150459.patch</filename>
            <type>text/plain</type>
            <size>21001</size>
            <attacher name="Marco Felsch">m.felsch</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY0MTkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDZjNWVlODgxYmI1MjMy
ZjVhNTE0NGI4ZTA4MmNjYWU1YzE0NDJlMS4uMmI5MTU0Mjc3NDU5MTY0YzYyZjFlODY5M2I5ZDVi
YWYyMWZhNTI3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA3LTI4ICBNYXJj
byBGZWxzY2ggIDxtLmZlbHNjaEBwZW5ndXRyb25peC5kZT4KKworICAgICAgICBbV1BFXVtQb2lu
dGVyIEV2ZW50c10gQWRkIHN1cHBvcnQgZm9yIHRvdWNoIGJhc2VkIHBvaW50ZXIgZXZlbnRzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4NzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMgbmVlZGVkIGJlY2F1c2Ugd2UgY2FuIHJldXNlIHRoZSB0ZXN0cyBmcm9tOgorICAgICAgICBM
YXlvdXRUZXN0cy9wb2ludGVyZXZlbnRzL2lvcy8KKworICAgICAgICBDdXJyZW50bHkgYWxsIG5v
bi1BcHBsZSBwb3J0cyBzdXBwb3J0aW5nIG9ubHkgcG9pbnRlciBldmVudHMgb2YgdHlwZQorICAg
ICAgICAnbW91c2UnIGJlY2F1c2UgdGhleSBhIG1hcHBlZCAxOjEgdG8gbW91c2VFdmVudHMuIFRo
aXMgY29tbWl0IGFkZHMKKyAgICAgICAgdGhlIHBvaW50ZXIgZXZlbnQgc3VwcG9ydCBmb3IgdG91
Y2hFdmVudHMgZm9yIHRoZSBXUEUgcG9ydC4gV2l0aAorICAgICAgICB0aGlzIHBhdGNoIGl0IHNo
b3VsZCBiZSBlYXN5IGZvciBvdGhlciBwb3J0cyB0byBhZGQgdGhlIHBvaW50ZXIKKyAgICAgICAg
ZXZlbnQgc3VwcG9ydCBhcyB3ZWxsLgorICAgICAgICAKKyAgICAgICAgQWRkaW5nIFBvaW50ZXIg
RXZlbnRzIGZvciB0b3VjaCBpbnZvbHZlZCBzZXZlcmFsIHN0ZXBzOgorICAgICAgICAKKyAgICAg
ICAgMSkgUmVmYWN0b3JpbmcKKyAgICAgICAgCisgICAgICAgIEkgcmVmYWN0b3JlZCB0aGUgUG9p
bnRlckNhcHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KCkKKyAg
ICAgICAgZnVuY3Rpb24gdG8gcmV1c2UgYXMgbXVjaCBhcyBwb3NzaWJsZSBjb2RlIGFuZCB0byBl
bnN1cmUgdGhlIGNvcnJlY3QKKyAgICAgICAgcG9pbnRlciBldmVudCBiZWhhdmlvdXIuIFRoZSBw
b2ludGVyIGV2ZW50IGdldHMgZGlzcGF0Y2hlZCByaWdodCBiZWZvcmUKKyAgICAgICAgdGhlIHRv
dWNoIGV2ZW50IHNpbmNlIHRoaXMgaXMgdGhlIGJlaGF2aW91ciBJIHNhdyBvbiBteSBpT1MgZGV2
aWNlCisgICAgICAgIGNhbGxpbmcgdGhpcyB0ZXN0IHdlYnNpdGU6CisgICAgICAgICAgaHR0cHM6
Ly9wYXRyaWNraGxhdWtlLmdpdGh1Yi5pby90b3VjaC90ZXN0cy9ldmVudC1saXN0ZW5lci5odG1s
CisgICAgICAgIEZ1cnRoZXJtb3JlIEkgbW92ZWQgdGhlIGlPUyBzcGVjaWZpYyBoZWxwZXJzOgor
ICAgICAgICAgIC0gYnV0dG9uRm9yVHlwZSgpIGFuZAorICAgICAgICAgIC0gYnV0dG9uc0ZvclR5
cGUoKQorICAgICAgICB0byB0aGUgY29yZSBQb2ludGVyRXZlbnQgY2xhc3MgdG8gbWFrZSBpdCBh
Y2Nlc3NpYmxlIGZvciBvdGhlciBwb3J0cy4KKyAgICAgICAgCisgICAgICAgIDIpIE5ldyBQb2lu
dGVyQ2FwdHVyZUNvbnRyb2xsZXIgZGlwYXRjaCBmdW5jdGlvbgorICAgICAgICAKKyAgICAgICAg
VGhlIG5ldyBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRGb3JUb3VjaExp
c3QoKSBmdW5jdGlvbiBpcworICAgICAgICBjYWxsZWQgZHVyaW5nIHRoZSBFdmVudEhhbmRsZXI6
OmhhbmRsZVRvdWNoRXZlbnQoKSBmdW5jdGlvbiBiZWNhdXNlIHRoaXMKKyAgICAgICAgZnVuY3Rp
b24gZG9lcyBhIGdvb2Qgam9iIHRvIGV4dHJhY3QgdGhlIGNoYW5nZWRUb3VjaCBldmVudHMuIFRo
ZXJlIGFyZQorICAgICAgICBubyByZWFzb25zIHRvIG5vdCByZXVzZSB0aGlzIGNvZGUuCisgICAg
ICAgIAorICAgICAgICAzKSBOZXcgUG9pbnRlckV2ZW50IGNvbnN0cnVjdG9yL2NyZWF0ZSBwYWly
CisgICAgICAgIAorICAgICAgICBUaGUgY3VycmVudCBub24gaU9TIHBvcnQgaXMgbWlzc2luZyBh
IGNvbnN0cnVjdG9yIHRvIGNyZWF0ZSBwb2ludGVyCisgICAgICAgIGV2ZW50cyBmcm9tIGEgZ2l2
ZW4gJ1RvdWNoJyBwb2ludC4gVGhlcmVmb3JlIGEgbmV3IFBvaW50ZXJFdmVudAorICAgICAgICBj
b25zdHJ1Y3RvciBhbmQgUG9pbnRlckV2ZW50OjpjcmVhdGUoKSBwYWlyIGlzIGFkZGVkLiBDdXJy
ZW50bHkgd2UgZG9uJ3QKKyAgICAgICAgc3VwcG9ydCB0aGUgcHJlc3N1cmUgaW5mb3JtYXRpb24u
IFRoaXMgY2FuIGJlIGFkZHJlc3NlZCBsYXRlci4KKworCisgICAgICAgICogZG9tL1BvaW50ZXJF
dmVudC5jcHA6IE5ldyBjcmVhdGUvY29uc3RydWN0b3IgcGFpciB0byBiZSBhYmxlIHRvIGNyZWF0
ZSBwb2ludGVyIGV2ZW50cyBmcm9tIGEgJ1RvdWNoJyBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6
OlBvaW50ZXJFdmVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJFdmVudDo6
UG9pbnRlckV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1faXNQcmltYXJ5KToKKyAgICAgICAg
KiBkb20vUG9pbnRlckV2ZW50Lmg6CisgICAgICAgICogZG9tL2lvcy9Qb2ludGVyRXZlbnRJT1Mu
Y3BwOiBNb3ZlIGJ1dHRvbkZvclR5cGUoKSBhbmQgYnV0dG9uc0ZvclR5cGUoKSB0byBnbG9iYWwg
UG9pbnRlckV2ZW50LmNwcCBjbGFzcy4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6
IEFkZCBzdXBwb3J0IGZvciBwb2ludGVyIGV2ZW50cyBvZiB0eXBlICd0b3VjaCcuCisgICAgICAg
IChXZWJDb3JlOjpwb2ludGVyRXZlbnROYW1lRm9yVG91Y2hQb2ludFN0YXRlKTogSGVscGVyIHRv
IG1hcCB0b3VjaCB0byBwb2ludGVyIGV2ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFu
ZGxlcjo6aGFuZGxlVG91Y2hFdmVudCk6IEFkZCBwb2ludGVyY2FwdHVyZSBjb250cm9sbGVyIGV2
ZW50IGRpc3BhdGNoLgorICAgICAgICAqIHBhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmNw
cDogUmVmYWN0b3IgdGhlIGNvZGUgdG8gcmV1c2UgdGhlIGJhc2UgZm9yIGlvcyBhbmQgbm9uLWlv
cyBwb3J0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVBvaW50ZXJFdmVudCk6IEhlbHBlciB0
byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgUG9pbnRlckV2ZW50OjpjcmVhdGUoKSBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0Y2hFdmVu
dEZvclRvdWNoKTogUmVmYWN0b3JlZCBjb3JlIGZ1bmN0aW9uIHRvIGhhbmRsZSBwb2ludGVyIGV2
ZW50cyBvZiB0eXBlICd0b3VjaCcuCisgICAgICAgIChXZWJDb3JlOjpQb2ludGVyQ2FwdHVyZUNv
bnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRGb3JUb3VjaEF0SW5kZXgpOiBpb3MgcG9ydCBhY2Nlc3Nv
ciBmdW5jdGlvbiAobm8gZnVuY2lvbmFsIGNoYW5nZXMpLgorICAgICAgICAoV2ViQ29yZTo6UG9p
bnRlckNhcHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hMaXN0KTogbm9uLWlv
cyBwb3J0IGFjY2Vzc29yIGZ1bmN0aW9uLgorICAgICAgICAqIHBhZ2UvUG9pbnRlckNhcHR1cmVD
b250cm9sbGVyLmg6IFNlZSBhYm92ZS4KKwogMjAyMC0wNy0yOCAgTWFyY28gRmVsc2NoICA8bS5m
ZWxzY2hAcGVuZ3V0cm9uaXguZGU+CiAKICAgICAgICAgQWRkIG1pc3NpbmcgTG9nZ2luZyBzdXBw
b3J0IGZvciB0b3VjaCBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2lu
dGVyRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5jcHAKaW5kZXgg
NmU4ODFkMTczZWQ0MzU5MmY5M2U2ZWNhMjE5NGRjMWQwZDRlOTNjMy4uOWU2YTA2MzU4OWY3ZTAw
Y2I4MjU3ZjMwYjU2ODhiYTQzMzEzOWJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1BvaW50ZXJFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJFdmVudC5j
cHAKQEAgLTkzLDYgKzkzLDIxIEBAIFJlZjxQb2ludGVyRXZlbnQ+IFBvaW50ZXJFdmVudDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgUG9pbnRlcklEIHBvaW50ZXJJZCwKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBQb2ludGVyRXZlbnQodHlwZSwgcG9pbnRlcklkLCBwb2ludGVyVHlwZSwg
aXNQcmltYXJ5KSk7CiB9CiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShX
UEUpCitSZWY8UG9pbnRlckV2ZW50PiBQb2ludGVyRXZlbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IHR5cGUsIFJlZjxXaW5kb3dQcm94eT4mJiB2aWV3LCBjb25zdCBUb3VjaCYgdG91Y2gsIElzUHJp
bWFyeSBpc1ByaW1hcnkpCit7CisgICAgLy8gRklYTUU6CisgICAgLy8gUHJlc3N1cmUgaXMgbm90
IHN1cHBvcnRlZCBjdXJyZW50bHkuIEluIHRoaXMgY2FzZSB0aGUgcHJlc3N1cmUgc2hvdWxkIGJl
IHNldCB0byAwLjUgd2hlbiBpbiAnYWN0aXZlIGJ1dHRvbnMgc3RhdGUnCisgICAgLy8gYW5kIHRv
IDAgb3RoZXJ3aXNlIGFjY29yZGluZyB0aGUgc3BlY2lmaWNhdGlvbiBbMV0uCisgICAgLy8gWzFd
IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyNwb2ludGVyZXZlbnQtaW50ZXJm
YWNlCisgICAgZmxvYXQgcHJlc3N1cmUgPSAwLjU7CisgICAgaWYgKHR5cGUgPT0gZXZlbnROYW1l
cygpLnBvaW50ZXJ1cEV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJvdXRFdmVu
dCB8fCB0eXBlID09IGV2ZW50TmFtZXMoKS5wb2ludGVybGVhdmVFdmVudCkKKyAgICAgICAgcHJl
c3N1cmUgPSAwOworCisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUG9pbnRlckV2ZW50KHR5cGUs
IFdURk1vdmUodmlldyksIHRvdWNoLCBwcmVzc3VyZSwgaXNQcmltYXJ5KSk7Cit9CisjZW5kaWYK
KwogUG9pbnRlckV2ZW50OjpQb2ludGVyRXZlbnQoKSA9IGRlZmF1bHQ7CiAKIFBvaW50ZXJFdmVu
dDo6UG9pbnRlckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEluaXQmJiBpbml0aWFsaXpl
cikKQEAgLTEyNCw2ICsxMzksMTcgQEAgUG9pbnRlckV2ZW50OjpQb2ludGVyRXZlbnQoY29uc3Qg
QXRvbVN0cmluZyYgdHlwZSwgUG9pbnRlcklEIHBvaW50ZXJJZCwgY29uc3QgU3QKIHsKIH0KIAor
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIFBMQVRGT1JNKFdQRSkKK1BvaW50ZXJFdmVudDo6
UG9pbnRlckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIFJlZjxXaW5kb3dQcm94eT4mJiB2
aWV3LCBjb25zdCBUb3VjaCYgdG91Y2gsIGNvbnN0IGZsb2F0IHByZXNzdXJlLCBJc1ByaW1hcnkg
aXNQcmltYXJ5KQorICAgIDogTW91c2VFdmVudCh0eXBlLCB0eXBlQ2FuQnViYmxlKHR5cGUpLCB0
eXBlSXNDYW5jZWxhYmxlKHR5cGUpLCB0eXBlSXNDb21wb3NlZCh0eXBlKSwgV1RGTW92ZSh2aWV3
KSwgMCwgeyB0b3VjaC5zY3JlZW5YKCksIHRvdWNoLnNjcmVlblkoKSB9LCB7IHRvdWNoLmNsaWVu
dFgoKSwgdG91Y2guY2xpZW50WSgpIH0sIHsgfSwgYnV0dG9uRm9yVHlwZSh0eXBlKSwgYnV0dG9u
c0ZvclR5cGUodHlwZSksIDAsIHRvdWNoLnRhcmdldCgpKQorICAgICwgbV9wb2ludGVySWQodG91
Y2guaWRlbnRpZmllcigpKQorICAgICwgbV9wcmVzc3VyZShwcmVzc3VyZSkKKyAgICAsIG1fcG9p
bnRlclR5cGUoUG9pbnRlckV2ZW50Ojp0b3VjaFBvaW50ZXJUeXBlKCkpCisgICAgLCBtX2lzUHJp
bWFyeShpc1ByaW1hcnkgPT0gSXNQcmltYXJ5OjpZZXMpCit7Cit9CisjZW5kaWYKKwogUG9pbnRl
ckV2ZW50Ojp+UG9pbnRlckV2ZW50KCkgPSBkZWZhdWx0OwogCiBFdmVudEludGVyZmFjZSBQb2lu
dGVyRXZlbnQ6OmV2ZW50SW50ZXJmYWNlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb2ludGVyRXZlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb2ludGVyRXZlbnQu
aAppbmRleCBhZjdhNmIzYzlhZjhhMzE4Mjc1MWY3Mzc2ODA2YzU0M2VkYTEyN2ZmLi41NDFmNjQ2
YmI1OWZlZjZkMmVhODE3NmUyOTg3MzdlYmU3YzQwNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUG9pbnRlckV2ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BvaW50ZXJF
dmVudC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIk5vZGUuaCIKICNpbmNsdWRlICJQb2ludGVySUQuaCIKKyNpbmNsdWRlICJUb3VjaC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTgxLDkgKzgyLDEzIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPFBvaW50ZXJFdmVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdHlwZSwgc2hv
cnQgYnV0dG9uLCBjb25zdCBNb3VzZUV2ZW50Jik7CiAgICAgc3RhdGljIFJlZjxQb2ludGVyRXZl
bnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHR5cGUsIFBvaW50ZXJJRCwgY29uc3QgU3RyaW5nJiBw
b2ludGVyVHlwZSwgSXNQcmltYXJ5ID0gSXNQcmltYXJ5OjpObyk7CiAKLSNpZiBFTkFCTEUoVE9V
Q0hfRVZFTlRTKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBzdGF0aWMgUmVmPFBvaW50ZXJFdmVu
dD4gY3JlYXRlKGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYsIHVuc2lnbmVkIHRvdWNoSW5kZXgs
IGJvb2wgaXNQcmltYXJ5LCBSZWY8V2luZG93UHJveHk+JiYpOwogICAgIHN0YXRpYyBSZWY8UG9p
bnRlckV2ZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQbGF0Zm9ybVRvdWNo
RXZlbnQmLCB1bnNpZ25lZCB0b3VjaEluZGV4LCBib29sIGlzUHJpbWFyeSwgUmVmPFdpbmRvd1By
b3h5PiYmKTsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICBzdGF0aWMgUmVmPFBvaW50ZXJFdmVu
dD4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIFJlZjxXaW5kb3dQcm94eT4mJiwgY29uc3QgVG91Y2gm
LCBJc1ByaW1hcnkgPSBJc1ByaW1hcnk6Ok5vKTsKKyNlbmRpZgogI2VuZGlmCiAKICAgICBzdGF0
aWMgY29uc3QgU3RyaW5nJiBtb3VzZVBvaW50ZXJUeXBlKCk7CkBAIC0xMjAsMTMgKzEyNSwyNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyBDYW5CdWJibGUgdHlwZUNhbkJ1YmJsZShjb25zdCBBdG9t
U3RyaW5nJiB0eXBlKSB7IHJldHVybiB0eXBlSXNFbnRlck9yTGVhdmUodHlwZSkgPyBDYW5CdWJi
bGU6Ok5vIDogQ2FuQnViYmxlOjpZZXM7IH0KICAgICBzdGF0aWMgSXNDYW5jZWxhYmxlIHR5cGVJ
c0NhbmNlbGFibGUoY29uc3QgQXRvbVN0cmluZyYgdHlwZSkgeyByZXR1cm4gdHlwZUlzRW50ZXJP
ckxlYXZlKHR5cGUpID8gSXNDYW5jZWxhYmxlOjpObyA6IElzQ2FuY2VsYWJsZTo6WWVzOyB9CiAg
ICAgc3RhdGljIElzQ29tcG9zZWQgdHlwZUlzQ29tcG9zZWQoY29uc3QgQXRvbVN0cmluZyYgdHlw
ZSkgeyByZXR1cm4gdHlwZUlzRW50ZXJPckxlYXZlKHR5cGUpID8gSXNDb21wb3NlZDo6Tm8gOiBJ
c0NvbXBvc2VkOjpZZXM7IH0KKyAgICBzdGF0aWMgc2hvcnQgYnV0dG9uRm9yVHlwZShjb25zdCBB
dG9tU3RyaW5nJiB0eXBlKSB7IHJldHVybiB0eXBlID09IGV2ZW50TmFtZXMoKS5wb2ludGVybW92
ZUV2ZW50ID8gLTEgOiAwOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGJ1dHRvbnNGb3JU
eXBlKGNvbnN0IEF0b21TdHJpbmcmIHR5cGUpCisgICAgeworICAgIC8vIFdlIGhhdmUgY29udGFj
dCB3aXRoIHRoZSB0b3VjaCBzdXJmYWNlIGZvciBtb3N0IGV2ZW50cyBleGNlcHQgd2hlbiB3ZSd2
ZSByZWxlYXNlZCB0aGUgdG91Y2ggb3IgY2FuY2VsZWQgaXQuCisgICAgICAgIHJldHVybiAodHlw
ZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcnVwRXZlbnQKKyAgICAgICAgICAgIHx8IHR5cGUgPT0g
ZXZlbnROYW1lcygpLnBvaW50ZXJvdXRFdmVudAorICAgICAgICAgICAgfHwgdHlwZSA9PSBldmVu
dE5hbWVzKCkucG9pbnRlcmxlYXZlRXZlbnQKKyAgICAgICAgICAgIHx8IHR5cGUgPT0gZXZlbnRO
YW1lcygpLnBvaW50ZXJjYW5jZWxFdmVudCkgPyAwIDogMTsKKyAgICB9CisKIAogICAgIFBvaW50
ZXJFdmVudCgpOwogICAgIFBvaW50ZXJFdmVudChjb25zdCBBdG9tU3RyaW5nJiwgSW5pdCYmKTsK
ICAgICBQb2ludGVyRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgc2hvcnQgYnV0dG9uLCBj
b25zdCBNb3VzZUV2ZW50Jik7CiAgICAgUG9pbnRlckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIHR5
cGUsIFBvaW50ZXJJRCwgY29uc3QgU3RyaW5nJiBwb2ludGVyVHlwZSwgSXNQcmltYXJ5KTsKLSNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBQb2ludGVyRXZl
bnQoY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiwgSXND
YW5jZWxhYmxlIGlzQ2FuY2VsYWJsZSwgdW5zaWduZWQgdG91Y2hJbmRleCwgYm9vbCBpc1ByaW1h
cnksIFJlZjxXaW5kb3dQcm94eT4mJik7CisjZWxpZiBQTEFURk9STShXUEUpCisgICAgUG9pbnRl
ckV2ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBSZWY8V2luZG93UHJveHk+JiYsIGNvbnN0IFRvdWNo
JiwgZmxvYXQsIElzUHJpbWFyeSk7CisjZW5kaWYKICNlbmRpZgogCiAgICAgUG9pbnRlcklEIG1f
cG9pbnRlcklkIHsgbW91c2VQb2ludGVySUQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9pb3MvUG9pbnRlckV2ZW50SU9TLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9pb3MvUG9p
bnRlckV2ZW50SU9TLmNwcAppbmRleCBkYzExZWQyZmYxY2Q0MTFkY2QzMmJkYWVjMTllYTZlZmI3
YzJjMDE2Li5lMmJjMzhiMDIxZGJlMjFkOGFkOGJlOWVlZjQ0OTNlOWM5NWRkNjBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vaW9zL1BvaW50ZXJFdmVudElPUy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL2lvcy9Qb2ludGVyRXZlbnRJT1MuY3BwCkBAIC01MCwxNyArNTAsNiBA
QCBzdGF0aWMgY29uc3QgQXRvbVN0cmluZyYgcG9pbnRlckV2ZW50VHlwZShQbGF0Zm9ybVRvdWNo
UG9pbnQ6OlRvdWNoUGhhc2VUeXBlIHBoYQogICAgIHJldHVybiBudWxsQXRvbSgpOwogfQogCi1z
dGF0aWMgc2hvcnQgYnV0dG9uRm9yVHlwZShjb25zdCBBdG9tU3RyaW5nJiB0eXBlKQotewotICAg
IHJldHVybiB0eXBlID09IGV2ZW50TmFtZXMoKS5wb2ludGVybW92ZUV2ZW50ID8gLTEgOiAwOwot
fQotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgYnV0dG9uc0ZvclR5cGUoY29uc3QgQXRvbVN0cmlu
ZyYgdHlwZSkKLXsKLSAgICAvLyBXZSBoYXZlIGNvbnRhY3Qgd2l0aCB0aGUgdG91Y2ggc3VyZmFj
ZSBmb3IgbW9zdCBldmVudHMgZXhjZXB0IHdoZW4gd2UndmUgcmVsZWFzZWQgdGhlIHRvdWNoIG9y
IGNhbmNlbGVkIGl0LgotICAgIHJldHVybiAodHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcnVw
RXZlbnQgfHwgdHlwZSA9PSBldmVudE5hbWVzKCkucG9pbnRlcm91dEV2ZW50IHx8IHR5cGUgPT0g
ZXZlbnROYW1lcygpLnBvaW50ZXJsZWF2ZUV2ZW50IHx8IHR5cGUgPT0gZXZlbnROYW1lcygpLnBv
aW50ZXJjYW5jZWxFdmVudCkgPyAwIDogMTsKLX0KLQogUmVmPFBvaW50ZXJFdmVudD4gUG9pbnRl
ckV2ZW50OjpjcmVhdGUoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCwgdW5zaWduZWQg
aW5kZXgsIGJvb2wgaXNQcmltYXJ5LCBSZWY8V2luZG93UHJveHk+JiYgdmlldykKIHsKICAgICBj
b25zdCBhdXRvJiB0eXBlID0gcG9pbnRlckV2ZW50VHlwZShldmVudC50b3VjaFBoYXNlQXRJbmRl
eChpbmRleCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGFmMTUyYzBh
NDlhM2Y5NWI2OThlMmRiYTE4MTNmODM3MjM5MTE0MDEuLmE3ZDE5MzY5YTRiNDYwYTA4NDQzMGU4
YzIxNzlkZmZlYmEzYThkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAg
LTc3LDYgKzc3LDcgQEAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgor
I2luY2x1ZGUgIlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJhbmdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRnJhbWVTZXQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgpA
QCAtNDA3OCw2ICs0MDc5LDI1IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVMYXN0U2Nyb2xs
YmFyVW5kZXJNb3VzZShTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2V0T3JDbGVhCiB9CiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiAhRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCitzdGF0aWMg
Y29uc3QgQXRvbVN0cmluZyYgcG9pbnRlckV2ZW50TmFtZUZvclRvdWNoUG9pbnRTdGF0ZShQbGF0
Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAg
ICBjYXNlIFBsYXRmb3JtVG91Y2hQb2ludDo6VG91Y2hSZWxlYXNlZDoKKyAgICAgICAgcmV0dXJu
IGV2ZW50TmFtZXMoKS5wb2ludGVydXBFdmVudDsKKyAgICBjYXNlIFBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hDYW5jZWxsZWQ6CisgICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucG9pbnRlcmNh
bmNlbEV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFByZXNzZWQ6Cisg
ICAgICAgIHJldHVybiBldmVudE5hbWVzKCkucG9pbnRlcmRvd25FdmVudDsKKyAgICBjYXNlIFBs
YXRmb3JtVG91Y2hQb2ludDo6VG91Y2hNb3ZlZDoKKyAgICAgICAgcmV0dXJuIGV2ZW50TmFtZXMo
KS5wb2ludGVybW92ZUV2ZW50OworICAgIGNhc2UgUGxhdGZvcm1Ub3VjaFBvaW50OjpUb3VjaFN0
YXRpb25hcnk6CisgICAgICAgIC8vIFRvdWNoU3RhdGlvbmFyeSBzdGF0ZSBpcyBub3QgY29udmVy
dGVkIHRvIHRvdWNoIGV2ZW50cywgc28gZmFsbCB0aHJvdWdoIHRvIGFzc2VydC4KKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGVtcHR5
QXRvbSgpOworICAgIH0KK30KKwogc3RhdGljIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50TmFtZUZv
clRvdWNoUG9pbnRTdGF0ZShQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlIHN0YXRlKQogewogICAg
IHN3aXRjaCAoc3RhdGUpIHsKQEAgLTQyOTUsNiArNDMxNSw5IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYgZXZlbnQpCiAgICAg
ICAgIGJvb2wgaXNUb3VjaENhbmNlbEV2ZW50ID0gKHN0YXRlID09IFBsYXRmb3JtVG91Y2hQb2lu
dDo6VG91Y2hDYW5jZWxsZWQpOwogICAgICAgICBSZWZQdHI8VG91Y2hMaXN0PiYgZWZmZWN0aXZl
VG91Y2hlcyhpc1RvdWNoQ2FuY2VsRXZlbnQgPyBlbXB0eUxpc3QgOiB0b3VjaGVzKTsKICAgICAg
ICAgY29uc3QgQXRvbVN0cmluZyYgc3RhdGVOYW1lKGV2ZW50TmFtZUZvclRvdWNoUG9pbnRTdGF0
ZShzdGF0aWNfY2FzdDxQbGF0Zm9ybVRvdWNoUG9pbnQ6OlN0YXRlPihzdGF0ZSkpKTsKKyNpZiBF
TkFCTEUoUE9JTlRFUl9FVkVOVFMpICYmIFBMQVRGT1JNKFdQRSkKKyAgICAgICAgY29uc3QgQXRv
bVN0cmluZyYgcG9pbnRlclN0YXRlTmFtZShwb2ludGVyRXZlbnROYW1lRm9yVG91Y2hQb2ludFN0
YXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVG91Y2hQb2ludDo6U3RhdGU+KHN0YXRlKSkpOworI2Vu
ZGlmCiAKICAgICAgICAgZm9yIChhdXRvJiB0YXJnZXQgOiBjaGFuZ2VkVG91Y2hlc1tzdGF0ZV0u
bV90YXJnZXRzKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXM8Tm9kZT4odGFyZ2V0KSk7CkBAIC00
MzA0LDYgKzQzMjcsMTMgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29u
c3QgUGxhdGZvcm1Ub3VjaEV2ZW50JiBldmVudCkKIAogICAgICAgICAgICAgUmVmPFRvdWNoRXZl
bnQ+IHRvdWNoRXZlbnQgPSBUb3VjaEV2ZW50OjpjcmVhdGUoZWZmZWN0aXZlVG91Y2hlcy5nZXQo
KSwgdGFyZ2V0VG91Y2hlcy5nZXQoKSwgY2hhbmdlZFRvdWNoZXNbc3RhdGVdLm1fdG91Y2hlcy5n
ZXQoKSwKICAgICAgICAgICAgICAgICBzdGF0ZU5hbWUsIGRvd25jYXN0PE5vZGU+KCp0YXJnZXQp
LmRvY3VtZW50KCkud2luZG93UHJveHkoKSwgeyB9LCBldmVudC5tb2RpZmllcnMoKSk7CisjaWYg
RU5BQkxFKFBPSU5URVJfRVZFTlRTKSAmJiBQTEFURk9STShXUEUpCisgICAgICAgICAgICAvLyBE
aXNwYXRjaCBwb2ludGVyIGV2ZW50cyBiZWZvcmUgdG91Y2ggZXZlbnRzCisgICAgICAgICAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5wb2ludGVyRXZlbnRz
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcG9pbnRlckNvbnRyb2xsZXIgPSBt
X2ZyYW1lLnBhZ2UoKS0+cG9pbnRlckNhcHR1cmVDb250cm9sbGVyKCk7CisgICAgICAgICAgICAg
ICAgcG9pbnRlckNvbnRyb2xsZXIuZGlzcGF0Y2hFdmVudEZvclRvdWNoTGlzdChwb2ludGVyU3Rh
dGVOYW1lLCAqdG91Y2hFdmVudC0+Y2hhbmdlZFRvdWNoZXMoKSwgKnRvdWNoRXZlbnQtPnZpZXco
KSk7CisgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIHRhcmdldC0+ZGlzcGF0Y2hF
dmVudCh0b3VjaEV2ZW50KTsKICAgICAgICAgICAgIHN3YWxsb3dlZEV2ZW50ID0gc3dhbGxvd2Vk
RXZlbnQgfHwgdG91Y2hFdmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpIHx8IHRvdWNoRXZlbnQtPmRl
ZmF1bHRIYW5kbGVkKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUG9p
bnRlckNhcHR1cmVDb250cm9sbGVyLmNwcAppbmRleCA5NzIxODcyNDllMTlkMTdkMzc3ZWVhMzFm
NmI3MjliZWZiZjRiNzBlLi5lNzcxMGE5YjVkYjdjNmQyMzIwZWVjNmM0MTg2ZWM1ZWY2NWY4OTUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIu
Y3BwCkBAIC00MSw2ICs0MSwxMiBAQAogI2luY2x1ZGUgIlBvaW50ZXJMb2NrQ29udHJvbGxlci5o
IgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3Jt
VG91Y2hFdmVudC5oIgorI2luY2x1ZGUgIlRvdWNoLmgiCisjaW5jbHVkZSAiVG91Y2hMaXN0Lmgi
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQb2ludGVyQ2FwdHVyZUNvbnRyb2xs
ZXI6OlBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcihQYWdlJiBwYWdlKQpAQCAtMTgzLDcgKzE4OSwy
MSBAQCBib29sIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cHJldmVudHNDb21wYXRpYmlsaXR5
TW91c2VFdmVudHNGb3JJZGVudGlmaWVyKFBvaQogICAgIHJldHVybiBpdGVyYXRvciAhPSBtX2Fj
dGl2ZVBvaW50ZXJJZHNUb0NhcHR1cmluZ0RhdGEuZW5kKCkgJiYgaXRlcmF0b3ItPnZhbHVlLnBy
ZXZlbnRzQ29tcGF0aWJpbGl0eU1vdXNlRXZlbnRzOwogfQogCi0jaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAm
JiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV1BFKSkKK3N0YXRpYyBSZWY8UG9p
bnRlckV2ZW50PiBjcmVhdGVQb2ludGVyRXZlbnQoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBQ
bGF0Zm9ybVRvdWNoRXZlbnQmIHBsYXRmb3JtVG91Y2hFdmVudCwgdW5zaWduZWQgaW5kZXgsIGJv
b2wgaXNQcmltYXJ5LCBXaW5kb3dQcm94eSYgdmlldywgY29uc3QgVG91Y2gqIHRvdWNoKQorewor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gUG9pbnRlckV2ZW50OjpjcmVhdGUocGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwg
aXNQcmltYXJ5LCB2aWV3KTsKKyAgICByZXR1cm4gUG9pbnRlckV2ZW50OjpjcmVhdGUodHlwZSwg
cGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3KTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHBsYXRmb3JtVG91Y2hFdmVudCk7CisgICAgVU5VU0VEX1BBUkFNKGluZGV4
KTsKKyAgICBVTlVTRURfUEFSQU0oaXNQcmltYXJ5KTsKKworICAgIHJldHVybiBQb2ludGVyRXZl
bnQ6OmNyZWF0ZSh0eXBlLCB2aWV3LCAqdG91Y2gpOworI2VuZGlmCit9CiBzdGF0aWMgYm9vbCBo
aWVyYXJjaHlIYXNDYXB0dXJpbmdFdmVudExpc3RlbmVycyhFbGVtZW50KiB0YXJnZXQsIGNvbnN0
IEF0b21TdHJpbmcmIGV2ZW50TmFtZSkKIHsKICAgICBmb3IgKENvbnRhaW5lck5vZGUqIGN1cnIg
PSB0YXJnZXQ7IGN1cnI7IGN1cnIgPSBjdXJyLT5wYXJlbnRJbkNvbXBvc2VkVHJlZSgpKSB7CkBA
IC0xOTMsMTIgKzIxMywxMiBAQCBzdGF0aWMgYm9vbCBoaWVyYXJjaHlIYXNDYXB0dXJpbmdFdmVu
dExpc3RlbmVycyhFbGVtZW50KiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbgogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6OmRpc3BhdGNoRXZlbnRG
b3JUb3VjaEF0SW5kZXgoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgUGxhdGZvcm1Ub3VjaEV2
ZW50JiBwbGF0Zm9ybVRvdWNoRXZlbnQsIHVuc2lnbmVkIGluZGV4LCBib29sIGlzUHJpbWFyeSwg
V2luZG93UHJveHkmIHZpZXcpCit2b2lkIFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6ZGlzcGF0
Y2hFdmVudEZvclRvdWNoKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IFBsYXRmb3JtVG91Y2hF
dmVudCYgcGxhdGZvcm1Ub3VjaEV2ZW50LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBpc1ByaW1hcnks
IFdpbmRvd1Byb3h5JiB2aWV3LCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFRvdWNoKiB0b3Vj
aCkKIHsKICAgICBBU1NFUlQoaXM8RWxlbWVudD4odGFyZ2V0KSk7CiAKICAgICBhdXRvIGRpc3Bh
dGNoT3Zlck9yT3V0RXZlbnQgPSBbJl0oY29uc3QgU3RyaW5nJiB0eXBlLCBFdmVudFRhcmdldCog
dGFyZ2V0KSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoUG9pbnRlckV2ZW50OjpjcmVhdGUodHlw
ZSwgcGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3KSwgdGFyZ2V0KTsK
KyAgICAgICAgZGlzcGF0Y2hFdmVudChjcmVhdGVQb2ludGVyRXZlbnQodHlwZSwgcGxhdGZvcm1U
b3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3LCB0b3VjaCksIHRhcmdldCk7CiAgICAg
fTsKIAogICAgIGF1dG8gZGlzcGF0Y2hFbnRlck9yTGVhdmVFdmVudCA9IFsmXShjb25zdCBTdHJp
bmcmIHR5cGUpIHsKQEAgLTIyMCwxNCArMjQwLDE0IEBAIHZvaWQgUG9pbnRlckNhcHR1cmVDb250
cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0JiB0YXJnZXQs
CiAKICAgICAgICAgaWYgKHR5cGUgPT0gZXZlbnROYW1lcygpLnBvaW50ZXJlbnRlckV2ZW50KSB7
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdl
KHRhcmdldENoYWluKSkKLSAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KFBvaW50ZXJFdmVu
dDo6Y3JlYXRlKHR5cGUsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmll
dyksIGVsZW1lbnQucHRyKCkpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoY3JlYXRl
UG9pbnRlckV2ZW50KHR5cGUsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwg
dmlldywgdG91Y2gpLCBlbGVtZW50LnB0cigpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRhcmdldENoYWluKQotICAgICAgICAgICAgICAgIGRp
c3BhdGNoRXZlbnQoUG9pbnRlckV2ZW50OjpjcmVhdGUodHlwZSwgcGxhdGZvcm1Ub3VjaEV2ZW50
LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3KSwgZWxlbWVudC5wdHIoKSk7CisgICAgICAgICAgICAg
ICAgZGlzcGF0Y2hFdmVudChjcmVhdGVQb2ludGVyRXZlbnQodHlwZSwgcGxhdGZvcm1Ub3VjaEV2
ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3LCB0b3VjaCksIGVsZW1lbnQucHRyKCkpOwogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8gcG9pbnRlckV2ZW50ID0gUG9pbnRlckV2ZW50Ojpj
cmVhdGUocGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3KTsKKyAgICBh
dXRvIHBvaW50ZXJFdmVudCA9IGNyZWF0ZVBvaW50ZXJFdmVudCh0eXBlLCBwbGF0Zm9ybVRvdWNo
RXZlbnQsIGluZGV4LCBpc1ByaW1hcnksIHZpZXcsIHRvdWNoKTsgCiAKICAgICBhdXRvJiBjYXB0
dXJpbmdEYXRhID0gZW5zdXJlQ2FwdHVyaW5nRGF0YUZvclBvaW50ZXJFdmVudChwb2ludGVyRXZl
bnQpOwogCkBAIC0yNjgsNyArMjg4LDcgQEAgdm9pZCBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6
OmRpc3BhdGNoRXZlbnRGb3JUb3VjaEF0SW5kZXgoRXZlbnRUYXJnZXQmIHRhcmdldCwKIAogICAg
ICAgICBmb3IgKGF1dG8mIGNoYWluIDogbGVmdEVsZW1lbnRzQ2hhaW4pIHsKICAgICAgICAgICAg
IGlmIChoYXNDYXB0dXJpbmdQb2ludGVyTGVhdmVMaXN0ZW5lciB8fCBjaGFpbi0+aGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLnBvaW50ZXJsZWF2ZUV2ZW50KSkKLSAgICAgICAgICAgICAg
ICBkaXNwYXRjaEV2ZW50KFBvaW50ZXJFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wb2ludGVy
bGVhdmVFdmVudCwgcGxhdGZvcm1Ub3VjaEV2ZW50LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3KSwg
Y2hhaW4ucHRyKCkpOworICAgICAgICAgICAgICAgIGRpc3BhdGNoRXZlbnQoY3JlYXRlUG9pbnRl
ckV2ZW50KGV2ZW50TmFtZXMoKS5wb2ludGVybGVhdmVFdmVudCwgcGxhdGZvcm1Ub3VjaEV2ZW50
LCBpbmRleCwgaXNQcmltYXJ5LCB2aWV3LCB0b3VjaCksIGNoYWluLnB0cigpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChjdXJyZW50VGFyZ2V0KQpAQCAtMjc2LDcgKzI5Niw3IEBAIHZvaWQg
UG9pbnRlckNhcHR1cmVDb250cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2
ZW50VGFyZ2V0JiB0YXJnZXQsCiAKICAgICAgICAgZm9yIChhdXRvJiBjaGFpbiA6IFdURjo6bWFr
ZVJldmVyc2VkUmFuZ2UoZW50ZXJlZEVsZW1lbnRzQ2hhaW4pKSB7CiAgICAgICAgICAgICBpZiAo
aGFzQ2FwdHVyaW5nUG9pbnRlckVudGVyTGlzdGVuZXIgfHwgY2hhaW4tPmhhc0V2ZW50TGlzdGVu
ZXJzKGV2ZW50TmFtZXMoKS5wb2ludGVyZW50ZXJFdmVudCkpCi0gICAgICAgICAgICAgICAgZGlz
cGF0Y2hFdmVudChQb2ludGVyRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucG9pbnRlcmVudGVy
RXZlbnQsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldyksIGNoYWlu
LnB0cigpKTsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaEV2ZW50KGNyZWF0ZVBvaW50ZXJFdmVu
dChldmVudE5hbWVzKCkucG9pbnRlcmVudGVyRXZlbnQsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5k
ZXgsIGlzUHJpbWFyeSwgdmlldywgdG91Y2gpLCBjaGFpbi5wdHIoKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTI5OSw3ICszMTksMjUgQEAgdm9pZCBQb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXI6
OmRpc3BhdGNoRXZlbnRGb3JUb3VjaEF0SW5kZXgoRXZlbnRUYXJnZXQmIHRhcmdldCwKICAgICAg
ICAgY2FwdHVyaW5nRGF0YS5wcmV2aW91c1RhcmdldCA9IG51bGxwdHI7CiAgICAgfQogfQorCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3ZvaWQgUG9pbnRlckNhcHR1cmVDb250cm9sbGVyOjpk
aXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IFBs
YXRmb3JtVG91Y2hFdmVudCYgcGxhdGZvcm1Ub3VjaEV2ZW50LCB1bnNpZ25lZCBpbmRleCwgYm9v
bCBpc1ByaW1hcnksIFdpbmRvd1Byb3h5JiB2aWV3KQoreworICAgIGRpc3BhdGNoRXZlbnRGb3JU
b3VjaCh0YXJnZXQsIHBsYXRmb3JtVG91Y2hFdmVudCwgaW5kZXgsIGlzUHJpbWFyeSwgdmlldyk7
Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdQRSkKK3ZvaWQgUG9pbnRlckNhcHR1cmVDb250
cm9sbGVyOjpkaXNwYXRjaEV2ZW50Rm9yVG91Y2hMaXN0KGNvbnN0IEF0b21TdHJpbmcmIHR5cGUs
IGNvbnN0IFRvdWNoTGlzdCYgdG91Y2hlcywgV2luZG93UHJveHkmIHZpZXcsIGJvb2wgaXNQcmlt
YXJ5KQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRvdWNoZXMubGVuZ3RoKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRvdWNo
KiB0b3VjaCA9IHRvdWNoZXMuaXRlbShpKTsKKyAgICAgICAgZGlzcGF0Y2hFdmVudEZvclRvdWNo
KCp0b3VjaC0+dGFyZ2V0KCksIFBsYXRmb3JtVG91Y2hFdmVudCgpIC8qIERvbid0IGNhcmUgKi8s
IDAgLyogRG9uJ3QgY2FyZSAqLywgaXNQcmltYXJ5LCB2aWV3LCB0eXBlLnN0cmluZygpLCB0b3Vj
aCk7CisgICAgfQorfQogI2VuZGlmCisjZW5kaWYgLyogRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYg
KFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdQRSkpICovCiAKIFJlZlB0cjxQb2lu
dGVyRXZlbnQ+IFBvaW50ZXJDYXB0dXJlQ29udHJvbGxlcjo6cG9pbnRlckV2ZW50Rm9yTW91c2VF
dmVudChjb25zdCBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Qb2ludGVyQ2FwdHVyZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUG9pbnRlckNhcHR1cmVDb250cm9sbGVyLmgKaW5kZXggZTljNzA1ODk3ZDRlMzQ2NjBm
YmFiYTQ0ZTM5MzMwYWNhNWIxNzRhZi4uMmZmNzRjNDU1OWQwNDI0YmQ1NGMxZmM0M2UzZGYxYjU3
YjM0ZTFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVyQ2FwdHVyZUNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJDYXB0dXJlQ29udHJv
bGxlci5oCkBAIC00MCw2ICs0MCw4IEBAIGNsYXNzIE1vdXNlRXZlbnQ7CiBjbGFzcyBQYWdlOwog
Y2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwogY2xhc3MgUG9pbnRlckV2ZW50OworY2xhc3MgVG91
Y2g7CitjbGFzcyBUb3VjaExpc3Q7CiBjbGFzcyBXaW5kb3dQcm94eTsKIAogY2xhc3MgUG9pbnRl
ckNhcHR1cmVDb250cm9sbGVyIHsKQEAgLTU5LDggKzYxLDEyIEBAIHB1YmxpYzoKIAogICAgIFJl
ZlB0cjxQb2ludGVyRXZlbnQ+IHBvaW50ZXJFdmVudEZvck1vdXNlRXZlbnQoY29uc3QgTW91c2VF
dmVudCYpOwogCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykgJiYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgdm9pZCBkaXNwYXRjaEV2ZW50Rm9yVG91Y2hBdEluZGV4KEV2ZW50VGFyZ2V0JiwgY29uc3Qg
UGxhdGZvcm1Ub3VjaEV2ZW50JiwgdW5zaWduZWQsIGJvb2wgaXNQcmltYXJ5LCBXaW5kb3dQcm94
eSYpOworI2VsaWYgUExBVEZPUk0oV1BFKQorICAgIHZvaWQgZGlzcGF0Y2hFdmVudEZvclRvdWNo
TGlzdChjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgVG91Y2hMaXN0JiwgV2luZG93UHJveHkmLCBi
b29sID0gZmFsc2UpOworI2VuZGlmCiAjZW5kaWYKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dG91Y2hXaXRoSWRlbnRpZmllcldhc1JlbW92ZWQoUG9pbnRlcklEKTsKQEAgLTc0LDcgKzgwLDcg
QEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgQ2FwdHVyaW5nRGF0YSB7CiAgICAgICAgIFJlZlB0cjxF
bGVtZW50PiBwZW5kaW5nVGFyZ2V0T3ZlcnJpZGU7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiB0
YXJnZXRPdmVycmlkZTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKSAmJiBQTEFURk9STShJT1Nf
RkFNSUxZKQorI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpICYmIChQTEFURk9STShJT1NfRkFNSUxZ
KSB8fCAgUExBVEZPUk0oV1BFKSkKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHByZXZpb3VzVGFy
Z2V0OwogI2VuZGlmCiAgICAgICAgIFN0cmluZyBwb2ludGVyVHlwZTsKQEAgLTg4LDYgKzk0LDcg
QEAgcHJpdmF0ZToKICAgICBDYXB0dXJpbmdEYXRhJiBlbnN1cmVDYXB0dXJpbmdEYXRhRm9yUG9p
bnRlckV2ZW50KGNvbnN0IFBvaW50ZXJFdmVudCYpOwogICAgIHZvaWQgcG9pbnRlckV2ZW50V2ls
bEJlRGlzcGF0Y2hlZChjb25zdCBQb2ludGVyRXZlbnQmLCBFdmVudFRhcmdldCopOwogICAgIHZv
aWQgcG9pbnRlckV2ZW50V2FzRGlzcGF0Y2hlZChjb25zdCBQb2ludGVyRXZlbnQmKTsKKyAgICB2
b2lkIGRpc3BhdGNoRXZlbnRGb3JUb3VjaChFdmVudFRhcmdldCYsIGNvbnN0IFBsYXRmb3JtVG91
Y2hFdmVudCYsIHVuc2lnbmVkLCBib29sLCBXaW5kb3dQcm94eSYsIGNvbnN0IFN0cmluZyYgPSBl
bXB0eVN0cmluZygpLCBjb25zdCBUb3VjaCogPSBudWxscHRyKTsKIAogICAgIFBhZ2UmIG1fcGFn
ZTsKICAgICAvLyBXaGlsZSBQb2ludGVySUQgaXMgZGVmaW5lZCBhcyBpbnQzMl90LCB3ZSB1c2Ug
aW50NjRfdCBoZXJlIHNvIHRoYXQgd2UgbWF5IHVzZSBhIHZhbHVlIG91dHNpZGUgb2YgdGhlIGlu
dDMyX3QgcmFuZ2UgdG8gaGF2ZSBzYWZlCg==
</data>
<flag name="review"
          id="420755"
          type_id="1"
          status="-"
          setter="clopez"
    />
          </attachment>
      

    </bug>

</bugzilla>