<?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>210611</bug_id>
          
          <creation_ts>2020-04-16 10:46:59 -0700</creation_ts>
          <short_desc>[iOS] Add a way to focus a text input and place a caret</short_desc>
          <delta_ts>2020-04-30 20:19:09 -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>WebKit Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>iOS 13</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>211276</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1642329</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 10:46:59 -0700</bug_when>
    <thetext>Add IPI to focus a text input context and also place the caret. This functionality will be used by code in WebKitAdditions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642330</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-16 10:47:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/61893062&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642331</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 10:48:27 -0700</bug_when>
    <thetext>I will remove the existing focusTextInputContext SPI in a follow up patch so I can determine whether I salvage some or all of the single TestWebKitAPI test that covers its functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642336</commentid>
    <comment_count>3</comment_count>
      <attachid>396671</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 10:59:43 -0700</bug_when>
    <thetext>Created attachment 396671
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642342</commentid>
    <comment_count>4</comment_count>
      <attachid>396673</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 11:05:51 -0700</bug_when>
    <thetext>Created attachment 396673
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642357</commentid>
    <comment_count>5</comment_count>
      <attachid>396673</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-16 11:25:47 -0700</bug_when>
    <thetext>Comment on attachment 396673
Patch and tests

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:5088
&gt; +    // We ignore bounding rect changes as the bounding rect of the focused element is not kept up-to-date.
&gt; +    return self._hasFocusedElement &amp;&amp; context &amp;&amp; context._textInputContext.isSameElement(_focusedElementInformation.elementContext);

Why does this method null-check context instead of asserting?

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:5093
&gt; +    ASSERT(context);

Why does this method assert context instead of checking for null?

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4291
&gt; +    RefPtr&lt;Element&gt; target = elementForContext(elementContext);

I think that the modern approach for this would be to have elementForContext return a RefPtr. Lacking that, then I suggest using auto x = makeRefPtr(y) instead of RefPtr&lt;ClassName&gt; x = y so that the RefPtr gets the appropriate type automatically instead of possible narrowing.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4292
&gt; +    if (!target || !target-&gt;renderer()) {

Checking renderer for null without first updating layout is almost always a programming mistake.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4298
&gt; +    Ref&lt;Frame&gt; targetFrame = *target-&gt;document().frame();

Similarly here, newest style would be:

    auto targetFrame = makeRef(*target-&gt;document().frame());

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4305
&gt; +    if (!didFocus || !target-&gt;renderer()) {

Checking renderer for null without first updating layout is almost always a programming mistake.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4312
&gt; +    VisiblePosition position = visiblePositionInFocusedNodeForPoint(targetFrame, point, true /* isInteractingWithFocusedElement */);

I suggest auto here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642376</commentid>
    <comment_count>6</comment_count>
      <attachid>396673</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 11:46:41 -0700</bug_when>
    <thetext>Comment on attachment 396673
Patch and tests

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

Thanks for the review.

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:5088
&gt;&gt; +    return self._hasFocusedElement &amp;&amp; context &amp;&amp; context._textInputContext.isSameElement(_focusedElementInformation.elementContext);
&gt; 
&gt; Why does this method null-check context instead of asserting?

Because I was debating whether to null check or not: half the code null checks, half does not. I&apos;m going to assert.

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:5093
&gt;&gt; +    ASSERT(context);
&gt; 
&gt; Why does this method assert context instead of checking for null?

See above. I&apos;m going to leave as-is.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4291
&gt;&gt; +    RefPtr&lt;Element&gt; target = elementForContext(elementContext);
&gt; 
&gt; I think that the modern approach for this would be to have elementForContext return a RefPtr. Lacking that, then I suggest using auto x = makeRefPtr(y) instead of RefPtr&lt;ClassName&gt; x = y so that the RefPtr gets the appropriate type automatically instead of possible narrowing.

OK... fixing up elementForContext.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4292
&gt;&gt; +    if (!target || !target-&gt;renderer()) {
&gt; 
&gt; Checking renderer for null without first updating layout is almost always a programming mistake.

I guess I could update layout then...

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4298
&gt;&gt; +    Ref&lt;Frame&gt; targetFrame = *target-&gt;document().frame();
&gt; 
&gt; Similarly here, newest style would be:
&gt; 
&gt;     auto targetFrame = makeRef(*target-&gt;document().frame());

OK.

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4305
&gt;&gt; +    if (!didFocus || !target-&gt;renderer()) {
&gt; 
&gt; Checking renderer for null without first updating layout is almost always a programming mistake.

I think I&apos;m going to update layout then

&gt;&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:4312
&gt;&gt; +    VisiblePosition position = visiblePositionInFocusedNodeForPoint(targetFrame, point, true /* isInteractingWithFocusedElement */);
&gt; 
&gt; I suggest auto here.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642396</commentid>
    <comment_count>7</comment_count>
      <attachid>396687</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 12:19:00 -0700</bug_when>
    <thetext>Created attachment 396687
To Land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642401</commentid>
    <comment_count>8</comment_count>
      <attachid>396687</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 12:48:06 -0700</bug_when>
    <thetext>Comment on attachment 396687
To Land

Clearing flags on attachment: 396687

Committed r260214: &lt;https://trac.webkit.org/changeset/260214&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642402</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-16 12:48:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396671</attachid>
            <date>2020-04-16 10:59:43 -0700</date>
            <delta_ts>2020-04-16 11:05:50 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-210611-20200416105942.patch</filename>
            <type>text/plain</type>
            <size>26205</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkODQ3NDIwNmRkZmU1M2Zi
YjU3MGZlMTdkN2E4ZmMyOTVmY2IzYzQuLmExNTdjZGRhOWZjNjIxOTg2Zjc0NzZiNzY4NmMyMTgx
ZjM5MzJlNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjAtMDQtMTYgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEFkZCBhIHdheSB0byBm
b2N1cyBhIHRleHQgaW5wdXQgYW5kIHBsYWNlIGEgY2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDYxMQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjE4OTMwNjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgSVBJIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGNvZGUgaW4gV2ViS2l0QWRk
aXRpb25zIHRvIGZvY3VzIGEgdGV4dCBpbnB1dCBjb250ZXh0CisgICAgICAgIGFuZCBwbGFjZSB0
aGUgY2FyZXQgaW4gaXQuIFRoaXMgd2lsbCByZXBsYWNlIHRoZSBleGlzdGluZyAtZm9jdXNUZXh0
SW5wdXQgU1BJLCB3aGljaCBJCisgICAgICAgIHdpbGwgcmVtb3ZlIGluIGEgc3Vic2VxdWVudCBj
b21taXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRlRm9y
VGVzdGluZ0lPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3Rp
bmdJT1MubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZm9jdXNUZXh0SW5wdXRDb250ZXh0OnBs
YWNlQ2FyZXRBdDpjb21wbGV0aW9uSGFuZGxlcjpdKTogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2lzVGV4dElucHV0Q29udGV4
dEZvY3VzZWQ6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9mb2N1c1RleHRJ
bnB1dENvbnRleHQ6cGxhY2VDYXJldEF0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBBZGRlZC4KKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OmNv
bXBsZXRpb25IYW5kbGVyOl0pOiBGaXggdXAgY29kZSBzdHlsZQorICAgICAgICBvZiBzaWduYXR1
cmUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5
SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmZvY3VzVGV4dElucHV0Q29u
dGV4dEFuZFBsYWNlQ2FyZXQpOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJl
dCk6IEFkZGVkLgorCiAyMDIwLTA0LTE1ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNv
bT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjU5NzYyKTogU2hvdWxkIGFsd2F5cyBoaXQgdGVz
dCBmb3IgZWRpdGFibGUgZWxlbWVudHMgaWYgdGhlIFdLV2ViVmlldyBpcyBmdWxseSBlZGl0YWJs
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQ
cml2YXRlRm9yVGVzdGluZ0lPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9X
S1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5oCmluZGV4IGYyNWVmNzM3NjAxNzY3YzAwZGU4
N2FiNmYzODg4NzdlMGI5NTczYWMuLmVjNDM4Mjk0ZmRhNmI3OGY5ZjhlYzJkN2Y3MDQyOGVhZDc0
NjY5Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJW
aWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvaW9zL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgKQEAgLTUwLDYgKzUwLDcgQEAK
IAogLSAoQk9PTClfbWF5Q29udGFpbkVkaXRhYmxlRWxlbWVudHNJblJlY3Q6KENHUmVjdClyZWN0
OwogLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4g
KikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9X
S1RleHRJbnB1dENvbnRleHQgKiljb250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludCBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKikpY29t
cGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKV9yZXF1ZXN0RG9jdW1lbnRDb250ZXh0OihVSVdLRG9j
dW1lbnRSZXF1ZXN0ICopcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlXS0Rv
Y3VtZW50Q29udGV4dCAqKSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpX2FkanVzdFNlbGVj
dGlvbldpdGhEZWx0YTooTlNSYW5nZSlkZWx0YVJhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCmluZGV4IGQ1ZTA1MDg5
NzE4ZjAzZmMwOGY1YWY4MmU0NTE5NTNkZGM1ODBkNmUuLmU2ZmM0MzEyNzAwNDk2MGViOWZmZWNj
NmMxMmQ4OWI3NWViZDUzMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KQEAgLTYyLDYgKzYyLDEyIEBAIC0gKHZv
aWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3QgY29tcGxldGlv
bkhhbmRsZXI6KHZvaWQoXikoCiAgICAgfV07CiB9CiAKKy0gKHZvaWQpX2ZvY3VzVGV4dElucHV0
Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAqKWNvbnRleHQgcGxhY2VDYXJldEF0OihDR1Bv
aW50KXBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKFVJUmVzcG9uZGVyPFVJVGV4dElu
cHV0PiAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gYWRqdXN0ZWRQb2ludCA9IFtz
ZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsKKyAgICBb
X2NvbnRlbnRWaWV3IF9mb2N1c1RleHRJbnB1dENvbnRleHQ6Y29udGV4dCBwbGFjZUNhcmV0QXQ6
YWRqdXN0ZWRQb2ludCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07Cit9CisK
IC0gKHZvaWQpX3JlcXVlc3REb2N1bWVudENvbnRleHQ6KFVJV0tEb2N1bWVudFJlcXVlc3QgKily
ZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLRG9jdW1lbnRDb250ZXh0ICop
KWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgW19jb250ZW50VmlldyByZXF1ZXN0RG9jdW1lbnRD
b250ZXh0OnJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzMGE4YWJhMjRmZTg4YzEzN2U1
MGUwY2MyYjQ1ZTQwNGZjNGQzY2VmLi5hNDMyYWU5ZTZkNTY5MjNjZGFiNDE2NzEzZWE1NGE0MGUz
OWU5ZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNzA2LDYg
KzcwNiw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAg
ICB2b2lkIGZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgV2ViQ29yZTo6
RWxlbWVudENvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOworCiAgICAgdm9pZCBzZXRTaG91bGRSZXZlYWxDdXJyZW50U2Vs
ZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCk7CiAKICAgICB2b2lkIGluc2VydFRleHRQbGFjZWhv
bGRlcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25z
dCBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4mKT4mJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKaW5k
ZXggNzgwY2I5NDZhYzA4ZWVhMmFiYzJlMDBjMTkxOTZjMWZiMDhmMDg0ZC4uZmIyZTBkMGVlZWVm
ZjA2YmFiMGZjOWNkNjUyMTBkZDk3NDI0ZmJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtNTY5LDcgKzU2
OSw4IEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XS0NP
TlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJRVcpCiAtIChXS0RyYXdpbmdDb29yZGluYXRvciAq
KV9kcmF3aW5nQ29vcmRpbmF0b3I7CiAjZW5kaWYKIAotLSAodm9pZClfcmVxdWVzdFRleHRJbnB1
dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShO
U0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2
b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0IGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKikpY29t
cGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJ
bnB1dENvbnRleHQgKiljb250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludCBjb21wbGV0
aW9uSGFuZGxlcjoodm9pZCAoXikoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopKWNvbXBsZXRp
b25IYW5kbGVyOwogCiAjaWYgVVNFKFRFWFRfSU5URVJBQ1RJT05fQURESVRJT05TKQogLSAodm9p
ZClfd2lsbEJlZ2luVGV4dEludGVyYWN0aW9uSW5UZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0SW5w
dXRDb250ZXh0ICopY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGMyY2JlZWE2Y2I2NDg0Yzlh
ZGE4ZjI2MTI3MzBmZTRiZmMxMDUyMjYuLjFkZmU5NmVlMjU4MmNiZDJkZmUwNTU2ZTRkNTVkMDBh
OWQxMDhhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNTA4Miw3ICs1MDgyLDM5IEBAIC0gKENHUmVj
dClyZWN0Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAgICAgcmV0dXJuIENHUmVjdFplcm87CiB9
CiAKLS0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3Qg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+
ICopKWNvbXBsZXRpb25IYW5kbGVyCistIChCT09MKV9pc1RleHRJbnB1dENvbnRleHRGb2N1c2Vk
OihfV0tUZXh0SW5wdXRDb250ZXh0ICopY29udGV4dAoreworICAgIC8vIFdlIGlnbm9yZSBib3Vu
ZGluZyByZWN0IGNoYW5nZXMgYXMgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxl
bWVudCBpcyBub3Qga2VwdCB1cC10by1kYXRlLgorICAgIHJldHVybiBzZWxmLl9oYXNGb2N1c2Vk
RWxlbWVudCAmJiBjb250ZXh0ICYmIGNvbnRleHQuX3RleHRJbnB1dENvbnRleHQuaXNTYW1lRWxl
bWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50Q29udGV4dCk7Cit9CisKKy0g
KHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAqKWNvbnRl
eHQgcGxhY2VDYXJldEF0OihDR1BvaW50KXBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkIChe
KShVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKikpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBB
U1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFbc2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoW3NlbGYgX2lzVGV4dElucHV0Q29udGV4dEZvY3VzZWQ6Y29udGV4dF0pIHsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24uaXNSZWFk
T25seSA/IG5pbCA6IHNlbGYpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIF91c2luZ0dl
c3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7CisgICAgYXV0byBjaGVja0ZvY3VzZWRFbGVtZW50ID0g
W3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4geyBzZWxmIH0sIGNvbnRleHQg
PSBbY29udGV4dCBjb3B5XSwgY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGF1dG8gc3Ryb25nU2VsZiA9
IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoc3Ryb25nU2VsZikKKyAgICAgICAgICAgIHN0
cm9uZ1NlbGYtPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKKyAgICAgICAgaWYgKCFz
dHJvbmdTZWxmIHx8ICFzdWNjZXNzKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihu
aWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJvb2wgZm9jdXNl
ZEFuZEVkaXRhYmxlID0gW3N0cm9uZ1NlbGYgX2lzVGV4dElucHV0Q29udGV4dEZvY3VzZWQ6Y29u
dGV4dF0gJiYgIXN0cm9uZ1NlbGYtPl9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzUmVhZE9u
bHk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZvY3VzZWRBbmRFZGl0YWJsZSA/IHN0cm9u
Z1NlbGYuYXV0b3JlbGVhc2UoKSA6IG5pbCk7CisgICAgfTsKKyAgICBfcGFnZS0+Zm9jdXNUZXh0
SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldChjb250ZXh0Ll90ZXh0SW5wdXRDb250ZXh0LCBXZWJD
b3JlOjpJbnRQb2ludCB7IHBvaW50IH0sIFdURk1vdmUoY2hlY2tGb2N1c2VkRWxlbWVudCkpOwor
fQorCistICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQg
Kj4gKikpY29tcGxldGlvbkhhbmRsZXIKIHsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQog
ICAgIGlmICghc2VsZi53ZWJWaWV3Ll9lZGl0YWJsZSAmJiAhV2ViS2l0OjptYXlDb250YWluRWRp
dGFibGVFbGVtZW50c0luUmVjdChzZWxmLCByZWN0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggNWZjMWY3MmYxODQ1NmQ3MGNhZDdh
ZTE3NjcyMDdkODI1Nzk2NzExYS4uMzUyZTc1OGE2OTgxNjAxM2MwNGVlMjU1ZmNlMzQ1NTIzODRi
NmJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCkBAIC0xNTM5LDYgKzE1MzksMTUgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnNob3VsZEZvcmNl
Rm9yZWdyb3VuZFByaW9yaXR5Rm9yQ2xpZW50TmF2aWdhdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
IHBhZ2VDbGllbnQoKS5pc0FwcGxpY2F0aW9uVmlzaWJsZSgpOwogfQogCit2b2lkIFdlYlBhZ2VQ
cm94eTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldChjb25zdCBFbGVtZW50Q29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFzUnVubmluZ1By
b2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6
OkZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29udGV4dCwgcG9pbnQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRTaG91
bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCBzaG91bGRSZXZlYWxD
dXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZDBlZDljMDA3OWZlNWE4NGZlYzFlZjE0NmY5OGY2
OWIyZjVlYmJjNy4uYTZkZTg1MzNlMGFhNjY3MDkxZjkwNmQwYWZlZWQzOGY0MTgzZjJkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjQyLDYgKzY0
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhblNob3dQbGFjZWhvbGRlcihjb25zdCBXZWJD
b3JlOjpFbGVtZW50Q29udGV4dCYsIGJvb2wpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICB2b2lkIGZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgV2ViQ29y
ZTo6RWxlbWVudENvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpOworCiAgICAgYm9vbCBzaG91bGRSZXZlYWxDdXJyZW50U2Vs
ZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJldmVhbEN1cnJl
bnRTZWxlY3Rpb25BZnRlckluc2VydGlvbjsgfQogICAgIHZvaWQgc2V0U2hvdWxkUmV2ZWFsQ3Vy
cmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKGJvb2wpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAwNzZjMWZh
ZjJlNDRjMGM3N2I5NDliZTllYjc5M2QyNmIzNWEwZjYyLi5mZWM5NGJhYTVkNGRjZGNkZjg5MWFk
OTQ3OWMwNjUzYWU1NGI0YWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTEyMSw2ICsxMjEsNyBAQCBHZW5lcmF0
ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWludDhfdCBXZWJLaXQ6OlN5bnRoZXRpY0Vk
aXRpbmdDb21tYW5kVHlwZQogICAgIFNldFNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRl
ckluc2VydGlvbihib29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlv
bikKICAgICBJbnNlcnRUZXh0UGxhY2Vob2xkZXIoV2ViQ29yZTo6SW50U2l6ZSBzaXplKSAtPiAo
T3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IHBsYWNlaG9sZGVyKSBBc3luYwogICAg
IFJlbW92ZVRleHRQbGFjZWhvbGRlcihzdHJ1Y3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgcGxh
Y2Vob2xkZXIpIC0+ICgpIEFzeW5jCisgICAgRm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VD
YXJldChzdHJ1Y3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgY29udGV4dCwgV2ViQ29yZTo6SW50
UG9pbnQgcG9pbnQpIC0+IChib29sIHN1Y2Nlc3MpIEFzeW5jCiAjZW5kaWYKIAogICAgIFNldENv
bnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBiMGVlNWVhZjMw
MmYxOGNjNDQ2MzRkZTM3ZTczZWJmMmM0NjcyMGRmLi44OTYwNWJiNWJjZWYyNzM4MmNjZGRmMTIx
ZTY5YzMwMzRkNDM3MjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTI5LDYgKzEyOSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UGxhY2Vob2xkZXJFbGVt
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VzZXJBZ2VudC5oPgorI2ltcG9ydCA8V2ViQ29yZS9V
c2VyR2VzdHVyZUluZGljYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4KICNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+
CkBAIC00Mjg1LDYgKzQyODYsMzQgQEAgdm9pZCBXZWJQYWdlOjpzZXRTaG91bGRSZXZlYWxDdXJy
ZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCBzaG91bGRSZXZlYWxDdXIKICAgICBzY2hl
ZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogfQogCit2b2lkIFdlYlBhZ2U6OmZvY3VzVGV4
dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVsZW1lbnRD
b250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRhcmdldCA9
IGVsZW1lbnRGb3JDb250ZXh0KGVsZW1lbnRDb250ZXh0KTsKKyAgICBpZiAoIXRhcmdldCB8fCAh
dGFyZ2V0LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCh0YXJnZXQtPmRvY3VtZW50KCku
ZnJhbWUoKSk7CisgICAgUmVmPEZyYW1lPiB0YXJnZXRGcmFtZSA9ICp0YXJnZXQtPmRvY3VtZW50
KCkuZnJhbWUoKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9yIHsg
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmdGFyZ2V0LT5kb2N1bWVudCgpIH07CisgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gdXNlcklzSW50ZXJhY3RpbmdDaGFuZ2UgeyBtX3VzZXJJc0ludGVyYWN0aW5n
LCB0cnVlIH07CisKKyAgICBib29sIGRpZEZvY3VzID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKTsKKworICAgIC8v
IFNldHRpbmcgdGhlIGZvY3VzZWQgZWxlbWVudCBjb3VsZCB0ZWFyIGRvd24gdGhlIGVsZW1lbnQn
cyByZW5kZXJlci4gQ2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIG9uZS4KKyAgICBpZiAoIWRpZEZv
Y3VzIHx8ICF0YXJnZXQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChtX2ZvY3VzZWRFbGVt
ZW50ID09IHRhcmdldCk7CisgICAgLy8gVGhlIGZ1bmN0aW9uIHZpc2libGVQb3NpdGlvbkluRm9j
dXNlZE5vZGVGb3JQb2ludCBjb25zdHJhaW5zIHRoZSBwb2ludCB0byBiZSBpbnNpZGUKKyAgICAv
LyB0aGUgYm91bmRzIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4KKyAgICBWaXNpYmxlUG9zaXRpb24g
cG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQodGFyZ2V0RnJh
bWUsIHBvaW50LCB0cnVlIC8qIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQgKi8pOwor
ICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVh
dGUoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBw
b3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VU
eXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7
Cit9CisKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EaWRTY2FsZVBhZ2UoKQogewogICAgIGF1dG8g
dHJhbnNhY3Rpb25JRCA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPigqbV9k
cmF3aW5nQXJlYSkubGFzdENvbW1pdHRlZFRyYW5zYWN0aW9uSUQoKTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMjAyNGZiOGI0ZWY3NGMwNmVh
YzE0NWJkYmM1YzNiN2YzNzc2ZWExLi5iNzZiMDE4NTVjYTA3OGVhMmJkMjE3Y2EyNTcyNjhjYTI4
NjhlODEyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMTYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBw
bGUuY29tPgorCisgICAgICAgIFtpT1NdIEFkZCBhIHdheSB0byBmb2N1cyBhIHRleHQgaW5wdXQg
YW5kIHBsYWNlIGEgY2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxMDYxMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjE4OTMwNjI+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNvbWUgdGVz
dHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlcXVlc3RU
ZXh0SW5wdXRDb250ZXh0Lm1tOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IHN5bmNocm9ub3Vz
bHlGb2N1c1RleHRJbnB1dENvbnRleHQ6cGxhY2VDYXJldEF0Ol0pOiBBZGRlZC4KKyAgICAgICAg
KHdlYlZpZXdMb2FkSFRNTFN0cmluZ0FuZFdhaXRGb3JBbGxGcmFtZXNUb1BhaW50KTogVXNlIHRo
ZSBidW5kbGUncyBUZXN0V2ViS2l0QVBJLnJlc291cmNlcyBkaXJlY3RvcnkKKyAgICAgICAgYXMg
dGhlIGJhc2UgVVJMIHNvIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGZpbGUgVVJMLiBTb21lIG9mIHRo
ZSB0ZXN0cyB3aWxsIHRoZW4KKyAgICAgICAgY2FsbCAtX3NldEFsbG93VW5pdmVyc2FsQWNjZXNz
RnJvbUZpbGVVUkxzIHRvIGFsbG93IHRoZSBtYWluIGZyYW1lIGFjY2VzcyB0bworICAgICAgICB0
aGUgdW5pcXVlLW9yaWdpbiBjaGlsZCBmcmFtZSBjb250ZW50cy4KKyAgICAgICAgKFRFU1QpOgor
CiAyMDIwLTA0LTE1ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSRUdSRVNTSU9OIChyMjU5NzYyKTogU2hvdWxkIGFsd2F5cyBoaXQgdGVzdCBmb3IgZWRpdGFi
bGUgZWxlbWVudHMgaWYgdGhlIFdLV2ViVmlldyBpcyBmdWxseSBlZGl0YWJsZQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXF1ZXN0VGV4dElucHV0
Q29udGV4dC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVxdWVz
dFRleHRJbnB1dENvbnRleHQubW0KaW5kZXggMDhmNzkxZDUxODJjYTNlMGY5Zjk2Mzk1YjQ4YmRi
MDJkNmZkMTRiNC4uZDZkYTI2ZGJjZTFhMjEyODhmYTVhZjkyNmJlODk1NThjMzg0ZjMzMCAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXF1ZXN0VGV4
dElucHV0Q29udGV4dC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1JlcXVlc3RUZXh0SW5wdXRDb250ZXh0Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAjaW1wb3J0
ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCiAj
aW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbXBvcnQgPFdlYktp
dC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dElucHV0Q29u
dGV4dC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtNjIsNiArNjMsMTggQEAgLSAo
Qk9PTClzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0SW5wdXRDb250
ZXh0ICopY29udGV4dAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCistIChVSVJlc3BvbmRlcjxV
SVRleHRJbnB1dD4gKilzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0
SW5wdXRDb250ZXh0ICopY29udGV4dCBwbGFjZUNhcmV0QXQ6KENHUG9pbnQpcG9pbnQKK3sKKyAg
ICBfX2Jsb2NrIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFVJUmVzcG9uZGVy
PFVJVGV4dElucHV0PiAqcmVzcG9uZGVyID0gbmlsOworICAgIFtzZWxmIF9mb2N1c1RleHRJbnB1
dENvbnRleHQ6Y29udGV4dCBwbGFjZUNhcmV0QXQ6cG9pbnQgY29tcGxldGlvbkhhbmRsZXI6XihV
SVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKnRleHRJbnB1dFJlc3BvbmRlcikgeworICAgICAgICBy
ZXNwb25kZXIgPSB0ZXh0SW5wdXRSZXNwb25kZXI7CisgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsK
KyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsKKyAgICBy
ZXR1cm4gcmVzcG9uZGVyOworfQorCiBAZW5kCiAKIHN0YXRpYyBOU1N0cmluZyAqYXBwbHlTdHls
ZShOU1N0cmluZyAqSFRNTFN0cmluZykKQEAgLTE1Nyw3ICsxNzAsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJWaWV3TG9hZEhUTUxTdHJpbmdBbmRXYWl0Rm9yQWxsRnJhbWVzVG9QYWludChUZXN0V0tXZWJW
aWV3ICp3ZWJWaQogICAgIEFTU0VSVCh3ZWJWaWV3KTsgLy8gTWFrZSBwYXNzaW5nIGEgbmlsIHdl
YiB2aWV3IGEgbW9yZSBvYnZpb3VzIGZhaWx1cmUgdGhhbiBhIGhhbmcuCiAgICAgYm9vbCBkaWRG
aXJlRE9NTG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVyTG9hZGlu
ZzpbJl0geyBkaWRGaXJlRE9NTG9hZEV2ZW50ID0gdHJ1ZTsgfV07Ci0gICAgW3dlYlZpZXcgbG9h
ZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOm5pbF07CisgICAgW3dlYlZpZXcgbG9hZEhU
TUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOltOU0J1bmRsZS5tYWluQnVuZGxlLmJ1bmRsZVVS
TCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJd
XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpcmVET01Mb2FkRXZlbnQpOwog
ICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKIH0KQEAgLTI3NCw0
ICsyODcsMTM2IEBAIFRFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRleHQsIERJU0FCTEVEX0ZvY3Vz
VGV4dElucHV0Q29udGV4dCkKICAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgc3luY2hyb25vdXNs
eUZvY3VzVGV4dElucHV0Q29udGV4dDp0ZXh0QXJlYS5nZXQoKV0pOwogfQogCitURVNUKFJlcXVl
c3RUZXh0SW5wdXRDb250ZXh0LCBSZWFkT25seUZpZWxkKQoreworICAgIGF1dG8gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uLmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6
YXBwbHlTdHlsZShAIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naGVsbG8gd29ybGQnIHN0eWxl
PSd3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsnIHJlYWRvbmx5PiIpXTsKKyAgICBFWFBFQ1Rf
RVEoMFVMLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5S
ZWN0Olt3ZWJWaWV3IGJvdW5kc11dLmNvdW50KTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElucHV0
Q29udGV4dCwgRGlzYWJsZWRGaWVsZCkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFwcGx5U3R5bGUo
QCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J2hlbGxvIHdvcmxkJyBzdHlsZT0nd2lkdGg6IDEw
MHB4OyBoZWlnaHQ6IDUwcHg7JyBkaXNhYmxlZD4iKV07CisgICAgRVhQRUNUX0VRKDBVTCwgW3dl
YlZpZXcgc3luY2hyb25vdXNseVJlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDpbd2ViVmll
dyBib3VuZHNdXS5jb3VudCk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRleHQsIEZv
Y3VzRmllbGRBbmRQbGFjZUNhcmV0QXRTdGFydCkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFwcGx5
U3R5bGUoQCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J2hlbGxvIHdvcmxkJyBzdHlsZT0nd2lk
dGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4iKV07CisgICAgTlNBcnJheTxfV0tUZXh0SW5wdXRD
b250ZXh0ICo+ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0VGV4dElu
cHV0Q29udGV4dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQRUNUX0VRKDFVTCwg
Y29udGV4dHMuY291bnQpOworICAgIFJldGFpblB0cjxfV0tUZXh0SW5wdXRDb250ZXh0PiBpbnB1
dEVsZW1lbnQgPSBjb250ZXh0c1swXTsKKworICAgIEVYUEVDVF9FUSgoVUlSZXNwb25kZXI8VUlU
ZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmlldyBzeW5j
aHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmlucHV0RWxlbWVudC5nZXQoKSBwbGFjZUNh
cmV0QXQ6W2lucHV0RWxlbWVudCBib3VuZGluZ1JlY3RdLm9yaWdpbl0pOworICAgIEVYUEVDVF9X
S19TVFJFUSgiSU5QVVQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9FUSgwLCBbW3dl
YlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOworICAgIEVYUEVDVF9FUSgwLCBbW3dlYlZp
ZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
c2VsZWN0aW9uRW5kIl0gaW50VmFsdWVdKTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElucHV0Q29u
dGV4dCwgRm9jdXNGaWVsZEFuZFBsYWNlQ2FyZXRBdEVuZCkKK3sKKyAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOworCisgICAgY29uc3RleHByIGNoYXIgZXhhbXBsZVRleHRbXSA9ICJoZWxs
byB3b3JsZCI7CisgICAgY29uc3RleHByIHNpemVfdCBleGFtcGxlVGV4dExlbmd0aCA9IHNpemVv
ZihleGFtcGxlVGV4dCkgLSAxOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0
cmluZzphcHBseVN0eWxlKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGlucHV0IHR5cGU9
J3RleHQnIHZhbHVlPSclcycgc3R5bGU9J3dpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4Oyc+Iiwg
ZXhhbXBsZVRleHRdKV07CisgICAgTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICpjb250
ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJl
Y3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQRUNUX0VRKDFVTCwgY29udGV4dHMuY291bnQp
OworICAgIFJldGFpblB0cjxfV0tUZXh0SW5wdXRDb250ZXh0PiBpbnB1dEVsZW1lbnQgPSBjb250
ZXh0c1swXTsKKworICAgIENHUmVjdCBib3VuZGluZ1JlY3QgPSBbaW5wdXRFbGVtZW50IGJvdW5k
aW5nUmVjdF07CisgICAgQ0dQb2ludCBlbmRQb3NpdGlvbiA9IENHUG9pbnRNYWtlKGJvdW5kaW5n
UmVjdC5vcmlnaW4ueCArIGJvdW5kaW5nUmVjdC5zaXplLndpZHRoLCBib3VuZGluZ1JlY3Qub3Jp
Z2luLnkgKyBib3VuZGluZ1JlY3Quc2l6ZS5oZWlnaHQgLyAyKTsKKyAgICBFWFBFQ1RfRVEoKFVJ
UmVzcG9uZGVyPFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XSwg
W3dlYlZpZXcgc3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDppbnB1dEVsZW1lbnQu
Z2V0KCkgcGxhY2VDYXJldEF0OmVuZFBvc2l0aW9uXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJJ
TlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5h
Y3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4o
ZXhhbXBsZVRleHRMZW5ndGgpLCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOwor
ICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KGV4YW1wbGVUZXh0TGVuZ3RoKSwgW1t3ZWJW
aWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50
LnNlbGVjdGlvbkVuZCJdIGludFZhbHVlXSk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJbnB1dENv
bnRleHQsIEZvY3VzRmllbGRBbmRQbGFjZUNhcmV0T3V0c2lkZUZpZWxkKQoreworICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpj
b25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBjb25zdGV4cHIgY2hhciBleGFtcGxlVGV4dFtd
ID0gImhlbGxvIHdvcmxkIjsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmc6YXBwbHlTdHlsZShbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjxpbnB1dCB0eXBlPSd0
ZXh0JyB2YWx1ZT0nJXMnIHN0eWxlPSd3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsnPiIsIGV4
YW1wbGVUZXh0XSldOworICAgIE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqY29udGV4
dHMgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0
Olt3ZWJWaWV3IGJvdW5kc11dOworICAgIEVYUEVDVF9FUSgxVUwsIGNvbnRleHRzLmNvdW50KTsK
KyAgICBSZXRhaW5QdHI8X1dLVGV4dElucHV0Q29udGV4dD4gaW5wdXRFbGVtZW50ID0gY29udGV4
dHNbMF07CisKKyAgICBhdXRvIHJlc2V0VGVzdCA9IFsmXSB7CisgICAgICAgIFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIo
KSJdOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIkJPRFkiLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOwor
ICAgIH07CisKKyAgICAvLyBQb2ludCBiZWZvcmUgdGhlIGZpZWxkCisgICAgRVhQRUNUX0VRKChV
SVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKilbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld10s
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6aW5wdXRFbGVtZW50
LmdldCgpIHBsYWNlQ2FyZXRBdDpDR1BvaW50TWFrZSgtMTAwMCwgLTUwMCldKTsKKyAgICBFWFBF
Q1RfV0tfU1RSRVEoIklOUFVUIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfRVEoMCwg
W1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVF
bGVtZW50LnNlbGVjdGlvblN0YXJ0Il0gaW50VmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEoMCwgW1t3
ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVt
ZW50LnNlbGVjdGlvbkVuZCJdIGludFZhbHVlXSk7CisgICAgcmVzZXRUZXN0KCk7CisKKyAgICAv
LyBQb2ludCBhZnRlciB0aGUgZmllbGQKKyAgICBFWFBFQ1RfRVEoKFVJUmVzcG9uZGVyPFVJVGV4
dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XSwgW3dlYlZpZXcgc3luY2hy
b25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDppbnB1dEVsZW1lbnQuZ2V0KCkgcGxhY2VDYXJl
dEF0OkNHUG9pbnRNYWtlKDEwMDAsIDUwMCldKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklOUFVU
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfRVEoMTEsIFtbd2ViVmlldyBvYmplY3RC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zZWxlY3Rpb25T
dGFydCJdIGludFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKDExLCBbW3dlYlZpZXcgb2JqZWN0QnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5k
Il0gaW50VmFsdWVdKTsKKyAgICByZXNldFRlc3QoKTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElu
cHV0Q29udGV4dCwgRm9jdXNGaWVsZEluRnJhbWUpCit7CisgICAgYXV0byBjb25maWd1cmF0aW9u
ID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBb
Y29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6WUVTXTsK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKworICAgIGF1dG8gdGVzdFBhZ2UgPSBhcHBseVN0eWxlKFtOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdtYWluRnJhbWVG
aWVsZCcgc3R5bGU9J3dpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4Oyc+JUAiLCBhcHBseUlmcmFt
ZShAIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naWZyYW1lRmllbGQnIHN0eWxlPSd3aWR0aDog
MTIwcHg7IGhlaWdodDogNzBweDsnPiIpXSk7CisgICAgd2ViVmlld0xvYWRIVE1MU3RyaW5nQW5k
V2FpdEZvckFsbEZyYW1lc1RvUGFpbnQod2ViVmlldy5nZXQoKSwgdGVzdFBhZ2UpOworICAgIE5T
QXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqY29udGV4dHMgPSBbd2ViVmlldyBzeW5jaHJv
bm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0Olt3ZWJWaWV3IGJvdW5kc11dOwor
ICAgIEVYUEVDVF9FUSgyVUwsIGNvbnRleHRzLmNvdW50KTsKKyAgICBSZXRhaW5QdHI8X1dLVGV4
dElucHV0Q29udGV4dD4gZnJhbWVCRmllbGQgPSBjb250ZXh0c1swXTsKKworICAgIEVYUEVDVF9F
USgoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZp
ZXddLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmZyYW1lQkZp
ZWxkLmdldCgpIHBsYWNlQ2FyZXRBdDpbZnJhbWVCRmllbGQgYm91bmRpbmdSZWN0XS5vcmlnaW5d
KTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklGUkFNRSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAg
RVhQRUNUX1dLX1NUUkVRKCJJTlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFT
Y3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQu
YWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaWZyYW1lRmll
bGQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVl
cnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQudmFsdWUi
XSk7CisgICAgRVhQRUNUX0VRKDAsIFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50LmFj
dGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOworICAgIEVYUEVDVF9FUSgw
LCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnNlbGVjdGlv
bkVuZCJdIGludFZhbHVlXSk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRleHQsIFN3
aXRjaEZvY3VzQmV0d2VlbkZyYW1lcykKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1
cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOworCisgICAgYXV0byB0ZXN0UGFnZSA9IGFwcGx5U3R5bGUoW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J21haW5GcmFtZUZpZWxkJyBz
dHlsZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4lQCIsIGFwcGx5SWZyYW1lKEAiPGlu
cHV0IHR5cGU9J3RleHQnIHZhbHVlPSdpZnJhbWVGaWVsZCcgc3R5bGU9J3dpZHRoOiAxMDBweDsg
aGVpZ2h0OiA1MHB4Oyc+IildKTsKKyAgICB3ZWJWaWV3TG9hZEhUTUxTdHJpbmdBbmRXYWl0Rm9y
QWxsRnJhbWVzVG9QYWludCh3ZWJWaWV3LmdldCgpLCB0ZXN0UGFnZSk7CisgICAgTlNBcnJheTxf
V0tUZXh0SW5wdXRDb250ZXh0ICo+ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlS
ZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQ
RUNUX0VRKDJVTCwgY29udGV4dHMuY291bnQpOworICAgIC8vIE5vdGUgdGhhdCByZXR1cm5lZCBj
b250ZXh0cyBhcmUgaW4gaGl0LXRlc3Qgb3JkZXIuCisgICAgUmV0YWluUHRyPF9XS1RleHRJbnB1
dENvbnRleHQ+IGZyYW1lQUZpZWxkID0gY29udGV4dHNbMV07CisgICAgUmV0YWluUHRyPF9XS1Rl
eHRJbnB1dENvbnRleHQ+IGZyYW1lQkZpZWxkID0gY29udGV4dHNbMF07CisKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIkJPRFkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAi
ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgi
Qk9EWSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdO
YW1lIl0pOworICAgIEVYUEVDVF9FUSgoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZp
ZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0
SW5wdXRDb250ZXh0OmZyYW1lQUZpZWxkLmdldCgpIHBsYWNlQ2FyZXRBdDpbZnJhbWVBRmllbGQg
Ym91bmRpbmdSZWN0XS5vcmlnaW5dKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklOUFVUIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIm1haW5GcmFtZUZpZWxkIiwgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1l
bnQudmFsdWUiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJCT0RZIiwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScp
LmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisKKyAgICBFWFBFQ1Rf
RVEoKFVJUmVzcG9uZGVyPFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRW
aWV3XSwgW3dlYlZpZXcgc3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDpmcmFtZUJG
aWVsZC5nZXQoKSBwbGFjZUNhcmV0QXQ6W2ZyYW1lQkZpZWxkIGJvdW5kaW5nUmVjdF0ub3JpZ2lu
XSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJJRlJBTUUiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAg
IEVYUEVDVF9XS19TVFJFUSgiSU5QVVQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZh
U2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50
LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImlmcmFtZUZp
ZWxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnZhbHVl
Il0pOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396673</attachid>
            <date>2020-04-16 11:05:51 -0700</date>
            <delta_ts>2020-04-16 12:18:59 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-210611-20200416110550.patch</filename>
            <type>text/plain</type>
            <size>27009</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkODQ3NDIwNmRkZmU1M2Zi
YjU3MGZlMTdkN2E4ZmMyOTVmY2IzYzQuLjRlZjhmZWUzNWJmOWZmYjM0MzhmNjczMDVmMWJkNmRh
NWY1NWIwYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMjAtMDQtMTYgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEFkZCBhIHdheSB0byBm
b2N1cyBhIHRleHQgaW5wdXQgYW5kIHBsYWNlIGEgY2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDYxMQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjE4OTMwNjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgSVBJIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGNvZGUgaW4gV2ViS2l0QWRk
aXRpb25zIHRvIGZvY3VzIGEgdGV4dCBpbnB1dCBjb250ZXh0CisgICAgICAgIGFuZCBwbGFjZSB0
aGUgY2FyZXQgaW4gaXQuIFRoaXMgd2lsbCByZXBsYWNlIHRoZSBleGlzdGluZyAtZm9jdXNUZXh0
SW5wdXQgU1BJLCB3aGljaCBJCisgICAgICAgIHdpbGwgcmVtb3ZlIGluIGEgc3Vic2VxdWVudCBj
b21taXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRlRm9y
VGVzdGluZ0lPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3Rp
bmdJT1MubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdFRleHRJbnB1dENvbnRleHRz
SW5SZWN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBGaXggdXAgY29kZSBzdHlsZQorICAgICAgICBv
ZiBzaWduYXR1cmUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZvY3Vz
VGV4dElucHV0Q29udGV4dDpwbGFjZUNhcmV0QXQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9pc1RleHRJbnB1dENvbnRleHRGb2N1c2VkOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBfZm9jdXNUZXh0SW5wdXRDb250ZXh0OnBsYWNlQ2FyZXRBdDpjb21wbGV0aW9uSGFu
ZGxlcjpdKTogQWRkZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlcXVlc3RUZXh0SW5w
dXRDb250ZXh0c0luUmVjdDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRml4IHVwIGNvZGUgc3R5bGUK
KyAgICAgICAgb2Ygc2lnbmF0dXJlIHdoaWxlIEkgYW0gaGVyZS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
Ojpmb2N1c1RleHRJbnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KTogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZvY3VzVGV4dElucHV0
Q29udGV4dEFuZFBsYWNlQ2FyZXQpOiBBZGRlZC4KKwogMjAyMC0wNC0xNSAgRGFuaWVsIEJhdGVz
ICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI1OTc2Mik6IFNo
b3VsZCBhbHdheXMgaGl0IHRlc3QgZm9yIGVkaXRhYmxlIGVsZW1lbnRzIGlmIHRoZSBXS1dlYlZp
ZXcgaXMgZnVsbHkgZWRpdGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9pb3MvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3UHJpdmF0ZUZvclRlc3RpbmdJT1MuaAppbmRleCBm
MjVlZjczNzYwMTc2N2MwMGRlODdhYjZmMzg4ODc3ZTBiOTU3M2FjLi4xZmVmODI4M2Q3N2QxYmQ0
NGQ3MTkwODgxMzE2Yzk5NWE5YWIyYmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGluZ0lPUy5o
CkBAIC00OSw3ICs0OSw4IEBACiAtICh2b2lkKXNlbGVjdEZvcm1BY2Nlc3NvcnlQaWNrZXJSb3c6
KGludClyb3dJbmRleDsKIAogLSAoQk9PTClfbWF5Q29udGFpbkVkaXRhYmxlRWxlbWVudHNJblJl
Y3Q6KENHUmVjdClyZWN0OwotLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0
OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9XS1RleHRJ
bnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9yZXF1ZXN0VGV4
dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXI7
CistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKilj
b250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCAoXikoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopKWNvbXBsZXRpb25IYW5kbGVyOwogLSAo
dm9pZClfcmVxdWVzdERvY3VtZW50Q29udGV4dDooVUlXS0RvY3VtZW50UmVxdWVzdCAqKXJlcXVl
c3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJV0tEb2N1bWVudENvbnRleHQgKikpY29t
cGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKV9hZGp1c3RTZWxlY3Rpb25XaXRoRGVsdGE6KE5TUmFu
Z2UpZGVsdGFSYW5nZSBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlv
bkhhbmRsZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3VGVzdGluZ0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3Mv
V0tXZWJWaWV3VGVzdGluZ0lPUy5tbQppbmRleCBkNWUwNTA4OTcxOGYwM2ZjMDhmNWFmODJlNDUx
OTUzZGRjNTgwZDZlLi4yZTlhMWI1ZjljZDIxZmZkNDkwZWJlYTJhMDM1OGU2NmNkOGUwNjlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3Rp
bmdJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdU
ZXN0aW5nSU9TLm1tCkBAIC00Miw3ICs0Miw3IEBACiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXcgKFdLVGVzdGluZ0lPUykKIAotLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5S
ZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShOU0FycmF5PF9XS1Rl
eHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKHZvaWQpX3JlcXVlc3RU
ZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3QgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFuZGxl
cgogewogICAgIC8vIEFkanVzdCByZXR1cm5lZCBib3VuZGluZyByZWN0cyB0byBiZSBpbiBXS1dl
YlZpZXcgY29vcmRpbmF0ZXMuCiAgICAgYXV0byBhZGp1c3RlZFJlY3QgPSBbc2VsZiBjb252ZXJ0
UmVjdDpyZWN0IHRvVmlldzpfY29udGVudFZpZXcuZ2V0KCldOwpAQCAtNjIsNiArNjIsMTIgQEAg
LSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBjb21w
bGV0aW9uSGFuZGxlcjoodm9pZCheKSgKICAgICB9XTsKIH0KIAorLSAodm9pZClfZm9jdXNUZXh0
SW5wdXRDb250ZXh0OihfV0tUZXh0SW5wdXRDb250ZXh0ICopY29udGV4dCBwbGFjZUNhcmV0QXQ6
KENHUG9pbnQpcG9pbnQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKFVJUmVzcG9uZGVyPFVJ
VGV4dElucHV0PiAqKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIGF1dG8gYWRqdXN0ZWRQb2lu
dCA9IFtzZWxmIGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6X2NvbnRlbnRWaWV3LmdldCgpXTsK
KyAgICBbX2NvbnRlbnRWaWV3IF9mb2N1c1RleHRJbnB1dENvbnRleHQ6Y29udGV4dCBwbGFjZUNh
cmV0QXQ6YWRqdXN0ZWRQb2ludCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07
Cit9CisKIC0gKHZvaWQpX3JlcXVlc3REb2N1bWVudENvbnRleHQ6KFVJV0tEb2N1bWVudFJlcXVl
c3QgKilyZXF1ZXN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVdLRG9jdW1lbnRDb250
ZXh0ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgW19jb250ZW50VmlldyByZXF1ZXN0RG9j
dW1lbnRDb250ZXh0OnJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlvbkhhbmRsZXJd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzMGE4YWJhMjRmZTg4
YzEzN2U1MGUwY2MyYjQ1ZTQwNGZjNGQzY2VmLi5hNDMyYWU5ZTZkNTY5MjNjZGFiNDE2NzEzZWE1
NGE0MGUzOWU5ZWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAt
NzA2LDYgKzcwNiw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICB2b2lkIGZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgV2Vi
Q29yZTo6RWxlbWVudENvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworCiAgICAgdm9pZCBzZXRTaG91bGRSZXZlYWxDdXJy
ZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCk7CiAKICAgICB2b2lkIGluc2VydFRleHRQ
bGFjZWhvbGRlcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4mKT4mJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
LmgKaW5kZXggNzgwY2I5NDZhYzA4ZWVhMmFiYzJlMDBjMTkxOTZjMWZiMDhmMDg0ZC4uZmIyZTBk
MGVlZWVmZjA2YmFiMGZjOWNkNjUyMTBkZDk3NDI0ZmJiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaApAQCAtNTY5
LDcgKzU2OSw4IEBAIEZPUl9FQUNIX1BSSVZBVEVfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFS
RV9XS0NPTlRFTlRWSUVXX0FDVElPTl9GT1JfV0VCX1ZJRVcpCiAtIChXS0RyYXdpbmdDb29yZGlu
YXRvciAqKV9kcmF3aW5nQ29vcmRpbmF0b3I7CiAjZW5kaWYKIAotLSAodm9pZClfcmVxdWVzdFRl
eHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9p
ZCheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXI7
CistICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0IGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4g
KikpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9X
S1RleHRJbnB1dENvbnRleHQgKiljb250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludCBj
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopKWNv
bXBsZXRpb25IYW5kbGVyOwogCiAjaWYgVVNFKFRFWFRfSU5URVJBQ1RJT05fQURESVRJT05TKQog
LSAodm9pZClfd2lsbEJlZ2luVGV4dEludGVyYWN0aW9uSW5UZXh0SW5wdXRDb250ZXh0OihfV0tU
ZXh0SW5wdXRDb250ZXh0ICopY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGMyY2JlZWE2Y2I2
NDg0YzlhZGE4ZjI2MTI3MzBmZTRiZmMxMDUyMjYuLjFkZmU5NmVlMjU4MmNiZDJkZmUwNTU2ZTRk
NTVkMDBhOWQxMDhhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNTA4Miw3ICs1MDgyLDM5IEBAIC0g
KENHUmVjdClyZWN0Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAgICAgcmV0dXJuIENHUmVjdFpl
cm87CiB9CiAKLS0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0
KXJlY3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250
ZXh0ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCistIChCT09MKV9pc1RleHRJbnB1dENvbnRleHRG
b2N1c2VkOihfV0tUZXh0SW5wdXRDb250ZXh0ICopY29udGV4dAoreworICAgIC8vIFdlIGlnbm9y
ZSBib3VuZGluZyByZWN0IGNoYW5nZXMgYXMgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIGZvY3Vz
ZWQgZWxlbWVudCBpcyBub3Qga2VwdCB1cC10by1kYXRlLgorICAgIHJldHVybiBzZWxmLl9oYXNG
b2N1c2VkRWxlbWVudCAmJiBjb250ZXh0ICYmIGNvbnRleHQuX3RleHRJbnB1dENvbnRleHQuaXNT
YW1lRWxlbWVudChfZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5lbGVtZW50Q29udGV4dCk7Cit9
CisKKy0gKHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAq
KWNvbnRleHQgcGxhY2VDYXJldEF0OihDR1BvaW50KXBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKShVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKikpY29tcGxldGlvbkhhbmRsZXIKK3sK
KyAgICBBU1NFUlQoY29udGV4dCk7CisgICAgaWYgKCFbc2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRl
cl0pIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoW3NlbGYgX2lzVGV4dElucHV0Q29udGV4dEZvY3VzZWQ6Y29udGV4dF0p
IHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoX2ZvY3VzZWRFbGVtZW50SW5mb3JtYXRpb24u
aXNSZWFkT25seSA/IG5pbCA6IHNlbGYpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIF91
c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7CisgICAgYXV0byBjaGVja0ZvY3VzZWRFbGVt
ZW50ID0gW3dlYWtTZWxmID0gV2Vha09iakNQdHI8V0tDb250ZW50Vmlldz4geyBzZWxmIH0sIGNv
bnRleHQgPSBbY29udGV4dCBjb3B5XSwgY29tcGxldGlvbkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIo
Y29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCBzdWNjZXNzKSB7CisgICAgICAgIGF1dG8gc3Ryb25n
U2VsZiA9IHdlYWtTZWxmLmdldCgpOworICAgICAgICBpZiAoc3Ryb25nU2VsZikKKyAgICAgICAg
ICAgIHN0cm9uZ1NlbGYtPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKKyAgICAgICAg
aWYgKCFzdHJvbmdTZWxmIHx8ICFzdWNjZXNzKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihuaWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJvb2wg
Zm9jdXNlZEFuZEVkaXRhYmxlID0gW3N0cm9uZ1NlbGYgX2lzVGV4dElucHV0Q29udGV4dEZvY3Vz
ZWQ6Y29udGV4dF0gJiYgIXN0cm9uZ1NlbGYtPl9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlz
UmVhZE9ubHk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZvY3VzZWRBbmRFZGl0YWJsZSA/
IHN0cm9uZ1NlbGYuYXV0b3JlbGVhc2UoKSA6IG5pbCk7CisgICAgfTsKKyAgICBfcGFnZS0+Zm9j
dXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldChjb250ZXh0Ll90ZXh0SW5wdXRDb250ZXh0
LCBXZWJDb3JlOjpJbnRQb2ludCB7IHBvaW50IH0sIFdURk1vdmUoY2hlY2tGb2N1c2VkRWxlbWVu
dCkpOworfQorCistICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVj
dClyZWN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShOU0FycmF5PF9XS1RleHRJbnB1dENv
bnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKIHsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVH
SU9OKQogICAgIGlmICghc2VsZi53ZWJWaWV3Ll9lZGl0YWJsZSAmJiAhV2ViS2l0OjptYXlDb250
YWluRWRpdGFibGVFbGVtZW50c0luUmVjdChzZWxmLCByZWN0KSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KaW5kZXggNWZjMWY3MmYxODQ1NmQ3
MGNhZDdhZTE3NjcyMDdkODI1Nzk2NzExYS4uMzUyZTc1OGE2OTgxNjAxM2MwNGVlMjU1ZmNlMzQ1
NTIzODRiNmJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCkBAIC0xNTM5LDYgKzE1MzksMTUgQEAgYm9vbCBXZWJQYWdlUHJveHk6OnNob3Vs
ZEZvcmNlRm9yZWdyb3VuZFByaW9yaXR5Rm9yQ2xpZW50TmF2aWdhdGlvbigpIGNvbnN0CiAgICAg
cmV0dXJuIHBhZ2VDbGllbnQoKS5pc0FwcGxpY2F0aW9uVmlzaWJsZSgpOwogfQogCit2b2lkIFdl
YlBhZ2VQcm94eTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldChjb25zdCBFbGVt
ZW50Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghaGFzUnVu
bmluZ1Byb2Nlc3MoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YlBhZ2U6OkZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29udGV4dCwgcG9pbnQp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRTaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCBzaG91bGRS
ZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggZDBlZDljMDA3OWZlNWE4NGZlYzFlZjE0
NmY5OGY2OWIyZjVlYmJjNy4uYTZkZTg1MzNlMGFhNjY3MDkxZjkwNmQwYWZlZWQzOGY0MTgzZjJk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNjQy
LDYgKzY0Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhblNob3dQbGFjZWhvbGRlcihjb25z
dCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYsIGJvb2wpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKyAgICB2b2lkIGZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3Qg
V2ViQ29yZTo6RWxlbWVudENvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworCiAgICAgYm9vbCBzaG91bGRSZXZlYWxDdXJy
ZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFJldmVh
bEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbjsgfQogICAgIHZvaWQgc2V0U2hvdWxkUmV2
ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKGJvb2wpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAw
NzZjMWZhZjJlNDRjMGM3N2I5NDliZTllYjc5M2QyNmIzNWEwZjYyLi5mZWM5NGJhYTVkNGRjZGNk
Zjg5MWFkOTQ3OWMwNjUzYWU1NGI0YWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTEyMSw2ICsxMjEsNyBAQCBH
ZW5lcmF0ZVN5bnRoZXRpY0VkaXRpbmdDb21tYW5kKGVudW06dWludDhfdCBXZWJLaXQ6OlN5bnRo
ZXRpY0VkaXRpbmdDb21tYW5kVHlwZQogICAgIFNldFNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rp
b25BZnRlckluc2VydGlvbihib29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlcklu
c2VydGlvbikKICAgICBJbnNlcnRUZXh0UGxhY2Vob2xkZXIoV2ViQ29yZTo6SW50U2l6ZSBzaXpl
KSAtPiAoT3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IHBsYWNlaG9sZGVyKSBBc3lu
YwogICAgIFJlbW92ZVRleHRQbGFjZWhvbGRlcihzdHJ1Y3QgV2ViQ29yZTo6RWxlbWVudENvbnRl
eHQgcGxhY2Vob2xkZXIpIC0+ICgpIEFzeW5jCisgICAgRm9jdXNUZXh0SW5wdXRDb250ZXh0QW5k
UGxhY2VDYXJldChzdHJ1Y3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQgY29udGV4dCwgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQpIC0+IChib29sIHN1Y2Nlc3MpIEFzeW5jCiAjZW5kaWYKIAogICAg
IFNldENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBiMGVl
NWVhZjMwMmYxOGNjNDQ2MzRkZTM3ZTczZWJmMmM0NjcyMGRmLi44OTYwNWJiNWJjZWYyNzM4MmNj
ZGRmMTIxZTY5YzMwMzRkNDM3MjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTI5LDYgKzEyOSw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UGxhY2Vob2xk
ZXJFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1VzZXJBZ2VudC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9Vc2VyR2VzdHVyZUluZGljYXRvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9WaXNpYmxlVW5p
dHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViRXZlbnQuaD4KICNpbXBvcnQgPHd0Zi9NYXRoRXh0
cmFzLmg+CkBAIC00Mjg1LDYgKzQyODYsMzQgQEAgdm9pZCBXZWJQYWdlOjpzZXRTaG91bGRSZXZl
YWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCBzaG91bGRSZXZlYWxDdXIKICAg
ICBzY2hlZHVsZUZ1bGxFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogfQogCit2b2lkIFdlYlBhZ2U6OmZv
Y3VzVGV4dElucHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGVs
ZW1lbnRDb250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRh
cmdldCA9IGVsZW1lbnRGb3JDb250ZXh0KGVsZW1lbnRDb250ZXh0KTsKKyAgICBpZiAoIXRhcmdl
dCB8fCAhdGFyZ2V0LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVCh0YXJnZXQtPmRvY3Vt
ZW50KCkuZnJhbWUoKSk7CisgICAgUmVmPEZyYW1lPiB0YXJnZXRGcmFtZSA9ICp0YXJnZXQtPmRv
Y3VtZW50KCkuZnJhbWUoKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNh
dG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmdGFyZ2V0LT5kb2N1bWVudCgpIH07CisgICAg
U2V0Rm9yU2NvcGU8Ym9vbD4gdXNlcklzSW50ZXJhY3RpbmdDaGFuZ2UgeyBtX3VzZXJJc0ludGVy
YWN0aW5nLCB0cnVlIH07CisKKyAgICBib29sIGRpZEZvY3VzID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5zZXRGb2N1c2VkRWxlbWVudCh0YXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKTsKKwor
ICAgIC8vIFNldHRpbmcgdGhlIGZvY3VzZWQgZWxlbWVudCBjb3VsZCB0ZWFyIGRvd24gdGhlIGVs
ZW1lbnQncyByZW5kZXJlci4gQ2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIG9uZS4KKyAgICBpZiAo
IWRpZEZvY3VzIHx8ICF0YXJnZXQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChtX2ZvY3Vz
ZWRFbGVtZW50ID09IHRhcmdldCk7CisgICAgLy8gVGhlIGZ1bmN0aW9uIHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludCBjb25zdHJhaW5zIHRoZSBwb2ludCB0byBiZSBpbnNpZGUK
KyAgICAvLyB0aGUgYm91bmRzIG9mIHRoZSB0YXJnZXQgZWxlbWVudC4KKyAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQodGFy
Z2V0RnJhbWUsIHBvaW50LCB0cnVlIC8qIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQg
Ki8pOworICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdl
OjpjcmVhdGUoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0
cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIo
dHJ1ZSk7Cit9CisKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EaWRTY2FsZVBhZ2UoKQogewogICAg
IGF1dG8gdHJhbnNhY3Rpb25JRCA9IGRvd25jYXN0PFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
PigqbV9kcmF3aW5nQXJlYSkubGFzdENvbW1pdHRlZFRyYW5zYWN0aW9uSUQoKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBmMjAyNGZiOGI0ZWY3
NGMwNmVhYzE0NWJkYmM1YzNiN2YzNzc2ZWExLi5iNzZiMDE4NTVjYTA3OGVhMmJkMjE3Y2EyNTcy
NjhjYTI4NjhlODEyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDQtMTYgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEFkZCBhIHdheSB0byBmb2N1cyBhIHRleHQg
aW5wdXQgYW5kIHBsYWNlIGEgY2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMDYxMQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjE4OTMwNjI+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHNv
bWUgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
cXVlc3RUZXh0SW5wdXRDb250ZXh0Lm1tOgorICAgICAgICAoLVtUZXN0V0tXZWJWaWV3IHN5bmNo
cm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6cGxhY2VDYXJldEF0Ol0pOiBBZGRlZC4KKyAg
ICAgICAgKHdlYlZpZXdMb2FkSFRNTFN0cmluZ0FuZFdhaXRGb3JBbGxGcmFtZXNUb1BhaW50KTog
VXNlIHRoZSBidW5kbGUncyBUZXN0V2ViS2l0QVBJLnJlc291cmNlcyBkaXJlY3RvcnkKKyAgICAg
ICAgYXMgdGhlIGJhc2UgVVJMIHNvIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIGZpbGUgVVJMLiBTb21l
IG9mIHRoZSB0ZXN0cyB3aWxsIHRoZW4KKyAgICAgICAgY2FsbCAtX3NldEFsbG93VW5pdmVyc2Fs
QWNjZXNzRnJvbUZpbGVVUkxzIHRvIGFsbG93IHRoZSBtYWluIGZyYW1lIGFjY2VzcyB0bworICAg
ICAgICB0aGUgdW5pcXVlLW9yaWdpbiBjaGlsZCBmcmFtZSBjb250ZW50cy4KKyAgICAgICAgKFRF
U1QpOgorCiAyMDIwLTA0LTE1ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OIChyMjU5NzYyKTogU2hvdWxkIGFsd2F5cyBoaXQgdGVzdCBmb3Ig
ZWRpdGFibGUgZWxlbWVudHMgaWYgdGhlIFdLV2ViVmlldyBpcyBmdWxseSBlZGl0YWJsZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXF1ZXN0VGV4
dElucHV0Q29udGV4dC5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
UmVxdWVzdFRleHRJbnB1dENvbnRleHQubW0KaW5kZXggMDhmNzkxZDUxODJjYTNlMGY5Zjk2Mzk1
YjQ4YmRiMDJkNmZkMTRiNC4uZDZkYTI2ZGJjZTFhMjEyODhmYTVhZjkyNmJlODk1NThjMzg0ZjMz
MCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXF1
ZXN0VGV4dElucHV0Q29udGV4dC5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1JlcXVlc3RUZXh0SW5wdXRDb250ZXh0Lm1tCkBAIC0zMiw2ICszMiw3IEBACiAj
aW1wb3J0ICJUZXN0TmF2aWdhdGlvbkRlbGVnYXRlLmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbXBvcnQg
PFdlYktpdC9XS1dlYlZpZXdDb25maWd1cmF0aW9uUHJpdmF0ZS5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLV2ViVmlld1ByaXZhdGVGb3JUZXN0aW5nLmg+CiAjaW1wb3J0IDxXZWJLaXQvX1dLVGV4dElu
cHV0Q29udGV4dC5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtNjIsNiArNjMsMTgg
QEAgLSAoQk9PTClzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OihfV0tUZXh0SW5w
dXRDb250ZXh0ICopY29udGV4dAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCistIChVSVJlc3Bv
bmRlcjxVSVRleHRJbnB1dD4gKilzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0Oihf
V0tUZXh0SW5wdXRDb250ZXh0ICopY29udGV4dCBwbGFjZUNhcmV0QXQ6KENHUG9pbnQpcG9pbnQK
K3sKKyAgICBfX2Jsb2NrIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsKKyAgICBfX2Jsb2NrIFVJUmVz
cG9uZGVyPFVJVGV4dElucHV0PiAqcmVzcG9uZGVyID0gbmlsOworICAgIFtzZWxmIF9mb2N1c1Rl
eHRJbnB1dENvbnRleHQ6Y29udGV4dCBwbGFjZUNhcmV0QXQ6cG9pbnQgY29tcGxldGlvbkhhbmRs
ZXI6XihVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKnRleHRJbnB1dFJlc3BvbmRlcikgeworICAg
ICAgICByZXNwb25kZXIgPSB0ZXh0SW5wdXRSZXNwb25kZXI7CisgICAgICAgIGZpbmlzaGVkID0g
dHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmZpbmlzaGVkKTsK
KyAgICByZXR1cm4gcmVzcG9uZGVyOworfQorCiBAZW5kCiAKIHN0YXRpYyBOU1N0cmluZyAqYXBw
bHlTdHlsZShOU1N0cmluZyAqSFRNTFN0cmluZykKQEAgLTE1Nyw3ICsxNzAsNyBAQCBzdGF0aWMg
dm9pZCB3ZWJWaWV3TG9hZEhUTUxTdHJpbmdBbmRXYWl0Rm9yQWxsRnJhbWVzVG9QYWludChUZXN0
V0tXZWJWaWV3ICp3ZWJWaQogICAgIEFTU0VSVCh3ZWJWaWV3KTsgLy8gTWFrZSBwYXNzaW5nIGEg
bmlsIHdlYiB2aWV3IGEgbW9yZSBvYnZpb3VzIGZhaWx1cmUgdGhhbiBhIGhhbmcuCiAgICAgYm9v
bCBkaWRGaXJlRE9NTG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgW3dlYlZpZXcgcGVyZm9ybUFmdGVy
TG9hZGluZzpbJl0geyBkaWRGaXJlRE9NTG9hZEV2ZW50ID0gdHJ1ZTsgfV07Ci0gICAgW3dlYlZp
ZXcgbG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOm5pbF07CisgICAgW3dlYlZpZXcg
bG9hZEhUTUxTdHJpbmc6aHRtbFN0cmluZyBiYXNlVVJMOltOU0J1bmRsZS5tYWluQnVuZGxlLmJ1
bmRsZVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpcmVET01Mb2FkRXZl
bnQpOwogICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKIH0KQEAg
LTI3NCw0ICsyODcsMTM2IEBAIFRFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRleHQsIERJU0FCTEVE
X0ZvY3VzVGV4dElucHV0Q29udGV4dCkKICAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgc3luY2hy
b25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDp0ZXh0QXJlYS5nZXQoKV0pOwogfQogCitURVNU
KFJlcXVlc3RUZXh0SW5wdXRDb250ZXh0LCBSZWFkT25seUZpZWxkKQoreworICAgIGF1dG8gY29u
ZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0
XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxT
dHJpbmc6YXBwbHlTdHlsZShAIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naGVsbG8gd29ybGQn
IHN0eWxlPSd3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsnIHJlYWRvbmx5PiIpXTsKKyAgICBF
WFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRl
eHRzSW5SZWN0Olt3ZWJWaWV3IGJvdW5kc11dLmNvdW50KTsKK30KKworVEVTVChSZXF1ZXN0VGV4
dElucHV0Q29udGV4dCwgRGlzYWJsZWRGaWVsZCkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFwcGx5
U3R5bGUoQCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J2hlbGxvIHdvcmxkJyBzdHlsZT0nd2lk
dGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7JyBkaXNhYmxlZD4iKV07CisgICAgRVhQRUNUX0VRKDBV
TCwgW3dlYlZpZXcgc3luY2hyb25vdXNseVJlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDpb
d2ViVmlldyBib3VuZHNdXS5jb3VudCk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRl
eHQsIEZvY3VzRmllbGRBbmRQbGFjZUNhcmV0QXRTdGFydCkKK3sKKyAgICBhdXRvIGNvbmZpZ3Vy
YXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOworCisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
OmFwcGx5U3R5bGUoQCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J2hlbGxvIHdvcmxkJyBzdHls
ZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4iKV07CisgICAgTlNBcnJheTxfV0tUZXh0
SW5wdXRDb250ZXh0ICo+ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0
VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQRUNUX0VR
KDFVTCwgY29udGV4dHMuY291bnQpOworICAgIFJldGFpblB0cjxfV0tUZXh0SW5wdXRDb250ZXh0
PiBpbnB1dEVsZW1lbnQgPSBjb250ZXh0c1swXTsKKworICAgIEVYUEVDVF9FUSgoVUlSZXNwb25k
ZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmll
dyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmlucHV0RWxlbWVudC5nZXQoKSBw
bGFjZUNhcmV0QXQ6W2lucHV0RWxlbWVudCBib3VuZGluZ1JlY3RdLm9yaWdpbl0pOworICAgIEVY
UEVDVF9XS19TVFJFUSgiSU5QVVQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9FUSgw
LCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOworICAgIEVYUEVDVF9FUSgwLCBb
W3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQuc2VsZWN0aW9uRW5kIl0gaW50VmFsdWVdKTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElu
cHV0Q29udGV4dCwgRm9jdXNGaWVsZEFuZFBsYWNlQ2FyZXRBdEVuZCkKK3sKKyAgICBhdXRvIGNv
bmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5p
dF0pOworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBp
bml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29u
ZmlndXJhdGlvbi5nZXQoKV0pOworCisgICAgY29uc3RleHByIGNoYXIgZXhhbXBsZVRleHRbXSA9
ICJoZWxsbyB3b3JsZCI7CisgICAgY29uc3RleHByIHNpemVfdCBleGFtcGxlVGV4dExlbmd0aCA9
IHNpemVvZihleGFtcGxlVGV4dCkgLSAxOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2Fk
SFRNTFN0cmluZzphcHBseVN0eWxlKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGlucHV0
IHR5cGU9J3RleHQnIHZhbHVlPSclcycgc3R5bGU9J3dpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4
Oyc+IiwgZXhhbXBsZVRleHRdKV07CisgICAgTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+
ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0VGV4dElucHV0Q29udGV4
dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQRUNUX0VRKDFVTCwgY29udGV4dHMu
Y291bnQpOworICAgIFJldGFpblB0cjxfV0tUZXh0SW5wdXRDb250ZXh0PiBpbnB1dEVsZW1lbnQg
PSBjb250ZXh0c1swXTsKKworICAgIENHUmVjdCBib3VuZGluZ1JlY3QgPSBbaW5wdXRFbGVtZW50
IGJvdW5kaW5nUmVjdF07CisgICAgQ0dQb2ludCBlbmRQb3NpdGlvbiA9IENHUG9pbnRNYWtlKGJv
dW5kaW5nUmVjdC5vcmlnaW4ueCArIGJvdW5kaW5nUmVjdC5zaXplLndpZHRoLCBib3VuZGluZ1Jl
Y3Qub3JpZ2luLnkgKyBib3VuZGluZ1JlY3Quc2l6ZS5oZWlnaHQgLyAyKTsKKyAgICBFWFBFQ1Rf
RVEoKFVJUmVzcG9uZGVyPFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRW
aWV3XSwgW3dlYlZpZXcgc3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDppbnB1dEVs
ZW1lbnQuZ2V0KCkgcGxhY2VDYXJldEF0OmVuZFBvc2l0aW9uXSk7CisgICAgRVhQRUNUX1dLX1NU
UkVRKCJJTlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNUX0VRKHN0YXRpY19jYXN0
PGludD4oZXhhbXBsZVRleHRMZW5ndGgpLCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1
ZV0pOworICAgIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxpbnQ+KGV4YW1wbGVUZXh0TGVuZ3RoKSwg
W1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVF
bGVtZW50LnNlbGVjdGlvbkVuZCJdIGludFZhbHVlXSk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJ
bnB1dENvbnRleHQsIEZvY3VzRmllbGRBbmRQbGFjZUNhcmV0T3V0c2lkZUZpZWxkKQoreworICAg
IGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFs
bG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJh
dGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBjb25zdGV4cHIgY2hhciBleGFtcGxl
VGV4dFtdID0gImhlbGxvIHdvcmxkIjsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6YXBwbHlTdHlsZShbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjxpbnB1dCB0
eXBlPSd0ZXh0JyB2YWx1ZT0nJXMnIHN0eWxlPSd3aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsn
PiIsIGV4YW1wbGVUZXh0XSldOworICAgIE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAq
Y29udGV4dHMgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRz
SW5SZWN0Olt3ZWJWaWV3IGJvdW5kc11dOworICAgIEVYUEVDVF9FUSgxVUwsIGNvbnRleHRzLmNv
dW50KTsKKyAgICBSZXRhaW5QdHI8X1dLVGV4dElucHV0Q29udGV4dD4gaW5wdXRFbGVtZW50ID0g
Y29udGV4dHNbMF07CisKKyAgICBhdXRvIHJlc2V0VGVzdCA9IFsmXSB7CisgICAgICAgIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50
LmJsdXIoKSJdOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoIkJPRFkiLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1l
Il0pOworICAgIH07CisKKyAgICAvLyBQb2ludCBiZWZvcmUgdGhlIGZpZWxkCisgICAgRVhQRUNU
X0VRKChVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKilbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50
Vmlld10sIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6aW5wdXRF
bGVtZW50LmdldCgpIHBsYWNlQ2FyZXRBdDpDR1BvaW50TWFrZSgtMTAwMCwgLTUwMCldKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIklOUFVUIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5h
Y3RpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0Il0gaW50VmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEo
MCwgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3Rp
dmVFbGVtZW50LnNlbGVjdGlvbkVuZCJdIGludFZhbHVlXSk7CisgICAgcmVzZXRUZXN0KCk7CisK
KyAgICAvLyBQb2ludCBhZnRlciB0aGUgZmllbGQKKyAgICBFWFBFQ1RfRVEoKFVJUmVzcG9uZGVy
PFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XSwgW3dlYlZpZXcg
c3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDppbnB1dEVsZW1lbnQuZ2V0KCkgcGxh
Y2VDYXJldEF0OkNHUG9pbnRNYWtlKDEwMDAsIDUwMCldKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEo
IklOUFVUIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50
LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfRVEoMTEsIFtbd2ViVmlldyBv
YmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zZWxl
Y3Rpb25TdGFydCJdIGludFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKDExLCBbW3dlYlZpZXcgb2Jq
ZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0
aW9uRW5kIl0gaW50VmFsdWVdKTsKKyAgICByZXNldFRlc3QoKTsKK30KKworVEVTVChSZXF1ZXN0
VGV4dElucHV0Q29udGV4dCwgRm9jdXNGaWVsZEluRnJhbWUpCit7CisgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KyAgICBbY29uZmlndXJhdGlvbiBfc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHM6
WUVTXTsKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNv
bmZpZ3VyYXRpb24uZ2V0KCldKTsKKworICAgIGF1dG8gdGVzdFBhZ2UgPSBhcHBseVN0eWxlKFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdtYWlu
RnJhbWVGaWVsZCcgc3R5bGU9J3dpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4Oyc+JUAiLCBhcHBs
eUlmcmFtZShAIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naWZyYW1lRmllbGQnIHN0eWxlPSd3
aWR0aDogMTIwcHg7IGhlaWdodDogNzBweDsnPiIpXSk7CisgICAgd2ViVmlld0xvYWRIVE1MU3Ry
aW5nQW5kV2FpdEZvckFsbEZyYW1lc1RvUGFpbnQod2ViVmlldy5nZXQoKSwgdGVzdFBhZ2UpOwor
ICAgIE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqY29udGV4dHMgPSBbd2ViVmlldyBz
eW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0Olt3ZWJWaWV3IGJvdW5k
c11dOworICAgIEVYUEVDVF9FUSgyVUwsIGNvbnRleHRzLmNvdW50KTsKKyAgICBSZXRhaW5QdHI8
X1dLVGV4dElucHV0Q29udGV4dD4gZnJhbWVCRmllbGQgPSBjb250ZXh0c1swXTsKKworICAgIEVY
UEVDVF9FUSgoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29u
dGVudFZpZXddLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmZy
YW1lQkZpZWxkLmdldCgpIHBsYWNlQ2FyZXRBdDpbZnJhbWVCRmllbGQgYm91bmRpbmdSZWN0XS5v
cmlnaW5dKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklGUkFNRSIsIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7
CisgICAgRVhQRUNUX1dLX1NUUkVRKCJJTlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9j
dW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaWZy
YW1lRmllbGQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1l
bnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
dmFsdWUiXSk7CisgICAgRVhQRUNUX0VRKDAsIFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERvY3Vt
ZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOworICAgIEVYUEVD
VF9FUSgwLCBbW3dlYlZpZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50
LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnNl
bGVjdGlvbkVuZCJdIGludFZhbHVlXSk7Cit9CisKK1RFU1QoUmVxdWVzdFRleHRJbnB1dENvbnRl
eHQsIFN3aXRjaEZvY3VzQmV0d2VlbkZyYW1lcykKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtj
b25maWd1cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJh
dGlvbi5nZXQoKV0pOworCisgICAgYXV0byB0ZXN0UGFnZSA9IGFwcGx5U3R5bGUoW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J21haW5GcmFtZUZp
ZWxkJyBzdHlsZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4lQCIsIGFwcGx5SWZyYW1l
KEAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdpZnJhbWVGaWVsZCcgc3R5bGU9J3dpZHRoOiAx
MDBweDsgaGVpZ2h0OiA1MHB4Oyc+IildKTsKKyAgICB3ZWJWaWV3TG9hZEhUTUxTdHJpbmdBbmRX
YWl0Rm9yQWxsRnJhbWVzVG9QYWludCh3ZWJWaWV3LmdldCgpLCB0ZXN0UGFnZSk7CisgICAgTlNB
cnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlSZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07Cisg
ICAgRVhQRUNUX0VRKDJVTCwgY29udGV4dHMuY291bnQpOworICAgIC8vIE5vdGUgdGhhdCByZXR1
cm5lZCBjb250ZXh0cyBhcmUgaW4gaGl0LXRlc3Qgb3JkZXIuCisgICAgUmV0YWluUHRyPF9XS1Rl
eHRJbnB1dENvbnRleHQ+IGZyYW1lQUZpZWxkID0gY29udGV4dHNbMV07CisgICAgUmV0YWluUHRy
PF9XS1RleHRJbnB1dENvbnRleHQ+IGZyYW1lQkZpZWxkID0gY29udGV4dHNbMF07CisKKyAgICBF
WFBFQ1RfV0tfU1RSRVEoIkJPRFkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiQk9EWSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9FUSgoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICop
W3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5Rm9j
dXNUZXh0SW5wdXRDb250ZXh0OmZyYW1lQUZpZWxkLmdldCgpIHBsYWNlQ2FyZXRBdDpbZnJhbWVB
RmllbGQgYm91bmRpbmdSZWN0XS5vcmlnaW5dKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklOUFVU
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIm1haW5GcmFtZUZpZWxk
IiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2
ZUVsZW1lbnQudmFsdWUiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJCT0RZIiwgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lm
cmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisKKyAgICBF
WFBFQ1RfRVEoKFVJUmVzcG9uZGVyPFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENv
bnRlbnRWaWV3XSwgW3dlYlZpZXcgc3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDpm
cmFtZUJGaWVsZC5nZXQoKSBwbGFjZUNhcmV0QXQ6W2ZyYW1lQkZpZWxkIGJvdW5kaW5nUmVjdF0u
b3JpZ2luXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJJRlJBTUUiLCBbd2ViVmlldyBzdHJpbmdC
eUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0p
OworICAgIEVYUEVDVF9XS19TVFJFUSgiSU5QVVQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVudERv
Y3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoImlm
cmFtZUZpZWxkIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50
LnZhbHVlIl0pOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396687</attachid>
            <date>2020-04-16 12:19:00 -0700</date>
            <delta_ts>2020-04-16 12:19:00 -0700</delta_ts>
            <desc>To Land</desc>
            <filename>bug-210611-20200416121900.patch</filename>
            <type>text/plain</type>
            <size>30872</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwMDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkODQ3NDIwNmRkZmU1M2Zi
YjU3MGZlMTdkN2E4ZmMyOTVmY2IzYzQuLjMyNGYzZWNhOGVlMGE4N2MxYzRjZmE0YWFhNTJhOTVh
ZjFjNTJjMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMjAtMDQtMTYgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEFkZCBhIHdheSB0byBm
b2N1cyBhIHRleHQgaW5wdXQgYW5kIHBsYWNlIGEgY2FyZXQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDYxMQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNjE4OTMwNjI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgQWRkIHNvbWUgSVBJIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGNvZGUgaW4gV2ViS2l0QWRkaXRp
b25zIHRvIGZvY3VzIGEgdGV4dCBpbnB1dCBjb250ZXh0CisgICAgICAgIGFuZCBwbGFjZSB0aGUg
Y2FyZXQgaW4gaXQuIFRoaXMgd2lsbCByZXBsYWNlIHRoZSBleGlzdGluZyAtZm9jdXNUZXh0SW5w
dXQgU1BJLCB3aGljaCBJCisgICAgICAgIHdpbGwgcmVtb3ZlIGluIGEgc3Vic2VxdWVudCBjb21t
aXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRlRm9yVGVz
dGluZ0lPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJ
T1MubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5S
ZWN0OmNvbXBsZXRpb25IYW5kbGVyOl0pOiBGaXggdXAgY29kZSBzdHlsZQorICAgICAgICBvZiBz
aWduYXR1cmUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAoLVtXS1dlYlZpZXcgX2ZvY3VzVGV4
dElucHV0Q29udGV4dDpwbGFjZUNhcmV0QXQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9p
c1RleHRJbnB1dENvbnRleHRGb2N1c2VkOl0pOiBBZGRlZC4KKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfZm9jdXNUZXh0SW5wdXRDb250ZXh0OnBsYWNlQ2FyZXRBdDpjb21wbGV0aW9uSGFuZGxl
cjpdKTogQWRkZWQuCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3JlcXVlc3RUZXh0SW5wdXRD
b250ZXh0c0luUmVjdDpjb21wbGV0aW9uSGFuZGxlcjpdKTogRml4IHVwIGNvZGUgc3R5bGUKKyAg
ICAgICAgb2Ygc2lnbmF0dXJlIHdoaWxlIEkgYW0gaGVyZS4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpm
b2N1c1RleHRJbnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmZvY3VzVGV4
dElucHV0Q29udGV4dCk6IFVzZSBhdXRvIG5vdyB0aGF0IGVsZW1lbnRGb3JDb250ZXh0KCkgcmV0
dXJucyBhIFJlZlB0ci4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZWxlbWVudEZvckNvbnRl
eHQgY29uc3QpOiBIYXZlIGl0IHJldHVybiBhIFJlZlB0ciBpbnN0ZWFkIG9mIGEgcmF3CisgICAg
ICAgIHBvaW50ZXIgc28gY2FsbGVycyBkb24ndCBoYXZlIHRvIHJlbWVtYmVyIHRvIHRha2Ugb3V0
IGEgcmVmIG9mIG90aGVyd2lzZSBiZSBtaW5kZnVsCisgICAgICAgIG9mIHRoZSBlbGVtZW50J3Mg
bGlmZXRpbWUuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnJlbW92ZVRleHRQbGFjZWhvbGRlcik6IFVzZSBhdXRvIG5vdyB0aGF0IGVsZW1lbnRG
b3JDb250ZXh0KCkgcmV0dXJucyBhIFJlZlB0ci4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Zm9jdXNUZXh0SW5wdXRDb250ZXh0QW5kUGxhY2VDYXJldCk6IEFkZGVkLgorCiAy
MDIwLTA0LTE1ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OIChyMjU5NzYyKTogU2hvdWxkIGFsd2F5cyBoaXQgdGVzdCBmb3IgZWRpdGFibGUg
ZWxlbWVudHMgaWYgdGhlIFdLV2ViVmlldyBpcyBmdWxseSBlZGl0YWJsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRlRm9yVGVzdGlu
Z0lPUy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdQcml2YXRl
Rm9yVGVzdGluZ0lPUy5oCmluZGV4IGYyNWVmNzM3NjAxNzY3YzAwZGU4N2FiNmYzODg4NzdlMGI5
NTczYWMuLjFmZWY4MjgzZDc3ZDFiZDQ0ZDcxOTA4ODEzMTZjOTk1YTlhYjJiYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9pb3MvV0tXZWJWaWV3UHJpdmF0ZUZvclRl
c3RpbmdJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvaW9zL1dLV2ViVmll
d1ByaXZhdGVGb3JUZXN0aW5nSU9TLmgKQEAgLTQ5LDcgKzQ5LDggQEAKIC0gKHZvaWQpc2VsZWN0
Rm9ybUFjY2Vzc29yeVBpY2tlclJvdzooaW50KXJvd0luZGV4OwogCiAtIChCT09MKV9tYXlDb250
YWluRWRpdGFibGVFbGVtZW50c0luUmVjdDooQ0dSZWN0KXJlY3Q7Ci0tICh2b2lkKV9yZXF1ZXN0
VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0IGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFuZGxl
cjsKKy0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDooQ0dSZWN0KXJlY3Qg
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAq
PiAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2ZvY3VzVGV4dElucHV0Q29udGV4dDoo
X1dLVGV4dElucHV0Q29udGV4dCAqKWNvbnRleHQgcGxhY2VDYXJldEF0OihDR1BvaW50KXBvaW50
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKikp
Y29tcGxldGlvbkhhbmRsZXI7CiAtICh2b2lkKV9yZXF1ZXN0RG9jdW1lbnRDb250ZXh0OihVSVdL
RG9jdW1lbnRSZXF1ZXN0ICopcmVxdWVzdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlX
S0RvY3VtZW50Q29udGV4dCAqKSljb21wbGV0aW9uSGFuZGxlcjsKIC0gKHZvaWQpX2FkanVzdFNl
bGVjdGlvbldpdGhEZWx0YTooTlNSYW5nZSlkZWx0YVJhbmdlIGNvbXBsZXRpb25IYW5kbGVyOih2
b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2lvcy9XS1dlYlZpZXdUZXN0aW5nSU9TLm1tCmluZGV4IGQ1ZTA1
MDg5NzE4ZjAzZmMwOGY1YWY4MmU0NTE5NTNkZGM1ODBkNmUuLjJlOWExYjVmOWNkMjFmZmQ0OTBl
YmVhMmEwMzU4ZTY2Y2Q4ZTA2OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9pb3MvV0tXZWJWaWV3VGVzdGluZ0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvaW9zL1dLV2ViVmlld1Rlc3RpbmdJT1MubW0KQEAgLTQyLDcgKzQyLDcgQEAKIAog
QGltcGxlbWVudGF0aW9uIFdLV2ViVmlldyAoV0tUZXN0aW5nSU9TKQogCi0tICh2b2lkKV9yZXF1
ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0IGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFu
ZGxlcgorLSAodm9pZClfcmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVj
dCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0
ICo+ICopKWNvbXBsZXRpb25IYW5kbGVyCiB7CiAgICAgLy8gQWRqdXN0IHJldHVybmVkIGJvdW5k
aW5nIHJlY3RzIHRvIGJlIGluIFdLV2ViVmlldyBjb29yZGluYXRlcy4KICAgICBhdXRvIGFkanVz
dGVkUmVjdCA9IFtzZWxmIGNvbnZlcnRSZWN0OnJlY3QgdG9WaWV3Ol9jb250ZW50Vmlldy5nZXQo
KV07CkBAIC02Miw2ICs2MiwxMiBAQCAtICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJ
blJlY3Q6KENHUmVjdClyZWN0IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKAogICAgIH1dOwog
fQogCistICh2b2lkKV9mb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQg
Kiljb250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludCBjb21wbGV0aW9uSGFuZGxlcjoo
dm9pZCAoXikoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7
CisgICAgYXV0byBhZGp1c3RlZFBvaW50ID0gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmll
dzpfY29udGVudFZpZXcuZ2V0KCldOworICAgIFtfY29udGVudFZpZXcgX2ZvY3VzVGV4dElucHV0
Q29udGV4dDpjb250ZXh0IHBsYWNlQ2FyZXRBdDphZGp1c3RlZFBvaW50IGNvbXBsZXRpb25IYW5k
bGVyOmNvbXBsZXRpb25IYW5kbGVyXTsKK30KKwogLSAodm9pZClfcmVxdWVzdERvY3VtZW50Q29u
dGV4dDooVUlXS0RvY3VtZW50UmVxdWVzdCAqKXJlcXVlc3QgY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKFVJV0tEb2N1bWVudENvbnRleHQgKikpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBb
X2NvbnRlbnRWaWV3IHJlcXVlc3REb2N1bWVudENvbnRleHQ6cmVxdWVzdCBjb21wbGV0aW9uSGFu
ZGxlcjpjb21wbGV0aW9uSGFuZGxlcl07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCmluZGV4IDMwYThhYmEyNGZlODhjMTM3ZTUwZTBjYzJiNDVlNDA0ZmM0ZDNjZWYuLmE0MzJh
ZTllNmQ1NjkyM2NkYWI0MTY3MTNlYTU0YTQwZTM5ZTllZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC03MDYsNiArNzA2LDggQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgZm9jdXNUZXh0SW5wdXRDb250ZXh0
QW5kUGxhY2VDYXJldChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisKICAgICB2
b2lkIHNldFNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbihib29sKTsK
IAogICAgIHZvaWQgaW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRD
b250ZXh0PiYpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAppbmRleCA3ODBjYjk0NmFjMDhlZWEyYWJjMmUwMGMx
OTE5NmMxZmIwOGYwODRkLi5mYjJlMGQwZWVlZWZmMDZiYWIwZmM5Y2Q2NTIxMGRkOTc0MjRmYmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5oCkBAIC01NjksNyArNTY5LDggQEAgRk9SX0VBQ0hfUFJJVkFURV9XS0NP
TlRFTlRWSUVXX0FDVElPTihERUNMQVJFX1dLQ09OVEVOVFZJRVdfQUNUSU9OX0ZPUl9XRUJfVklF
VykKIC0gKFdLRHJhd2luZ0Nvb3JkaW5hdG9yICopX2RyYXdpbmdDb29yZGluYXRvcjsKICNlbmRp
ZgogCi0tICh2b2lkKV9yZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6KENHUmVjdClyZWN0
IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkKF4pKE5TQXJyYXk8X1dLVGV4dElucHV0Q29udGV4dCAq
PiAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX3JlcXVlc3RUZXh0SW5wdXRDb250ZXh0
c0luUmVjdDooQ0dSZWN0KXJlY3QgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKE5TQXJyYXk8
X1dLVGV4dElucHV0Q29udGV4dCAqPiAqKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQpX2Zv
Y3VzVGV4dElucHV0Q29udGV4dDooX1dLVGV4dElucHV0Q29udGV4dCAqKWNvbnRleHQgcGxhY2VD
YXJldEF0OihDR1BvaW50KXBvaW50IGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShVSVJlc3Bv
bmRlcjxVSVRleHRJbnB1dD4gKikpY29tcGxldGlvbkhhbmRsZXI7CiAKICNpZiBVU0UoVEVYVF9J
TlRFUkFDVElPTl9BRERJVElPTlMpCiAtICh2b2lkKV93aWxsQmVnaW5UZXh0SW50ZXJhY3Rpb25J
blRleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKiljb250ZXh0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0KaW5kZXggYzJjYmVlYTZjYjY0ODRjOWFkYThmMjYxMjczMGZlNGJmYzEwNTIyNi4uMDQw
NTAxOGIzNjlmYzNjN2ZkMTJjMDY4YjE3NmQ5ODI4ZWQyMzFlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBA
IC01MDgyLDcgKzUwODIsNDAgQEAgLSAoQ0dSZWN0KXJlY3RDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24KICAgICByZXR1cm4gQ0dSZWN0WmVybzsKIH0KIAotLSAodm9pZClfcmVxdWVzdFRleHRJbnB1
dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCheKShO
U0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKikpY29tcGxldGlvbkhhbmRsZXIKKy0gKEJP
T0wpX2lzVGV4dElucHV0Q29udGV4dEZvY3VzZWQ6KF9XS1RleHRJbnB1dENvbnRleHQgKiljb250
ZXh0Cit7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIC8vIFdlIGlnbm9yZSBib3VuZGluZyBy
ZWN0IGNoYW5nZXMgYXMgdGhlIGJvdW5kaW5nIHJlY3Qgb2YgdGhlIGZvY3VzZWQgZWxlbWVudCBp
cyBub3Qga2VwdCB1cC10by1kYXRlLgorICAgIHJldHVybiBzZWxmLl9oYXNGb2N1c2VkRWxlbWVu
dCAmJiBjb250ZXh0Ll90ZXh0SW5wdXRDb250ZXh0LmlzU2FtZUVsZW1lbnQoX2ZvY3VzZWRFbGVt
ZW50SW5mb3JtYXRpb24uZWxlbWVudENvbnRleHQpOworfQorCistICh2b2lkKV9mb2N1c1RleHRJ
bnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKiljb250ZXh0IHBsYWNlQ2FyZXRBdDoo
Q0dQb2ludClwb2ludCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoVUlSZXNwb25kZXI8VUlU
ZXh0SW5wdXQ+ICopKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
ICAgIGlmICghW3NlbGYgYmVjb21lRmlyc3RSZXNwb25kZXJdKSB7CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKG5pbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFtzZWxmIF9p
c1RleHRJbnB1dENvbnRleHRGb2N1c2VkOmNvbnRleHRdKSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKF9mb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uLmlzUmVhZE9ubHkgPyBuaWwgOiBzZWxm
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9u
ID0gWUVTOworICAgIGF1dG8gY2hlY2tGb2N1c2VkRWxlbWVudCA9IFt3ZWFrU2VsZiA9IFdlYWtP
YmpDUHRyPFdLQ29udGVudFZpZXc+IHsgc2VsZiB9LCBjb250ZXh0ID0gW2NvbnRleHQgY29weV0s
IGNvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJv
b2wgc3VjY2VzcykgeworICAgICAgICBhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKTsK
KyAgICAgICAgaWYgKHN0cm9uZ1NlbGYpCisgICAgICAgICAgICBzdHJvbmdTZWxmLT5fdXNpbmdH
ZXN0dXJlRm9yU2VsZWN0aW9uID0gTk87CisgICAgICAgIGlmICghc3Ryb25nU2VsZiB8fCAhc3Vj
Y2VzcykgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobmlsKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sIGZvY3VzZWRBbmRFZGl0YWJsZSA9IFtz
dHJvbmdTZWxmIF9pc1RleHRJbnB1dENvbnRleHRGb2N1c2VkOmNvbnRleHRdICYmICFzdHJvbmdT
ZWxmLT5fZm9jdXNlZEVsZW1lbnRJbmZvcm1hdGlvbi5pc1JlYWRPbmx5OworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmb2N1c2VkQW5kRWRpdGFibGUgPyBzdHJvbmdTZWxmLmF1dG9yZWxlYXNl
KCkgOiBuaWwpOworICAgIH07CisgICAgX3BhZ2UtPmZvY3VzVGV4dElucHV0Q29udGV4dEFuZFBs
YWNlQ2FyZXQoY29udGV4dC5fdGV4dElucHV0Q29udGV4dCwgV2ViQ29yZTo6SW50UG9pbnQgeyBw
b2ludCB9LCBXVEZNb3ZlKGNoZWNrRm9jdXNlZEVsZW1lbnQpKTsKK30KKworLSAodm9pZClfcmVx
dWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0OihDR1JlY3QpcmVjdCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICopKWNvbXBsZXRpb25I
YW5kbGVyCiB7CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICBpZiAoIXNlbGYud2Vi
Vmlldy5fZWRpdGFibGUgJiYgIVdlYktpdDo6bWF5Q29udGFpbkVkaXRhYmxlRWxlbWVudHNJblJl
Y3Qoc2VsZiwgcmVjdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFn
ZVByb3h5SU9TLm1tCmluZGV4IDVmYzFmNzJmMTg0NTZkNzBjYWQ3YWUxNzY3MjA3ZDgyNTc5Njcx
MWEuLjM1MmU3NThhNjk4MTYwMTNjMDRlZTI1NWZjZTM0NTUyMzg0YjZiY2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQpAQCAtMTUzOSw2ICsx
NTM5LDE1IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpzaG91bGRGb3JjZUZvcmVncm91bmRQcmlvcml0
eUZvckNsaWVudE5hdmlnYXRpb24oKSBjb25zdAogICAgIHJldHVybiBwYWdlQ2xpZW50KCkuaXNB
cHBsaWNhdGlvblZpc2libGUoKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OmZvY3VzVGV4dElu
cHV0Q29udGV4dEFuZFBsYWNlQ2FyZXQoY29uc3QgRWxlbWVudENvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwb2ludCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpGb2N1c1RleHRJbnB1dENv
bnRleHRBbmRQbGFjZUNhcmV0KGNvbnRleHQsIHBvaW50KSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0U2hvdWxkUmV2ZWFsQ3VycmVudFNl
bGVjdGlvbkFmdGVySW5zZXJ0aW9uKGJvb2wgc2hvdWxkUmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFm
dGVySW5zZXJ0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAppbmRleCA1OTFlNWNkZGY2N2EwNzFmNDljMDE3Njg3MDY4YmM1ODExOGZjYzFiLi5l
OTZlY2Q5NGI4NDA2NmZlNjIwNGNkMWRkODRlMzRlYWQxNTQ0NGJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNjkwNCw3ICs2OTA0LDcgQEAg
dm9pZCBXZWJQYWdlOjp0ZXh0SW5wdXRDb250ZXh0c0luUmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qg
c2VhcmNoUmVjdCwgQ29tcGxldGlvbkgKIAogdm9pZCBXZWJQYWdlOjpmb2N1c1RleHRJbnB1dENv
bnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmIHRleHRJbnB1dENvbnRleHQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBlbGVtZW50Rm9yQ29udGV4dCh0ZXh0SW5wdXRDb250
ZXh0KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBlbGVtZW50Rm9yQ29udGV4dCh0ZXh0SW5wdXRDb250
ZXh0KTsKIAogICAgIGlmIChlbGVtZW50KQogICAgICAgICBlbGVtZW50LT5mb2N1cygpOwpAQCAt
NjkxOSw3ICs2OTE5LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRDYW5TaG93UGxhY2Vob2xkZXIoY29u
c3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmIGVsZW1lbnRDb250ZXgKICAgICAgICAgZG93bmNh
c3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCplbGVtZW50KS5zZXRDYW5TaG93UGxhY2Vo
b2xkZXIoY2FuU2hvd1BsYWNlaG9sZGVyKTsKIH0KIAotRWxlbWVudCogV2ViUGFnZTo6ZWxlbWVu
dEZvckNvbnRleHQoY29uc3QgV2ViQ29yZTo6RWxlbWVudENvbnRleHQmIGVsZW1lbnRDb250ZXh0
KSBjb25zdAorUmVmUHRyPEVsZW1lbnQ+IFdlYlBhZ2U6OmVsZW1lbnRGb3JDb250ZXh0KGNvbnN0
IEVsZW1lbnRDb250ZXh0JiBlbGVtZW50Q29udGV4dCkgY29uc3QKIHsKICAgICBpZiAoZWxlbWVu
dENvbnRleHQud2ViUGFnZUlkZW50aWZpZXIgIT0gbV9pZGVudGlmaWVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApp
bmRleCBkMGVkOWMwMDc5ZmU1YTg0ZmVjMWVmMTQ2Zjk4ZjY5YjJmNWViYmM3Li4xNmIwNjJmNDcz
MzE5ZmU0ZWNlOTEwMmE4MDJkYWU2Njk3ZGJhNmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC02NDIsNiArNjQyLDggQEAgcHVibGljOgogICAgIHZv
aWQgc2V0Q2FuU2hvd1BsYWNlaG9sZGVyKGNvbnN0IFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0Jiwg
Ym9vbCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHZvaWQgZm9jdXNUZXh0SW5w
dXRDb250ZXh0QW5kUGxhY2VDYXJldChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7
CisKICAgICBib29sIHNob3VsZFJldmVhbEN1cnJlbnRTZWxlY3Rpb25BZnRlckluc2VydGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmV2ZWFsQ3VycmVudFNlbGVjdGlvbkFmdGVySW5zZXJ0
aW9uOyB9CiAgICAgdm9pZCBzZXRTaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0aW9uQWZ0ZXJJbnNl
cnRpb24oYm9vbCk7CiAKQEAgLTEyNDUsNyArMTI0Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
Y29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiwgV1RGTG9nQ2hhbm5lbFN0YXRl
LCBXVEZMb2dMZXZlbCk7CiAKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBlbGVtZW50Rm9yQ29udGV4
dChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYpIGNvbnN0OworICAgIFJlZlB0cjxXZWJD
b3JlOjpFbGVtZW50PiBlbGVtZW50Rm9yQ29udGV4dChjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29u
dGV4dCYpIGNvbnN0OwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0PiBjb250
ZXh0Rm9yRWxlbWVudChXZWJDb3JlOjpFbGVtZW50JikgY29uc3Q7CiAKICAgICB2b2lkIHN0YXJ0
VGV4dE1hbmlwdWxhdGlvbnMoVmVjdG9yPFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpFeGNsdXNpb25SdWxlPiYmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMu
aW4KaW5kZXggMDc2YzFmYWYyZTQ0YzBjNzdiOTQ5YmU5ZWI3OTNkMjZiMzVhMGY2Mi4uZmVjOTRi
YWE1ZDRkY2RjZGY4OTFhZDk0NzljMDY1M2FlNTRiNGFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBAIC0xMjEsNiAr
MTIxLDcgQEAgR2VuZXJhdGVTeW50aGV0aWNFZGl0aW5nQ29tbWFuZChlbnVtOnVpbnQ4X3QgV2Vi
S2l0OjpTeW50aGV0aWNFZGl0aW5nQ29tbWFuZFR5cGUKICAgICBTZXRTaG91bGRSZXZlYWxDdXJy
ZW50U2VsZWN0aW9uQWZ0ZXJJbnNlcnRpb24oYm9vbCBzaG91bGRSZXZlYWxDdXJyZW50U2VsZWN0
aW9uQWZ0ZXJJbnNlcnRpb24pCiAgICAgSW5zZXJ0VGV4dFBsYWNlaG9sZGVyKFdlYkNvcmU6Oklu
dFNpemUgc2l6ZSkgLT4gKE9wdGlvbmFsPFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0PiBwbGFjZWhv
bGRlcikgQXN5bmMKICAgICBSZW1vdmVUZXh0UGxhY2Vob2xkZXIoc3RydWN0IFdlYkNvcmU6OkVs
ZW1lbnRDb250ZXh0IHBsYWNlaG9sZGVyKSAtPiAoKSBBc3luYworICAgIEZvY3VzVGV4dElucHV0
Q29udGV4dEFuZFBsYWNlQ2FyZXQoc3RydWN0IFdlYkNvcmU6OkVsZW1lbnRDb250ZXh0IGNvbnRl
eHQsIFdlYkNvcmU6OkludFBvaW50IHBvaW50KSAtPiAoYm9vbCBzdWNjZXNzKSBBc3luYwogI2Vu
ZGlmCiAKICAgICBTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggYjBlZTVlYWYzMDJmMThjYzQ0NjM0ZGUzN2U3M2ViZjJjNDY3MjBkZi4uODA4NDExYTA5
YjNkMDY2ZmFmOTc3OTA2ZjVkYTE3MGMxNWZlZTM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTEyOSw2ICsxMjksNyBA
QAogI2ltcG9ydCA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4
dFBsYWNlaG9sZGVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvVXNlckdlc3R1cmVJbmRpY2F0b3IuaD4KICNpbXBvcnQgPFdlYkNvcmUv
VmlzaWJsZVVuaXRzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkV2ZW50Lmg+CiAjaW1wb3J0IDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNDAyOSw5ICs0MDMwLDkgQEAgdm9pZCBXZWJQYWdlOjppbnNl
cnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgKICAgICBjb21wbGV0aW9uSGFuZGxlcihwbGFjZWhvbGRlciA/IGNvbnRleHRGb3JFbGVt
ZW50KCpwbGFjZWhvbGRlcikgOiBXVEY6Om51bGxvcHQpOwogfQogCi12b2lkIFdlYlBhZ2U6OnJl
bW92ZVRleHRQbGFjZWhvbGRlcihjb25zdCBXZWJDb3JlOjpFbGVtZW50Q29udGV4dCYgcGxhY2Vo
b2xkZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3Zv
aWQgV2ViUGFnZTo6cmVtb3ZlVGV4dFBsYWNlaG9sZGVyKGNvbnN0IEVsZW1lbnRDb250ZXh0JiBw
bGFjZWhvbGRlciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmIChSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGVsZW1lbnRGb3JDb250ZXh0
KHBsYWNlaG9sZGVyKSkgeworICAgIGlmIChhdXRvIGVsZW1lbnQgPSBlbGVtZW50Rm9yQ29udGV4
dChwbGFjZWhvbGRlcikpIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM8VGV4dFBsYWNlaG9s
ZGVyRWxlbWVudD4oZWxlbWVudCkpOwogICAgICAgICBpZiAoUmVmUHRyPEZyYW1lPiBmcmFtZSA9
IGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS5yZW1vdmVUZXh0UGxhY2Vob2xkZXIoZG93bmNhc3Q8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4o
KmVsZW1lbnQpKTsKQEAgLTQxMjksNyArNDEzMCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERv
Y3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVz
CiAgICAgYm9vbCB3YW50c01hcmtlZFRleHRSZWN0cyA9IHJlcXVlc3Qub3B0aW9ucy5jb250YWlu
cyhEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdDo6T3B0aW9uczo6TWFya2VkVGV4dFJlY3Rz
KTsKIAogICAgIGlmIChhdXRvIHRleHRJbnB1dENvbnRleHQgPSByZXF1ZXN0LnRleHRJbnB1dENv
bnRleHQpIHsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBlbGVtZW50Rm9yQ29u
dGV4dCgqdGV4dElucHV0Q29udGV4dCk7CisgICAgICAgIGF1dG8gZWxlbWVudCA9IGVsZW1lbnRG
b3JDb250ZXh0KCp0ZXh0SW5wdXRDb250ZXh0KTsKICAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtNDI4NSw2ICs0Mjg2LDQ0IEBAIHZvaWQgV2ViUGFnZTo6c2V0U2hvdWxkUmV2ZWFsQ3VycmVu
dFNlbGVjdGlvbkFmdGVySW5zZXJ0aW9uKGJvb2wgc2hvdWxkUmV2ZWFsQ3VyCiAgICAgc2NoZWR1
bGVGdWxsRWRpdG9yU3RhdGVVcGRhdGUoKTsKIH0KIAordm9pZCBXZWJQYWdlOjpmb2N1c1RleHRJ
bnB1dENvbnRleHRBbmRQbGFjZUNhcmV0KGNvbnN0IEVsZW1lbnRDb250ZXh0JiBlbGVtZW50Q29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGF1dG8gdGFyZ2V0ID0gZWxlbWVudEZvckNv
bnRleHQoZWxlbWVudENvbnRleHQpOworICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VCh0YXJnZXQtPmRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgYXV0byB0YXJnZXRGcmFtZSA9IG1h
a2VSZWYoKnRhcmdldC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKworICAgIHRhcmdldEZyYW1lLT5k
b2N1bWVudCgpLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKworICAg
IC8vIFBlcmZvcm1pbmcgbGF5b3V0IGNvdWxkIGhhdmUgY291bGQgdG9ybiBkb3duIHRoZSBlbGVt
ZW50J3MgcmVuZGVyZXIuIENoZWNrIHRoYXQgd2Ugc3RpbGwKKyAgICAvLyBoYXZlIG9uZS4gT3Ro
ZXJ3aXNlLCBiYWlsIG91dCBhcyB0aGlzIGZ1bmN0aW9uIG9ubHkgZm9jdXNlcyBlbGVtZW50cyB0
aGF0IGhhdmUgYSB2aXN1YWwKKyAgICAvLyByZXByZXNlbnRhdGlvbi4KKyAgICBpZiAoIXRhcmdl
dC0+cmVuZGVyZXIoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5k
aWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlLCAmdGFyZ2V0LT5kb2N1bWVudCgpIH07Cisg
ICAgU2V0Rm9yU2NvcGU8Ym9vbD4gdXNlcklzSW50ZXJhY3RpbmdDaGFuZ2UgeyBtX3VzZXJJc0lu
dGVyYWN0aW5nLCB0cnVlIH07CisgICAgYm9vbCBkaWRGb2N1cyA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuc2V0Rm9jdXNlZEVsZW1lbnQodGFyZ2V0LmdldCgpLCB0YXJnZXRGcmFtZSk7CisK
KyAgICAvLyBTZXR0aW5nIHRoZSBmb2N1c2VkIGVsZW1lbnQgY291bGQgdGVhciBkb3duIHRoZSBl
bGVtZW50J3MgcmVuZGVyZXIuIENoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBvbmUuCisgICAgaWYg
KCFkaWRGb2N1cyB8fCAhdGFyZ2V0LT5yZW5kZXJlcigpKSB7CisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQobV9mb2N1
c2VkRWxlbWVudCA9PSB0YXJnZXQpOworICAgIC8vIFRoZSBmdW5jdGlvbiB2aXNpYmxlUG9zaXRp
b25JbkZvY3VzZWROb2RlRm9yUG9pbnQgY29uc3RyYWlucyB0aGUgcG9pbnQgdG8gYmUgaW5zaWRl
CisgICAgLy8gdGhlIGJvdW5kcyBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQuCisgICAgYXV0byBwb3Np
dGlvbiA9IHZpc2libGVQb3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludCh0YXJnZXRGcmFtZSwg
cG9pbnQsIHRydWUgLyogaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCAqLyk7CisgICAg
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgq
dGFyZ2V0RnJhbWUtPmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0
aW9uLmFmZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGlu
Zzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKK30K
Kwogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybURpZFNjYWxlUGFnZSgpCiB7CiAgICAgYXV0byB0cmFu
c2FjdGlvbklEID0gZG93bmNhc3Q8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+KCptX2RyYXdp
bmdBcmVhKS5sYXN0Q29tbWl0dGVkVHJhbnNhY3Rpb25JRCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGYyMDI0ZmI4YjRlZjc0YzA2ZWFjMTQ1
YmRiYzVjM2I3ZjM3NzZlYTEuLjZiNWI4NDVjNzljNTNkZjhiMzZmNzdiYjdmMzU3Y2UzYmJlOTVm
NmUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMSBAQAorMjAyMC0wNC0xNiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5j
b20+CisKKyAgICAgICAgW2lPU10gQWRkIGEgd2F5IHRvIGZvY3VzIGEgdGV4dCBpbnB1dCBhbmQg
cGxhY2UgYSBjYXJldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjEwNjExCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MTg5MzA2Mj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGQgc29tZSB0ZXN0cy4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVxdWVzdFRleHRJbnB1
dENvbnRleHQubW06CisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgc3luY2hyb25vdXNseUZvY3Vz
VGV4dElucHV0Q29udGV4dDpwbGFjZUNhcmV0QXQ6XSk6IEFkZGVkLgorICAgICAgICAod2ViVmll
d0xvYWRIVE1MU3RyaW5nQW5kV2FpdEZvckFsbEZyYW1lc1RvUGFpbnQpOiBVc2UgdGhlIGJ1bmRs
ZSdzIFRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIGRpcmVjdG9yeQorICAgICAgICBhcyB0aGUgYmFz
ZSBVUkwgc28gdGhhdCB3ZSBoYXZlIGEgdmFsaWQgZmlsZSBVUkwuIFNvbWUgb2YgdGhlIHRlc3Rz
IHdpbGwgdGhlbgorICAgICAgICBjYWxsIC1fc2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmls
ZVVSTHMgdG8gYWxsb3cgdGhlIG1haW4gZnJhbWUgYWNjZXNzIHRvCisgICAgICAgIHRoZSB1bmlx
dWUtb3JpZ2luIGNoaWxkIGZyYW1lIGNvbnRlbnRzLgorICAgICAgICAoVEVTVCk6CisKIDIwMjAt
MDQtMTUgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JF
U1NJT04gKHIyNTk3NjIpOiBTaG91bGQgYWx3YXlzIGhpdCB0ZXN0IGZvciBlZGl0YWJsZSBlbGVt
ZW50cyBpZiB0aGUgV0tXZWJWaWV3IGlzIGZ1bGx5IGVkaXRhYmxlCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlcXVlc3RUZXh0SW5wdXRDb250ZXh0
Lm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXF1ZXN0VGV4dElu
cHV0Q29udGV4dC5tbQppbmRleCAwOGY3OTFkNTE4MmNhM2UwZjlmOTYzOTViNDhiZGIwMmQ2ZmQx
NGI0Li5kNmRhMjZkYmNlMWEyMTI4OGZhNWFmOTI2YmU4OTU1OGMzODRmMzMwIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1JlcXVlc3RUZXh0SW5wdXRD
b250ZXh0Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVx
dWVzdFRleHRJbnB1dENvbnRleHQubW0KQEAgLTMyLDYgKzMyLDcgQEAKICNpbXBvcnQgIlRlc3RO
YXZpZ2F0aW9uRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBvcnQg
PFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgorI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld0NvbmZpZ3VyYXRpb25Qcml2YXRlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJWaWV3UHJp
dmF0ZUZvclRlc3RpbmcuaD4KICNpbXBvcnQgPFdlYktpdC9fV0tUZXh0SW5wdXRDb250ZXh0Lmg+
CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC02Miw2ICs2MywxOCBAQCAtIChCT09MKXN5
bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENvbnRleHQgKilj
b250ZXh0CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKKy0gKFVJUmVzcG9uZGVyPFVJVGV4dElu
cHV0PiAqKXN5bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6KF9XS1RleHRJbnB1dENv
bnRleHQgKiljb250ZXh0IHBsYWNlQ2FyZXRBdDooQ0dQb2ludClwb2ludAoreworICAgIF9fYmxv
Y2sgYm9vbCBmaW5pc2hlZCA9IGZhbHNlOworICAgIF9fYmxvY2sgVUlSZXNwb25kZXI8VUlUZXh0
SW5wdXQ+ICpyZXNwb25kZXIgPSBuaWw7CisgICAgW3NlbGYgX2ZvY3VzVGV4dElucHV0Q29udGV4
dDpjb250ZXh0IHBsYWNlQ2FyZXRBdDpwb2ludCBjb21wbGV0aW9uSGFuZGxlcjpeKFVJUmVzcG9u
ZGVyPFVJVGV4dElucHV0PiAqdGV4dElucHV0UmVzcG9uZGVyKSB7CisgICAgICAgIHJlc3BvbmRl
ciA9IHRleHRJbnB1dFJlc3BvbmRlcjsKKyAgICAgICAgZmluaXNoZWQgPSB0cnVlOworICAgIH1d
OworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZmluaXNoZWQpOworICAgIHJldHVybiBy
ZXNwb25kZXI7Cit9CisKIEBlbmQKIAogc3RhdGljIE5TU3RyaW5nICphcHBseVN0eWxlKE5TU3Ry
aW5nICpIVE1MU3RyaW5nKQpAQCAtMTU3LDcgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIHdlYlZpZXdM
b2FkSFRNTFN0cmluZ0FuZFdhaXRGb3JBbGxGcmFtZXNUb1BhaW50KFRlc3RXS1dlYlZpZXcgKndl
YlZpCiAgICAgQVNTRVJUKHdlYlZpZXcpOyAvLyBNYWtlIHBhc3NpbmcgYSBuaWwgd2ViIHZpZXcg
YSBtb3JlIG9idmlvdXMgZmFpbHVyZSB0aGFuIGEgaGFuZy4KICAgICBib29sIGRpZEZpcmVET01M
b2FkRXZlbnQgPSBmYWxzZTsKICAgICBbd2ViVmlldyBwZXJmb3JtQWZ0ZXJMb2FkaW5nOlsmXSB7
IGRpZEZpcmVET01Mb2FkRXZlbnQgPSB0cnVlOyB9XTsKLSAgICBbd2ViVmlldyBsb2FkSFRNTFN0
cmluZzpodG1sU3RyaW5nIGJhc2VVUkw6bmlsXTsKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmlu
ZzpodG1sU3RyaW5nIGJhc2VVUkw6W05TQnVuZGxlLm1haW5CdW5kbGUuYnVuZGxlVVJMIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZGlkRmlyZURPTUxvYWRFdmVudCk7CiAgICAgW3dl
YlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOwogfQpAQCAtMjc0LDQgKzI4Nywx
MzYgQEAgVEVTVChSZXF1ZXN0VGV4dElucHV0Q29udGV4dCwgRElTQUJMRURfRm9jdXNUZXh0SW5w
dXRDb250ZXh0KQogICAgIEVYUEVDVF9GQUxTRShbd2ViVmlldyBzeW5jaHJvbm91c2x5Rm9jdXNU
ZXh0SW5wdXRDb250ZXh0OnRleHRBcmVhLmdldCgpXSk7CiB9CiAKK1RFU1QoUmVxdWVzdFRleHRJ
bnB1dENvbnRleHQsIFJlYWRPbmx5RmllbGQpCit7CisgICAgYXV0byBjb25maWd1cmF0aW9uID0g
YWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpO
U01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphcHBseVN0
eWxlKEAiPGlucHV0IHR5cGU9J3RleHQnIHZhbHVlPSdoZWxsbyB3b3JsZCcgc3R5bGU9J3dpZHRo
OiAxMDBweDsgaGVpZ2h0OiA1MHB4OycgcmVhZG9ubHk+IildOworICAgIEVYUEVDVF9FUSgwVUws
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dl
YlZpZXcgYm91bmRzXV0uY291bnQpOworfQorCitURVNUKFJlcXVlc3RUZXh0SW5wdXRDb250ZXh0
LCBEaXNhYmxlZEZpZWxkKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXBwbHlTdHlsZShAIjxpbnB1
dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naGVsbG8gd29ybGQnIHN0eWxlPSd3aWR0aDogMTAwcHg7IGhl
aWdodDogNTBweDsnIGRpc2FibGVkPiIpXTsKKyAgICBFWFBFQ1RfRVEoMFVMLCBbd2ViVmlldyBz
eW5jaHJvbm91c2x5UmVxdWVzdFRleHRJbnB1dENvbnRleHRzSW5SZWN0Olt3ZWJWaWV3IGJvdW5k
c11dLmNvdW50KTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElucHV0Q29udGV4dCwgRm9jdXNGaWVs
ZEFuZFBsYWNlQ2FyZXRBdFN0YXJ0KQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CisKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXBwbHlTdHlsZShA
IjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0naGVsbG8gd29ybGQnIHN0eWxlPSd3aWR0aDogMTAw
cHg7IGhlaWdodDogNTBweDsnPiIpXTsKKyAgICBOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQg
Kj4gKmNvbnRleHRzID0gW3dlYlZpZXcgc3luY2hyb25vdXNseVJlcXVlc3RUZXh0SW5wdXRDb250
ZXh0c0luUmVjdDpbd2ViVmlldyBib3VuZHNdXTsKKyAgICBFWFBFQ1RfRVEoMVVMLCBjb250ZXh0
cy5jb3VudCk7CisgICAgUmV0YWluUHRyPF9XS1RleHRJbnB1dENvbnRleHQ+IGlucHV0RWxlbWVu
dCA9IGNvbnRleHRzWzBdOworCisgICAgRVhQRUNUX0VRKChVSVJlc3BvbmRlcjxVSVRleHRJbnB1
dD4gKilbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld10sIFt3ZWJWaWV3IHN5bmNocm9ub3Vz
bHlGb2N1c1RleHRJbnB1dENvbnRleHQ6aW5wdXRFbGVtZW50LmdldCgpIHBsYWNlQ2FyZXRBdDpb
aW5wdXRFbGVtZW50IGJvdW5kaW5nUmVjdF0ub3JpZ2luXSk7CisgICAgRVhQRUNUX1dLX1NUUkVR
KCJJTlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNUX0VRKDAsIFtbd2ViVmlldyBv
YmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zZWxl
Y3Rpb25TdGFydCJdIGludFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKDAsIFtbd2ViVmlldyBvYmpl
Y3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zZWxlY3Rp
b25FbmQiXSBpbnRWYWx1ZV0pOworfQorCitURVNUKFJlcXVlc3RUZXh0SW5wdXRDb250ZXh0LCBG
b2N1c0ZpZWxkQW5kUGxhY2VDYXJldEF0RW5kKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdl
dCgpXSk7CisKKyAgICBjb25zdGV4cHIgY2hhciBleGFtcGxlVGV4dFtdID0gImhlbGxvIHdvcmxk
IjsKKyAgICBjb25zdGV4cHIgc2l6ZV90IGV4YW1wbGVUZXh0TGVuZ3RoID0gc2l6ZW9mKGV4YW1w
bGVUZXh0KSAtIDE7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFw
cGx5U3R5bGUoW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCI8aW5wdXQgdHlwZT0ndGV4dCcg
dmFsdWU9JyVzJyBzdHlsZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4iLCBleGFtcGxl
VGV4dF0pXTsKKyAgICBOU0FycmF5PF9XS1RleHRJbnB1dENvbnRleHQgKj4gKmNvbnRleHRzID0g
W3dlYlZpZXcgc3luY2hyb25vdXNseVJlcXVlc3RUZXh0SW5wdXRDb250ZXh0c0luUmVjdDpbd2Vi
VmlldyBib3VuZHNdXTsKKyAgICBFWFBFQ1RfRVEoMVVMLCBjb250ZXh0cy5jb3VudCk7CisgICAg
UmV0YWluUHRyPF9XS1RleHRJbnB1dENvbnRleHQ+IGlucHV0RWxlbWVudCA9IGNvbnRleHRzWzBd
OworCisgICAgQ0dSZWN0IGJvdW5kaW5nUmVjdCA9IFtpbnB1dEVsZW1lbnQgYm91bmRpbmdSZWN0
XTsKKyAgICBDR1BvaW50IGVuZFBvc2l0aW9uID0gQ0dQb2ludE1ha2UoYm91bmRpbmdSZWN0Lm9y
aWdpbi54ICsgYm91bmRpbmdSZWN0LnNpemUud2lkdGgsIGJvdW5kaW5nUmVjdC5vcmlnaW4ueSAr
IGJvdW5kaW5nUmVjdC5zaXplLmhlaWdodCAvIDIpOworICAgIEVYUEVDVF9FUSgoVUlSZXNwb25k
ZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmll
dyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmlucHV0RWxlbWVudC5nZXQoKSBw
bGFjZUNhcmV0QXQ6ZW5kUG9zaXRpb25dKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIklOUFVUIiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVs
ZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PihleGFtcGxl
VGV4dExlbmd0aCksIFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9j
dW1lbnQuYWN0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCJdIGludFZhbHVlXSk7CisgICAgRVhQ
RUNUX0VRKHN0YXRpY19jYXN0PGludD4oZXhhbXBsZVRleHRMZW5ndGgpLCBbW3dlYlZpZXcgb2Jq
ZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0
aW9uRW5kIl0gaW50VmFsdWVdKTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElucHV0Q29udGV4dCwg
Rm9jdXNGaWVsZEFuZFBsYWNlQ2FyZXRPdXRzaWRlRmllbGQpCit7CisgICAgYXV0byBjb25maWd1
cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3Vy
YXRpb24uZ2V0KCldKTsKKworICAgIGNvbnN0ZXhwciBjaGFyIGV4YW1wbGVUZXh0W10gPSAiaGVs
bG8gd29ybGQiOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphcHBs
eVN0eWxlKFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiPGlucHV0IHR5cGU9J3RleHQnIHZh
bHVlPSclcycgc3R5bGU9J3dpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4Oyc+IiwgZXhhbXBsZVRl
eHRdKV07CisgICAgTlNBcnJheTxfV0tUZXh0SW5wdXRDb250ZXh0ICo+ICpjb250ZXh0cyA9IFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlSZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dlYlZp
ZXcgYm91bmRzXV07CisgICAgRVhQRUNUX0VRKDFVTCwgY29udGV4dHMuY291bnQpOworICAgIFJl
dGFpblB0cjxfV0tUZXh0SW5wdXRDb250ZXh0PiBpbnB1dEVsZW1lbnQgPSBjb250ZXh0c1swXTsK
KworICAgIGF1dG8gcmVzZXRUZXN0ID0gWyZdIHsKKyAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlF
dmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpIl07Cisg
ICAgICAgIEVYUEVDVF9XS19TVFJFUSgiQk9EWSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgfTsK
KworICAgIC8vIFBvaW50IGJlZm9yZSB0aGUgZmllbGQKKyAgICBFWFBFQ1RfRVEoKFVJUmVzcG9u
ZGVyPFVJVGV4dElucHV0PiAqKVt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XSwgW3dlYlZp
ZXcgc3luY2hyb25vdXNseUZvY3VzVGV4dElucHV0Q29udGV4dDppbnB1dEVsZW1lbnQuZ2V0KCkg
cGxhY2VDYXJldEF0OkNHUG9pbnRNYWtlKC0xMDAwLCAtNTAwKV0pOworICAgIEVYUEVDVF9XS19T
VFJFUSgiSU5QVVQiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9j
dW1lbnQuYWN0aXZlRWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9FUSgwLCBbW3dlYlZp
ZXcgb2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQu
c2VsZWN0aW9uU3RhcnQiXSBpbnRWYWx1ZV0pOworICAgIEVYUEVDVF9FUSgwLCBbW3dlYlZpZXcg
b2JqZWN0QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2Vs
ZWN0aW9uRW5kIl0gaW50VmFsdWVdKTsKKyAgICByZXNldFRlc3QoKTsKKworICAgIC8vIFBvaW50
IGFmdGVyIHRoZSBmaWVsZAorICAgIEVYUEVDVF9FUSgoVUlSZXNwb25kZXI8VUlUZXh0SW5wdXQ+
ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBbd2ViVmlldyBzeW5jaHJvbm91c2x5
Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmlucHV0RWxlbWVudC5nZXQoKSBwbGFjZUNhcmV0QXQ6Q0dQ
b2ludE1ha2UoMTAwMCwgNTAwKV0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiSU5QVVQiLCBbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9FUSgxMSwgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0Il0g
aW50VmFsdWVdKTsKKyAgICBFWFBFQ1RfRVEoMTEsIFtbd2ViVmlldyBvYmplY3RCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zZWxlY3Rpb25FbmQiXSBpbnRW
YWx1ZV0pOworICAgIHJlc2V0VGVzdCgpOworfQorCitURVNUKFJlcXVlc3RUZXh0SW5wdXRDb250
ZXh0LCBGb2N1c0ZpZWxkSW5GcmFtZSkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1
cmF0aW9uIF9zZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMczpZRVNdOworICAgIGF1
dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1l
Ok5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKV0pOworCisgICAgYXV0byB0ZXN0UGFnZSA9IGFwcGx5U3R5bGUoW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCI8aW5wdXQgdHlwZT0ndGV4dCcgdmFsdWU9J21haW5GcmFtZUZpZWxkJyBz
dHlsZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDUwcHg7Jz4lQCIsIGFwcGx5SWZyYW1lKEAiPGlu
cHV0IHR5cGU9J3RleHQnIHZhbHVlPSdpZnJhbWVGaWVsZCcgc3R5bGU9J3dpZHRoOiAxMjBweDsg
aGVpZ2h0OiA3MHB4Oyc+IildKTsKKyAgICB3ZWJWaWV3TG9hZEhUTUxTdHJpbmdBbmRXYWl0Rm9y
QWxsRnJhbWVzVG9QYWludCh3ZWJWaWV3LmdldCgpLCB0ZXN0UGFnZSk7CisgICAgTlNBcnJheTxf
V0tUZXh0SW5wdXRDb250ZXh0ICo+ICpjb250ZXh0cyA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlS
ZXF1ZXN0VGV4dElucHV0Q29udGV4dHNJblJlY3Q6W3dlYlZpZXcgYm91bmRzXV07CisgICAgRVhQ
RUNUX0VRKDJVTCwgY29udGV4dHMuY291bnQpOworICAgIFJldGFpblB0cjxfV0tUZXh0SW5wdXRD
b250ZXh0PiBmcmFtZUJGaWVsZCA9IGNvbnRleHRzWzBdOworCisgICAgRVhQRUNUX0VRKChVSVJl
c3BvbmRlcjxVSVRleHRJbnB1dD4gKilbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld10sIFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENvbnRleHQ6ZnJhbWVCRmllbGQuZ2V0
KCkgcGxhY2VDYXJldEF0OltmcmFtZUJGaWVsZCBib3VuZGluZ1JlY3RdLm9yaWdpbl0pOworICAg
IEVYUEVDVF9XS19TVFJFUSgiSUZSQU1FIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKyAgICBFWFBFQ1Rf
V0tfU1RSRVEoIklOUFVUIiwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVF
bGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJpZnJhbWVGaWVsZCIsIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxlbWVudC52YWx1ZSJdKTsKKyAg
ICBFWFBFQ1RfRVEoMCwgW1t3ZWJWaWV3IG9iamVjdEJ5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQuYWN0aXZlRWxl
bWVudC5zZWxlY3Rpb25TdGFydCJdIGludFZhbHVlXSk7CisgICAgRVhQRUNUX0VRKDAsIFtbd2Vi
VmlldyBvYmplY3RCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cignaWZyYW1lJykuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQuc2VsZWN0aW9uRW5kIl0g
aW50VmFsdWVdKTsKK30KKworVEVTVChSZXF1ZXN0VGV4dElucHV0Q29udGV4dCwgU3dpdGNoRm9j
dXNCZXR3ZWVuRnJhbWVzKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tX
S1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24g
X3NldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzOllFU107CisgICAgYXV0byB3ZWJW
aWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtl
UmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7
CisKKyAgICBhdXRvIHRlc3RQYWdlID0gYXBwbHlTdHlsZShbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIjxpbnB1dCB0eXBlPSd0ZXh0JyB2YWx1ZT0nbWFpbkZyYW1lRmllbGQnIHN0eWxlPSd3
aWR0aDogMTAwcHg7IGhlaWdodDogNTBweDsnPiVAIiwgYXBwbHlJZnJhbWUoQCI8aW5wdXQgdHlw
ZT0ndGV4dCcgdmFsdWU9J2lmcmFtZUZpZWxkJyBzdHlsZT0nd2lkdGg6IDEwMHB4OyBoZWlnaHQ6
IDUwcHg7Jz4iKV0pOworICAgIHdlYlZpZXdMb2FkSFRNTFN0cmluZ0FuZFdhaXRGb3JBbGxGcmFt
ZXNUb1BhaW50KHdlYlZpZXcuZ2V0KCksIHRlc3RQYWdlKTsKKyAgICBOU0FycmF5PF9XS1RleHRJ
bnB1dENvbnRleHQgKj4gKmNvbnRleHRzID0gW3dlYlZpZXcgc3luY2hyb25vdXNseVJlcXVlc3RU
ZXh0SW5wdXRDb250ZXh0c0luUmVjdDpbd2ViVmlldyBib3VuZHNdXTsKKyAgICBFWFBFQ1RfRVEo
MlVMLCBjb250ZXh0cy5jb3VudCk7CisgICAgLy8gTm90ZSB0aGF0IHJldHVybmVkIGNvbnRleHRz
IGFyZSBpbiBoaXQtdGVzdCBvcmRlci4KKyAgICBSZXRhaW5QdHI8X1dLVGV4dElucHV0Q29udGV4
dD4gZnJhbWVBRmllbGQgPSBjb250ZXh0c1sxXTsKKyAgICBSZXRhaW5QdHI8X1dLVGV4dElucHV0
Q29udGV4dD4gZnJhbWVCRmllbGQgPSBjb250ZXh0c1swXTsKKworICAgIEVYUEVDVF9XS19TVFJF
USgiQk9EWSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVu
dC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNUX1dLX1NUUkVRKCJCT0RZIiwg
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoJ2lmcmFtZScpLmNvbnRlbnREb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7
CisgICAgRVhQRUNUX0VRKChVSVJlc3BvbmRlcjxVSVRleHRJbnB1dD4gKilbd2ViVmlldyB0ZXh0
SW5wdXRDb250ZW50Vmlld10sIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlGb2N1c1RleHRJbnB1dENv
bnRleHQ6ZnJhbWVBRmllbGQuZ2V0KCkgcGxhY2VDYXJldEF0OltmcmFtZUFGaWVsZCBib3VuZGlu
Z1JlY3RdLm9yaWdpbl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiSU5QVVQiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC50YWdO
YW1lIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgibWFpbkZyYW1lRmllbGQiLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYWN0aXZlRWxlbWVudC52YWx1
ZSJdKTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoIkJPRFkiLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaWZyYW1lJykuY29udGVu
dERvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSJdKTsKKworICAgIEVYUEVDVF9FUSgoVUlS
ZXNwb25kZXI8VUlUZXh0SW5wdXQ+ICopW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddLCBb
d2ViVmlldyBzeW5jaHJvbm91c2x5Rm9jdXNUZXh0SW5wdXRDb250ZXh0OmZyYW1lQkZpZWxkLmdl
dCgpIHBsYWNlQ2FyZXRBdDpbZnJhbWVCRmllbGQgYm91bmRpbmdSZWN0XS5vcmlnaW5dKTsKKyAg
ICBFWFBFQ1RfV0tfU1RSRVEoIklGUkFNRSIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0ph
dmFTY3JpcHQ6QCJkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUiXSk7CisgICAgRVhQRUNU
X1dLX1NUUkVRKCJJTlBVVCIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50RG9jdW1lbnQuYWN0aXZl
RWxlbWVudC50YWdOYW1lIl0pOworICAgIEVYUEVDVF9XS19TVFJFUSgiaWZyYW1lRmllbGQiLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcignaWZyYW1lJykuY29udGVudERvY3VtZW50LmFjdGl2ZUVsZW1lbnQudmFsdWUiXSk7Cit9
CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>