<?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>211148</bug_id>
          
          <creation_ts>2020-04-28 15:23:09 -0700</creation_ts>
          <short_desc>[iOS] Implement -markedTextRange</short_desc>
          <delta_ts>2020-04-30 09:01:17 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=210885</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646692</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-28 15:23:09 -0700</bug_when>
    <thetext>Implement -markedTextRange to return the UITextRange for the marked text so that UIKit clients can query for this info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646694</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-28 15:23:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/57865890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646724</commentid>
    <comment_count>2</comment_count>
      <attachid>397896</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-28 16:01:06 -0700</bug_when>
    <thetext>Created attachment 397896
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646791</commentid>
    <comment_count>3</comment_count>
      <attachid>397896</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-28 18:10:59 -0700</bug_when>
    <thetext>Comment on attachment 397896
Patch and tests

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4126
&gt; +        return markedTextRects.isEmpty() ? CGRectZero : markedTextRects.first().rect();

CGRectZero to match current behavior. Maybe can return RectNull...need to check.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4136
&gt; +        return markedTextRects.isEmpty() ? CGRectZero : markedTextRects.last().rect();

CGRectZero to match current behavior. Maybe can return RectNull...need to check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647041</commentid>
    <comment_count>4</comment_count>
      <attachid>397973</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-29 10:06:49 -0700</bug_when>
    <thetext>Created attachment 397973
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647175</commentid>
    <comment_count>5</comment_count>
      <attachid>397998</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-29 15:09:17 -0700</bug_when>
    <thetext>Created attachment 397998
Patch and tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647208</commentid>
    <comment_count>6</comment_count>
      <attachid>397998</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-04-29 16:46:23 -0700</bug_when>
    <thetext>Comment on attachment 397998
Patch and tests

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4493
&gt; +    if (bool isInHorizontalWritingMode = caretRect.width() &lt; caretRect.height())

I find this variable name a bit misleading, since this isn’t (technically) about writing mode, but the geometry of the caret (i.e. keeping the caret “skinny” in either axis).

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4510
&gt; +    if (bool isInHorizontalWritingMode = caretRect.width() &lt; caretRect.height()) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647378</commentid>
    <comment_count>7</comment_count>
      <attachid>397998</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-30 08:57:51 -0700</bug_when>
    <thetext>Comment on attachment 397998
Patch and tests

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

&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4493
&gt;&gt; +    if (bool isInHorizontalWritingMode = caretRect.width() &lt; caretRect.height())
&gt; 
&gt; I find this variable name a bit misleading, since this isn’t (technically) about writing mode, but the geometry of the caret (i.e. keeping the caret “skinny” in either axis).

Will rename to isHorizontalCaret

FYI I was trying to explain the origin of the &quot;horizontal&quot; or &quot;vertical&quot; caret. It originates from the writing mode! This code will 100% have to change if caret geometry radically changed (e.g. caret becomes a square or something more exotic) and when the geometry becomes ambiguous then the only truth we have is the writing mode. As I write this it dawns on me that there is no point to explain this.... it&apos;s obvious + this code is &quot;theme&quot; code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647379</commentid>
    <comment_count>8</comment_count>
      <attachid>397998</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-30 08:58:07 -0700</bug_when>
    <thetext>Comment on attachment 397998
Patch and tests

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647381</commentid>
    <comment_count>9</comment_count>
      <attachid>397998</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-30 08:59:37 -0700</bug_when>
    <thetext>Comment on attachment 397998
Patch and tests

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

&gt;&gt;&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:4493
&gt;&gt;&gt; +    if (bool isInHorizontalWritingMode = caretRect.width() &lt; caretRect.height())
&gt;&gt; 
&gt;&gt; I find this variable name a bit misleading, since this isn’t (technically) about writing mode, but the geometry of the caret (i.e. keeping the caret “skinny” in either axis).
&gt; 
&gt; Will rename to isHorizontalCaret
&gt; 
&gt; FYI I was trying to explain the origin of the &quot;horizontal&quot; or &quot;vertical&quot; caret. It originates from the writing mode! This code will 100% have to change if caret geometry radically changed (e.g. caret becomes a square or something more exotic) and when the geometry becomes ambiguous then the only truth we have is the writing mode. As I write this it dawns on me that there is no point to explain this.... it&apos;s obvious + this code is &quot;theme&quot; code.

Just for me (because I&apos;m removing this comment before landing):

    // In theory, the writing mode should be sent over with the editor state because
    // the caret could take **any** shape. In practice, the caret is always rectangular
    // and displayed between characters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647383</commentid>
    <comment_count>10</comment_count>
      <attachid>398056</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-30 09:00:54 -0700</bug_when>
    <thetext>Created attachment 398056
To land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647384</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-04-30 09:01:17 -0700</bug_when>
    <thetext>Committed r260952: &lt;https://trac.webkit.org/changeset/260952&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397896</attachid>
            <date>2020-04-28 16:01:06 -0700</date>
            <delta_ts>2020-04-29 10:06:48 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-211148-20200428160105.patch</filename>
            <type>text/plain</type>
            <size>25533</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiODBhMTE3NzgyODlkYWYy
MDZmMGQ0ZGU1M2EyOWNmYjFkOGIxZmIuLjI2MTY2NDE3ZTdiOTJjNGJiNjk0NDg4ZmY3ODhjNjBi
ODFjYzU1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjAtMDQtMjggIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEltcGxlbWVudCAtbWFy
a2VkVGV4dFJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTExNDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3ODY1ODkwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldHVybiB0aGUgVUlUZXh0
UmFuZ2UtbGlrZSBvYmplY3QgZm9yIHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gQ2xpZW50cyBjYW4g
dXNlIHRoaXMgcmFuZ2UgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBzZWxlY3Rpb24gcmVjdHMgb3Ig
cXVlcnkgZm9yIHRoZSBjYXJldCByZWN0IGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJhbmdl
LAorICAgICAgICBpZiBkZXNpcmVkLgorCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmRl
Y29kZSk6CisgICAgICAgIEVuY29kZSBhbmQgZGVjb2RlIHRoZSBtYXJrZWQgdGV4dCBzZWxlY3Rp
b24gcmVjdHMgYW5kIGNhcmV0IHJlY3RzIGF0IHRoZSBzdGF0ZSBhbmQgZW5kCisgICAgICAgIG9m
IHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gVGhpcyBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiB0aGF0
IHdlIGNvbXB1dGUgaW4gb3JkZXIgdG8KKyAgICAgICAgaW1wbGVtZW50IC1zZWxlY3RlZFRleHRS
YW5nZS4gSSB0aG91Z2h0IGFib3V0IGNvbGxlY3RpbmcgdGhlc2UgZGV0YWlscyBpbnRvIGNsYXNz
IGFuZAorICAgICAgICBoYXZpbmcgZWRpdG9yIHN0YXRlIGhvbGQgdHdvIGluc3RhbmNlcyBvZiBp
dDogb25lIGZvciBzZWxlY3RlZCB0ZXh0IGFuZCBvbmUgZm9yIG1hcmtlZCB0ZXh0LgorICAgICAg
ICBIb3dldmVyIEkgZGVjaWRlZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1bmxp
a2VseSB0byBmaW5kIHVzZSBvdXRzaWRlIG9mIHdoYXQgaXMKKyAgICAgICAgbmVlZGVkIHRvIGlt
cGxlbWVudCAtc2VsZWN0ZWRUZXh0UmFuZ2UgYW5kIC1tYXJrZWRUZXh0UmFuZ2UuIFRoaXMgaXMg
YmVjYXVzZSBvbmx5IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucyByZXF1aXJlIHN1Y2ggZGV0YWls
cyBzbyBhcyB0byByZXR1cm4gYW4gb3BhcXVlIFVJVGV4dFJhbmdlLWRlcml2ZWQgb2JqZWN0IHRo
YXQKKyAgICAgICAgY2FuIGJlIHBhc3NlZCB0by0gb3IgaXRzIHN1Yi1vYmplY3RzIGNhbiBiZSBw
YXNzZWQgdG8gV0tDb250ZW50VmlldydzIC1jYXJldFJlY3RGb3JQb3NpdGlvbgorICAgICAgICBh
bmQgLXNlbGVjdGlvblJlY3RzRm9yUmFuZ2UuIExpdGVyYWxseSwgV0tDb250ZW50VmlldyBkb2Vz
IG5vdCBzdXBwb3J0IG90aGVyIFVJVGV4dElucHV0CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IG9w
ZXJhdGUgb24gVUlUZXh0UmFuZ2Ugb3IgVUlUZXh0UG9zaXRpb24uIEkgZGlkbid0IHB1cnN1ZSBm
aXhpbmcgdGhpcyBpbgorICAgICAgICBnZW5lcmFsIGJlY2F1c2UgMSkgSSBkb24ndCBuZWVkIGl0
IHRvIHNvbHZlIG15IHByb2JsZW0gYW5kIDIpIFVJV0tEb2N1bWVudENvbnRleHQgU1BJIHNlZW1z
CisgICAgICAgIHRvIGJlIHRoZSBuZXcgZ2VuZXJhbC1wdXJwb3NlIHNvbHV0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOiBQcmV0dHkgcHJpbnQgYWxsIHRoZSBuZXcgbWFya2Vk
IHRleHQgZGV0YWlscyB3ZSBjb2xsZWN0LiBXaGlsZSBJIGFtIGhlcmUsCisgICAgICAgIHVzZSBW
ZWN0b3I6OmlzRW1wdHkoKSBpbnN0ZWFkIG9mIFZlY3Rvcjo6c2l6ZSgpIHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBzZWxlY3Rpb24gcmVjdHMuCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgdGV4dEZpcnN0UmVjdF0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHRleHRMYXN0UmVjdF0pOgorICAgICAgICBVcGRhdGUgY29kZSBub3cgdGhhdCB0
aGUgbWFya2VkIHRleHQgcmVjdHMgYXJlIGluIHRoZSBwb3N0IGxheW91dCBkYXRhIHN1Yi1vYmpl
Y3QuCisKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0
aW9uU3RhcnQ6XSk6IEV4dHJhY3RlZCBmcm9tIC1zZWxlY3RlZFRleHRSYW5nZS4KKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5kOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RlZFRleHRSYW5nZV0pOiBXcml0ZSBp
biB0ZXJtcyBvZiAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0CisgICAgICAgIGFu
ZCAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvbkVuZC4gQWxzbyBtb2Rlcm5pemUgdGhlIGNv
ZGUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1hcmtlZFRleHRS
YW5nZV0pOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUg
Y29uc3QpOiBDb2xsZWN0IHRoZSBtYXJrZWQgdGV4dCByZWN0cyBhbmQgdGhlIGNhcmV0CisgICAg
ICAgIHJlY3RzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZS4KKwogMjAyMC0wMy0y
NSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gU2hv
dWxkIHNob3cgaW5wdXQgdmlldyB3aGVuIGJlY2FtZSBmaXJzdCByZXNwb25kZXIgaWYga2V5Ym9h
cmQgd2FzIHNob3dpbmcgd2hlbiB0aGUgdmlldyB3YXMgcmVzaWduZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0VkaXRvclN0YXRlLmNwcAppbmRleCAyZDMyM2ZjZDE0N2RlNzU0Mjc5MDZiNTk5ZjdiYjhmNjc1
MDU1ODJiLi4xNGIwOGQ4MDEwNmZlMTcxYjEwZDA2NmQyYmVlNmU0ODU4ZThiNjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgRWRp
dG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW5jb2RlciA8PCBjYXJldFJlY3RB
dEVuZDsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVuY29kZXIgPDwgbWFy
a2VkVGV4dFJlY3RzOworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8
IG1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0OworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dENh
cmV0UmVjdEF0RW5kOwogICAgIGVuY29kZXIgPDwgd29yZEF0U2VsZWN0aW9uOwogICAgIGVuY29k
ZXIgPDwgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb247CiAgICAgZW5jb2RlciA8PCBjaGFyYWN0ZXJC
ZWZvcmVTZWxlY3Rpb247CkBAIC0xMTksOSArMTIzLDYgQEAgdm9pZCBFZGl0b3JTdGF0ZTo6UG9z
dExheW91dERhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBhdFN0YXJ0T2ZTZW50ZW5jZTsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblN0YXJ0
SXNBdFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uRW5kSXNBdFBh
cmFncmFwaEJvdW5kYXJ5OwotICAgIGVuY29kZXIgPDwgZmlyc3RNYXJrZWRSZWN0OwotICAgIGVu
Y29kZXIgPDwgbGFzdE1hcmtlZFJlY3Q7Ci0gICAgZW5jb2RlciA8PCBtYXJrZWRUZXh0OwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGVuY29kZXIgPDwgY2FuZGlkYXRlUmVxdWVzdFN0
YXJ0UG9zaXRpb247CkBAIC0xNjYsNiArMTY3LDE0IEBAIGJvb2wgRWRpdG9yU3RhdGU6OlBvc3RM
YXlvdXREYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQb3N0TGF5b3V0RGF0YSYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNl
bGVjdGlvblJlY3RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRSZWN0cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXJrZWRUZXh0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJl
Y3RBdFN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53b3JkQXRTZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pKQpAQCAtMTk0LDEyICsyMDMsNiBAQCBib29sIEVkaXRvclN0YXRl
OjpQb3N0TGF5b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUG9zdExheW91
dERhdGEmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlyc3RNYXJrZWRSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmxh
c3RNYXJrZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuZGlk
YXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24pKQpAQCAtMjg0LDE2ICsyODcsMTggQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0
YXRlKQogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJhc2VXcml0aW5nRGlyZWN0aW9uIiwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5iYXNlV3JpdGlu
Z0RpcmVjdGlvbikpOwogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJr
ZWRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaXJzdE1hcmtl
ZFJlY3QiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmZpcnN0TWFya2VkUmVjdCk7Ci0g
ICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubGFzdE1hcmtlZFJlY3QgIT0gSW50
UmVjdCgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImxhc3RNYXJrZWRSZWN0IiwgZWRpdG9y
U3RhdGUucG9zdExheW91dERhdGEoKS5sYXN0TWFya2VkUmVjdCk7Ci0gICAgaWYgKGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dC5sZW5ndGgoKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJtYXJrZWRUZXh0IiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJr
ZWRUZXh0KTsKICAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5jYXJldFJlY3RB
dEVuZCAhPSBJbnRSZWN0KCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2FyZXRSZWN0QXRF
bmQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0RW5kKTsKLSAgICBp
ZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25SZWN0cy5zaXplKCkpCisg
ICAgaWYgKCFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlvblJlY3RzLmlzRW1w
dHkoKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzZWxlY3Rpb25SZWN0cyIsIGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVjdHMpOworICAgIGlmICghZWRpdG9yU3Rh
dGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpKQorICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm1hcmtlZFRleHRSZWN0cyIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkubWFya2VkVGV4dFJlY3RzKTsKKyAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERh
dGEoKS5tYXJrZWRUZXh0Lmxlbmd0aCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1hcmtl
ZFRleHQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHQpOworICAgIGlm
IChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0
ICE9IEludFJlY3QoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRTdGFydCIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dENhcmV0
UmVjdEF0U3RhcnQpOworICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtl
ZFRleHRDYXJldFJlY3RBdEVuZCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgibWFya2VkVGV4dENhcmV0UmVjdEF0RW5kIiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQpOwogICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5
b3V0RGF0YSgpLndvcmRBdFNlbGVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJ3b3JkQXRTZWxlY3Rpb24iLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLndvcmRB
dFNlbGVjdGlvbik7CiAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
b3JTdGF0ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaAppbmRleCA0YjI1
NzcwOWM2ZTEyZDQwMjkwZGJhZWRiYjQwNDY1YzYxYjRjOGMzLi45MzM2ZjI2YmVmODkxYmJhMDI2
NTQyYTEzOGM3MWJlOGY2YzUzMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKQEAg
LTkyLDYgKzkyLDEwIEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBjYXJldFJlY3RBdEVuZDsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgICAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gbWFya2VkVGV4dFJlY3RzOworICAgICAgICBT
dHJpbmcgbWFya2VkVGV4dDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRFbmQ7CiAgICAgICAgIFN0cmluZyB3b3JkQXRTZWxlY3Rpb247CiAgICAgICAgIFVDaGFy
MzIgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24geyAwIH07CiAgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyQmVmb3JlU2VsZWN0aW9uIHsgMCB9OwpAQCAtMTA2LDkgKzExMCw2IEBAIHN0cnVjdCBFZGl0
b3JTdGF0ZSB7CiAgICAgICAgIGJvb2wgYXRTdGFydE9mU2VudGVuY2UgeyBmYWxzZSB9OwogICAg
ICAgICBib29sIHNlbGVjdGlvblN0YXJ0SXNBdFBhcmFncmFwaEJvdW5kYXJ5IHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBzZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkgeyBmYWxzZSB9
OwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0TWFya2VkUmVjdDsKLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBsYXN0TWFya2VkUmVjdDsKLSAgICAgICAgU3RyaW5nIG1hcmtlZFRleHQ7
CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHVpbnQ2NF90IGNhbmRpZGF0ZVJl
cXVlc3RTdGFydFBvc2l0aW9uIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjkxYmE4ZDhlZmZj
YjYyMzg1OWE2ZWU3YWJlMjI4OWQzOWFhNmEwNS4uOTM2N2QyMTZjOWZkOTE3NTMzOGQyNjMzZGE5
YjkzYmE3ZjJiN2JkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MTIwLDEyICs0MTIwLDIyIEBAIC0g
KEJPT0wpX3NlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogCiAtIChDR1JlY3QpdGV4dEZpcnN0UmVj
dAogewotICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbiA/IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJrZWRSZWN0IDogX2F1
dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0OworICAgIGF1dG8mIGVkaXRvclN0YXRlID0g
X3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgaWYgKGVkaXRvclN0YXRlLmhhc0NvbXBvc2l0aW9u
KSB7CisgICAgICAgIGF1dG8mIG1hcmtlZFRleHRSZWN0cyA9IGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkubWFya2VkVGV4dFJlY3RzOworICAgICAgICByZXR1cm4gbWFya2VkVGV4dFJlY3Rz
LmlzRW1wdHkoKSA/IENHUmVjdFplcm8gOiBtYXJrZWRUZXh0UmVjdHMuZmlyc3QoKS5yZWN0KCk7
CisgICAgfQorICAgIHJldHVybiBfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRGaXJzdFJlY3Q7CiB9
CiAKIC0gKENHUmVjdCl0ZXh0TGFzdFJlY3QKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaGFzQ29tcG9zaXRpb24gPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0
YSgpLmxhc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3Q7Cisg
ICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsKKyAgICBpZiAoZWRp
dG9yU3RhdGUuaGFzQ29tcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byYgbWFya2VkVGV4dFJlY3Rz
ID0gZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHM7CisgICAgICAg
IHJldHVybiBtYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpID8gQ0dSZWN0WmVybyA6IG1hcmtlZFRl
eHRSZWN0cy5sYXN0KCkucmVjdCgpOworICAgIH0KKyAgICByZXR1cm4gX2F1dG9jb3JyZWN0aW9u
RGF0YS50ZXh0TGFzdFJlY3Q7CiB9CiAKIC0gKHZvaWQpcmVwbGFjZURpY3RhdGVkVGV4dDooTlNT
dHJpbmcqKW9sZFRleHQgd2l0aFRleHQ6KE5TU3RyaW5nICopbmV3VGV4dApAQCAtNDQ3MCw0NSAr
NDQ4MCw2MyBAQCBzdGF0aWMgTlNBcnJheTxXS1RleHRTZWxlY3Rpb25SZWN0ICo+ICp3a1RleHRT
ZWxlY3Rpb25SZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZQogICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKKy0gKFdlYkNvcmU6OkZsb2F0UmVjdClfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9u
U3RhcnQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNh
bCBoZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6
b29tIHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBj
YXJldCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21l
ZCBvdXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisK
KyAgICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3
aXRoIHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtl
IGFueSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIK
KyAgICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBp
c0luSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3Qu
aGVpZ2h0KCkpCisgICAgICAgIGNhcmV0UmVjdC5zZXRXaWR0aChjYXJldFJlY3Qud2lkdGgoKSAq
IGludmVyc2VTY2FsZSk7CisgICAgZWxzZQorICAgICAgICBjYXJldFJlY3Quc2V0SGVpZ2h0KGNh
cmV0UmVjdC5oZWlnaHQoKSAqIGludmVyc2VTY2FsZSk7CisgICAgcmV0dXJuIGNhcmV0UmVjdDsK
K30KKworLSAoV2ViQ29yZTo6RmxvYXRSZWN0KV9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25F
bmQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNhbCBo
ZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6b29t
IHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBjYXJl
dCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21lZCBv
dXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisKKyAg
ICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3aXRo
IHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtlIGFu
eSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIKKyAg
ICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBpc0lu
SG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxXaWR0aCA9IGNhcmV0UmVjdC53aWR0aCgp
OworICAgICAgICBjYXJldFJlY3Quc2V0V2lkdGgob3JpZ2luYWxXaWR0aCAqIGludmVyc2VTY2Fs
ZSk7CisgICAgICAgIGNhcmV0UmVjdC5tb3ZlKGNhcmV0UmVjdC53aWR0aCgpIC0gb3JpZ2luYWxX
aWR0aCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxIZWlnaHQgPSBj
YXJldFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGNhcmV0UmVjdC5zZXRIZWlnaHQoY2FyZXRSZWN0
LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKKyAgICAgICAgY2FyZXRSZWN0Lm1vdmUoMCwgY2Fy
ZXRSZWN0LmhlaWdodCgpIC0gb3JpZ2luYWxIZWlnaHQpOworICAgIH0KKyAgICByZXR1cm4gY2Fy
ZXRSZWN0OworfQorCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdlCiB7Ci0gICAg
aWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICBhdXRvJiBlZGl0b3JTdGF0ZSA9
IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgIGF1dG8gaGFzU2VsZWN0aW9uID0gIWVkaXRvclN0
YXRlLnNlbGVjdGlvbklzTm9uZTsKKyAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBlZGl0b3JTdGF0
ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBV
SUtpdCBkb2VzIG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub25lZGl0YWJsZSBjb250
ZW50LgotICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYg
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpCisKKyAgICBhdXRvIGlzUmFu
Z2UgPSBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIGF1dG8gaXNDb250ZW50RWRp
dGFibGUgPSBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAvLyBVSUtpdCBkb2Vz
IG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub24tZWRpdGFibGUgY29udGVudC4KKyAg
ICBpZiAoIWlzQ29udGVudEVkaXRhYmxlICYmICFpc1JhbmdlKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIGF1dG8mIHBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEgPSBfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzdGFy
dFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNhcmV0UmVjdEF0U3RhcnQ7Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGVuZFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNh
cmV0UmVjdEF0RW5kOwotICAgIGRvdWJsZSBpbnZlcnNlU2NhbGUgPSBbc2VsZiBpbnZlcnNlU2Nh
bGVdOwotICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgY2FyZXQgd2lkdGgsIHdo
aWxlIHRoZSBoZWlnaHQgc2NhbGVzIHdpdGgKLSAgICAvLyB0aGUgY29udGVudCB0YWtpbmcgb3Jp
ZW50YXRpb24gaW50byBhY2NvdW50LgotICAgIC8vIFdlIGFjaGlldmUgdGhpcyBieSBzY2FsaW5n
IHRoZSB3aWR0aCB3aXRoIHRoZSBpbnZlcnNlCi0gICAgLy8gc2NhbGUgZmFjdG9yLiBUaGlzIHdh
eSwgd2hlbiBpdCBpcyBjb252ZXJ0ZWQgZnJvbSB0aGUgY29udGVudCB2aWV3Ci0gICAgLy8gdGhl
IHdpZHRoIHJlbWFpbnMgdW5jaGFuZ2VkLgotICAgIGlmIChzdGFydFJlY3Qud2lkdGgoKSA8IHN0
YXJ0UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc3RhcnRSZWN0LnNldFdpZHRoKHN0YXJ0UmVjdC53
aWR0aCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXJ0UmVjdC5zZXRI
ZWlnaHQoc3RhcnRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBpZiAoZW5kUmVj
dC53aWR0aCgpIDwgZW5kUmVjdC5oZWlnaHQoKSkgewotICAgICAgICBkb3VibGUgZGVsdGEgPSBl
bmRSZWN0LndpZHRoKCk7Ci0gICAgICAgIGVuZFJlY3Quc2V0V2lkdGgoZW5kUmVjdC53aWR0aCgp
ICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBlbmRSZWN0LndpZHRoKCkgLSBkZWx0
YTsKLSAgICAgICAgZW5kUmVjdC5tb3ZlKGRlbHRhLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBkb3VibGUgZGVsdGEgPSBlbmRSZWN0LmhlaWdodCgpOwotICAgICAgICBlbmRSZWN0LnNldEhl
aWdodChlbmRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBl
bmRSZWN0LmhlaWdodCgpIC0gZGVsdGE7Ci0gICAgICAgIGVuZFJlY3QubW92ZSgwLCBkZWx0YSk7
Ci0gICAgfQotICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOl9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1JhbmdlOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0YWJsZTpfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRSZWN0OnN0YXJ0UmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmRSZWN0OmVuZFJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25S
ZWN0czp3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0
RGF0YSgpLnNlbGVjdGlvblJlY3RzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRU
ZXh0TGVuZ3RoOnBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoXTsK
KworICAgIGF1dG8gY2FyZXRTdGFydFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2Vs
ZWN0aW9uU3RhcnQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5jYXJldFJl
Y3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRDYXJldFJl
Y3RGb3JTZWxlY3Rpb25FbmQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5j
YXJldFJlY3RBdEVuZF07CisgICAgYXV0byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlv
blJlY3RzKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVj
dHMpOworICAgIGF1dG8gc2VsZWN0ZWRUZXh0TGVuZ3RoID0gZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0
UmFuZ2VXaXRoU3RhdGU6IWhhc1NlbGVjdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKENHUmVjdCljYXJldFJlY3RGb3JQb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgpAQCAtNDU0NCw3ICs0NTcyLDIwIEBAIC0gKE5TU3Ry
aW5nICopbWFya2VkVGV4dAogCiAtIChVSVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQogewot
ICAgIHJldHVybiBuaWw7CisgICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3Rh
dGUoKTsKKyAgICBib29sIGhhc0NvbXBvc2l0aW9uID0gZWRpdG9yU3RhdGUuaGFzQ29tcG9zaXRp
b247CisgICAgaWYgKCFoYXNDb21wb3NpdGlvbiB8fCBlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0
TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBhdXRvJiBwb3N0TGF5b3V0RGF0
YSA9IGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCk7CisgICAgYXV0byB1bnNjYWxlZENhcmV0
UmVjdEF0U3RhcnQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydDsK
KyAgICBhdXRvIHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0Q2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc1JhbmdlID0gdW5zY2FsZWRDYXJldFJlY3RB
dFN0YXJ0ICE9IHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc0NvbnRlbnRFZGl0
YWJsZSA9IGVkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlOworICAgIGF1dG8gY2FyZXRTdGFy
dFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uU3RhcnQ6dW5zY2FsZWRD
YXJldFJlY3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRD
YXJldFJlY3RGb3JTZWxlY3Rpb25FbmQ6dW5zY2FsZWRDYXJldFJlY3RBdEVuZF07CisgICAgYXV0
byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CisgICAgYXV0byBzZWxlY3RlZFRleHRMZW5ndGggPSBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0Lmxlbmd0aCgpOworICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJh
bmdlV2l0aFN0YXRlOiFoYXNDb21wb3NpdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKE5TRGljdGlvbmFyeSAqKW1hcmtlZFRleHRTdHls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBmZWU0MGQxNTUwYTgzMWY2YWY0NDZiMTQyZjViMzMzNTJiNzg3MjcwLi5lZDIz
OTdkNmUwYTI3ZjFiMjQ4MmI0ZDIyZWQ5ZmQ3NmYzODJlZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjYyLDE3ICsy
NjIsMTUgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICBhdXRvIHZpZXcgPSBtYWtlUmVmKCpm
cmFtZS52aWV3KCkpOwogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKLSAgICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpOwotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gY29t
cG9zaXRpb25SZWN0czsKLSAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UpIHsKLSAgICAgICAg
ICAgIGNvbXBvc2l0aW9uUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhjb21wb3NpdGlvblJl
Y3RzKTsKLSAgICAgICAgICAgIGlmIChjb21wb3NpdGlvblJlY3RzLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5maXJzdE1hcmtlZFJlY3QgPSB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoY29tcG9zaXRpb25SZWN0c1swXS5yZWN0KCkpOwotICAgICAgICAgICAgaWYgKGNv
bXBvc2l0aW9uUmVjdHMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0
YS5sYXN0TWFya2VkUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblJl
Y3RzLmxhc3QoKS5yZWN0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLmxhc3RNYXJrZWRSZWN0ID0gcG9zdExheW91dERhdGEuZmlyc3RNYXJrZWRS
ZWN0OworICAgICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKSB7CisgICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKKyAgICAg
ICAgICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RM
YXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
Lm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkp
OworICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNlbGVjdGlvbigqY29t
cG9zaXRpb25SYW5nZSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRl
Rml4ZWQgKi8pKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJl
Y3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52
aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICov
KSk7CisKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRmYTc2YzYyNjcxOGE1YmViZTZiMTU5NDhjMTljYTA4YzA1
MTg3NWEuLjFhOWZiMmEyMzg4NzVkZDU0MzYxMzkxODgwNThkYzUzMWNkNWNlNTIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMC0wNC0yOCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW2lPU10gSW1wbGVtZW50IC1tYXJrZWRUZXh0UmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTE0OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTc4NjU4OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0VkaXRvclN0YXRlVGVzdHMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjph
cHBseUFoZW1TdHlsZSk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisK
IDIwMTktMDktMTMgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IFN1cHBvcnQgYnVpbGRpbmcgV2ViS2l0IGZvciBNYWMgQ2F0YWx5c3QgZnJvbSBYY29kZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JTdGF0
ZVRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JT
dGF0ZVRlc3RzLm1tCmluZGV4IDQ0OWQ3ZjFmMDcxNTYwOTFkYzljMTdjNzU1ZjJhYzU4MjFmNTE2
OWQuLjUzNDI1MWIwNjlkOWUyMjM2ZTI2YjJlNmZjY2EyNzYyM2IzZTFiM2YgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9yU3RhdGVUZXN0cy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0VkaXRvclN0YXRl
VGVzdHMubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsMTMgKzI3LDE1IEBACiAKICNpbXBvcnQgIkVkaXRpbmdUZXN0SGFybmVzcy5o
IgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RDb2NvYS5oIgor
I2ltcG9ydCAiVGVzdElucHV0RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIK
KyNpbXBvcnQgIlVzZXJJbnRlcmZhY2VTd2l6emxlci5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4K
ICNlbmRpZgogCiBzdGF0aWMgdm9pZCogY29uc3QgU2VsZWN0aW9uQXR0cmlidXRlc09ic2VydmF0
aW9uQ29udGV4dCA9ICh2b2lkKikmU2VsZWN0aW9uQXR0cmlidXRlc09ic2VydmF0aW9uQ29udGV4
dDsKQEAgLTQyOSw2ICs0MzEsMTAxIEBAIFRFU1QoRWRpdG9yU3RhdGVUZXN0cywgU2VsZWN0ZWRU
ZXh0KQogICAgIEVYUEVDVF9HVChbW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddIHNlbGVj
dGVkVGV4dF0ubGVuZ3RoLCAwVSk7CiB9CiAKK2NvbnN0ZXhwciB1bnNpZ25lZCBnbHlwaFdpZHRo
IHsgMjUgfTsgLy8gcGl4ZWxzCisKK3N0YXRpYyBOU1N0cmluZyAqYXBwbHlBaGVtU3R5bGUoTlNT
dHJpbmcgKmh0bWxTdHJpbmcpCit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiPHN0eWxlPkBmb250LWZhY2UgeyBmb250LWZhbWlseTogQWhlbTsgc3JjOiB1cmwoQWhl
bS50dGYpOyB9IGJvZHkgeyBtYXJnaW46IDA7IH0gKiB7IGZvbnQ6ICV1cHgvMSBBaGVtOyAtd2Vi
a2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCUlOyB9PC9zdHlsZT48bWV0YSBuYW1lPSd2aWV3cG9y
dCcgY29udGVudD0nd2lkdGg9OTgwLCBpbml0aWFsLXNjYWxlPTEuMCc+JUAiLCBnbHlwaFdpZHRo
LCBodG1sU3RyaW5nXTsKK30KKworVEVTVChFZGl0b3JTdGF0ZVRlc3RzLCBNYXJrZWRUZXh0UmFu
Z2VfSG9yaXpvbnRhbENhcmV0U2VsZWN0aW9uKQoreworICAgIElQaG9uZVVzZXJJbnRlcmZhY2VT
d2l6emxlciB1c2VySW50ZXJmYWNlU3dpenpsZXI7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9w
dE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzph
cHBseUFoZW1TdHlsZShAIjxib2R5IGNvbnRlbnRlZGl0YWJsZT0ndHJ1ZSc+PC9ib2R5PiIpXTsK
KyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9k
eS5mb2N1cygpIl07CisKKyAgICBhdXRvICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IHRleHRJbnB1
dENvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpAImhlbGxvIiBz
ZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4
dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBVSVRleHRSYW5nZSAqbWFya2VkVGV4dFJhbmdl
ID0gW2NvbnRlbnRWaWV3IG1hcmtlZFRleHRSYW5nZV07CisgICAgTlNBcnJheTxVSVRleHRTZWxl
Y3Rpb25SZWN0ICo+ICpyZWN0cyA9IFtjb250ZW50VmlldyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdl
Om1hcmtlZFRleHRSYW5nZV07CisgICAgRVhQRUNUX0VRKDFVLCByZWN0cy5jb3VudCk7CisgICAg
RVhQRUNUX0VRKENHUmVjdE1ha2UoMCwgMCwgNSAqIGdseXBoV2lkdGgsIGdseXBoV2lkdGgpLCBy
ZWN0c1swXS5yZWN0KTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAwLCAyLCBnbHlwaFdp
ZHRoKSwgW2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5z
dGFydF0pOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDEyNCwgMCwgMiwgZ2x5cGhXaWR0aCks
IFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2UuZW5kXSk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlY3RzWzBdLmlzVmVydGljYWwpOworfQorCitURVNUKEVkaXRv
clN0YXRlVGVzdHMsIE1hcmtlZFRleHRSYW5nZV9Ib3Jpem9udGFsUmFuZ2VTZWxlY3Rpb24pCit7
CisgICAgSVBob25lVXNlckludGVyZmFjZVN3aXp6bGVyIHVzZXJJbnRlcmZhY2VTd2l6emxlcjsK
KworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFwcGx5QWhlbVN0eWxlKEAiPGJvZHkgY29udGVudGVk
aXRhYmxlPSd0cnVlJz48L2JvZHk+IildOworICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmZvY3VzKCkiXTsKKyAgICBbd2ViVmlldyBfc3lu
Y2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFRleHQiIGFyZ3VtZW50OkAiSGVs
bG8gd29ybGQiXTsKKworICAgIGF1dG8gKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgdGV4dElucHV0
Q29udGVudFZpZXddOworICAgIFtjb250ZW50VmlldyBzZWxlY3RXb3JkQmFja3dhcmRdOworICAg
IFtjb250ZW50VmlldyBzZXRNYXJrZWRUZXh0OkAid29ybGQiIHNlbGVjdGVkUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgNSldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRl
XTsKKworICAgIFVJVGV4dFJhbmdlICptYXJrZWRUZXh0UmFuZ2UgPSBbY29udGVudFZpZXcgbWFy
a2VkVGV4dFJhbmdlXTsKKyAgICBOU0FycmF5PFVJVGV4dFNlbGVjdGlvblJlY3QgKj4gKnJlY3Rz
ID0gW2NvbnRlbnRWaWV3IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6bWFya2VkVGV4dFJhbmdlXTsK
KyAgICBFWFBFQ1RfRVEoMVUsIHJlY3RzLmNvdW50KTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFr
ZSgxNTAsIDAsIDUgKiBnbHlwaFdpZHRoLCBnbHlwaFdpZHRoKSwgcmVjdHNbMF0ucmVjdCk7Cisg
ICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMTQ5LCAwLCAyLCBnbHlwaFdpZHRoKSwgW2NvbnRlbnRW
aWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5zdGFydF0pOworICAgIEVY
UEVDVF9FUShDR1JlY3RNYWtlKDI3NCwgMCwgMiwgZ2x5cGhXaWR0aCksIFtjb250ZW50VmlldyBj
YXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2UuZW5kXSk7CisgICAgRVhQRUNUX0ZB
TFNFKHJlY3RzWzBdLmlzVmVydGljYWwpOworfQorCitURVNUKEVkaXRvclN0YXRlVGVzdHMsIE1h
cmtlZFRleHRSYW5nZV9WZXJ0aWNhbENhcmV0U2VsZWN0aW9uKQoreworICAgIElQaG9uZVVzZXJJ
bnRlcmZhY2VTd2l6emxlciB1c2VySW50ZXJmYWNlU3dpenpsZXI7CisKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzphcHBseUFoZW1TdHlsZShAIjxib2R5IHN0eWxlPSd3cml0aW5nLW1vZGU6IHZlcnRp
Y2FsLWxyJyBjb250ZW50ZWRpdGFibGU9J3RydWUnPjwvYm9keT4iKV07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuZm9jdXMoKSJdOwor
CisgICAgYXV0byAqY29udGVudFZpZXcgPSBbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld107
CisgICAgW2NvbnRlbnRWaWV3IHNldE1hcmtlZFRleHQ6QCJoZWxsbyIgc2VsZWN0ZWRSYW5nZTpO
U01ha2VSYW5nZSgwLCAwKV07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25V
cGRhdGVdOworCisgICAgVUlUZXh0UmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IFtjb250ZW50Vmll
dyBtYXJrZWRUZXh0UmFuZ2VdOworICAgIE5TQXJyYXk8VUlUZXh0U2VsZWN0aW9uUmVjdCAqPiAq
cmVjdHMgPSBbY29udGVudFZpZXcgc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTptYXJrZWRUZXh0UmFu
Z2VdOworICAgIEVYUEVDVF9FUSgxVSwgcmVjdHMuY291bnQpOworICAgIEVYUEVDVF9FUShDR1Jl
Y3RNYWtlKDAsIDAsIGdseXBoV2lkdGgsIDUgKiBnbHlwaFdpZHRoKSwgcmVjdHNbMF0ucmVjdCk7
CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMCwgMCwgZ2x5cGhXaWR0aCwgMiksIFtjb250ZW50
VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2Uuc3RhcnRdKTsKKyAgICBF
WFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAxMjQsIGdseXBoV2lkdGgsIDIpLCBbY29udGVudFZpZXcg
Y2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLmVuZF0pOworICAgIEVYUEVDVF9U
UlVFKHJlY3RzWzBdLmlzVmVydGljYWwpOworfQorCitURVNUKEVkaXRvclN0YXRlVGVzdHMsIE1h
cmtlZFRleHRSYW5nZV9WZXJ0aWNhbFJhbmdlU2VsZWN0aW9uKQoreworICAgIElQaG9uZVVzZXJJ
bnRlcmZhY2VTd2l6emxlciB1c2VySW50ZXJmYWNlU3dpenpsZXI7CisKKyAgICBhdXRvIHdlYlZp
ZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VS
ZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRN
TFN0cmluZzphcHBseUFoZW1TdHlsZShAIjxib2R5IHN0eWxlPSd3cml0aW5nLW1vZGU6IHZlcnRp
Y2FsLWxyJyBjb250ZW50ZWRpdGFibGU9J3RydWUnPjwvYm9keT4iKV07CisgICAgW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuZm9jdXMoKSJdOwor
ICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0VGV4
dCIgYXJndW1lbnQ6QCJIZWxsbyB3b3JsZCJdOworCisgICAgYXV0byAqY29udGVudFZpZXcgPSBb
d2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld107CisgICAgW2NvbnRlbnRWaWV3IHNlbGVjdFdv
cmRCYWNrd2FyZF07CisgICAgW2NvbnRlbnRWaWV3IHNldE1hcmtlZFRleHQ6QCJ3b3JsZCIgc2Vs
ZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCA1KV07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQ
cmVzZW50YXRpb25VcGRhdGVdOworCisgICAgVUlUZXh0UmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9
IFtjb250ZW50VmlldyBtYXJrZWRUZXh0UmFuZ2VdOworICAgIE5TQXJyYXk8VUlUZXh0U2VsZWN0
aW9uUmVjdCAqPiAqcmVjdHMgPSBbY29udGVudFZpZXcgc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTpt
YXJrZWRUZXh0UmFuZ2VdOworICAgIEVYUEVDVF9FUSgxVSwgcmVjdHMuY291bnQpOworICAgIEVY
UEVDVF9FUShDR1JlY3RNYWtlKDAsIDE1MCwgZ2x5cGhXaWR0aCwgNSAqIGdseXBoV2lkdGgpLCBy
ZWN0c1swXS5yZWN0KTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAxNDksIGdseXBoV2lk
dGgsIDIpLCBbY29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdl
LnN0YXJ0XSk7CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMCwgMjc0LCBnbHlwaFdpZHRoLCAy
KSwgW2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRd
KTsKKyAgICBFWFBFQ1RfVFJVRShyZWN0c1swXS5pc1ZlcnRpY2FsKTsKK30KKwogI2VuZGlmIC8v
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397973</attachid>
            <date>2020-04-29 10:06:49 -0700</date>
            <delta_ts>2020-04-29 15:09:16 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-211148-20200429100649.patch</filename>
            <type>text/plain</type>
            <size>25532</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiODBhMTE3NzgyODlkYWYy
MDZmMGQ0ZGU1M2EyOWNmYjFkOGIxZmIuLjI2MTY2NDE3ZTdiOTJjNGJiNjk0NDg4ZmY3ODhjNjBi
ODFjYzU1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjAtMDQtMjggIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEltcGxlbWVudCAtbWFy
a2VkVGV4dFJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTExNDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3ODY1ODkwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldHVybiB0aGUgVUlUZXh0
UmFuZ2UtbGlrZSBvYmplY3QgZm9yIHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gQ2xpZW50cyBjYW4g
dXNlIHRoaXMgcmFuZ2UgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBzZWxlY3Rpb24gcmVjdHMgb3Ig
cXVlcnkgZm9yIHRoZSBjYXJldCByZWN0IGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJhbmdl
LAorICAgICAgICBpZiBkZXNpcmVkLgorCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmRl
Y29kZSk6CisgICAgICAgIEVuY29kZSBhbmQgZGVjb2RlIHRoZSBtYXJrZWQgdGV4dCBzZWxlY3Rp
b24gcmVjdHMgYW5kIGNhcmV0IHJlY3RzIGF0IHRoZSBzdGF0ZSBhbmQgZW5kCisgICAgICAgIG9m
IHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gVGhpcyBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiB0aGF0
IHdlIGNvbXB1dGUgaW4gb3JkZXIgdG8KKyAgICAgICAgaW1wbGVtZW50IC1zZWxlY3RlZFRleHRS
YW5nZS4gSSB0aG91Z2h0IGFib3V0IGNvbGxlY3RpbmcgdGhlc2UgZGV0YWlscyBpbnRvIGNsYXNz
IGFuZAorICAgICAgICBoYXZpbmcgZWRpdG9yIHN0YXRlIGhvbGQgdHdvIGluc3RhbmNlcyBvZiBp
dDogb25lIGZvciBzZWxlY3RlZCB0ZXh0IGFuZCBvbmUgZm9yIG1hcmtlZCB0ZXh0LgorICAgICAg
ICBIb3dldmVyIEkgZGVjaWRlZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1bmxp
a2VseSB0byBmaW5kIHVzZSBvdXRzaWRlIG9mIHdoYXQgaXMKKyAgICAgICAgbmVlZGVkIHRvIGlt
cGxlbWVudCAtc2VsZWN0ZWRUZXh0UmFuZ2UgYW5kIC1tYXJrZWRUZXh0UmFuZ2UuIFRoaXMgaXMg
YmVjYXVzZSBvbmx5IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucyByZXF1aXJlIHN1Y2ggZGV0YWls
cyBzbyBhcyB0byByZXR1cm4gYW4gb3BhcXVlIFVJVGV4dFJhbmdlLWRlcml2ZWQgb2JqZWN0IHRo
YXQKKyAgICAgICAgY2FuIGJlIHBhc3NlZCB0by0gb3IgaXRzIHN1Yi1vYmplY3RzIGNhbiBiZSBw
YXNzZWQgdG8gV0tDb250ZW50VmlldydzIC1jYXJldFJlY3RGb3JQb3NpdGlvbgorICAgICAgICBh
bmQgLXNlbGVjdGlvblJlY3RzRm9yUmFuZ2UuIExpdGVyYWxseSwgV0tDb250ZW50VmlldyBkb2Vz
IG5vdCBzdXBwb3J0IG90aGVyIFVJVGV4dElucHV0CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IG9w
ZXJhdGUgb24gVUlUZXh0UmFuZ2Ugb3IgVUlUZXh0UG9zaXRpb24uIEkgZGlkbid0IHB1cnN1ZSBm
aXhpbmcgdGhpcyBpbgorICAgICAgICBnZW5lcmFsIGJlY2F1c2UgMSkgSSBkb24ndCBuZWVkIGl0
IHRvIHNvbHZlIG15IHByb2JsZW0gYW5kIDIpIFVJV0tEb2N1bWVudENvbnRleHQgU1BJIHNlZW1z
CisgICAgICAgIHRvIGJlIHRoZSBuZXcgZ2VuZXJhbC1wdXJwb3NlIHNvbHV0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOiBQcmV0dHkgcHJpbnQgYWxsIHRoZSBuZXcgbWFya2Vk
IHRleHQgZGV0YWlscyB3ZSBjb2xsZWN0LiBXaGlsZSBJIGFtIGhlcmUsCisgICAgICAgIHVzZSBW
ZWN0b3I6OmlzRW1wdHkoKSBpbnN0ZWFkIG9mIFZlY3Rvcjo6c2l6ZSgpIHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBzZWxlY3Rpb24gcmVjdHMuCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgdGV4dEZpcnN0UmVjdF0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHRleHRMYXN0UmVjdF0pOgorICAgICAgICBVcGRhdGUgY29kZSBub3cgdGhhdCB0
aGUgbWFya2VkIHRleHQgcmVjdHMgYXJlIGluIHRoZSBwb3N0IGxheW91dCBkYXRhIHN1Yi1vYmpl
Y3QuCisKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0
aW9uU3RhcnQ6XSk6IEV4dHJhY3RlZCBmcm9tIC1zZWxlY3RlZFRleHRSYW5nZS4KKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5kOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RlZFRleHRSYW5nZV0pOiBXcml0ZSBp
biB0ZXJtcyBvZiAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0CisgICAgICAgIGFu
ZCAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvbkVuZC4gQWxzbyBtb2Rlcm5pemUgdGhlIGNv
ZGUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1hcmtlZFRleHRS
YW5nZV0pOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUg
Y29uc3QpOiBDb2xsZWN0IHRoZSBtYXJrZWQgdGV4dCByZWN0cyBhbmQgdGhlIGNhcmV0CisgICAg
ICAgIHJlY3RzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZS4KKwogMjAyMC0wMy0y
NSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gU2hv
dWxkIHNob3cgaW5wdXQgdmlldyB3aGVuIGJlY2FtZSBmaXJzdCByZXNwb25kZXIgaWYga2V5Ym9h
cmQgd2FzIHNob3dpbmcgd2hlbiB0aGUgdmlldyB3YXMgcmVzaWduZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0VkaXRvclN0YXRlLmNwcAppbmRleCAyZDMyM2ZjZDE0N2RlNzU0Mjc5MDZiNTk5ZjdiYjhmNjc1
MDU1ODJiLi4xNGIwOGQ4MDEwNmZlMTcxYjEwZDA2NmQyYmVlNmU0ODU4ZThiNjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgRWRp
dG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW5jb2RlciA8PCBjYXJldFJlY3RB
dEVuZDsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVuY29kZXIgPDwgbWFy
a2VkVGV4dFJlY3RzOworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8
IG1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0OworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dENh
cmV0UmVjdEF0RW5kOwogICAgIGVuY29kZXIgPDwgd29yZEF0U2VsZWN0aW9uOwogICAgIGVuY29k
ZXIgPDwgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb247CiAgICAgZW5jb2RlciA8PCBjaGFyYWN0ZXJC
ZWZvcmVTZWxlY3Rpb247CkBAIC0xMTksOSArMTIzLDYgQEAgdm9pZCBFZGl0b3JTdGF0ZTo6UG9z
dExheW91dERhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBhdFN0YXJ0T2ZTZW50ZW5jZTsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblN0YXJ0
SXNBdFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uRW5kSXNBdFBh
cmFncmFwaEJvdW5kYXJ5OwotICAgIGVuY29kZXIgPDwgZmlyc3RNYXJrZWRSZWN0OwotICAgIGVu
Y29kZXIgPDwgbGFzdE1hcmtlZFJlY3Q7Ci0gICAgZW5jb2RlciA8PCBtYXJrZWRUZXh0OwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGVuY29kZXIgPDwgY2FuZGlkYXRlUmVxdWVzdFN0
YXJ0UG9zaXRpb247CkBAIC0xNjYsNiArMTY3LDE0IEBAIGJvb2wgRWRpdG9yU3RhdGU6OlBvc3RM
YXlvdXREYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQb3N0TGF5b3V0RGF0YSYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNl
bGVjdGlvblJlY3RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRSZWN0cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXJrZWRUZXh0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJl
Y3RBdFN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53b3JkQXRTZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pKQpAQCAtMTk0LDEyICsyMDMsNiBAQCBib29sIEVkaXRvclN0YXRl
OjpQb3N0TGF5b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUG9zdExheW91
dERhdGEmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlyc3RNYXJrZWRSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmxh
c3RNYXJrZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuZGlk
YXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24pKQpAQCAtMjg0LDE2ICsyODcsMTggQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0
YXRlKQogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJhc2VXcml0aW5nRGlyZWN0aW9uIiwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5iYXNlV3JpdGlu
Z0RpcmVjdGlvbikpOwogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJr
ZWRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaXJzdE1hcmtl
ZFJlY3QiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmZpcnN0TWFya2VkUmVjdCk7Ci0g
ICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubGFzdE1hcmtlZFJlY3QgIT0gSW50
UmVjdCgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImxhc3RNYXJrZWRSZWN0IiwgZWRpdG9y
U3RhdGUucG9zdExheW91dERhdGEoKS5sYXN0TWFya2VkUmVjdCk7Ci0gICAgaWYgKGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dC5sZW5ndGgoKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJtYXJrZWRUZXh0IiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJr
ZWRUZXh0KTsKICAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5jYXJldFJlY3RB
dEVuZCAhPSBJbnRSZWN0KCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2FyZXRSZWN0QXRF
bmQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0RW5kKTsKLSAgICBp
ZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25SZWN0cy5zaXplKCkpCisg
ICAgaWYgKCFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlvblJlY3RzLmlzRW1w
dHkoKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzZWxlY3Rpb25SZWN0cyIsIGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVjdHMpOworICAgIGlmICghZWRpdG9yU3Rh
dGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpKQorICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm1hcmtlZFRleHRSZWN0cyIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkubWFya2VkVGV4dFJlY3RzKTsKKyAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERh
dGEoKS5tYXJrZWRUZXh0Lmxlbmd0aCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1hcmtl
ZFRleHQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHQpOworICAgIGlm
IChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0
ICE9IEludFJlY3QoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRTdGFydCIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dENhcmV0
UmVjdEF0U3RhcnQpOworICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtl
ZFRleHRDYXJldFJlY3RBdEVuZCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgibWFya2VkVGV4dENhcmV0UmVjdEF0RW5kIiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQpOwogICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5
b3V0RGF0YSgpLndvcmRBdFNlbGVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJ3b3JkQXRTZWxlY3Rpb24iLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLndvcmRB
dFNlbGVjdGlvbik7CiAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
b3JTdGF0ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaAppbmRleCA0YjI1
NzcwOWM2ZTEyZDQwMjkwZGJhZWRiYjQwNDY1YzYxYjRjOGMzLi45MzM2ZjI2YmVmODkxYmJhMDI2
NTQyYTEzOGM3MWJlOGY2YzUzMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKQEAg
LTkyLDYgKzkyLDEwIEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBjYXJldFJlY3RBdEVuZDsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgICAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gbWFya2VkVGV4dFJlY3RzOworICAgICAgICBT
dHJpbmcgbWFya2VkVGV4dDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRFbmQ7CiAgICAgICAgIFN0cmluZyB3b3JkQXRTZWxlY3Rpb247CiAgICAgICAgIFVDaGFy
MzIgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24geyAwIH07CiAgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyQmVmb3JlU2VsZWN0aW9uIHsgMCB9OwpAQCAtMTA2LDkgKzExMCw2IEBAIHN0cnVjdCBFZGl0
b3JTdGF0ZSB7CiAgICAgICAgIGJvb2wgYXRTdGFydE9mU2VudGVuY2UgeyBmYWxzZSB9OwogICAg
ICAgICBib29sIHNlbGVjdGlvblN0YXJ0SXNBdFBhcmFncmFwaEJvdW5kYXJ5IHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBzZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkgeyBmYWxzZSB9
OwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0TWFya2VkUmVjdDsKLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBsYXN0TWFya2VkUmVjdDsKLSAgICAgICAgU3RyaW5nIG1hcmtlZFRleHQ7
CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHVpbnQ2NF90IGNhbmRpZGF0ZVJl
cXVlc3RTdGFydFBvc2l0aW9uIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjkxYmE4ZDhlZmZj
YjYyMzg1OWE2ZWU3YWJlMjI4OWQzOWFhNmEwNS4uOTM2N2QyMTZjOWZkOTE3NTMzOGQyNjMzZGE5
YjkzYmE3ZjJiN2JkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MTIwLDEyICs0MTIwLDIyIEBAIC0g
KEJPT0wpX3NlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogCiAtIChDR1JlY3QpdGV4dEZpcnN0UmVj
dAogewotICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbiA/IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJrZWRSZWN0IDogX2F1
dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0OworICAgIGF1dG8mIGVkaXRvclN0YXRlID0g
X3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgaWYgKGVkaXRvclN0YXRlLmhhc0NvbXBvc2l0aW9u
KSB7CisgICAgICAgIGF1dG8mIG1hcmtlZFRleHRSZWN0cyA9IGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkubWFya2VkVGV4dFJlY3RzOworICAgICAgICByZXR1cm4gbWFya2VkVGV4dFJlY3Rz
LmlzRW1wdHkoKSA/IENHUmVjdFplcm8gOiBtYXJrZWRUZXh0UmVjdHMuZmlyc3QoKS5yZWN0KCk7
CisgICAgfQorICAgIHJldHVybiBfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRGaXJzdFJlY3Q7CiB9
CiAKIC0gKENHUmVjdCl0ZXh0TGFzdFJlY3QKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaGFzQ29tcG9zaXRpb24gPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0
YSgpLmxhc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3Q7Cisg
ICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsKKyAgICBpZiAoZWRp
dG9yU3RhdGUuaGFzQ29tcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byYgbWFya2VkVGV4dFJlY3Rz
ID0gZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHM7CisgICAgICAg
IHJldHVybiBtYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpID8gQ0dSZWN0WmVybyA6IG1hcmtlZFRl
eHRSZWN0cy5sYXN0KCkucmVjdCgpOworICAgIH0KKyAgICByZXR1cm4gX2F1dG9jb3JyZWN0aW9u
RGF0YS50ZXh0TGFzdFJlY3Q7CiB9CiAKIC0gKHZvaWQpcmVwbGFjZURpY3RhdGVkVGV4dDooTlNT
dHJpbmcqKW9sZFRleHQgd2l0aFRleHQ6KE5TU3RyaW5nICopbmV3VGV4dApAQCAtNDQ3MCw0NSAr
NDQ4MCw2MyBAQCBzdGF0aWMgTlNBcnJheTxXS1RleHRTZWxlY3Rpb25SZWN0ICo+ICp3a1RleHRT
ZWxlY3Rpb25SZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZQogICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKKy0gKFdlYkNvcmU6OkZsb2F0UmVjdClfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9u
U3RhcnQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNh
bCBoZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6
b29tIHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBj
YXJldCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21l
ZCBvdXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisK
KyAgICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3
aXRoIHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtl
IGFueSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIK
KyAgICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBp
c0luSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3Qu
aGVpZ2h0KCkpCisgICAgICAgIGNhcmV0UmVjdC5zZXRXaWR0aChjYXJldFJlY3Qud2lkdGgoKSAq
IGludmVyc2VTY2FsZSk7CisgICAgZWxzZQorICAgICAgICBjYXJldFJlY3Quc2V0SGVpZ2h0KGNh
cmV0UmVjdC5oZWlnaHQoKSAqIGludmVyc2VTY2FsZSk7CisgICAgcmV0dXJuIGNhcmV0UmVjdDsK
K30KKworLSAoV2ViQ29yZTo6RmxvYXRSZWN0KV9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25F
bmQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNhbCBo
ZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6b29t
IHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBjYXJl
dCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21lZCBv
dXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisKKyAg
ICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3aXRo
IHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtlIGFu
eSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIKKyAg
ICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBpc0lu
SG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxXaWR0aCA9IGNhcmV0UmVjdC53aWR0aCgp
OworICAgICAgICBjYXJldFJlY3Quc2V0V2lkdGgob3JpZ2luYWxXaWR0aCAqIGludmVyc2VTY2Fs
ZSk7CisgICAgICAgIGNhcmV0UmVjdC5tb3ZlKGNhcmV0UmVjdC53aWR0aCgpIC0gb3JpZ2luYWxX
aWR0aCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxIZWlnaHQgPSBj
YXJldFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGNhcmV0UmVjdC5zZXRIZWlnaHQoY2FyZXRSZWN0
LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKKyAgICAgICAgY2FyZXRSZWN0Lm1vdmUoMCwgY2Fy
ZXRSZWN0LmhlaWdodCgpIC0gb3JpZ2luYWxIZWlnaHQpOworICAgIH0KKyAgICByZXR1cm4gY2Fy
ZXRSZWN0OworfQorCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdlCiB7Ci0gICAg
aWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICBhdXRvJiBlZGl0b3JTdGF0ZSA9
IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgIGF1dG8gaGFzU2VsZWN0aW9uID0gIWVkaXRvclN0
YXRlLnNlbGVjdGlvbklzTm9uZTsKKyAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBlZGl0b3JTdGF0
ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBV
SUtpdCBkb2VzIG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub25lZGl0YWJsZSBjb250
ZW50LgotICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYg
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpCisKKyAgICBhdXRvIGlzUmFu
Z2UgPSBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIGF1dG8gaXNDb250ZW50RWRp
dGFibGUgPSBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAvLyBVSUtpdCBkb2Vz
IG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub24tZWRpdGFibGUgY29udGVudC4KKyAg
ICBpZiAoIWlzQ29udGVudEVkaXRhYmxlICYmICFpc1JhbmdlKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIGF1dG8mIHBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEgPSBfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzdGFy
dFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNhcmV0UmVjdEF0U3RhcnQ7Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGVuZFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNh
cmV0UmVjdEF0RW5kOwotICAgIGRvdWJsZSBpbnZlcnNlU2NhbGUgPSBbc2VsZiBpbnZlcnNlU2Nh
bGVdOwotICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgY2FyZXQgd2lkdGgsIHdo
aWxlIHRoZSBoZWlnaHQgc2NhbGVzIHdpdGgKLSAgICAvLyB0aGUgY29udGVudCB0YWtpbmcgb3Jp
ZW50YXRpb24gaW50byBhY2NvdW50LgotICAgIC8vIFdlIGFjaGlldmUgdGhpcyBieSBzY2FsaW5n
IHRoZSB3aWR0aCB3aXRoIHRoZSBpbnZlcnNlCi0gICAgLy8gc2NhbGUgZmFjdG9yLiBUaGlzIHdh
eSwgd2hlbiBpdCBpcyBjb252ZXJ0ZWQgZnJvbSB0aGUgY29udGVudCB2aWV3Ci0gICAgLy8gdGhl
IHdpZHRoIHJlbWFpbnMgdW5jaGFuZ2VkLgotICAgIGlmIChzdGFydFJlY3Qud2lkdGgoKSA8IHN0
YXJ0UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc3RhcnRSZWN0LnNldFdpZHRoKHN0YXJ0UmVjdC53
aWR0aCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXJ0UmVjdC5zZXRI
ZWlnaHQoc3RhcnRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBpZiAoZW5kUmVj
dC53aWR0aCgpIDwgZW5kUmVjdC5oZWlnaHQoKSkgewotICAgICAgICBkb3VibGUgZGVsdGEgPSBl
bmRSZWN0LndpZHRoKCk7Ci0gICAgICAgIGVuZFJlY3Quc2V0V2lkdGgoZW5kUmVjdC53aWR0aCgp
ICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBlbmRSZWN0LndpZHRoKCkgLSBkZWx0
YTsKLSAgICAgICAgZW5kUmVjdC5tb3ZlKGRlbHRhLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBkb3VibGUgZGVsdGEgPSBlbmRSZWN0LmhlaWdodCgpOwotICAgICAgICBlbmRSZWN0LnNldEhl
aWdodChlbmRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBl
bmRSZWN0LmhlaWdodCgpIC0gZGVsdGE7Ci0gICAgICAgIGVuZFJlY3QubW92ZSgwLCBkZWx0YSk7
Ci0gICAgfQotICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOl9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1JhbmdlOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0YWJsZTpfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRSZWN0OnN0YXJ0UmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmRSZWN0OmVuZFJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25S
ZWN0czp3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0
RGF0YSgpLnNlbGVjdGlvblJlY3RzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRU
ZXh0TGVuZ3RoOnBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoXTsK
KworICAgIGF1dG8gY2FyZXRTdGFydFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2Vs
ZWN0aW9uU3RhcnQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5jYXJldFJl
Y3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRDYXJldFJl
Y3RGb3JTZWxlY3Rpb25FbmQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5j
YXJldFJlY3RBdEVuZF07CisgICAgYXV0byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlv
blJlY3RzKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVj
dHMpOworICAgIGF1dG8gc2VsZWN0ZWRUZXh0TGVuZ3RoID0gZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0
UmFuZ2VXaXRoU3RhdGU6IWhhc1NlbGVjdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKENHUmVjdCljYXJldFJlY3RGb3JQb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgpAQCAtNDU0NCw3ICs0NTcyLDIwIEBAIC0gKE5TU3Ry
aW5nICopbWFya2VkVGV4dAogCiAtIChVSVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQogewot
ICAgIHJldHVybiBuaWw7CisgICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3Rh
dGUoKTsKKyAgICBib29sIGhhc0NvbXBvc2l0aW9uID0gZWRpdG9yU3RhdGUuaGFzQ29tcG9zaXRp
b247CisgICAgaWYgKCFoYXNDb21wb3NpdGlvbiB8fCBlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0
TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBhdXRvJiBwb3N0TGF5b3V0RGF0
YSA9IGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCk7CisgICAgYXV0byB1bnNjYWxlZENhcmV0
UmVjdEF0U3RhcnQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydDsK
KyAgICBhdXRvIHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0Q2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc1JhbmdlID0gdW5zY2FsZWRDYXJldFJlY3RB
dFN0YXJ0ICE9IHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc0NvbnRlbnRFZGl0
YWJsZSA9IGVkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlOworICAgIGF1dG8gY2FyZXRTdGFy
dFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uU3RhcnQ6dW5zY2FsZWRD
YXJldFJlY3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRD
YXJldFJlY3RGb3JTZWxlY3Rpb25FbmQ6dW5zY2FsZWRDYXJldFJlY3RBdEVuZF07CisgICAgYXV0
byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CisgICAgYXV0byBzZWxlY3RlZFRleHRMZW5ndGggPSBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0Lmxlbmd0aCgpOworICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJh
bmdlV2l0aFN0YXRlOiFoYXNDb21wb3NpdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKE5TRGljdGlvbmFyeSAqKW1hcmtlZFRleHRTdHls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBmZWU0MGQxNTUwYTgzMWY2YWY0NDZiMTQyZjViMzMzNTJiNzg3MjcwLi5lZDIz
OTdkNmUwYTI3ZjFiMjQ4MmI0ZDIyZWQ5ZmQ3NmYzODJlZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjYyLDE3ICsy
NjIsMTUgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICBhdXRvIHZpZXcgPSBtYWtlUmVmKCpm
cmFtZS52aWV3KCkpOwogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKLSAgICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpOwotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gY29t
cG9zaXRpb25SZWN0czsKLSAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UpIHsKLSAgICAgICAg
ICAgIGNvbXBvc2l0aW9uUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhjb21wb3NpdGlvblJl
Y3RzKTsKLSAgICAgICAgICAgIGlmIChjb21wb3NpdGlvblJlY3RzLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5maXJzdE1hcmtlZFJlY3QgPSB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoY29tcG9zaXRpb25SZWN0c1swXS5yZWN0KCkpOwotICAgICAgICAgICAgaWYgKGNv
bXBvc2l0aW9uUmVjdHMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0
YS5sYXN0TWFya2VkUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblJl
Y3RzLmxhc3QoKS5yZWN0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLmxhc3RNYXJrZWRSZWN0ID0gcG9zdExheW91dERhdGEuZmlyc3RNYXJrZWRS
ZWN0OworICAgICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKSB7CisgICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKKyAgICAg
ICAgICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RM
YXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
Lm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkp
OworICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNlbGVjdGlvbigqY29t
cG9zaXRpb25SYW5nZSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRl
Rml4ZWQgKi8pKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJl
Y3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52
aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICov
KSk7CisKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRmYTc2YzYyNjcxOGE1YmViZTZiMTU5NDhjMTljYTA4YzA1
MTg3NWEuLjFhOWZiMmEyMzg4NzVkZDU0MzYxMzkxODgwNThkYzUzMWNkNWNlNTIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMC0wNC0yOCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW2lPU10gSW1wbGVtZW50IC1tYXJrZWRUZXh0UmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTE0OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTc4NjU4OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0VkaXRvclN0YXRlVGVzdHMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjph
cHBseUFoZW1TdHlsZSk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisK
IDIwMTktMDktMTMgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IFN1cHBvcnQgYnVpbGRpbmcgV2ViS2l0IGZvciBNYWMgQ2F0YWx5c3QgZnJvbSBYY29kZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JTdGF0
ZVRlc3RzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JT
dGF0ZVRlc3RzLm1tCmluZGV4IDQ0OWQ3ZjFmMDcxNTYwOTFkYzljMTdjNzU1ZjJhYzU4MjFmNTE2
OWQuLjlkOWE1MDBhZWUyMzZmNjllYzAwZGZkM2JiNzkwNGY1ZWI2YTRjZDYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9yU3RhdGVUZXN0cy5t
bQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0VkaXRvclN0YXRl
VGVzdHMubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjcsMTMgKzI3LDE1IEBACiAKICNpbXBvcnQgIkVkaXRpbmdUZXN0SGFybmVzcy5o
IgogI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRlc3RDb2NvYS5oIgor
I2ltcG9ydCAiVGVzdElucHV0RGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIK
KyNpbXBvcnQgIlVzZXJJbnRlcmZhY2VTd2l6emxlci5oIgogI2ltcG9ydCA8V2ViS2l0L1dLV2Vi
Vmlld1ByaXZhdGUuaD4KICNpbXBvcnQgPHd0Zi9WZWN0b3IuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgotI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4K
ICNlbmRpZgogCiBzdGF0aWMgdm9pZCogY29uc3QgU2VsZWN0aW9uQXR0cmlidXRlc09ic2VydmF0
aW9uQ29udGV4dCA9ICh2b2lkKikmU2VsZWN0aW9uQXR0cmlidXRlc09ic2VydmF0aW9uQ29udGV4
dDsKQEAgLTQyOSw2ICs0MzEsMTAxIEBAIFRFU1QoRWRpdG9yU3RhdGVUZXN0cywgU2VsZWN0ZWRU
ZXh0KQogICAgIEVYUEVDVF9HVChbW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddIHNlbGVj
dGVkVGV4dF0ubGVuZ3RoLCAwVSk7CiB9CiAKK2NvbnN0ZXhwciB1bnNpZ25lZCBnbHlwaFdpZHRo
IHsgMjUgfTsgLy8gcGl4ZWxzCisKK3N0YXRpYyBOU1N0cmluZyAqYXBwbHlBaGVtU3R5bGUoTlNT
dHJpbmcgKmh0bWxTdHJpbmcpCit7CisgICAgcmV0dXJuIFtOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiPHN0eWxlPkBmb250LWZhY2UgeyBmb250LWZhbWlseTogQWhlbTsgc3JjOiB1cmwoQWhl
bS50dGYpOyB9IGJvZHkgeyBtYXJnaW46IDA7IH0gKiB7IGZvbnQ6ICV1cHgvMSBBaGVtOyAtd2Vi
a2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7IH08L3N0eWxlPjxtZXRhIG5hbWU9J3ZpZXdwb3J0
JyBjb250ZW50PSd3aWR0aD05ODAsIGluaXRpYWwtc2NhbGU9MS4wJz4lQCIsIGdseXBoV2lkdGgs
IGh0bWxTdHJpbmddOworfQorCitURVNUKEVkaXRvclN0YXRlVGVzdHMsIE1hcmtlZFRleHRSYW5n
ZV9Ib3Jpem9udGFsQ2FyZXRTZWxlY3Rpb24pCit7CisgICAgSVBob25lVXNlckludGVyZmFjZVN3
aXp6bGVyIHVzZXJJbnRlcmZhY2VTd2l6emxlcjsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0
TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwg
ODAwLCA2MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmFw
cGx5QWhlbVN0eWxlKEAiPGJvZHkgY29udGVudGVkaXRhYmxlPSd0cnVlJz48L2JvZHk+IildOwor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmZvY3VzKCkiXTsKKworICAgIGF1dG8gKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgdGV4dElucHV0
Q29udGVudFZpZXddOworICAgIFtjb250ZW50VmlldyBzZXRNYXJrZWRUZXh0OkAiaGVsbG8iIHNl
bGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0
UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIFVJVGV4dFJhbmdlICptYXJrZWRUZXh0UmFuZ2Ug
PSBbY29udGVudFZpZXcgbWFya2VkVGV4dFJhbmdlXTsKKyAgICBOU0FycmF5PFVJVGV4dFNlbGVj
dGlvblJlY3QgKj4gKnJlY3RzID0gW2NvbnRlbnRWaWV3IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6
bWFya2VkVGV4dFJhbmdlXTsKKyAgICBFWFBFQ1RfRVEoMVUsIHJlY3RzLmNvdW50KTsKKyAgICBF
WFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAwLCA1ICogZ2x5cGhXaWR0aCwgZ2x5cGhXaWR0aCksIHJl
Y3RzWzBdLnJlY3QpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDAsIDIsIGdseXBoV2lk
dGgpLCBbY29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLnN0
YXJ0XSk7CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMTI0LCAwLCAyLCBnbHlwaFdpZHRoKSwg
W2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRdKTsK
KyAgICBFWFBFQ1RfRkFMU0UocmVjdHNbMF0uaXNWZXJ0aWNhbCk7Cit9CisKK1RFU1QoRWRpdG9y
U3RhdGVUZXN0cywgTWFya2VkVGV4dFJhbmdlX0hvcml6b250YWxSYW5nZVNlbGVjdGlvbikKK3sK
KyAgICBJUGhvbmVVc2VySW50ZXJmYWNlU3dpenpsZXIgdXNlckludGVyZmFjZVN3aXp6bGVyOwor
CisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbd2ViVmlldyBzeW5j
aHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXBwbHlBaGVtU3R5bGUoQCI8Ym9keSBjb250ZW50ZWRp
dGFibGU9J3RydWUnPjwvYm9keT4iKV07CisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAImRvY3VtZW50LmJvZHkuZm9jdXMoKSJdOworICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0VGV4dCIgYXJndW1lbnQ6QCJIZWxs
byB3b3JsZCJdOworCisgICAgYXV0byAqY29udGVudFZpZXcgPSBbd2ViVmlldyB0ZXh0SW5wdXRD
b250ZW50Vmlld107CisgICAgW2NvbnRlbnRWaWV3IHNlbGVjdFdvcmRCYWNrd2FyZF07CisgICAg
W2NvbnRlbnRWaWV3IHNldE1hcmtlZFRleHQ6QCJ3b3JsZCIgc2VsZWN0ZWRSYW5nZTpOU01ha2VS
YW5nZSgwLCA1KV07CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVd
OworCisgICAgVUlUZXh0UmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IFtjb250ZW50VmlldyBtYXJr
ZWRUZXh0UmFuZ2VdOworICAgIE5TQXJyYXk8VUlUZXh0U2VsZWN0aW9uUmVjdCAqPiAqcmVjdHMg
PSBbY29udGVudFZpZXcgc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTptYXJrZWRUZXh0UmFuZ2VdOwor
ICAgIEVYUEVDVF9FUSgxVSwgcmVjdHMuY291bnQpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtl
KDE1MCwgMCwgNSAqIGdseXBoV2lkdGgsIGdseXBoV2lkdGgpLCByZWN0c1swXS5yZWN0KTsKKyAg
ICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgxNDksIDAsIDIsIGdseXBoV2lkdGgpLCBbY29udGVudFZp
ZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLnN0YXJ0XSk7CisgICAgRVhQ
RUNUX0VRKENHUmVjdE1ha2UoMjc0LCAwLCAyLCBnbHlwaFdpZHRoKSwgW2NvbnRlbnRWaWV3IGNh
cmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRdKTsKKyAgICBFWFBFQ1RfRkFM
U0UocmVjdHNbMF0uaXNWZXJ0aWNhbCk7Cit9CisKK1RFU1QoRWRpdG9yU3RhdGVUZXN0cywgTWFy
a2VkVGV4dFJhbmdlX1ZlcnRpY2FsQ2FyZXRTZWxlY3Rpb24pCit7CisgICAgSVBob25lVXNlcklu
dGVyZmFjZVN3aXp6bGVyIHVzZXJJbnRlcmZhY2VTd2l6emxlcjsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOmFwcGx5QWhlbVN0eWxlKEAiPGJvZHkgc3R5bGU9J3dyaXRpbmctbW9kZTogdmVydGlj
YWwtbHInIGNvbnRlbnRlZGl0YWJsZT0ndHJ1ZSc+PC9ib2R5PiIpXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5mb2N1cygpIl07CisK
KyAgICBhdXRvICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XTsK
KyAgICBbY29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpAImhlbGxvIiBzZWxlY3RlZFJhbmdlOk5T
TWFrZVJhbmdlKDAsIDApXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZV07CisKKyAgICBVSVRleHRSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2NvbnRlbnRWaWV3
IG1hcmtlZFRleHRSYW5nZV07CisgICAgTlNBcnJheTxVSVRleHRTZWxlY3Rpb25SZWN0ICo+ICpy
ZWN0cyA9IFtjb250ZW50VmlldyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOm1hcmtlZFRleHRSYW5n
ZV07CisgICAgRVhQRUNUX0VRKDFVLCByZWN0cy5jb3VudCk7CisgICAgRVhQRUNUX0VRKENHUmVj
dE1ha2UoMCwgMCwgZ2x5cGhXaWR0aCwgNSAqIGdseXBoV2lkdGgpLCByZWN0c1swXS5yZWN0KTsK
KyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAwLCBnbHlwaFdpZHRoLCAyKSwgW2NvbnRlbnRW
aWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5zdGFydF0pOworICAgIEVY
UEVDVF9FUShDR1JlY3RNYWtlKDAsIDEyNCwgZ2x5cGhXaWR0aCwgMiksIFtjb250ZW50VmlldyBj
YXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2UuZW5kXSk7CisgICAgRVhQRUNUX1RS
VUUocmVjdHNbMF0uaXNWZXJ0aWNhbCk7Cit9CisKK1RFU1QoRWRpdG9yU3RhdGVUZXN0cywgTWFy
a2VkVGV4dFJhbmdlX1ZlcnRpY2FsUmFuZ2VTZWxlY3Rpb24pCit7CisgICAgSVBob25lVXNlcklu
dGVyZmFjZVN3aXp6bGVyIHVzZXJJbnRlcmZhY2VTd2l6emxlcjsKKworICAgIGF1dG8gd2ViVmll
dyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJl
Y3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1M
U3RyaW5nOmFwcGx5QWhlbVN0eWxlKEAiPGJvZHkgc3R5bGU9J3dyaXRpbmctbW9kZTogdmVydGlj
YWwtbHInIGNvbnRlbnRlZGl0YWJsZT0ndHJ1ZSc+PC9ib2R5PiIpXTsKKyAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5mb2N1cygpIl07Cisg
ICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRUZXh0
IiBhcmd1bWVudDpAIkhlbGxvIHdvcmxkIl07CisKKyAgICBhdXRvICpjb250ZW50VmlldyA9IFt3
ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZpZXcgc2VsZWN0V29y
ZEJhY2t3YXJkXTsKKyAgICBbY29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpAIndvcmxkIiBzZWxl
Y3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDUpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFBy
ZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBVSVRleHRSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0g
W2NvbnRlbnRWaWV3IG1hcmtlZFRleHRSYW5nZV07CisgICAgTlNBcnJheTxVSVRleHRTZWxlY3Rp
b25SZWN0ICo+ICpyZWN0cyA9IFtjb250ZW50VmlldyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOm1h
cmtlZFRleHRSYW5nZV07CisgICAgRVhQRUNUX0VRKDFVLCByZWN0cy5jb3VudCk7CisgICAgRVhQ
RUNUX0VRKENHUmVjdE1ha2UoMCwgMTUwLCBnbHlwaFdpZHRoLCA1ICogZ2x5cGhXaWR0aCksIHJl
Y3RzWzBdLnJlY3QpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDE0OSwgZ2x5cGhXaWR0
aCwgMiksIFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2Uu
c3RhcnRdKTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAyNzQsIGdseXBoV2lkdGgsIDIp
LCBbY29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLmVuZF0p
OworICAgIEVYUEVDVF9UUlVFKHJlY3RzWzBdLmlzVmVydGljYWwpOworfQorCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397998</attachid>
            <date>2020-04-29 15:09:17 -0700</date>
            <delta_ts>2020-04-30 09:00:52 -0700</delta_ts>
            <desc>Patch and tests</desc>
            <filename>bug-211148-20200429150917.patch</filename>
            <type>text/plain</type>
            <size>27929</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiODBhMTE3NzgyODlkYWYy
MDZmMGQ0ZGU1M2EyOWNmYjFkOGIxZmIuLjI2MTY2NDE3ZTdiOTJjNGJiNjk0NDg4ZmY3ODhjNjBi
ODFjYzU1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjAtMDQtMjggIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEltcGxlbWVudCAtbWFy
a2VkVGV4dFJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTExNDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3ODY1ODkwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJldHVybiB0aGUgVUlUZXh0
UmFuZ2UtbGlrZSBvYmplY3QgZm9yIHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gQ2xpZW50cyBjYW4g
dXNlIHRoaXMgcmFuZ2UgdG8KKyAgICAgICAgYWNjZXNzIHRoZSBzZWxlY3Rpb24gcmVjdHMgb3Ig
cXVlcnkgZm9yIHRoZSBjYXJldCByZWN0IGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHJhbmdl
LAorICAgICAgICBpZiBkZXNpcmVkLgorCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmRl
Y29kZSk6CisgICAgICAgIEVuY29kZSBhbmQgZGVjb2RlIHRoZSBtYXJrZWQgdGV4dCBzZWxlY3Rp
b24gcmVjdHMgYW5kIGNhcmV0IHJlY3RzIGF0IHRoZSBzdGF0ZSBhbmQgZW5kCisgICAgICAgIG9m
IHRoZSBtYXJrZWQgdGV4dCByYW5nZS4gVGhpcyBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiB0aGF0
IHdlIGNvbXB1dGUgaW4gb3JkZXIgdG8KKyAgICAgICAgaW1wbGVtZW50IC1zZWxlY3RlZFRleHRS
YW5nZS4gSSB0aG91Z2h0IGFib3V0IGNvbGxlY3RpbmcgdGhlc2UgZGV0YWlscyBpbnRvIGNsYXNz
IGFuZAorICAgICAgICBoYXZpbmcgZWRpdG9yIHN0YXRlIGhvbGQgdHdvIGluc3RhbmNlcyBvZiBp
dDogb25lIGZvciBzZWxlY3RlZCB0ZXh0IGFuZCBvbmUgZm9yIG1hcmtlZCB0ZXh0LgorICAgICAg
ICBIb3dldmVyIEkgZGVjaWRlZCBhZ2FpbnN0IGl0IGJlY2F1c2UgdGhpcyBjbGFzcyBpcyB1bmxp
a2VseSB0byBmaW5kIHVzZSBvdXRzaWRlIG9mIHdoYXQgaXMKKyAgICAgICAgbmVlZGVkIHRvIGlt
cGxlbWVudCAtc2VsZWN0ZWRUZXh0UmFuZ2UgYW5kIC1tYXJrZWRUZXh0UmFuZ2UuIFRoaXMgaXMg
YmVjYXVzZSBvbmx5IHRob3NlCisgICAgICAgIGZ1bmN0aW9ucyByZXF1aXJlIHN1Y2ggZGV0YWls
cyBzbyBhcyB0byByZXR1cm4gYW4gb3BhcXVlIFVJVGV4dFJhbmdlLWRlcml2ZWQgb2JqZWN0IHRo
YXQKKyAgICAgICAgY2FuIGJlIHBhc3NlZCB0by0gb3IgaXRzIHN1Yi1vYmplY3RzIGNhbiBiZSBw
YXNzZWQgdG8gV0tDb250ZW50VmlldydzIC1jYXJldFJlY3RGb3JQb3NpdGlvbgorICAgICAgICBh
bmQgLXNlbGVjdGlvblJlY3RzRm9yUmFuZ2UuIExpdGVyYWxseSwgV0tDb250ZW50VmlldyBkb2Vz
IG5vdCBzdXBwb3J0IG90aGVyIFVJVGV4dElucHV0CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0IG9w
ZXJhdGUgb24gVUlUZXh0UmFuZ2Ugb3IgVUlUZXh0UG9zaXRpb24uIEkgZGlkbid0IHB1cnN1ZSBm
aXhpbmcgdGhpcyBpbgorICAgICAgICBnZW5lcmFsIGJlY2F1c2UgMSkgSSBkb24ndCBuZWVkIGl0
IHRvIHNvbHZlIG15IHByb2JsZW0gYW5kIDIpIFVJV0tEb2N1bWVudENvbnRleHQgU1BJIHNlZW1z
CisgICAgICAgIHRvIGJlIHRoZSBuZXcgZ2VuZXJhbC1wdXJwb3NlIHNvbHV0aW9uLgorCisgICAg
ICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOiBQcmV0dHkgcHJpbnQgYWxsIHRoZSBuZXcgbWFya2Vk
IHRleHQgZGV0YWlscyB3ZSBjb2xsZWN0LiBXaGlsZSBJIGFtIGhlcmUsCisgICAgICAgIHVzZSBW
ZWN0b3I6OmlzRW1wdHkoKSBpbnN0ZWFkIG9mIFZlY3Rvcjo6c2l6ZSgpIHRvIGNoZWNrIGlmIHRo
ZXJlIGFyZSBzZWxlY3Rpb24gcmVjdHMuCisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmg6
CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgdGV4dEZpcnN0UmVjdF0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHRleHRMYXN0UmVjdF0pOgorICAgICAgICBVcGRhdGUgY29kZSBub3cgdGhhdCB0
aGUgbWFya2VkIHRleHQgcmVjdHMgYXJlIGluIHRoZSBwb3N0IGxheW91dCBkYXRhIHN1Yi1vYmpl
Y3QuCisKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0
aW9uU3RhcnQ6XSk6IEV4dHJhY3RlZCBmcm9tIC1zZWxlY3RlZFRleHRSYW5nZS4KKyAgICAgICAg
KC1bV0tDb250ZW50VmlldyBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5kOl0pOiBEaXR0
by4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzZWxlY3RlZFRleHRSYW5nZV0pOiBXcml0ZSBp
biB0ZXJtcyBvZiAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0CisgICAgICAgIGFu
ZCAtX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvbkVuZC4gQWxzbyBtb2Rlcm5pemUgdGhlIGNv
ZGUgd2hpbGUgSSBhbSBoZXJlLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1hcmtlZFRleHRS
YW5nZV0pOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUg
Y29uc3QpOiBDb2xsZWN0IHRoZSBtYXJrZWQgdGV4dCByZWN0cyBhbmQgdGhlIGNhcmV0CisgICAg
ICAgIHJlY3RzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZS4KKwogMjAyMC0wMy0y
NSAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gU2hv
dWxkIHNob3cgaW5wdXQgdmlldyB3aGVuIGJlY2FtZSBmaXJzdCByZXNwb25kZXIgaWYga2V5Ym9h
cmQgd2FzIHNob3dpbmcgd2hlbiB0aGUgdmlldyB3YXMgcmVzaWduZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L0VkaXRvclN0YXRlLmNwcAppbmRleCAyZDMyM2ZjZDE0N2RlNzU0Mjc5MDZiNTk5ZjdiYjhmNjc1
MDU1ODJiLi4xNGIwOGQ4MDEwNmZlMTcxYjEwZDA2NmQyYmVlNmU0ODU4ZThiNjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC0xMDUsNiArMTA1LDEwIEBAIHZvaWQgRWRp
dG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW5jb2RlciA8PCBjYXJldFJlY3RB
dEVuZDsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVuY29kZXIgPDwgbWFy
a2VkVGV4dFJlY3RzOworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dDsKKyAgICBlbmNvZGVyIDw8
IG1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0OworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dENh
cmV0UmVjdEF0RW5kOwogICAgIGVuY29kZXIgPDwgd29yZEF0U2VsZWN0aW9uOwogICAgIGVuY29k
ZXIgPDwgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb247CiAgICAgZW5jb2RlciA8PCBjaGFyYWN0ZXJC
ZWZvcmVTZWxlY3Rpb247CkBAIC0xMTksOSArMTIzLDYgQEAgdm9pZCBFZGl0b3JTdGF0ZTo6UG9z
dExheW91dERhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5j
b2RlciA8PCBhdFN0YXJ0T2ZTZW50ZW5jZTsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblN0YXJ0
SXNBdFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVuY29kZXIgPDwgc2VsZWN0aW9uRW5kSXNBdFBh
cmFncmFwaEJvdW5kYXJ5OwotICAgIGVuY29kZXIgPDwgZmlyc3RNYXJrZWRSZWN0OwotICAgIGVu
Y29kZXIgPDwgbGFzdE1hcmtlZFJlY3Q7Ci0gICAgZW5jb2RlciA8PCBtYXJrZWRUZXh0OwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGVuY29kZXIgPDwgY2FuZGlkYXRlUmVxdWVzdFN0
YXJ0UG9zaXRpb247CkBAIC0xNjYsNiArMTY3LDE0IEBAIGJvb2wgRWRpdG9yU3RhdGU6OlBvc3RM
YXlvdXREYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQb3N0TGF5b3V0RGF0YSYK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNl
bGVjdGlvblJlY3RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRSZWN0cykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXJrZWRUZXh0KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJl
Y3RBdFN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53b3JkQXRTZWxlY3Rpb24pKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pKQpAQCAtMTk0LDEyICsyMDMsNiBAQCBib29sIEVkaXRvclN0YXRl
OjpQb3N0TGF5b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgUG9zdExheW91
dERhdGEmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlyc3RNYXJrZWRSZWN0KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lmxh
c3RNYXJrZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1hcmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYK
ICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuY2FuZGlk
YXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24pKQpAQCAtMjg0LDE2ICsyODcsMTggQEAgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRpdG9yU3RhdGUmIGVkaXRvclN0
YXRlKQogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJhc2VXcml0aW5nRGlyZWN0aW9uIiwgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5iYXNlV3JpdGlu
Z0RpcmVjdGlvbikpOwogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0gICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJr
ZWRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJmaXJzdE1hcmtl
ZFJlY3QiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmZpcnN0TWFya2VkUmVjdCk7Ci0g
ICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubGFzdE1hcmtlZFJlY3QgIT0gSW50
UmVjdCgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImxhc3RNYXJrZWRSZWN0IiwgZWRpdG9y
U3RhdGUucG9zdExheW91dERhdGEoKS5sYXN0TWFya2VkUmVjdCk7Ci0gICAgaWYgKGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dC5sZW5ndGgoKSkKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJtYXJrZWRUZXh0IiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJr
ZWRUZXh0KTsKICAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5jYXJldFJlY3RB
dEVuZCAhPSBJbnRSZWN0KCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgiY2FyZXRSZWN0QXRF
bmQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0RW5kKTsKLSAgICBp
ZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25SZWN0cy5zaXplKCkpCisg
ICAgaWYgKCFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlvblJlY3RzLmlzRW1w
dHkoKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzZWxlY3Rpb25SZWN0cyIsIGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVjdHMpOworICAgIGlmICghZWRpdG9yU3Rh
dGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpKQorICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm1hcmtlZFRleHRSZWN0cyIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkubWFya2VkVGV4dFJlY3RzKTsKKyAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERh
dGEoKS5tYXJrZWRUZXh0Lmxlbmd0aCgpKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1hcmtl
ZFRleHQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHQpOworICAgIGlm
IChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0
ICE9IEludFJlY3QoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRTdGFydCIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dENhcmV0
UmVjdEF0U3RhcnQpOworICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtl
ZFRleHRDYXJldFJlY3RBdEVuZCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgibWFya2VkVGV4dENhcmV0UmVjdEF0RW5kIiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQpOwogICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5
b3V0RGF0YSgpLndvcmRBdFNlbGVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJ3b3JkQXRTZWxlY3Rpb24iLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLndvcmRB
dFNlbGVjdGlvbik7CiAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuY2hhcmFj
dGVyQWZ0ZXJTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0
b3JTdGF0ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuaAppbmRleCA0YjI1
NzcwOWM2ZTEyZDQwMjkwZGJhZWRiYjQwNDY1YzYxYjRjOGMzLi45MzM2ZjI2YmVmODkxYmJhMDI2
NTQyYTEzOGM3MWJlOGY2YzUzMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKQEAg
LTkyLDYgKzkyLDEwIEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBjYXJldFJlY3RBdEVuZDsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgICAgICBW
ZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gbWFya2VkVGV4dFJlY3RzOworICAgICAgICBT
dHJpbmcgbWFya2VkVGV4dDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJrZWRUZXh0Q2FyZXRS
ZWN0QXRFbmQ7CiAgICAgICAgIFN0cmluZyB3b3JkQXRTZWxlY3Rpb247CiAgICAgICAgIFVDaGFy
MzIgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24geyAwIH07CiAgICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyQmVmb3JlU2VsZWN0aW9uIHsgMCB9OwpAQCAtMTA2LDkgKzExMCw2IEBAIHN0cnVjdCBFZGl0
b3JTdGF0ZSB7CiAgICAgICAgIGJvb2wgYXRTdGFydE9mU2VudGVuY2UgeyBmYWxzZSB9OwogICAg
ICAgICBib29sIHNlbGVjdGlvblN0YXJ0SXNBdFBhcmFncmFwaEJvdW5kYXJ5IHsgZmFsc2UgfTsK
ICAgICAgICAgYm9vbCBzZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkgeyBmYWxzZSB9
OwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0TWFya2VkUmVjdDsKLSAgICAgICAgV2Vi
Q29yZTo6SW50UmVjdCBsYXN0TWFya2VkUmVjdDsKLSAgICAgICAgU3RyaW5nIG1hcmtlZFRleHQ7
CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHVpbnQ2NF90IGNhbmRpZGF0ZVJl
cXVlc3RTdGFydFBvc2l0aW9uIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMjkxYmE4ZDhlZmZj
YjYyMzg1OWE2ZWU3YWJlMjI4OWQzOWFhNmEwNS4uOTM2N2QyMTZjOWZkOTE3NTMzOGQyNjMzZGE5
YjkzYmE3ZjJiN2JkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MTIwLDEyICs0MTIwLDIyIEBAIC0g
KEJPT0wpX3NlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogCiAtIChDR1JlY3QpdGV4dEZpcnN0UmVj
dAogewotICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21wb3NpdGlvbiA/IF9w
YWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJrZWRSZWN0IDogX2F1
dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0OworICAgIGF1dG8mIGVkaXRvclN0YXRlID0g
X3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgaWYgKGVkaXRvclN0YXRlLmhhc0NvbXBvc2l0aW9u
KSB7CisgICAgICAgIGF1dG8mIG1hcmtlZFRleHRSZWN0cyA9IGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkubWFya2VkVGV4dFJlY3RzOworICAgICAgICByZXR1cm4gbWFya2VkVGV4dFJlY3Rz
LmlzRW1wdHkoKSA/IENHUmVjdFplcm8gOiBtYXJrZWRUZXh0UmVjdHMuZmlyc3QoKS5yZWN0KCk7
CisgICAgfQorICAgIHJldHVybiBfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRGaXJzdFJlY3Q7CiB9
CiAKIC0gKENHUmVjdCl0ZXh0TGFzdFJlY3QKIHsKLSAgICByZXR1cm4gX3BhZ2UtPmVkaXRvclN0
YXRlKCkuaGFzQ29tcG9zaXRpb24gPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0
YSgpLmxhc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3Q7Cisg
ICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsKKyAgICBpZiAoZWRp
dG9yU3RhdGUuaGFzQ29tcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byYgbWFya2VkVGV4dFJlY3Rz
ID0gZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHM7CisgICAgICAg
IHJldHVybiBtYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpID8gQ0dSZWN0WmVybyA6IG1hcmtlZFRl
eHRSZWN0cy5sYXN0KCkucmVjdCgpOworICAgIH0KKyAgICByZXR1cm4gX2F1dG9jb3JyZWN0aW9u
RGF0YS50ZXh0TGFzdFJlY3Q7CiB9CiAKIC0gKHZvaWQpcmVwbGFjZURpY3RhdGVkVGV4dDooTlNT
dHJpbmcqKW9sZFRleHQgd2l0aFRleHQ6KE5TU3RyaW5nICopbmV3VGV4dApAQCAtNDQ3MCw0NSAr
NDQ4MCw2MyBAQCBzdGF0aWMgTlNBcnJheTxXS1RleHRTZWxlY3Rpb25SZWN0ICo+ICp3a1RleHRT
ZWxlY3Rpb25SZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZQogICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKKy0gKFdlYkNvcmU6OkZsb2F0UmVjdClfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9u
U3RhcnQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNh
bCBoZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6
b29tIHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBj
YXJldCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21l
ZCBvdXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisK
KyAgICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3
aXRoIHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtl
IGFueSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIK
KyAgICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBp
c0luSG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3Qu
aGVpZ2h0KCkpCisgICAgICAgIGNhcmV0UmVjdC5zZXRXaWR0aChjYXJldFJlY3Qud2lkdGgoKSAq
IGludmVyc2VTY2FsZSk7CisgICAgZWxzZQorICAgICAgICBjYXJldFJlY3Quc2V0SGVpZ2h0KGNh
cmV0UmVjdC5oZWlnaHQoKSAqIGludmVyc2VTY2FsZSk7CisgICAgcmV0dXJuIGNhcmV0UmVjdDsK
K30KKworLSAoV2ViQ29yZTo6RmxvYXRSZWN0KV9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25F
bmQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAvLyBUaGUgbG9naWNhbCBo
ZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkgdGhlIHZpZXcncyB6b29t
IHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVjdCB0aGF0IHRoZSBjYXJl
dCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAvLyB3aGVuIHpvb21lZCBv
dXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVyc2VTY2FsZV07CisKKyAg
ICAvLyBJbiB0aGVvcnksIHRoZSB3cml0aW5nIG1vZGUgc2hvdWxkIGJlIHNlbnQgb3ZlciB3aXRo
IHRoZSBlZGl0b3Igc3RhdGUgYmVjYXVzZQorICAgIC8vIHRoZSBjYXJldCBjb3VsZCB0YWtlIGFu
eSBzaGFwZS4gSW4gcHJhY3RpY2UsIHRoZSBjYXJldCBpcyBhbHdheXMgcmVjdGFuZ3VsYXIKKyAg
ICAvLyBhbmQgZGlzcGxheWVkIGJldHdlZW4gY2hhcmFjdGVycy4KKyAgICBpZiAoYm9vbCBpc0lu
SG9yaXpvbnRhbFdyaXRpbmdNb2RlID0gY2FyZXRSZWN0LndpZHRoKCkgPCBjYXJldFJlY3QuaGVp
Z2h0KCkpIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxXaWR0aCA9IGNhcmV0UmVjdC53aWR0aCgp
OworICAgICAgICBjYXJldFJlY3Quc2V0V2lkdGgob3JpZ2luYWxXaWR0aCAqIGludmVyc2VTY2Fs
ZSk7CisgICAgICAgIGNhcmV0UmVjdC5tb3ZlKGNhcmV0UmVjdC53aWR0aCgpIC0gb3JpZ2luYWxX
aWR0aCwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmxvYXQgb3JpZ2luYWxIZWlnaHQgPSBj
YXJldFJlY3QuaGVpZ2h0KCk7CisgICAgICAgIGNhcmV0UmVjdC5zZXRIZWlnaHQoY2FyZXRSZWN0
LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKKyAgICAgICAgY2FyZXRSZWN0Lm1vdmUoMCwgY2Fy
ZXRSZWN0LmhlaWdodCgpIC0gb3JpZ2luYWxIZWlnaHQpOworICAgIH0KKyAgICByZXR1cm4gY2Fy
ZXRSZWN0OworfQorCiAtIChVSVRleHRSYW5nZSAqKXNlbGVjdGVkVGV4dFJhbmdlCiB7Ci0gICAg
aWYgKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZSB8fCBfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICBhdXRvJiBlZGl0b3JTdGF0ZSA9
IF9wYWdlLT5lZGl0b3JTdGF0ZSgpOworICAgIGF1dG8gaGFzU2VsZWN0aW9uID0gIWVkaXRvclN0
YXRlLnNlbGVjdGlvbklzTm9uZTsKKyAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBlZGl0b3JTdGF0
ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAvLyBV
SUtpdCBkb2VzIG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub25lZGl0YWJsZSBjb250
ZW50LgotICAgIGlmICghX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUgJiYg
IV9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UpCisKKyAgICBhdXRvIGlzUmFu
Z2UgPSBlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc1JhbmdlOworICAgIGF1dG8gaXNDb250ZW50RWRp
dGFibGUgPSBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJsZTsKKyAgICAvLyBVSUtpdCBkb2Vz
IG5vdCBleHBlY3QgY2FyZXQgc2VsZWN0aW9ucyBpbiBub24tZWRpdGFibGUgY29udGVudC4KKyAg
ICBpZiAoIWlzQ29udGVudEVkaXRhYmxlICYmICFpc1JhbmdlKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIGF1dG8mIHBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEgPSBfcGFnZS0+ZWRp
dG9yU3RhdGUoKS5wb3N0TGF5b3V0RGF0YSgpOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBzdGFy
dFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNhcmV0UmVjdEF0U3RhcnQ7Ci0gICAg
V2ViQ29yZTo6RmxvYXRSZWN0IGVuZFJlY3QgPSBwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRhLmNh
cmV0UmVjdEF0RW5kOwotICAgIGRvdWJsZSBpbnZlcnNlU2NhbGUgPSBbc2VsZiBpbnZlcnNlU2Nh
bGVdOwotICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgY2FyZXQgd2lkdGgsIHdo
aWxlIHRoZSBoZWlnaHQgc2NhbGVzIHdpdGgKLSAgICAvLyB0aGUgY29udGVudCB0YWtpbmcgb3Jp
ZW50YXRpb24gaW50byBhY2NvdW50LgotICAgIC8vIFdlIGFjaGlldmUgdGhpcyBieSBzY2FsaW5n
IHRoZSB3aWR0aCB3aXRoIHRoZSBpbnZlcnNlCi0gICAgLy8gc2NhbGUgZmFjdG9yLiBUaGlzIHdh
eSwgd2hlbiBpdCBpcyBjb252ZXJ0ZWQgZnJvbSB0aGUgY29udGVudCB2aWV3Ci0gICAgLy8gdGhl
IHdpZHRoIHJlbWFpbnMgdW5jaGFuZ2VkLgotICAgIGlmIChzdGFydFJlY3Qud2lkdGgoKSA8IHN0
YXJ0UmVjdC5oZWlnaHQoKSkKLSAgICAgICAgc3RhcnRSZWN0LnNldFdpZHRoKHN0YXJ0UmVjdC53
aWR0aCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBlbHNlCi0gICAgICAgIHN0YXJ0UmVjdC5zZXRI
ZWlnaHQoc3RhcnRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICBpZiAoZW5kUmVj
dC53aWR0aCgpIDwgZW5kUmVjdC5oZWlnaHQoKSkgewotICAgICAgICBkb3VibGUgZGVsdGEgPSBl
bmRSZWN0LndpZHRoKCk7Ci0gICAgICAgIGVuZFJlY3Quc2V0V2lkdGgoZW5kUmVjdC53aWR0aCgp
ICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBlbmRSZWN0LndpZHRoKCkgLSBkZWx0
YTsKLSAgICAgICAgZW5kUmVjdC5tb3ZlKGRlbHRhLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBkb3VibGUgZGVsdGEgPSBlbmRSZWN0LmhlaWdodCgpOwotICAgICAgICBlbmRSZWN0LnNldEhl
aWdodChlbmRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKLSAgICAgICAgZGVsdGEgPSBl
bmRSZWN0LmhlaWdodCgpIC0gZGVsdGE7Ci0gICAgICAgIGVuZFJlY3QubW92ZSgwLCBkZWx0YSk7
Ci0gICAgfQotICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOl9wYWdl
LT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzTm9uZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc1JhbmdlOl9wYWdlLT5lZGl0b3JTdGF0ZSgpLnNlbGVjdGlvbklzUmFuZ2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0YWJsZTpfcGFnZS0+ZWRpdG9y
U3RhdGUoKS5pc0NvbnRlbnRFZGl0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRSZWN0OnN0YXJ0UmVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmRSZWN0OmVuZFJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25S
ZWN0czp3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5b3V0
RGF0YSgpLnNlbGVjdGlvblJlY3RzKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRU
ZXh0TGVuZ3RoOnBvc3RMYXlvdXRFZGl0b3JTdGF0ZURhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoXTsK
KworICAgIGF1dG8gY2FyZXRTdGFydFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2Vs
ZWN0aW9uU3RhcnQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5jYXJldFJl
Y3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRDYXJldFJl
Y3RGb3JTZWxlY3Rpb25FbmQ6X3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5j
YXJldFJlY3RBdEVuZF07CisgICAgYXV0byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlv
blJlY3RzKF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVj
dHMpOworICAgIGF1dG8gc2VsZWN0ZWRUZXh0TGVuZ3RoID0gZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS5zZWxlY3RlZFRleHRMZW5ndGg7CisgICAgcmV0dXJuIFtXS1RleHRSYW5nZSB0ZXh0
UmFuZ2VXaXRoU3RhdGU6IWhhc1NlbGVjdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKENHUmVjdCljYXJldFJlY3RGb3JQb3NpdGlvbjoo
VUlUZXh0UG9zaXRpb24gKilwb3NpdGlvbgpAQCAtNDU0NCw3ICs0NTcyLDIwIEBAIC0gKE5TU3Ry
aW5nICopbWFya2VkVGV4dAogCiAtIChVSVRleHRSYW5nZSAqKW1hcmtlZFRleHRSYW5nZQogewot
ICAgIHJldHVybiBuaWw7CisgICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3Rh
dGUoKTsKKyAgICBib29sIGhhc0NvbXBvc2l0aW9uID0gZWRpdG9yU3RhdGUuaGFzQ29tcG9zaXRp
b247CisgICAgaWYgKCFoYXNDb21wb3NpdGlvbiB8fCBlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0
TGF5b3V0RGF0YSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBhdXRvJiBwb3N0TGF5b3V0RGF0
YSA9IGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCk7CisgICAgYXV0byB1bnNjYWxlZENhcmV0
UmVjdEF0U3RhcnQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydDsK
KyAgICBhdXRvIHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQgPSBwb3N0TGF5b3V0RGF0YS5tYXJrZWRU
ZXh0Q2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc1JhbmdlID0gdW5zY2FsZWRDYXJldFJlY3RB
dFN0YXJ0ICE9IHVuc2NhbGVkQ2FyZXRSZWN0QXRFbmQ7CisgICAgYXV0byBpc0NvbnRlbnRFZGl0
YWJsZSA9IGVkaXRvclN0YXRlLmlzQ29udGVudEVkaXRhYmxlOworICAgIGF1dG8gY2FyZXRTdGFy
dFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uU3RhcnQ6dW5zY2FsZWRD
YXJldFJlY3RBdFN0YXJ0XTsKKyAgICBhdXRvIGNhcmV0RW5kUmVjdCA9IFtzZWxmIF9zY2FsZWRD
YXJldFJlY3RGb3JTZWxlY3Rpb25FbmQ6dW5zY2FsZWRDYXJldFJlY3RBdEVuZF07CisgICAgYXV0
byBzZWxlY3Rpb25SZWN0cyA9IHdrVGV4dFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CisgICAgYXV0byBzZWxlY3RlZFRleHRMZW5ndGggPSBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0Lmxlbmd0aCgpOworICAgIHJldHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJh
bmdlV2l0aFN0YXRlOiFoYXNDb21wb3NpdGlvbiBpc1JhbmdlOmlzUmFuZ2UgaXNFZGl0YWJsZTpp
c0NvbnRlbnRFZGl0YWJsZSBzdGFydFJlY3Q6Y2FyZXRTdGFydFJlY3QgZW5kUmVjdDpjYXJldEVu
ZFJlY3Qgc2VsZWN0aW9uUmVjdHM6c2VsZWN0aW9uUmVjdHMgc2VsZWN0ZWRUZXh0TGVuZ3RoOnNl
bGVjdGVkVGV4dExlbmd0aF07CiB9CiAKIC0gKE5TRGljdGlvbmFyeSAqKW1hcmtlZFRleHRTdHls
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBmZWU0MGQxNTUwYTgzMWY2YWY0NDZiMTQyZjViMzMzNTJiNzg3MjcwLi5lZDIz
OTdkNmUwYTI3ZjFiMjQ4MmI0ZDIyZWQ5ZmQ3NmYzODJlZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjYyLDE3ICsy
NjIsMTUgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICBhdXRvIHZpZXcgPSBtYWtlUmVmKCpm
cmFtZS52aWV3KCkpOwogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKLSAgICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9z
aXRpb25SYW5nZSgpOwotICAgICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gY29t
cG9zaXRpb25SZWN0czsKLSAgICAgICAgaWYgKGNvbXBvc2l0aW9uUmFuZ2UpIHsKLSAgICAgICAg
ICAgIGNvbXBvc2l0aW9uUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhjb21wb3NpdGlvblJl
Y3RzKTsKLSAgICAgICAgICAgIGlmIChjb21wb3NpdGlvblJlY3RzLnNpemUoKSkKLSAgICAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5maXJzdE1hcmtlZFJlY3QgPSB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoY29tcG9zaXRpb25SZWN0c1swXS5yZWN0KCkpOwotICAgICAgICAgICAgaWYgKGNv
bXBvc2l0aW9uUmVjdHMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0
YS5sYXN0TWFya2VkUmVjdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblJl
Y3RzLmxhc3QoKS5yZWN0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLmxhc3RNYXJrZWRSZWN0ID0gcG9zdExheW91dERhdGEuZmlyc3RNYXJrZWRS
ZWN0OworICAgICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKSB7CisgICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKKyAgICAg
ICAgICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKHZpZXcsIHBvc3RM
YXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7CisKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
Lm1hcmtlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkp
OworICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBjb21wb3NpdGlvblNlbGVjdGlvbigqY29t
cG9zaXRpb25SYW5nZSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0Q2Fy
ZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKG51bGxwdHIgLyogaW5zaWRl
Rml4ZWQgKi8pKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRDYXJldFJl
Y3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyhjb21wb3NpdGlvblNlbGVjdGlvbi52
aXNpYmxlRW5kKCkuYWJzb2x1dGVDYXJldEJvdW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICov
KSk7CisKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRmYTc2YzYyNjcxOGE1YmViZTZiMTU5NDhjMTljYTA4YzA1
MTg3NWEuLjU3MzdlZjg3N2JhMjk2MGRlOWRhZGJkNDBhMTMzNmRhMTczYzJjNzIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBA
QAorMjAyMC0wNC0yOCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAg
ICAgW2lPU10gSW1wbGVtZW50IC1tYXJrZWRUZXh0UmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTE0OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTc4NjU4OTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkIHNvbWUgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL0VkaXRvclN0YXRlVGVzdHMubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjph
cHBseUFoZW1TdHlsZSk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lmg6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtUZXN0V0tX
ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0
ZUNoaWxkRnJhbWVzUGFpbnQ6XSk6IEFkZGVkLgorCiAyMDE5LTA5LTEzICBEYW5pZWwgQmF0ZXMg
IDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IGJ1aWxkaW5nIFdlYktpdCBm
b3IgTWFjIENhdGFseXN0IGZyb20gWGNvZGUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9yU3RhdGVUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9yU3RhdGVUZXN0cy5tbQppbmRleCA0NDlkN2Yx
ZjA3MTU2MDkxZGM5YzE3Yzc1NWYyYWM1ODIxZjUxNjlkLi42M2EwNzA1MzhjYmExYWQ1MTk1MDU0
YzE1MWVhNWI5MzI4OTJlMjg2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL0VkaXRvclN0YXRlVGVzdHMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JTdGF0ZVRlc3RzLm1tCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEzICsyNywxNSBAQAog
CiAjaW1wb3J0ICJFZGl0aW5nVGVzdEhhcm5lc3MuaCIKICNpbXBvcnQgIlBsYXRmb3JtVXRpbGl0
aWVzLmgiCisjaW1wb3J0ICJUZXN0Q29jb2EuaCIKKyNpbXBvcnQgIlRlc3RJbnB1dERlbGVnYXRl
LmgiCiAjaW1wb3J0ICJUZXN0V0tXZWJWaWV3LmgiCisjaW1wb3J0ICJVc2VySW50ZXJmYWNlU3dp
enpsZXIuaCIKICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAjaW1wb3J0IDx3
dGYvVmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiVUlLaXRT
UEkuaCIKLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CiAjZW5kaWYKIAogc3RhdGljIHZvaWQqIGNv
bnN0IFNlbGVjdGlvbkF0dHJpYnV0ZXNPYnNlcnZhdGlvbkNvbnRleHQgPSAodm9pZCopJlNlbGVj
dGlvbkF0dHJpYnV0ZXNPYnNlcnZhdGlvbkNvbnRleHQ7CkBAIC00MjksNiArNDMxLDEwMSBAQCBU
RVNUKEVkaXRvclN0YXRlVGVzdHMsIFNlbGVjdGVkVGV4dCkKICAgICBFWFBFQ1RfR1QoW1t3ZWJW
aWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XSBzZWxlY3RlZFRleHRdLmxlbmd0aCwgMFUpOwogfQog
Citjb25zdGV4cHIgdW5zaWduZWQgZ2x5cGhXaWR0aCB7IDI1IH07IC8vIHBpeGVscworCitzdGF0
aWMgTlNTdHJpbmcgKmFwcGx5QWhlbVN0eWxlKE5TU3RyaW5nICpodG1sU3RyaW5nKQoreworICAg
IHJldHVybiBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIjxzdHlsZT5AZm9udC1mYWNlIHsg
Zm9udC1mYW1pbHk6IEFoZW07IHNyYzogdXJsKEFoZW0udHRmKTsgfSBib2R5IHsgbWFyZ2luOiAw
OyB9ICogeyBmb250OiAldXB4LzEgQWhlbTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25l
OyB9PC9zdHlsZT48bWV0YSBuYW1lPSd2aWV3cG9ydCcgY29udGVudD0nd2lkdGg9OTgwLCBpbml0
aWFsLXNjYWxlPTEuMCc+JUAiLCBnbHlwaFdpZHRoLCBodG1sU3RyaW5nXTsKK30KKworVEVTVChF
ZGl0b3JTdGF0ZVRlc3RzLCBNYXJrZWRUZXh0UmFuZ2VfSG9yaXpvbnRhbENhcmV0U2VsZWN0aW9u
KQoreworICAgIElQaG9uZVVzZXJJbnRlcmZhY2VTd2l6emxlciB1c2VySW50ZXJmYWNlU3dpenps
ZXI7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10g
aW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZ0FuZFdhaXRVbnRpbEFsbEltbWVkaWF0ZUNoaWxk
RnJhbWVzUGFpbnQ6YXBwbHlBaGVtU3R5bGUoQCI8Ym9keSBjb250ZW50ZWRpdGFibGU9J3RydWUn
Pi48L2JvZHk+IildOyAvLyAuIGlzIGR1bW15IHRvIGZvcmNlIEFoZW0gdG8gbG9hZAorICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmZvY3Vz
KCkiXTsKKworICAgIGF1dG8gKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgdGV4dElucHV0Q29udGVu
dFZpZXddOworICAgIFtjb250ZW50VmlldyBzZXRNYXJrZWRUZXh0OkAiaGVsbG8iIHNlbGVjdGVk
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlXTsKKworICAgIFVJVGV4dFJhbmdlICptYXJrZWRUZXh0UmFuZ2UgPSBbY29u
dGVudFZpZXcgbWFya2VkVGV4dFJhbmdlXTsKKyAgICBOU0FycmF5PFVJVGV4dFNlbGVjdGlvblJl
Y3QgKj4gKnJlY3RzID0gW2NvbnRlbnRWaWV3IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6bWFya2Vk
VGV4dFJhbmdlXTsKKyAgICBFWFBFQ1RfRVEoMVUsIHJlY3RzLmNvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoQ0dSZWN0TWFrZSgwLCAwLCA1ICogZ2x5cGhXaWR0aCwgZ2x5cGhXaWR0aCksIHJlY3RzWzBd
LnJlY3QpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDAsIDIsIGdseXBoV2lkdGgpLCBb
Y29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLnN0YXJ0XSk7
CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMTI0LCAwLCAyLCBnbHlwaFdpZHRoKSwgW2NvbnRl
bnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRdKTsKKyAgICBF
WFBFQ1RfRkFMU0UocmVjdHNbMF0uaXNWZXJ0aWNhbCk7Cit9CisKK1RFU1QoRWRpdG9yU3RhdGVU
ZXN0cywgTWFya2VkVGV4dFJhbmdlX0hvcml6b250YWxSYW5nZVNlbGVjdGlvbikKK3sKKyAgICBJ
UGhvbmVVc2VySW50ZXJmYWNlU3dpenpsZXIgdXNlckludGVyZmFjZVN3aXp6bGVyOworCisgICAg
YXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91
c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50
OmFwcGx5QWhlbVN0eWxlKEAiPGJvZHkgY29udGVudGVkaXRhYmxlPSd0cnVlJz4uPC9ib2R5PiIp
XTsgLy8gLiBpcyBkdW1teSB0byBmb3JjZSBBaGVtIHRvIGxvYWQKKyAgICBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5mb2N1cygpIl07CisgICAg
W3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRUZXh0IiBh
cmd1bWVudDpAIkhlbGxvIHdvcmxkIl07CisKKyAgICBhdXRvICpjb250ZW50VmlldyA9IFt3ZWJW
aWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZpZXcgc2VsZWN0V29yZEJh
Y2t3YXJkXTsKKyAgICBbY29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpAIndvcmxkIiBzZWxlY3Rl
ZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDUpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNl
bnRhdGlvblVwZGF0ZV07CisKKyAgICBVSVRleHRSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2Nv
bnRlbnRWaWV3IG1hcmtlZFRleHRSYW5nZV07CisgICAgTlNBcnJheTxVSVRleHRTZWxlY3Rpb25S
ZWN0ICo+ICpyZWN0cyA9IFtjb250ZW50VmlldyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOm1hcmtl
ZFRleHRSYW5nZV07CisgICAgRVhQRUNUX0VRKDFVLCByZWN0cy5jb3VudCk7CisgICAgRVhQRUNU
X0VRKENHUmVjdE1ha2UoMTUwLCAwLCA1ICogZ2x5cGhXaWR0aCwgZ2x5cGhXaWR0aCksIHJlY3Rz
WzBdLnJlY3QpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDE0OSwgMCwgMiwgZ2x5cGhXaWR0
aCksIFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2Uuc3Rh
cnRdKTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgyNzQsIDAsIDIsIGdseXBoV2lkdGgpLCBb
Y29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLmVuZF0pOwor
ICAgIEVYUEVDVF9GQUxTRShyZWN0c1swXS5pc1ZlcnRpY2FsKTsKK30KKworVEVTVChFZGl0b3JT
dGF0ZVRlc3RzLCBNYXJrZWRUZXh0UmFuZ2VfVmVydGljYWxDYXJldFNlbGVjdGlvbikKK3sKKyAg
ICBJUGhvbmVVc2VySW50ZXJmYWNlU3dpenpsZXIgdXNlckludGVyZmFjZVN3aXp6bGVyOworCisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1Bh
aW50OmFwcGx5QWhlbVN0eWxlKEAiPGJvZHkgc3R5bGU9J3dyaXRpbmctbW9kZTogdmVydGljYWwt
bHInIGNvbnRlbnRlZGl0YWJsZT0ndHJ1ZSc+LjwvYm9keT4iKV07IC8vIC4gaXMgZHVtbXkgdG8g
Zm9yY2UgQWhlbSB0byBsb2FkCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAImRvY3VtZW50LmJvZHkuZm9jdXMoKSJdOworCisgICAgYXV0byAqY29udGVudFZpZXcg
PSBbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld107CisgICAgW2NvbnRlbnRWaWV3IHNldE1h
cmtlZFRleHQ6QCJoZWxsbyIgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCAwKV07CisgICAg
W3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgVUlUZXh0UmFu
Z2UgKm1hcmtlZFRleHRSYW5nZSA9IFtjb250ZW50VmlldyBtYXJrZWRUZXh0UmFuZ2VdOworICAg
IE5TQXJyYXk8VUlUZXh0U2VsZWN0aW9uUmVjdCAqPiAqcmVjdHMgPSBbY29udGVudFZpZXcgc2Vs
ZWN0aW9uUmVjdHNGb3JSYW5nZTptYXJrZWRUZXh0UmFuZ2VdOworICAgIEVYUEVDVF9FUSgxVSwg
cmVjdHMuY291bnQpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDAsIGdseXBoV2lkdGgs
IDUgKiBnbHlwaFdpZHRoKSwgcmVjdHNbMF0ucmVjdCk7CisgICAgRVhQRUNUX0VRKENHUmVjdE1h
a2UoMCwgMCwgZ2x5cGhXaWR0aCwgMiksIFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlv
bjptYXJrZWRUZXh0UmFuZ2Uuc3RhcnRdKTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAx
MjQsIGdseXBoV2lkdGgsIDIpLCBbY29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFy
a2VkVGV4dFJhbmdlLmVuZF0pOworICAgIEVYUEVDVF9UUlVFKHJlY3RzWzBdLmlzVmVydGljYWwp
OworfQorCitURVNUKEVkaXRvclN0YXRlVGVzdHMsIE1hcmtlZFRleHRSYW5nZV9WZXJ0aWNhbFJh
bmdlU2VsZWN0aW9uKQoreworICAgIElQaG9uZVVzZXJJbnRlcmZhY2VTd2l6emxlciB1c2VySW50
ZXJmYWNlU3dpenpsZXI7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOwor
ICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphcHBseUFoZW1TdHlsZShA
Ijxib2R5IHN0eWxlPSd3cml0aW5nLW1vZGU6IHZlcnRpY2FsLWxyJyBjb250ZW50ZWRpdGFibGU9
J3RydWUnPi48L2JvZHk+IildOyAvLyAuIGlzIGR1bW15IHRvIGZvcmNlIEFoZW0gdG8gbG9hZAor
ICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5
LmZvY3VzKCkiXTsKKyAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFu
ZDpAIkluc2VydFRleHQiIGFyZ3VtZW50OkAiSGVsbG8gd29ybGQiXTsKKworICAgIGF1dG8gKmNv
bnRlbnRWaWV3ID0gW3dlYlZpZXcgdGV4dElucHV0Q29udGVudFZpZXddOworICAgIFtjb250ZW50
VmlldyBzZWxlY3RXb3JkQmFja3dhcmRdOworICAgIFtjb250ZW50VmlldyBzZXRNYXJrZWRUZXh0
OkAid29ybGQiIHNlbGVjdGVkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgNSldOworICAgIFt3ZWJWaWV3
IHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKKworICAgIFVJVGV4dFJhbmdlICptYXJr
ZWRUZXh0UmFuZ2UgPSBbY29udGVudFZpZXcgbWFya2VkVGV4dFJhbmdlXTsKKyAgICBOU0FycmF5
PFVJVGV4dFNlbGVjdGlvblJlY3QgKj4gKnJlY3RzID0gW2NvbnRlbnRWaWV3IHNlbGVjdGlvblJl
Y3RzRm9yUmFuZ2U6bWFya2VkVGV4dFJhbmdlXTsKKyAgICBFWFBFQ1RfRVEoMVUsIHJlY3RzLmNv
dW50KTsKKyAgICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAxNTAsIGdseXBoV2lkdGgsIDUgKiBn
bHlwaFdpZHRoKSwgcmVjdHNbMF0ucmVjdCk7CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMCwg
MTQ5LCBnbHlwaFdpZHRoLCAyKSwgW2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1h
cmtlZFRleHRSYW5nZS5zdGFydF0pOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDI3NCwg
Z2x5cGhXaWR0aCwgMiksIFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRU
ZXh0UmFuZ2UuZW5kXSk7CisgICAgRVhQRUNUX1RSVUUocmVjdHNbMF0uaXNWZXJ0aWNhbCk7Cit9
CisKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dl
YlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCmluZGV4
IDNjMTBmYjI5MGQ3ZDdkYTg0OWFmNjAzMDM2YWJiMTFiMGJiYjg0MzUuLjNlZmM0Y2I1NjZjZWVk
MjY4MWEwM2FmZTZlNWU4Y2EwMDRkZjgyMjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvVGVzdFdLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2Ev
VGVzdFdLV2ViVmlldy5oCkBAIC03NSw2ICs3NSw3IEBACiBAaW50ZXJmYWNlIFRlc3RXS1dlYlZp
ZXcgOiBXS1dlYlZpZXcKIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJh
bWUgY29uZmlndXJhdGlvbjooV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24g
cHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOihfV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gKilw
cm9jZXNzUG9vbENvbmZpZ3VyYXRpb247CiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZToo
Q0dSZWN0KWZyYW1lIGNvbmZpZ3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25m
aWd1cmF0aW9uIGFkZFRvV2luZG93OihCT09MKWFkZFRvV2luZG93OworLSAodm9pZClzeW5jaHJv
bm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1Bh
aW50OihOU1N0cmluZyAqKWh0bWw7CiAtICh2b2lkKWNsZWFyTWVzc2FnZUhhbmRsZXJzOihOU0Fy
cmF5ICopbWVzc2FnZU5hbWVzOwogLSAodm9pZClwZXJmb3JtQWZ0ZXJSZWNlaXZpbmdNZXNzYWdl
OihOU1N0cmluZyAqKW1lc3NhZ2UgYWN0aW9uOihkaXNwYXRjaF9ibG9ja190KWFjdGlvbjsKIC0g
KHZvaWQpd2FpdEZvck1lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZTsKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbSBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQppbmRleCAyYTFmYzZmM2E5ZDczNGYwY2JlY2I2
NGMzNWNmN2JiZjA4MGEzM2NkLi5jMjhiMzc5NGJmOTZhNTg1ODlmZDE3YWQxNTdhNDdhZTYwNTY5
NmRiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcu
bW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCkBAIC00
NzUsNiArNDc1LDE1IEBAIC0gKHZvaWQpcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2FnZTooTlNT
dHJpbmcgKiltZXNzYWdlIGFjdGlvbjooZGlzcGF0Y2hfYmxvY2tfCiAgICAgW190ZXN0SGFuZGxl
ciBhZGRNZXNzYWdlOm1lc3NhZ2Ugd2l0aEhhbmRsZXI6YWN0aW9uXTsKIH0KIAorLSAodm9pZClz
eW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZy
YW1lc1BhaW50OihOU1N0cmluZyAqKWh0bWwKK3sKKyAgICBib29sIGRpZEZpcmVET01Mb2FkRXZl
bnQgPSBmYWxzZTsKKyAgICBbc2VsZiBwZXJmb3JtQWZ0ZXJMb2FkaW5nOlsmXSB7IGRpZEZpcmVE
T01Mb2FkRXZlbnQgPSB0cnVlOyB9XTsKKyAgICBbc2VsZiBsb2FkSFRNTFN0cmluZzpodG1sIGJh
c2VVUkw6W05TQnVuZGxlLm1haW5CdW5kbGUuYnVuZGxlVVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENv
bXBvbmVudDpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZGlkRmlyZURPTUxvYWRFdmVudCk7CisgICAgW3NlbGYgd2FpdEZvck5leHRQ
cmVzZW50YXRpb25VcGRhdGVdOworfQorCiAtICh2b2lkKXdhaXRGb3JNZXNzYWdlOihOU1N0cmlu
ZyAqKW1lc3NhZ2UKIHsKICAgICBfX2Jsb2NrIGJvb2wgaXNEb25lV2FpdGluZyA9IGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398056</attachid>
            <date>2020-04-30 09:00:54 -0700</date>
            <delta_ts>2020-04-30 09:00:54 -0700</delta_ts>
            <desc>To land</desc>
            <filename>bug-211148-20200430090052.patch</filename>
            <type>text/plain</type>
            <size>27447</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQxNWUyYmExOTllZThkZjJl
YmY3MTJhOGU2YmE1NzIwNzRmZmI4OWIuLjhjY2M5Y2MzYmViZWJhN2Y0Yjk5ZjMwY2RiNjgxZTll
ZTM0M2EzNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMjAtMDQtMzAgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEltcGxlbWVudCAtbWFy
a2VkVGV4dFJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTExNDgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3ODY1ODkwPgorCisgICAgICAg
IFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBSZXR1cm4gdGhlIFVJVGV4dFJh
bmdlLWxpa2Ugb2JqZWN0IGZvciB0aGUgbWFya2VkIHRleHQgcmFuZ2UuIENsaWVudHMgY2FuIHVz
ZSB0aGlzIHJhbmdlIHRvCisgICAgICAgIGFjY2VzcyB0aGUgc2VsZWN0aW9uIHJlY3RzIG9yIHF1
ZXJ5IGZvciB0aGUgY2FyZXQgcmVjdCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSByYW5nZSwK
KyAgICAgICAgaWYgZGVzaXJlZC4KKworICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZW5jb2RlIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjpkZWNv
ZGUpOgorICAgICAgICBFbmNvZGUgYW5kIGRlY29kZSB0aGUgbWFya2VkIHRleHQgc2VsZWN0aW9u
IHJlY3RzIGFuZCBjYXJldCByZWN0cyBhdCB0aGUgc3RhdGUgYW5kIGVuZAorICAgICAgICBvZiB0
aGUgbWFya2VkIHRleHQgcmFuZ2UuIFRoaXMgaXMgdGhlIHNhbWUgaW5mb3JtYXRpb24gdGhhdCB3
ZSBjb21wdXRlIGluIG9yZGVyIHRvCisgICAgICAgIGltcGxlbWVudCAtc2VsZWN0ZWRUZXh0UmFu
Z2UuIEkgdGhvdWdodCBhYm91dCBjb2xsZWN0aW5nIHRoZXNlIGRldGFpbHMgaW50byBjbGFzcyBh
bmQKKyAgICAgICAgaGF2aW5nIGVkaXRvciBzdGF0ZSBob2xkIHR3byBpbnN0YW5jZXMgb2YgaXQ6
IG9uZSBmb3Igc2VsZWN0ZWQgdGV4dCBhbmQgb25lIGZvciBtYXJrZWQgdGV4dC4KKyAgICAgICAg
SG93ZXZlciBJIGRlY2lkZWQgYWdhaW5zdCBpdCBiZWNhdXNlIHRoaXMgY2xhc3MgaXMgdW5saWtl
bHkgdG8gZmluZCB1c2Ugb3V0c2lkZSBvZiB3aGF0IGlzCisgICAgICAgIG5lZWRlZCB0byBpbXBs
ZW1lbnQgLXNlbGVjdGVkVGV4dFJhbmdlIGFuZCAtbWFya2VkVGV4dFJhbmdlLiBUaGlzIGlzIGJl
Y2F1c2Ugb25seSB0aG9zZQorICAgICAgICBmdW5jdGlvbnMgcmVxdWlyZSBzdWNoIGRldGFpbHMg
c28gYXMgdG8gcmV0dXJuIGFuIG9wYXF1ZSBVSVRleHRSYW5nZS1kZXJpdmVkIG9iamVjdCB0aGF0
CisgICAgICAgIGNhbiBiZSBwYXNzZWQgdG8tIG9yIGl0cyBzdWItb2JqZWN0cyBjYW4gYmUgcGFz
c2VkIHRvIFdLQ29udGVudFZpZXcncyAtY2FyZXRSZWN0Rm9yUG9zaXRpb24KKyAgICAgICAgYW5k
IC1zZWxlY3Rpb25SZWN0c0ZvclJhbmdlLiBMaXRlcmFsbHksIFdLQ29udGVudFZpZXcgZG9lcyBu
b3Qgc3VwcG9ydCBvdGhlciBVSVRleHRJbnB1dAorICAgICAgICBmdW5jdGlvbnMgdGhhdCBvcGVy
YXRlIG9uIFVJVGV4dFJhbmdlIG9yIFVJVGV4dFBvc2l0aW9uLiBJIGRpZG4ndCBwdXJzdWUgZml4
aW5nIHRoaXMgaW4KKyAgICAgICAgZ2VuZXJhbCBiZWNhdXNlIDEpIEkgZG9uJ3QgbmVlZCBpdCB0
byBzb2x2ZSBteSBwcm9ibGVtIGFuZCAyKSBVSVdLRG9jdW1lbnRDb250ZXh0IFNQSSBzZWVtcwor
ICAgICAgICB0byBiZSB0aGUgbmV3IGdlbmVyYWwtcHVycG9zZSBzb2x1dGlvbi4KKworICAgICAg
ICAoV2ViS2l0OjpvcGVyYXRvcjw8KTogUHJldHR5IHByaW50IGFsbCB0aGUgbmV3IG1hcmtlZCB0
ZXh0IGRldGFpbHMgd2UgY29sbGVjdC4gV2hpbGUgSSBhbSBoZXJlLAorICAgICAgICB1c2UgVmVj
dG9yOjppc0VtcHR5KCkgaW5zdGVhZCBvZiBWZWN0b3I6OnNpemUoKSB0byBjaGVjayBpZiB0aGVy
ZSBhcmUgc2VsZWN0aW9uIHJlY3RzLgorICAgICAgICAqIFNoYXJlZC9FZGl0b3JTdGF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IHRleHRGaXJzdFJlY3RdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyB0ZXh0TGFzdFJlY3RdKToKKyAgICAgICAgVXBkYXRlIGNvZGUgbm93IHRoYXQgdGhl
IG1hcmtlZCB0ZXh0IHJlY3RzIGFyZSBpbiB0aGUgcG9zdCBsYXlvdXQgZGF0YSBzdWItb2JqZWN0
LgorCisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlv
blN0YXJ0Ol0pOiBFeHRyYWN0ZWQgZnJvbSAtc2VsZWN0ZWRUZXh0UmFuZ2UuCisgICAgICAgICgt
W1dLQ29udGVudFZpZXcgX3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvbkVuZDpdKTogRGl0dG8u
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc2VsZWN0ZWRUZXh0UmFuZ2VdKTogV3JpdGUgaW4g
dGVybXMgb2YgLV9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25TdGFydAorICAgICAgICBhbmQg
LV9zY2FsZWRDYXJldFJlY3RGb3JTZWxlY3Rpb25FbmQuIEFsc28gbW9kZXJuaXplIHRoZSBjb2Rl
IHdoaWxlIEkgYW0gaGVyZS4KKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBtYXJrZWRUZXh0UmFu
Z2VdKTogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNv
bnN0KTogQ29sbGVjdCB0aGUgbWFya2VkIHRleHQgcmVjdHMgYW5kIHRoZSBjYXJldAorICAgICAg
ICByZWN0cyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuCisKIDIwMjAtMDQtMzAg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEs0XVtYMTFdIEFkZCBzdXBwb3J0IGZvciByZW5kZXJpbmcgd2ViIHZpZXcgY29udGVudHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmNwcAppbmRleCAyZDMyM2ZjZDE0N2RlNzU0Mjc5MDZi
NTk5ZjdiYjhmNjc1MDU1ODJiLi4xNGIwOGQ4MDEwNmZlMTcxYjEwZDA2NmQyYmVlNmU0ODU4ZThi
NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUuY3BwCkBAIC0xMDUsNiArMTA1LDEw
IEBAIHZvaWQgRWRpdG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZW5jb2RlciA8
PCBjYXJldFJlY3RBdEVuZDsKICAgICBlbmNvZGVyIDw8IHNlbGVjdGlvblJlY3RzOworICAgIGVu
Y29kZXIgPDwgbWFya2VkVGV4dFJlY3RzOworICAgIGVuY29kZXIgPDwgbWFya2VkVGV4dDsKKyAg
ICBlbmNvZGVyIDw8IG1hcmtlZFRleHRDYXJldFJlY3RBdFN0YXJ0OworICAgIGVuY29kZXIgPDwg
bWFya2VkVGV4dENhcmV0UmVjdEF0RW5kOwogICAgIGVuY29kZXIgPDwgd29yZEF0U2VsZWN0aW9u
OwogICAgIGVuY29kZXIgPDwgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb247CiAgICAgZW5jb2RlciA8
PCBjaGFyYWN0ZXJCZWZvcmVTZWxlY3Rpb247CkBAIC0xMTksOSArMTIzLDYgQEAgdm9pZCBFZGl0
b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAgICAgZW5jb2RlciA8PCBhdFN0YXJ0T2ZTZW50ZW5jZTsKICAgICBlbmNvZGVyIDw8IHNl
bGVjdGlvblN0YXJ0SXNBdFBhcmFncmFwaEJvdW5kYXJ5OwogICAgIGVuY29kZXIgPDwgc2VsZWN0
aW9uRW5kSXNBdFBhcmFncmFwaEJvdW5kYXJ5OwotICAgIGVuY29kZXIgPDwgZmlyc3RNYXJrZWRS
ZWN0OwotICAgIGVuY29kZXIgPDwgbGFzdE1hcmtlZFJlY3Q7Ci0gICAgZW5jb2RlciA8PCBtYXJr
ZWRUZXh0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIGVuY29kZXIgPDwgY2FuZGlk
YXRlUmVxdWVzdFN0YXJ0UG9zaXRpb247CkBAIC0xNjYsNiArMTY3LDE0IEBAIGJvb2wgRWRpdG9y
U3RhdGU6OlBvc3RMYXlvdXREYXRhOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBQb3N0
TGF5b3V0RGF0YSYKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0LnNlbGVjdGlvblJlY3RzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRSZWN0cykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tYXJrZWRUZXh0KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtl
ZFRleHRDYXJldFJlY3RBdFN0YXJ0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC53b3JkQXRTZWxl
Y3Rpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24pKQpAQCAtMTk0LDEyICsyMDMsNiBAQCBib29s
IEVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgUG9zdExheW91dERhdGEmCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5zZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRhcnkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuZmlyc3RN
YXJrZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lmxhc3RNYXJrZWRSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1hcmtlZFRleHQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuY2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb24pKQpAQCAtMjg0LDE2ICsyODcsMTgg
QEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRWRpdG9yU3Rh
dGUmIGVkaXRvclN0YXRlKQogICAgICAgICB0cy5kdW1wUHJvcGVydHkoImJhc2VXcml0aW5nRGly
ZWN0aW9uIiwgc3RhdGljX2Nhc3Q8dWludDhfdD4oZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS5iYXNlV3JpdGluZ0RpcmVjdGlvbikpOwogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRh
KCkuZmlyc3RNYXJrZWRSZWN0ICE9IEludFJlY3QoKSkKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJmaXJzdE1hcmtlZFJlY3QiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmZpcnN0TWFy
a2VkUmVjdCk7Ci0gICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubGFzdE1hcmtl
ZFJlY3QgIT0gSW50UmVjdCgpKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoImxhc3RNYXJrZWRS
ZWN0IiwgZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5sYXN0TWFya2VkUmVjdCk7Ci0gICAg
aWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dC5sZW5ndGgoKSkKLSAg
ICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXJrZWRUZXh0IiwgZWRpdG9yU3RhdGUucG9zdExheW91
dERhdGEoKS5tYXJrZWRUZXh0KTsKICAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEo
KS5jYXJldFJlY3RBdEVuZCAhPSBJbnRSZWN0KCkpCiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgi
Y2FyZXRSZWN0QXRFbmQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLmNhcmV0UmVjdEF0
RW5kKTsKLSAgICBpZiAoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25SZWN0
cy5zaXplKCkpCisgICAgaWYgKCFlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLnNlbGVjdGlv
blJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzZWxlY3Rpb25SZWN0
cyIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0aW9uUmVjdHMpOworICAgIGlm
ICghZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgp
KQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm1hcmtlZFRleHRSZWN0cyIsIGVkaXRvclN0YXRl
LnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dFJlY3RzKTsKKyAgICBpZiAoZWRpdG9yU3RhdGUu
cG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0Lmxlbmd0aCgpKQorICAgICAgICB0cy5kdW1wUHJv
cGVydHkoIm1hcmtlZFRleHQiLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRl
eHQpOworICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpLm1hcmtlZFRleHRDYXJl
dFJlY3RBdFN0YXJ0ICE9IEludFJlY3QoKSkKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJtYXJr
ZWRUZXh0Q2FyZXRSZWN0QXRTdGFydCIsIGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkubWFy
a2VkVGV4dENhcmV0UmVjdEF0U3RhcnQpOworICAgIGlmIChlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0
RGF0YSgpLm1hcmtlZFRleHRDYXJldFJlY3RBdEVuZCAhPSBJbnRSZWN0KCkpCisgICAgICAgIHRz
LmR1bXBQcm9wZXJ0eSgibWFya2VkVGV4dENhcmV0UmVjdEF0RW5kIiwgZWRpdG9yU3RhdGUucG9z
dExheW91dERhdGEoKS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQpOwogICAgIGlmIChlZGl0b3JT
dGF0ZS5wb3N0TGF5b3V0RGF0YSgpLndvcmRBdFNlbGVjdGlvbi5sZW5ndGgoKSkKICAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJ3b3JkQXRTZWxlY3Rpb24iLCBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0
RGF0YSgpLndvcmRBdFNlbGVjdGlvbik7CiAgICAgaWYgKGVkaXRvclN0YXRlLnBvc3RMYXlvdXRE
YXRhKCkuY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9FZGl0b3JTdGF0ZS5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3RhdGUu
aAppbmRleCA0YjI1NzcwOWM2ZTEyZDQwMjkwZGJhZWRiYjQwNDY1YzYxYjRjOGMzLi45MzM2ZjI2
YmVmODkxYmJhMDI2NTQyYTEzOGM3MWJlOGY2YzUzMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRv
clN0YXRlLmgKQEAgLTkyLDYgKzkyLDEwIEBAIHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBjYXJldFJlY3RBdEVu
ZDsKICAgICAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3Rz
OworICAgICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gbWFya2VkVGV4dFJlY3Rz
OworICAgICAgICBTdHJpbmcgbWFya2VkVGV4dDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBt
YXJrZWRUZXh0Q2FyZXRSZWN0QXRTdGFydDsKKyAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBtYXJr
ZWRUZXh0Q2FyZXRSZWN0QXRFbmQ7CiAgICAgICAgIFN0cmluZyB3b3JkQXRTZWxlY3Rpb247CiAg
ICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyQWZ0ZXJTZWxlY3Rpb24geyAwIH07CiAgICAgICAgIFVD
aGFyMzIgY2hhcmFjdGVyQmVmb3JlU2VsZWN0aW9uIHsgMCB9OwpAQCAtMTA2LDkgKzExMCw2IEBA
IHN0cnVjdCBFZGl0b3JTdGF0ZSB7CiAgICAgICAgIGJvb2wgYXRTdGFydE9mU2VudGVuY2UgeyBm
YWxzZSB9OwogICAgICAgICBib29sIHNlbGVjdGlvblN0YXJ0SXNBdFBhcmFncmFwaEJvdW5kYXJ5
IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBzZWxlY3Rpb25FbmRJc0F0UGFyYWdyYXBoQm91bmRh
cnkgeyBmYWxzZSB9OwotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IGZpcnN0TWFya2VkUmVjdDsK
LSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBsYXN0TWFya2VkUmVjdDsKLSAgICAgICAgU3RyaW5n
IG1hcmtlZFRleHQ7CiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpCiAgICAgICAgIHVpbnQ2NF90
IGNhbmRpZGF0ZVJlcXVlc3RTdGFydFBvc2l0aW9uIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXgg
YTQzY2NlZTUzMjJjY2YwZDU5ODJiZmY1MTNlMWIxZDhiZGU1ODMxMi4uZDAzOGIyNjUxZTg1NzE0
MjdjZDBhMzRkMDA3OGNhMWRiZWFkN2RmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MTE4LDEyICs0
MTE4LDIyIEBAIC0gKEJPT0wpX3NlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogCiAtIChDR1JlY3Qp
dGV4dEZpcnN0UmVjdAogewotICAgIHJldHVybiBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5oYXNDb21w
b3NpdGlvbiA/IF9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBvc3RMYXlvdXREYXRhKCkuZmlyc3RNYXJr
ZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0Rmlyc3RSZWN0OworICAgIGF1dG8mIGVk
aXRvclN0YXRlID0gX3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgaWYgKGVkaXRvclN0YXRlLmhh
c0NvbXBvc2l0aW9uKSB7CisgICAgICAgIGF1dG8mIG1hcmtlZFRleHRSZWN0cyA9IGVkaXRvclN0
YXRlLnBvc3RMYXlvdXREYXRhKCkubWFya2VkVGV4dFJlY3RzOworICAgICAgICByZXR1cm4gbWFy
a2VkVGV4dFJlY3RzLmlzRW1wdHkoKSA/IENHUmVjdFplcm8gOiBtYXJrZWRUZXh0UmVjdHMuZmly
c3QoKS5yZWN0KCk7CisgICAgfQorICAgIHJldHVybiBfYXV0b2NvcnJlY3Rpb25EYXRhLnRleHRG
aXJzdFJlY3Q7CiB9CiAKIC0gKENHUmVjdCl0ZXh0TGFzdFJlY3QKIHsKLSAgICByZXR1cm4gX3Bh
Z2UtPmVkaXRvclN0YXRlKCkuaGFzQ29tcG9zaXRpb24gPyBfcGFnZS0+ZWRpdG9yU3RhdGUoKS5w
b3N0TGF5b3V0RGF0YSgpLmxhc3RNYXJrZWRSZWN0IDogX2F1dG9jb3JyZWN0aW9uRGF0YS50ZXh0
TGFzdFJlY3Q7CisgICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsK
KyAgICBpZiAoZWRpdG9yU3RhdGUuaGFzQ29tcG9zaXRpb24pIHsKKyAgICAgICAgYXV0byYgbWFy
a2VkVGV4dFJlY3RzID0gZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5tYXJrZWRUZXh0UmVj
dHM7CisgICAgICAgIHJldHVybiBtYXJrZWRUZXh0UmVjdHMuaXNFbXB0eSgpID8gQ0dSZWN0WmVy
byA6IG1hcmtlZFRleHRSZWN0cy5sYXN0KCkucmVjdCgpOworICAgIH0KKyAgICByZXR1cm4gX2F1
dG9jb3JyZWN0aW9uRGF0YS50ZXh0TGFzdFJlY3Q7CiB9CiAKIC0gKHZvaWQpcmVwbGFjZURpY3Rh
dGVkVGV4dDooTlNTdHJpbmcqKW9sZFRleHQgd2l0aFRleHQ6KE5TU3RyaW5nICopbmV3VGV4dApA
QCAtNDQ2Niw0NSArNDQ3Niw1NSBAQCBzdGF0aWMgTlNBcnJheTxXS1RleHRTZWxlY3Rpb25SZWN0
ICo+ICp3a1RleHRTZWxlY3Rpb25SZWN0cyhjb25zdCBWZWN0b3I8V2ViQ29yZQogICAgIH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKKy0gKFdlYkNvcmU6OkZsb2F0UmVjdClfc2NhbGVkQ2FyZXRSZWN0
Rm9yU2VsZWN0aW9uU3RhcnQ6KFdlYkNvcmU6OkZsb2F0UmVjdCljYXJldFJlY3QKK3sKKyAgICAv
LyBUaGUgbG9naWNhbCBoZWlnaHQgb2YgdGhlIGNhcmV0IGlzIHNjYWxlZCBpbnZlcnNlbHkgYnkg
dGhlIHZpZXcncyB6b29tIHNjYWxlCisgICAgLy8gdG8gYWNoaWV2ZSB0aGUgdmlzdWFsIGVmZmVj
dCB0aGF0IHRoZSBjYXJldCBpcyBuYXJyb3cgd2hlbiB6b29tZWQgaW4gYW5kIHdpZGUKKyAgICAv
LyB3aGVuIHpvb21lZCBvdXQuCisgICAgZG91YmxlIGludmVyc2VTY2FsZSA9IFtzZWxmIGludmVy
c2VTY2FsZV07CisgICAgaWYgKGJvb2wgaXNIb3Jpem9udGFsQ2FyZXQgPSBjYXJldFJlY3Qud2lk
dGgoKSA8IGNhcmV0UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgY2FyZXRSZWN0LnNldFdpZHRoKGNh
cmV0UmVjdC53aWR0aCgpICogaW52ZXJzZVNjYWxlKTsKKyAgICBlbHNlCisgICAgICAgIGNhcmV0
UmVjdC5zZXRIZWlnaHQoY2FyZXRSZWN0LmhlaWdodCgpICogaW52ZXJzZVNjYWxlKTsKKyAgICBy
ZXR1cm4gY2FyZXRSZWN0OworfQorCistIChXZWJDb3JlOjpGbG9hdFJlY3QpX3NjYWxlZENhcmV0
UmVjdEZvclNlbGVjdGlvbkVuZDooV2ViQ29yZTo6RmxvYXRSZWN0KWNhcmV0UmVjdAoreworICAg
IC8vIFRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgY2FyZXQgaXMgc2NhbGVkIGludmVyc2VseSBi
eSB0aGUgdmlldydzIHpvb20gc2NhbGUKKyAgICAvLyB0byBhY2hpZXZlIHRoZSB2aXN1YWwgZWZm
ZWN0IHRoYXQgdGhlIGNhcmV0IGlzIG5hcnJvdyB3aGVuIHpvb21lZCBpbiBhbmQgd2lkZQorICAg
IC8vIHdoZW4gem9vbWVkIG91dC4KKyAgICBkb3VibGUgaW52ZXJzZVNjYWxlID0gW3NlbGYgaW52
ZXJzZVNjYWxlXTsKKyAgICBpZiAoYm9vbCBpc0hvcml6b250YWxDYXJldCA9IGNhcmV0UmVjdC53
aWR0aCgpIDwgY2FyZXRSZWN0LmhlaWdodCgpKSB7CisgICAgICAgIGZsb2F0IG9yaWdpbmFsV2lk
dGggPSBjYXJldFJlY3Qud2lkdGgoKTsKKyAgICAgICAgY2FyZXRSZWN0LnNldFdpZHRoKG9yaWdp
bmFsV2lkdGggKiBpbnZlcnNlU2NhbGUpOworICAgICAgICBjYXJldFJlY3QubW92ZShjYXJldFJl
Y3Qud2lkdGgoKSAtIG9yaWdpbmFsV2lkdGgsIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGZs
b2F0IG9yaWdpbmFsSGVpZ2h0ID0gY2FyZXRSZWN0LmhlaWdodCgpOworICAgICAgICBjYXJldFJl
Y3Quc2V0SGVpZ2h0KGNhcmV0UmVjdC5oZWlnaHQoKSAqIGludmVyc2VTY2FsZSk7CisgICAgICAg
IGNhcmV0UmVjdC5tb3ZlKDAsIGNhcmV0UmVjdC5oZWlnaHQoKSAtIG9yaWdpbmFsSGVpZ2h0KTsK
KyAgICB9CisgICAgcmV0dXJuIGNhcmV0UmVjdDsKK30KKwogLSAoVUlUZXh0UmFuZ2UgKilzZWxl
Y3RlZFRleHRSYW5nZQogewotICAgIGlmIChfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25J
c05vbmUgfHwgX3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCisg
ICAgYXV0byYgZWRpdG9yU3RhdGUgPSBfcGFnZS0+ZWRpdG9yU3RhdGUoKTsKKyAgICBhdXRvIGhh
c1NlbGVjdGlvbiA9ICFlZGl0b3JTdGF0ZS5zZWxlY3Rpb25Jc05vbmU7CisgICAgaWYgKCFoYXNT
ZWxlY3Rpb24gfHwgZWRpdG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCiAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgLy8gVUlLaXQgZG9lcyBub3QgZXhwZWN0IGNhcmV0IHNlbGVjdGlv
bnMgaW4gbm9uZWRpdGFibGUgY29udGVudC4KLSAgICBpZiAoIV9wYWdlLT5lZGl0b3JTdGF0ZSgp
LmlzQ29udGVudEVkaXRhYmxlICYmICFfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc1Jh
bmdlKQorCisgICAgYXV0byBpc1JhbmdlID0gZWRpdG9yU3RhdGUuc2VsZWN0aW9uSXNSYW5nZTsK
KyAgICBhdXRvIGlzQ29udGVudEVkaXRhYmxlID0gZWRpdG9yU3RhdGUuaXNDb250ZW50RWRpdGFi
bGU7CisgICAgLy8gVUlLaXQgZG9lcyBub3QgZXhwZWN0IGNhcmV0IHNlbGVjdGlvbnMgaW4gbm9u
LWVkaXRhYmxlIGNvbnRlbnQuCisgICAgaWYgKCFpc0NvbnRlbnRFZGl0YWJsZSAmJiAhaXNSYW5n
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBhdXRvJiBwb3N0TGF5b3V0RWRpdG9y
U3RhdGVEYXRhID0gX3BhZ2UtPmVkaXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKTsKLSAgICBX
ZWJDb3JlOjpGbG9hdFJlY3Qgc3RhcnRSZWN0ID0gcG9zdExheW91dEVkaXRvclN0YXRlRGF0YS5j
YXJldFJlY3RBdFN0YXJ0OwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBlbmRSZWN0ID0gcG9zdExh
eW91dEVkaXRvclN0YXRlRGF0YS5jYXJldFJlY3RBdEVuZDsKLSAgICBkb3VibGUgaW52ZXJzZVNj
YWxlID0gW3NlbGYgaW52ZXJzZVNjYWxlXTsKLSAgICAvLyBXZSB3YW50IHRvIGtlZXAgdGhlIG9y
aWdpbmFsIGNhcmV0IHdpZHRoLCB3aGlsZSB0aGUgaGVpZ2h0IHNjYWxlcyB3aXRoCi0gICAgLy8g
dGhlIGNvbnRlbnQgdGFraW5nIG9yaWVudGF0aW9uIGludG8gYWNjb3VudC4KLSAgICAvLyBXZSBh
Y2hpZXZlIHRoaXMgYnkgc2NhbGluZyB0aGUgd2lkdGggd2l0aCB0aGUgaW52ZXJzZQotICAgIC8v
IHNjYWxlIGZhY3Rvci4gVGhpcyB3YXksIHdoZW4gaXQgaXMgY29udmVydGVkIGZyb20gdGhlIGNv
bnRlbnQgdmlldwotICAgIC8vIHRoZSB3aWR0aCByZW1haW5zIHVuY2hhbmdlZC4KLSAgICBpZiAo
c3RhcnRSZWN0LndpZHRoKCkgPCBzdGFydFJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIHN0YXJ0UmVj
dC5zZXRXaWR0aChzdGFydFJlY3Qud2lkdGgoKSAqIGludmVyc2VTY2FsZSk7Ci0gICAgZWxzZQot
ICAgICAgICBzdGFydFJlY3Quc2V0SGVpZ2h0KHN0YXJ0UmVjdC5oZWlnaHQoKSAqIGludmVyc2VT
Y2FsZSk7Ci0gICAgaWYgKGVuZFJlY3Qud2lkdGgoKSA8IGVuZFJlY3QuaGVpZ2h0KCkpIHsKLSAg
ICAgICAgZG91YmxlIGRlbHRhID0gZW5kUmVjdC53aWR0aCgpOwotICAgICAgICBlbmRSZWN0LnNl
dFdpZHRoKGVuZFJlY3Qud2lkdGgoKSAqIGludmVyc2VTY2FsZSk7Ci0gICAgICAgIGRlbHRhID0g
ZW5kUmVjdC53aWR0aCgpIC0gZGVsdGE7Ci0gICAgICAgIGVuZFJlY3QubW92ZShkZWx0YSwgMCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGRlbHRhID0gZW5kUmVjdC5oZWlnaHQoKTsK
LSAgICAgICAgZW5kUmVjdC5zZXRIZWlnaHQoZW5kUmVjdC5oZWlnaHQoKSAqIGludmVyc2VTY2Fs
ZSk7Ci0gICAgICAgIGRlbHRhID0gZW5kUmVjdC5oZWlnaHQoKSAtIGRlbHRhOwotICAgICAgICBl
bmRSZWN0Lm1vdmUoMCwgZGVsdGEpOwotICAgIH0KLSAgICByZXR1cm4gW1dLVGV4dFJhbmdlIHRl
eHRSYW5nZVdpdGhTdGF0ZTpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5zZWxlY3Rpb25Jc05vbmUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSYW5nZTpfcGFnZS0+ZWRpdG9yU3Rh
dGUoKS5zZWxlY3Rpb25Jc1JhbmdlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlz
RWRpdGFibGU6X3BhZ2UtPmVkaXRvclN0YXRlKCkuaXNDb250ZW50RWRpdGFibGUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UmVjdDpzdGFydFJlY3QKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVjdDplbmRSZWN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uUmVjdHM6d2tUZXh0U2VsZWN0aW9uUmVjdHMoX3BhZ2UtPmVk
aXRvclN0YXRlKCkucG9zdExheW91dERhdGEoKS5zZWxlY3Rpb25SZWN0cykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGVkVGV4dExlbmd0aDpwb3N0TGF5b3V0RWRpdG9yU3RhdGVEYXRh
LnNlbGVjdGVkVGV4dExlbmd0aF07CisKKyAgICBhdXRvIGNhcmV0U3RhcnRSZWN0ID0gW3NlbGYg
X3NjYWxlZENhcmV0UmVjdEZvclNlbGVjdGlvblN0YXJ0Ol9wYWdlLT5lZGl0b3JTdGF0ZSgpLnBv
c3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydF07CisgICAgYXV0byBjYXJldEVuZFJlY3Qg
PSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5kOl9wYWdlLT5lZGl0b3JTdGF0
ZSgpLnBvc3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRFbmRdOworICAgIGF1dG8gc2VsZWN0aW9u
UmVjdHMgPSB3a1RleHRTZWxlY3Rpb25SZWN0cyhfcGFnZS0+ZWRpdG9yU3RhdGUoKS5wb3N0TGF5
b3V0RGF0YSgpLnNlbGVjdGlvblJlY3RzKTsKKyAgICBhdXRvIHNlbGVjdGVkVGV4dExlbmd0aCA9
IGVkaXRvclN0YXRlLnBvc3RMYXlvdXREYXRhKCkuc2VsZWN0ZWRUZXh0TGVuZ3RoOworICAgIHJl
dHVybiBbV0tUZXh0UmFuZ2UgdGV4dFJhbmdlV2l0aFN0YXRlOiFoYXNTZWxlY3Rpb24gaXNSYW5n
ZTppc1JhbmdlIGlzRWRpdGFibGU6aXNDb250ZW50RWRpdGFibGUgc3RhcnRSZWN0OmNhcmV0U3Rh
cnRSZWN0IGVuZFJlY3Q6Y2FyZXRFbmRSZWN0IHNlbGVjdGlvblJlY3RzOnNlbGVjdGlvblJlY3Rz
IHNlbGVjdGVkVGV4dExlbmd0aDpzZWxlY3RlZFRleHRMZW5ndGhdOwogfQogCiAtIChDR1JlY3Qp
Y2FyZXRSZWN0Rm9yUG9zaXRpb246KFVJVGV4dFBvc2l0aW9uICopcG9zaXRpb24KQEAgLTQ1NDAs
NyArNDU2MCwyMCBAQCAtIChOU1N0cmluZyAqKW1hcmtlZFRleHQKIAogLSAoVUlUZXh0UmFuZ2Ug
KiltYXJrZWRUZXh0UmFuZ2UKIHsKLSAgICByZXR1cm4gbmlsOworICAgIGF1dG8mIGVkaXRvclN0
YXRlID0gX3BhZ2UtPmVkaXRvclN0YXRlKCk7CisgICAgYm9vbCBoYXNDb21wb3NpdGlvbiA9IGVk
aXRvclN0YXRlLmhhc0NvbXBvc2l0aW9uOworICAgIGlmICghaGFzQ29tcG9zaXRpb24gfHwgZWRp
dG9yU3RhdGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCisgICAgICAgIHJldHVybiBuaWw7Cisg
ICAgYXV0byYgcG9zdExheW91dERhdGEgPSBlZGl0b3JTdGF0ZS5wb3N0TGF5b3V0RGF0YSgpOwor
ICAgIGF1dG8gdW5zY2FsZWRDYXJldFJlY3RBdFN0YXJ0ID0gcG9zdExheW91dERhdGEubWFya2Vk
VGV4dENhcmV0UmVjdEF0U3RhcnQ7CisgICAgYXV0byB1bnNjYWxlZENhcmV0UmVjdEF0RW5kID0g
cG9zdExheW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0RW5kOworICAgIGF1dG8gaXNSYW5n
ZSA9IHVuc2NhbGVkQ2FyZXRSZWN0QXRTdGFydCAhPSB1bnNjYWxlZENhcmV0UmVjdEF0RW5kOwor
ICAgIGF1dG8gaXNDb250ZW50RWRpdGFibGUgPSBlZGl0b3JTdGF0ZS5pc0NvbnRlbnRFZGl0YWJs
ZTsKKyAgICBhdXRvIGNhcmV0U3RhcnRSZWN0ID0gW3NlbGYgX3NjYWxlZENhcmV0UmVjdEZvclNl
bGVjdGlvblN0YXJ0OnVuc2NhbGVkQ2FyZXRSZWN0QXRTdGFydF07CisgICAgYXV0byBjYXJldEVu
ZFJlY3QgPSBbc2VsZiBfc2NhbGVkQ2FyZXRSZWN0Rm9yU2VsZWN0aW9uRW5kOnVuc2NhbGVkQ2Fy
ZXRSZWN0QXRFbmRdOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdHMgPSB3a1RleHRTZWxlY3Rpb25S
ZWN0cyhwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOworICAgIGF1dG8gc2VsZWN0ZWRU
ZXh0TGVuZ3RoID0gcG9zdExheW91dERhdGEubWFya2VkVGV4dC5sZW5ndGgoKTsKKyAgICByZXR1
cm4gW1dLVGV4dFJhbmdlIHRleHRSYW5nZVdpdGhTdGF0ZTohaGFzQ29tcG9zaXRpb24gaXNSYW5n
ZTppc1JhbmdlIGlzRWRpdGFibGU6aXNDb250ZW50RWRpdGFibGUgc3RhcnRSZWN0OmNhcmV0U3Rh
cnRSZWN0IGVuZFJlY3Q6Y2FyZXRFbmRSZWN0IHNlbGVjdGlvblJlY3RzOnNlbGVjdGlvblJlY3Rz
IHNlbGVjdGVkVGV4dExlbmd0aDpzZWxlY3RlZFRleHRMZW5ndGhdOwogfQogCiAtIChOU0RpY3Rp
b25hcnkgKiltYXJrZWRUZXh0U3R5bGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMWVkOGFkZTgyZDdlZDBkOThjYmY2ZGFk
YzU2NmJhOGRkNDNlYTkxYS4uOGIyMGMzYWY0ZWY3MTA1OWNiYWQ2ZmYyNzZlNjM0NmZhZDRmYWJh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KQEAgLTI2MiwxNyArMjYyLDE1IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1F
ZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAg
YXV0byB2aWV3ID0gbWFrZVJlZigqZnJhbWUudmlldygpKTsKIAogICAgIGlmIChmcmFtZS5lZGl0
b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7Ci0gICAgICAgIGF1dG8gY29tcG9zaXRpb25SYW5nZSA9
IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgVmVjdG9yPFdlYkNv
cmU6OlNlbGVjdGlvblJlY3Q+IGNvbXBvc2l0aW9uUmVjdHM7Ci0gICAgICAgIGlmIChjb21wb3Np
dGlvblJhbmdlKSB7Ci0gICAgICAgICAgICBjb21wb3NpdGlvblJhbmdlLT5jb2xsZWN0U2VsZWN0
aW9uUmVjdHMoY29tcG9zaXRpb25SZWN0cyk7Ci0gICAgICAgICAgICBpZiAoY29tcG9zaXRpb25S
ZWN0cy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuZmlyc3RNYXJrZWRS
ZWN0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNvbXBvc2l0aW9uUmVjdHNbMF0ucmVjdCgp
KTsKLSAgICAgICAgICAgIGlmIChjb21wb3NpdGlvblJlY3RzLnNpemUoKSA+IDEpCi0gICAgICAg
ICAgICAgICAgcG9zdExheW91dERhdGEubGFzdE1hcmtlZFJlY3QgPSB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoY29tcG9zaXRpb25SZWN0cy5sYXN0KCkucmVjdCgpKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5sYXN0TWFya2VkUmVjdCA9IHBvc3RM
YXlvdXREYXRhLmZpcnN0TWFya2VkUmVjdDsKKyAgICAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25S
YW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgeworICAgICAgICAgICAg
Y29tcG9zaXRpb25SYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1h
cmtlZFRleHRSZWN0cyk7CisgICAgICAgICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxl
Y3Rpb25SZWN0cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOworCiAgICAg
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChj
b21wb3NpdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gY29t
cG9zaXRpb25TZWxlY3Rpb24oKmNvbXBvc2l0aW9uUmFuZ2UpOworICAgICAgICAgICAgcG9zdExh
eW91dERhdGEubWFya2VkVGV4dENhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoY29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCkuYWJzb2x1dGVDYXJldEJv
dW5kcyhudWxscHRyIC8qIGluc2lkZUZpeGVkICovKSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0Q2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
Y29tcG9zaXRpb25TZWxlY3Rpb24udmlzaWJsZUVuZCgpLmFic29sdXRlQ2FyZXRCb3VuZHMobnVs
bHB0ciAvKiBpbnNpZGVGaXhlZCAqLykpOworCiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBhNzY4MjU0N2Y2YTUx
NWM5MDE0ZmFlOGE5NGVlOTJhMTliMTdjMzA1Li4yZDA4ZjM0ZDA3ZjZjMjA0YzQ0NmMyZDYzZWMz
NWZiNTRiZDAwMjEyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDQtMzAgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIEltcGxlbWVudCAtbWFya2VkVGV4dFJhbmdl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTExNDgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU3ODY1ODkwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IFdlbnNvbiBIc2llaC4KKworICAgICAgICBBZGQgc29tZSB0ZXN0cy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9yU3RhdGVUZXN0cy5tbToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OmFwcGx5QWhlbVN0eWxlKTogQWRkZWQuCisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dl
YlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcubW06
CisgICAgICAgICgtW1Rlc3RXS1dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5k
V2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDpdKTogQWRkZWQuCisKIDIwMjAt
MDQtMzAgIENsYXVkaW8gU2FhdmVkcmEgIDxjc2FhdmVkcmFAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLNF0gQWRkIG5hdmlnYXRpb24gYW5kIHJlbG9hZCBidXR0b25zIHRvIE1pbmlCcm93c2Vy
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0VkaXRv
clN0YXRlVGVzdHMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0Vk
aXRvclN0YXRlVGVzdHMubW0KaW5kZXggNDQ5ZDdmMWYwNzE1NjA5MWRjOWMxN2M3NTVmMmFjNTgy
MWY1MTY5ZC4uNjNhMDcwNTM4Y2JhMWFkNTE5NTA1NGMxNTFlYTViOTMyODkyZTI4NiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9FZGl0b3JTdGF0ZVRl
c3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvRWRpdG9y
U3RhdGVUZXN0cy5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNywxMyArMjcsMTUgQEAKIAogI2ltcG9ydCAiRWRpdGluZ1Rlc3RIYXJu
ZXNzLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVGVzdENvY29h
LmgiCisjaW1wb3J0ICJUZXN0SW5wdXREZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmll
dy5oIgorI2ltcG9ydCAiVXNlckludGVyZmFjZVN3aXp6bGVyLmgiCiAjaW1wb3J0IDxXZWJLaXQv
V0tXZWJWaWV3UHJpdmF0ZS5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgIlVJS2l0U1BJLmgiCi0jaW1wb3J0IDxVSUtpdC9VSUtp
dC5oPgogI2VuZGlmCiAKIHN0YXRpYyB2b2lkKiBjb25zdCBTZWxlY3Rpb25BdHRyaWJ1dGVzT2Jz
ZXJ2YXRpb25Db250ZXh0ID0gKHZvaWQqKSZTZWxlY3Rpb25BdHRyaWJ1dGVzT2JzZXJ2YXRpb25D
b250ZXh0OwpAQCAtNDI5LDYgKzQzMSwxMDEgQEAgVEVTVChFZGl0b3JTdGF0ZVRlc3RzLCBTZWxl
Y3RlZFRleHQpCiAgICAgRVhQRUNUX0dUKFtbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld10g
c2VsZWN0ZWRUZXh0XS5sZW5ndGgsIDBVKTsKIH0KIAorY29uc3RleHByIHVuc2lnbmVkIGdseXBo
V2lkdGggeyAyNSB9OyAvLyBwaXhlbHMKKworc3RhdGljIE5TU3RyaW5nICphcHBseUFoZW1TdHls
ZShOU1N0cmluZyAqaHRtbFN0cmluZykKK3sKKyAgICByZXR1cm4gW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCI8c3R5bGU+QGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBBaGVtOyBzcmM6IHVy
bChBaGVtLnR0Zik7IH0gYm9keSB7IG1hcmdpbjogMDsgfSAqIHsgZm9udDogJXVweC8xIEFoZW07
IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogbm9uZTsgfTwvc3R5bGU+PG1ldGEgbmFtZT0ndmll
d3BvcnQnIGNvbnRlbnQ9J3dpZHRoPTk4MCwgaW5pdGlhbC1zY2FsZT0xLjAnPiVAIiwgZ2x5cGhX
aWR0aCwgaHRtbFN0cmluZ107Cit9CisKK1RFU1QoRWRpdG9yU3RhdGVUZXN0cywgTWFya2VkVGV4
dFJhbmdlX0hvcml6b250YWxDYXJldFNlbGVjdGlvbikKK3sKKyAgICBJUGhvbmVVc2VySW50ZXJm
YWNlU3dpenpsZXIgdXNlckludGVyZmFjZVN3aXp6bGVyOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgw
LCAwLCA4MDAsIDYwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJp
bmdBbmRXYWl0VW50aWxBbGxJbW1lZGlhdGVDaGlsZEZyYW1lc1BhaW50OmFwcGx5QWhlbVN0eWxl
KEAiPGJvZHkgY29udGVudGVkaXRhYmxlPSd0cnVlJz4uPC9ib2R5PiIpXTsgLy8gLiBpcyBkdW1t
eSB0byBmb3JjZSBBaGVtIHRvIGxvYWQKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdK
YXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5mb2N1cygpIl07CisKKyAgICBhdXRvICpjb250ZW50
VmlldyA9IFt3ZWJWaWV3IHRleHRJbnB1dENvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZpZXcg
c2V0TWFya2VkVGV4dDpAImhlbGxvIiBzZWxlY3RlZFJhbmdlOk5TTWFrZVJhbmdlKDAsIDApXTsK
KyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0ZV07CisKKyAgICBVSVRl
eHRSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2NvbnRlbnRWaWV3IG1hcmtlZFRleHRSYW5nZV07
CisgICAgTlNBcnJheTxVSVRleHRTZWxlY3Rpb25SZWN0ICo+ICpyZWN0cyA9IFtjb250ZW50Vmll
dyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOm1hcmtlZFRleHRSYW5nZV07CisgICAgRVhQRUNUX0VR
KDFVLCByZWN0cy5jb3VudCk7CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMCwgMCwgNSAqIGds
eXBoV2lkdGgsIGdseXBoV2lkdGgpLCByZWN0c1swXS5yZWN0KTsKKyAgICBFWFBFQ1RfRVEoQ0dS
ZWN0TWFrZSgwLCAwLCAyLCBnbHlwaFdpZHRoKSwgW2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBv
c2l0aW9uOm1hcmtlZFRleHRSYW5nZS5zdGFydF0pOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtl
KDEyNCwgMCwgMiwgZ2x5cGhXaWR0aCksIFtjb250ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlv
bjptYXJrZWRUZXh0UmFuZ2UuZW5kXSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlY3RzWzBdLmlzVmVy
dGljYWwpOworfQorCitURVNUKEVkaXRvclN0YXRlVGVzdHMsIE1hcmtlZFRleHRSYW5nZV9Ib3Jp
em9udGFsUmFuZ2VTZWxlY3Rpb24pCit7CisgICAgSVBob25lVXNlckludGVyZmFjZVN3aXp6bGVy
IHVzZXJJbnRlcmZhY2VTd2l6emxlcjsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tU
ZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2
MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2FpdFVu
dGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDphcHBseUFoZW1TdHlsZShAIjxib2R5IGNv
bnRlbnRlZGl0YWJsZT0ndHJ1ZSc+LjwvYm9keT4iKV07IC8vIC4gaXMgZHVtbXkgdG8gZm9yY2Ug
QWhlbSB0byBsb2FkCisgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpA
ImRvY3VtZW50LmJvZHkuZm9jdXMoKSJdOworICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhl
Y3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0VGV4dCIgYXJndW1lbnQ6QCJIZWxsbyB3b3JsZCJdOwor
CisgICAgYXV0byAqY29udGVudFZpZXcgPSBbd2ViVmlldyB0ZXh0SW5wdXRDb250ZW50Vmlld107
CisgICAgW2NvbnRlbnRWaWV3IHNlbGVjdFdvcmRCYWNrd2FyZF07CisgICAgW2NvbnRlbnRWaWV3
IHNldE1hcmtlZFRleHQ6QCJ3b3JsZCIgc2VsZWN0ZWRSYW5nZTpOU01ha2VSYW5nZSgwLCA1KV07
CisgICAgW3dlYlZpZXcgd2FpdEZvck5leHRQcmVzZW50YXRpb25VcGRhdGVdOworCisgICAgVUlU
ZXh0UmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IFtjb250ZW50VmlldyBtYXJrZWRUZXh0UmFuZ2Vd
OworICAgIE5TQXJyYXk8VUlUZXh0U2VsZWN0aW9uUmVjdCAqPiAqcmVjdHMgPSBbY29udGVudFZp
ZXcgc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTptYXJrZWRUZXh0UmFuZ2VdOworICAgIEVYUEVDVF9F
USgxVSwgcmVjdHMuY291bnQpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDE1MCwgMCwgNSAq
IGdseXBoV2lkdGgsIGdseXBoV2lkdGgpLCByZWN0c1swXS5yZWN0KTsKKyAgICBFWFBFQ1RfRVEo
Q0dSZWN0TWFrZSgxNDksIDAsIDIsIGdseXBoV2lkdGgpLCBbY29udGVudFZpZXcgY2FyZXRSZWN0
Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLnN0YXJ0XSk7CisgICAgRVhQRUNUX0VRKENHUmVj
dE1ha2UoMjc0LCAwLCAyLCBnbHlwaFdpZHRoKSwgW2NvbnRlbnRWaWV3IGNhcmV0UmVjdEZvclBv
c2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRdKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVjdHNbMF0u
aXNWZXJ0aWNhbCk7Cit9CisKK1RFU1QoRWRpdG9yU3RhdGVUZXN0cywgTWFya2VkVGV4dFJhbmdl
X1ZlcnRpY2FsQ2FyZXRTZWxlY3Rpb24pCit7CisgICAgSVBob25lVXNlckludGVyZmFjZVN3aXp6
bGVyIHVzZXJJbnRlcmZhY2VTd2l6emxlcjsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAw
LCA2MDApXSk7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2Fp
dFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDphcHBseUFoZW1TdHlsZShAIjxib2R5
IHN0eWxlPSd3cml0aW5nLW1vZGU6IHZlcnRpY2FsLWxyJyBjb250ZW50ZWRpdGFibGU9J3RydWUn
Pi48L2JvZHk+IildOyAvLyAuIGlzIGR1bW15IHRvIGZvcmNlIEFoZW0gdG8gbG9hZAorICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5ib2R5LmZvY3Vz
KCkiXTsKKworICAgIGF1dG8gKmNvbnRlbnRWaWV3ID0gW3dlYlZpZXcgdGV4dElucHV0Q29udGVu
dFZpZXddOworICAgIFtjb250ZW50VmlldyBzZXRNYXJrZWRUZXh0OkAiaGVsbG8iIHNlbGVjdGVk
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgMCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlXTsKKworICAgIFVJVGV4dFJhbmdlICptYXJrZWRUZXh0UmFuZ2UgPSBbY29u
dGVudFZpZXcgbWFya2VkVGV4dFJhbmdlXTsKKyAgICBOU0FycmF5PFVJVGV4dFNlbGVjdGlvblJl
Y3QgKj4gKnJlY3RzID0gW2NvbnRlbnRWaWV3IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6bWFya2Vk
VGV4dFJhbmdlXTsKKyAgICBFWFBFQ1RfRVEoMVUsIHJlY3RzLmNvdW50KTsKKyAgICBFWFBFQ1Rf
RVEoQ0dSZWN0TWFrZSgwLCAwLCBnbHlwaFdpZHRoLCA1ICogZ2x5cGhXaWR0aCksIHJlY3RzWzBd
LnJlY3QpOworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDAsIGdseXBoV2lkdGgsIDIpLCBb
Y29udGVudFZpZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLnN0YXJ0XSk7
CisgICAgRVhQRUNUX0VRKENHUmVjdE1ha2UoMCwgMTI0LCBnbHlwaFdpZHRoLCAyKSwgW2NvbnRl
bnRWaWV3IGNhcmV0UmVjdEZvclBvc2l0aW9uOm1hcmtlZFRleHRSYW5nZS5lbmRdKTsKKyAgICBF
WFBFQ1RfVFJVRShyZWN0c1swXS5pc1ZlcnRpY2FsKTsKK30KKworVEVTVChFZGl0b3JTdGF0ZVRl
c3RzLCBNYXJrZWRUZXh0UmFuZ2VfVmVydGljYWxSYW5nZVNlbGVjdGlvbikKK3sKKyAgICBJUGhv
bmVVc2VySW50ZXJmYWNlU3dpenpsZXIgdXNlckludGVyZmFjZVN3aXp6bGVyOworCisgICAgYXV0
byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5
TG9hZEhUTUxTdHJpbmc6YXBwbHlBaGVtU3R5bGUoQCI8Ym9keSBzdHlsZT0nd3JpdGluZy1tb2Rl
OiB2ZXJ0aWNhbC1scicgY29udGVudGVkaXRhYmxlPSd0cnVlJz4uPC9ib2R5PiIpXTsgLy8gLiBp
cyBkdW1teSB0byBmb3JjZSBBaGVtIHRvIGxvYWQKKyAgICBbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQuYm9keS5mb2N1cygpIl07CisgICAgW3dlYlZpZXcg
X3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRUZXh0IiBhcmd1bWVudDpA
IkhlbGxvIHdvcmxkIl07CisKKyAgICBhdXRvICpjb250ZW50VmlldyA9IFt3ZWJWaWV3IHRleHRJ
bnB1dENvbnRlbnRWaWV3XTsKKyAgICBbY29udGVudFZpZXcgc2VsZWN0V29yZEJhY2t3YXJkXTsK
KyAgICBbY29udGVudFZpZXcgc2V0TWFya2VkVGV4dDpAIndvcmxkIiBzZWxlY3RlZFJhbmdlOk5T
TWFrZVJhbmdlKDAsIDUpXTsKKyAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVw
ZGF0ZV07CisKKyAgICBVSVRleHRSYW5nZSAqbWFya2VkVGV4dFJhbmdlID0gW2NvbnRlbnRWaWV3
IG1hcmtlZFRleHRSYW5nZV07CisgICAgTlNBcnJheTxVSVRleHRTZWxlY3Rpb25SZWN0ICo+ICpy
ZWN0cyA9IFtjb250ZW50VmlldyBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOm1hcmtlZFRleHRSYW5n
ZV07CisgICAgRVhQRUNUX0VRKDFVLCByZWN0cy5jb3VudCk7CisgICAgRVhQRUNUX0VRKENHUmVj
dE1ha2UoMCwgMTUwLCBnbHlwaFdpZHRoLCA1ICogZ2x5cGhXaWR0aCksIHJlY3RzWzBdLnJlY3Qp
OworICAgIEVYUEVDVF9FUShDR1JlY3RNYWtlKDAsIDE0OSwgZ2x5cGhXaWR0aCwgMiksIFtjb250
ZW50VmlldyBjYXJldFJlY3RGb3JQb3NpdGlvbjptYXJrZWRUZXh0UmFuZ2Uuc3RhcnRdKTsKKyAg
ICBFWFBFQ1RfRVEoQ0dSZWN0TWFrZSgwLCAyNzQsIGdseXBoV2lkdGgsIDIpLCBbY29udGVudFZp
ZXcgY2FyZXRSZWN0Rm9yUG9zaXRpb246bWFya2VkVGV4dFJhbmdlLmVuZF0pOworICAgIEVYUEVD
VF9UUlVFKHJlY3RzWzBdLmlzVmVydGljYWwpOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9T
X0ZBTUlMWSkKIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAppbmRleCAzYzEwZmIyOTBkN2Q3ZGE4NDlhZjYwMzAz
NmFiYjExYjBiYmI4NDM1Li4zZWZjNGNiNTY2Y2VlZDI2ODFhMDNhZmU2ZTVlOGNhMDA0ZGY4MjI3
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcuaApAQCAtNzUsNiAr
NzUsNyBAQAogQGludGVyZmFjZSBUZXN0V0tXZWJWaWV3IDogV0tXZWJWaWV3CiAtIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbmZpZ3VyYXRpb246KFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbjoo
X1dLUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uICopcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOwog
LSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0aW9u
OihXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbiBhZGRUb1dpbmRvdzooQk9P
TClhZGRUb1dpbmRvdzsKKy0gKHZvaWQpc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nQW5kV2Fp
dFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDooTlNTdHJpbmcgKilodG1sOwogLSAo
dm9pZCljbGVhck1lc3NhZ2VIYW5kbGVyczooTlNBcnJheSAqKW1lc3NhZ2VOYW1lczsKIC0gKHZv
aWQpcGVyZm9ybUFmdGVyUmVjZWl2aW5nTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlIGFjdGlv
bjooZGlzcGF0Y2hfYmxvY2tfdClhY3Rpb247CiAtICh2b2lkKXdhaXRGb3JNZXNzYWdlOihOU1N0
cmluZyAqKW1lc3NhZ2U7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3RXS1dlYlZpZXcubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RXS1dlYlZpZXcu
bW0KaW5kZXggMmExZmM2ZjNhOWQ3MzRmMGNiZWNiNjRjMzVjZjdiYmYwODBhMzNjZC4uYzI4YjM3
OTRiZjk2YTU4NTg5ZmQxN2FkMTU3YTQ3YWU2MDU2OTZkYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9UZXN0V0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvVGVzdFdLV2ViVmlldy5tbQpAQCAtNDc1LDYgKzQ3NSwxNSBAQCAtICh2b2lkKXBl
cmZvcm1BZnRlclJlY2VpdmluZ01lc3NhZ2U6KE5TU3RyaW5nICopbWVzc2FnZSBhY3Rpb246KGRp
c3BhdGNoX2Jsb2NrXwogICAgIFtfdGVzdEhhbmRsZXIgYWRkTWVzc2FnZTptZXNzYWdlIHdpdGhI
YW5kbGVyOmFjdGlvbl07CiB9CiAKKy0gKHZvaWQpc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5n
QW5kV2FpdFVudGlsQWxsSW1tZWRpYXRlQ2hpbGRGcmFtZXNQYWludDooTlNTdHJpbmcgKilodG1s
Cit7CisgICAgYm9vbCBkaWRGaXJlRE9NTG9hZEV2ZW50ID0gZmFsc2U7CisgICAgW3NlbGYgcGVy
Zm9ybUFmdGVyTG9hZGluZzpbJl0geyBkaWRGaXJlRE9NTG9hZEV2ZW50ID0gdHJ1ZTsgfV07Cisg
ICAgW3NlbGYgbG9hZEhUTUxTdHJpbmc6aHRtbCBiYXNlVVJMOltOU0J1bmRsZS5tYWluQnVuZGxl
LmJ1bmRsZVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJUZXN0V2ViS2l0QVBJLnJl
c291cmNlcyJdXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRpZEZpcmVET01Mb2Fk
RXZlbnQpOworICAgIFtzZWxmIHdhaXRGb3JOZXh0UHJlc2VudGF0aW9uVXBkYXRlXTsKK30KKwog
LSAodm9pZCl3YWl0Rm9yTWVzc2FnZTooTlNTdHJpbmcgKiltZXNzYWdlCiB7CiAgICAgX19ibG9j
ayBib29sIGlzRG9uZVdhaXRpbmcgPSBmYWxzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>