<?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>215677</bug_id>
          
          <creation_ts>2020-08-19 18:13:06 -0700</creation_ts>
          <short_desc>Move node geometry functions from Range to RenderObject</short_desc>
          <delta_ts>2020-08-24 10:13:26 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215551</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=215772</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1681568</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-19 18:13:06 -0700</bug_when>
    <thetext>Move node geometry functions from Range to RenderObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681612</commentid>
    <comment_count>1</comment_count>
      <attachid>406911</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-19 21:05:11 -0700</bug_when>
    <thetext>Created attachment 406911
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681616</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-19 21:11:13 -0700</bug_when>
    <thetext>Are you going to hold off from landing this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681619</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-19 21:14:08 -0700</bug_when>
    <thetext>Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681720</commentid>
    <comment_count>4</comment_count>
      <attachid>406939</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 09:57:02 -0700</bug_when>
    <thetext>Created attachment 406939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681793</commentid>
    <comment_count>5</comment_count>
      <attachid>406962</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 13:27:47 -0700</bug_when>
    <thetext>Created attachment 406962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681867</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-20 17:08:45 -0700</bug_when>
    <thetext>Hooray, all tests passing now, so ready for review. I won’t be landing this until Saturday at the soonest, but would love to get review soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682042</commentid>
    <comment_count>7</comment_count>
      <attachid>406962</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-21 15:40:58 -0700</bug_when>
    <thetext>Comment on attachment 406962
Patch

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

&gt; Source/WebCore/rendering/RenderObject.h:573
&gt; +    WEBCORE_EXPORT static Vector&lt;FloatQuad&gt; absoluteTextQuads(const SimpleRange&amp;, OptionSet&lt;BoundingRectBehavior&gt; = { });
&gt; +    WEBCORE_EXPORT static Vector&lt;IntRect&gt; absoluteTextRects(const SimpleRange&amp;, OptionSet&lt;BoundingRectBehavior&gt; = { });
&gt; +    WEBCORE_EXPORT static Vector&lt;FloatRect&gt; absoluteBorderAndTextRects(const SimpleRange&amp;, OptionSet&lt;BoundingRectBehavior&gt; = { });
&gt; +    static Vector&lt;FloatRect&gt; clientBorderAndTextRects(const SimpleRange&amp;);

It&apos;s a bit unfortunate that functions with _text_ and _border_  in their names end up in RenderObject (where we have neither border nor text) but I understand that it&apos;s hard to find a better place for a concept (Range) that has no associated renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682047</commentid>
    <comment_count>8</comment_count>
      <attachid>406962</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-21 15:46:17 -0700</bug_when>
    <thetext>Comment on attachment 406962
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderObject.h:573
&gt;&gt; +    static Vector&lt;FloatRect&gt; clientBorderAndTextRects(const SimpleRange&amp;);
&gt; 
&gt; It&apos;s a bit unfortunate that functions with _text_ and _border_  in their names end up in RenderObject (where we have neither border nor text) but I understand that it&apos;s hard to find a better place for a concept (Range) that has no associated renderer.

I am totally willing to follow up and move them somewhere else in the rendering world. They don’t have to stay on RenderObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682132</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-22 09:16:11 -0700</bug_when>
    <thetext>Committed r266028: &lt;https://trac.webkit.org/changeset/266028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682134</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-22 09:17:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/67617601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1682371</commentid>
    <comment_count>11</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-08-24 10:13:26 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Committed r266028: &lt;https://trac.webkit.org/changeset/266028&gt;
Seems like it broke one test on ios-wk2: platform/ios/ios/fast/coordinates/range-client-rects.html. Tracked in Bug 215772.

Also, unfortunately ios-wk2 ews was broken for some time late last week (due to Bug 215742), due to which the green ios-wk2 bubble for this bug is misleading (iOS layout-tests weren&apos;t actually run).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406911</attachid>
            <date>2020-08-19 21:05:11 -0700</date>
            <delta_ts>2020-08-20 09:57:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215677-20200819210510.patch</filename>
            <type>text/plain</type>
            <size>44650</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1ODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzg1MTc3YmE3MDlmNzcx
YWZlYTdmODllOWU4MjM0YWFkYWJhZGE5ZC4uZmZhZmU1Y2RjMWE3NTYyMDMzNjk3NGY0NTYyZmM5
ZmU1YjkzOGRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTA4LTE5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG5vZGUgZ2VvbWV0cnkg
ZnVuY3Rpb25zIGZyb20gUmFuZ2UgdG8gUmVuZGVyT2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU2NzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBmdW5jdGlvbnMgdGhhdCByZXR1cm4g
cXVhZHMgYW5kIHJlY3RhbmdsZXMgb3V0IG9mIFJhbmdlIGludG8gUmVuZGVyT2JqZWN0LgorICAg
ICAgICBXZSBjb3VsZCBmaW5kIGFub3RoZXIgaG9tZSBmb3IgdGhlbSwgYnV0IGZvciBub3cgdGhl
eSBtYWtlIHNlbnNlIGFzIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVuY3Rpb25zIHRoZXJlIHNp
bmNlIFJlbmRlck9iamVjdCBoYXMgdGhlIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0aGF0
IHRoZXkKKyAgICAgICAgY2FsbCBvbiBtdWx0aXBsZSBub2Rlcy4gTW9zdGx5IGRpZCBub3QgY2hh
bmdlIHRoZSBkZXNpZ24gb2YgdGhlc2UgZnVuY3Rpb25zIG11Y2gsCisgICAgICAgIGFuZCB3YXMg
Y2FyZWZ1bCBub3QgdG8gY2hhbmdlIGJlaGF2aW9yIGF0IGFsbC4gQnV0IGRpZCBjaGFuZ2UgYSBm
ZXcgdGhpbmdzOgorCisgICAgICAgIC0gR290IHJpZCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgcmV0
dXJuIGEgc2luZ2xlIHVuaW9uZWQgcmVjdGFuZ2xlLgorICAgICAgICAgIEluc3RlYWQgY2FsbGVy
cyBjYWxsIHVuaW9uUmVjdCBhdCBlYWNoIGNhbGwgc2l0ZS4KKyAgICAgICAgLSBDaGFuZ2VkIHRo
ZSAidXNlIHNlbGVjdGlvbiBoZWlnaHQiIGJvb2xlYW4gdG8gYSBCb3VuZGluZ1JlY3RCZWhhdmlv
ciBmbGFnLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kc0ZvclJlY3RzKTogQ2FsbCB1bmlvblJl
Y3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykgaW5zdGVhZAorICAgICAgICBvZiBS
YW5nZTo6YWJzb2x1dGVCb3VuZGluZ0JveC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zv
ck1hcmtlcik6IEluc3RlYWQgb2YgcGFzc2luZyAidHJ1ZSIsIHBhc3MKKyAgICAgICAgIlJlbmRl
ck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCIuCisgICAg
ICAgIAorICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
YWJzb2x1dGVCb3VuZGluZ0JveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Q2xpZW50UmVjdHMgY29uc3QpOiBDYWxsIFJlbmRl
ck9iamVjdDo6Y2xpZW50Qm9yZGVyQW5kVGV4dFJlY3RzLgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCBjb25zdCk6IENhbGwKKyAgICAgICAgdW5pb25SZWN0
KFJlbmRlck9iamVjdDo6Y2xpZW50Qm9yZGVyQW5kVGV4dFJlY3RzKS4KKyAgICAgICAgKFdlYkNv
cmU6OlJhbmdlOjpib3JkZXJBbmRUZXh0UmVjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OmJvdW5kaW5nUmVjdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3QgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAqIGRvbS9SYW5nZS5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMgY29uc3QpOiBJbnN0ZWFkIG9mCisgICAg
ICAgIHBhc3NpbmcgYSB1c2VTZWxlY3Rpb25IZWlnaHQgYm9vbGVhbiwgcGFzcyBCb3VuZGluZ1Jl
Y3RCZWhhdmlvci4KKworICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdEZvclJhbmdlKTogQ2FsbAorICAgICAgICB1
bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5k
VGV4dFJlY3RzKS4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOiBDYWxs
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp1bmlvblJl
Y3RJZ25vcmluZ1plcm9SZWN0cyk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0dlb21ldHJ5VXRpbGl0aWVzLmg6IFVwZGF0ZWQgZm9yIGFib3ZlLgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oOiBNYXJrZWQgYSBsb3Qgb2YgZnVuY3Rpb25zIGZpbmFs
LgorICAgICAgICBBZGRlZCBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBhYnNvbHV0ZVF1YWRzIG91
dCBhcmd1bWVudC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KTogVHdlYWtlZCBjb2Rl
IHN0eWxlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRl
eHRRdWFkcyk6IFJlcGxhY2VkIGJvb2xlYW4gdXNlU2VsZWN0aW9uSGVpZ2h0CisgICAgICAgIGFy
Z3VtZW50IHdpdGggYSBCb3VuZGluZ1JlY3RCZWhhdmlvciBhcmd1bWVudC4gQWxzbyBhZGRlZCBh
IGRvd25jYXN0IHNvIHRoZQorICAgICAgICBjYWxsIHRvIFJlbmRlckxpbmVCcmVhazo6YWJzb2x1
dGVRdWFkcyBpcyBhIG5vbi12aXJ0dWFsIGZ1bmN0aW9uIGNhbGwuCisgICAgICAgIChXZWJDb3Jl
OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMpOiBSZXBsYWNlZCBib29sZWFuIHVzZVNl
bGVjdGlvbkhlaWdodAorICAgICAgICBhcmd1bWVudCB3aXRoIGEgQm91bmRpbmdSZWN0QmVoYXZp
b3IgYXJndW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpub2RlQmVmb3JlKTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpib3JkZXJBbmRUZXh0UmVjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y2xpZW50Qm9yZGVyQW5kVGV4dFJlY3RzKTog
QWRkZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOiBVcGRhdGVkIGZvciBh
Ym92ZS4KKwogMjAyMC0wOC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFNjcmlwdFByb2Nlc3NOb2RlIHNob3VsZCBvbmx5IHJ1biBzY3JpcHQgYXN5bmNocm9u
b3VzbHkgaWYgdGhlIGF1ZGlvIGNvbnRleHQgaXMgbm90IGFuIE9mZmxpbmVBdWRpb0NvbnRleHQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNzQ5NmYwODVmNjNkNWJmNDE3ZDA3NjZjYTM3ZGIzMDdjNmFlODE4Ny4uMGVi
MjRhOWEyMzBkNGMxNjcyNTQ5ZGNlMTQyODAzMTFkM2Y3OWUwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyMiBAQAorMjAyMC0wOC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgTW92ZSBub2RlIGdlb21ldHJ5IGZ1bmN0aW9ucyBmcm9tIFJhbmdlIHRvIFJlbmRlck9i
amVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIENhbGwgdW5pb25SZWN0SWdu
b3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyku
CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1h
Z2UpOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1
ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24pOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdChS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBDYWxsCisgICAgICAgIHVuaW9uUmVj
dChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKS4KKwogMjAyMC0wOC0xOCAgQWxleCBD
aHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFdLV2ViVmll
d3MgdXNpbmcgZmFzdFNlcnZlclRydXN0RXZhbHVhdGlvbkVuYWJsZWQgc2hvdWxkIG9ubHkgYWxs
b3cgbGVnYWN5IFRMUyBmb3IgbWFpbiByZXNvdXJjZSBsb2FkcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCmluZGV4IDg3MGEzOTRkOWE1MjI2Nzc0OTJlMTJlZmU1ZTljNjQ1ZDc5NGQzOTcuLjk4
ZGNiMDg0MDc5NmM3NmEyMDg2NjZjZDc5ODY4NjU2OTZhNjJhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wOC0xOSAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBub2RlIGdlb21ldHJ5IGZ1bmN0aW9ucyBm
cm9tIFJhbmdlIHRvIFJlbmRlck9iamVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE1Njc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01SYW5nZSBib3Vu
ZGluZ0JveF0pOiBDYWxsIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3Rz
KS4KKwogMjAyMC0wOC0xNyAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIENsZWFuIHVwIERyYWdBcHBsaWNhdGlvbkZsYWdzIGFmdGVyIHN3aXRjaCB0byBPcHRp
b25TZXQ8PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggMGQ4MzhkNTc0ODFmYjQ3YmQ5ZmUyOWQ5
N2E1ZGMwOWFiMWQ4Y2FiNi4uNzgzYTEzNTA3ZjQxOTJjYmFkNDEyYTA4Y2FjMWYxMWE0ZGZjYjMz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXVkaW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERl
dGFpbHNFbGVtZW50LmgiCkBAIC0yMTIwLDkgKzIxMjEsOCBAQCBzdGF0aWMgSW50UmVjdCBib3Vu
ZHNGb3JSZWN0cyhjb25zdCBMYXlvdXRSZWN0JiByZWN0MSwgY29uc3QgTGF5b3V0UmVjdCYgcmVj
dDIsCiAgICAgb3VyUmVjdC51bml0ZShyZWN0Mik7CiAKICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xl
IHNwYW5zIGxpbmVzIGFuZCBjb250YWlucyBtdWx0aXBsZSB0ZXh0IGNoYXJhY3RlcnMsIHVzZSB0
aGUgcmFuZ2UncyBib3VuZGluZyBib3ggaW50ZWFkLgotICAgIGlmIChyZWN0MS5tYXhZKCkgIT0g
cmVjdDIubWF4WSgpKSB7Ci0gICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVM
aXZlUmFuZ2UoZGF0YVJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOwotICAgICAgICBpZiAo
Y2hhcmFjdGVyQ291bnQoZGF0YVJhbmdlKSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkK
KyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJlY3QyLm1heFkoKSAmJiBjaGFyYWN0ZXJDb3VudChk
YXRhUmFuZ2UpID4gMSkgeworICAgICAgICBpZiAoYXV0byBib3VuZGluZ0JveCA9IHVuaW9uUmVj
dChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKGRhdGFSYW5nZSkpOyAhYm91bmRpbmdC
b3guaXNFbXB0eSgpKQogICAgICAgICAgICAgb3VyUmVjdCA9IGJvdW5kaW5nQm94OwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApp
bmRleCBiYjJiNzdlOGE4ZjRmNjc2MmNiZWUxNWRiZWFmZjE4MWE5ZDY1ZTc4Li4wZjdmOTkwZTNl
ZDlhNzVjNjMxMTI0MGFlZDU1N2E4MTcwNTFjZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgY29uc3QgRnVuCiBzdGF0aWMgdm9pZCB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFy
a2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgTm9kZSYgbm9kZSkKIHsKICAgICBB
U1NFUlQoIW5vZGUuZG9jdW1lbnQoKS52aWV3KCkgfHwgIW5vZGUuZG9jdW1lbnQoKS52aWV3KCkt
Pm5lZWRzTGF5b3V0KCkpOwotICAgIG1hcmtlci5zZXRVbmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJv
dW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhtYWtlU2ltcGxlUmFu
Z2Uobm9kZSwgbWFya2VyKSwgdHJ1ZSkpKTsKKyAgICBtYXJrZXIuc2V0VW5jbGlwcGVkQWJzb2x1
dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMobWFr
ZVNpbXBsZVJhbmdlKG5vZGUsIG1hcmtlciksIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVo
YXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCkpKTsKIH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
aW5kZXggNzAwODFiZTIwY2IxYjczYjZiNGE3OTRmYWI5YTdhMWU5Y2IyY2U0NS4uZjg3NzIwOGYx
YTc4ODA5NWUxYTJhZDhjZmMwNjNhNTY3ZGVmNjkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKQEAgLTEwNzgsNjcgKzEwNzksNiBAQCBOb2RlKiBSYW5n
ZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVyKCkpOwogfQogCi1JbnRSZWN0IFJhbmdlOjphYnNv
bHV0ZUJvdW5kaW5nQm94KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlv
bnMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIGFic29sdXRlVGV4
dFJlY3RzKHJlY3RzLCBmYWxzZSwgcmVjdE9wdGlvbnMpOwotICAgIEludFJlY3QgcmVzdWx0Owot
ICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQotICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmFic29s
dXRlUmVjdHNGb3JSYW5nZUluVGV4dChOb2RlKiBub2RlLCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgYm9vbCYgaXNGaXhlZCwgT3B0aW9uU2V0PEJvdW5k
aW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9ucykgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDog
MDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIoKSA/IG1f
ZW5kLm9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotCi0g
ICAgYXV0byB0ZXh0UXVhZHMgPSByZW5kZXJUZXh0LmFic29sdXRlUXVhZHNGb3JSYW5nZShzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0LCB1c2VTZWxlY3Rpb25IZWlnaHQsIHJlY3RPcHRpb25zLmNvbnRh
aW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zKSwgJmlz
Rml4ZWQpOwotCi0gICAgaWYgKHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2
aW9yOjpSZXNwZWN0Q2xpcHBpbmcpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaXBw
ZWRSZWN0czsKLSAgICAgICAgY2xpcHBlZFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4
dFF1YWRzLnNpemUoKSk7Ci0KLSAgICAgICAgYXV0byBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QgPSByZW5kZXJUZXh0LmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotCi0gICAgICAg
IGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykgewotICAgICAgICAgICAgYXV0byBjbGlwcGVk
UmVjdCA9IGludGVyc2VjdGlvbihxdWFkLmJvdW5kaW5nQm94KCksIGFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBjbGlwcGVkUmVjdHMudW5jaGVja2VkQXBwZW5kKGNsaXBwZWRSZWN0KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGlwcGVkUmVjdHM7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGJvdW5kaW5nQm94ZXModGV4dFF1YWRzKTsKLX0KLQotdm9pZCBSYW5nZTo6YWJzb2x1
dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWln
aHQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17
Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IHJldHVybiBGbG9h
dFJlY3RzLgotCi0gICAgYm9vbCBhbGxGaXhlZCA9IHRydWU7Ci0gICAgYm9vbCBzb21lRml4ZWQg
PSBmYWxzZTsKLQotICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJl
bmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVSZWN0cyhyZWN0
cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOwotICAg
ICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBh
dXRvIHJlY3RzRm9yUmVuZGVyZXIgPSBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQobm9kZSwg
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSwgdXNlU2VsZWN0aW9uSGVpZ2h0LCBpc0Zp
eGVkLCByZWN0T3B0aW9ucyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0c0Zv
clJlbmRlcmVyKQotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
YWxsRml4ZWQgJj0gaXNGaXhlZDsKLSAgICAgICAgc29tZUZpeGVkIHw9IGlzRml4ZWQ7Ci0gICAg
fQotfQotCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogdm9pZCBSYW5nZTo6Zm9ybWF0Rm9y
RGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkBAIC0xNDE4
LDkxICsxMzU4LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpleHBhbmQoY29uc3QgU3Ry
aW5nJiB1bml0KQogCiBSZWY8RE9NUmVjdExpc3Q+IFJhbmdlOjpnZXRDbGllbnRSZWN0cygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIERPTVJlY3RMaXN0OjpjcmVhdGUoYm9yZGVyQW5kVGV4dFJlY3Rz
KENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KSk7CisgICAgcmV0dXJuIERPTVJlY3RMaXN0OjpjcmVh
dGUoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdl
KCp0aGlzKSkpOwogfQogCiBSZWY8RE9NUmVjdD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShib3VuZGluZ1JlY3QoQ29v
cmRpbmF0ZVNwYWNlOjpDbGllbnQpKTsKLX0KLQotVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJv
cmRlckFuZFRleHRSZWN0cyhDb29yZGluYXRlU3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gcmVjdHM7Ci0KLSAgICBvd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7Ci0KLSAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwot
ICAgIGJvb2wgdXNlVmlzaWJsZUJvdW5kcyA9IHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5n
UmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKLQotICAgIEhhc2hTZXQ8Tm9kZSo+IHNl
bGVjdGVkRWxlbWVudHNTZXQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5v
ZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAg
ICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50
c1NldC5hZGQobm9kZSk7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgaW5jbHVkZSBlbGVtZW50cyB0
aGF0IGFyZSBvbmx5IHBhcnRpYWxseSBzZWxlY3RlZC4KLSAgICBOb2RlKiBsYXN0Tm9kZSA9IG1f
ZW5kLmNoaWxkQmVmb3JlKCkgPyBtX2VuZC5jaGlsZEJlZm9yZSgpIDogJmVuZENvbnRhaW5lcigp
OwotICAgIGZvciAoTm9kZSogcGFyZW50ID0gbGFzdE5vZGUtPnBhcmVudE5vZGUoKTsgcGFyZW50
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgc2VsZWN0ZWRFbGVtZW50
c1NldC5yZW1vdmUocGFyZW50KTsKLSAgICAKLSAgICBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpW
aXNpYmxlUmVjdENvbnRleHRPcHRpb24+IHZpc2libGVSZWN0T3B0aW9ucyA9IHsgUmVuZGVyT2Jq
ZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OlVzZUVkZ2VJbmNsdXNpdmVJbnRlcnNlY3Rp
b24sIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0
ZWRDbGlwcywgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29t
cG9zaXRlZENvbnRhaW5lclNjcm9sbHMgfTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0
Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9k
ZSkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBzZWxlY3RlZEVsZW1lbnRz
U2V0LmNvbnRhaW5zKG5vZGUpICYmICh1c2VWaXNpYmxlQm91bmRzIHx8ICFub2RlLT5wYXJlbnRO
b2RlKCkgfHwgIXNlbGVjdGVkRWxlbWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgp
KSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKS5yZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHVz
ZVZpc2libGVCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NhbEJvdW5kcyA9
IHJlbmRlcmVyLT5ib3JkZXJCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRv
IHJvb3RDbGlwcGVkQm91bmRzID0gcmVuZGVyZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFp
bmVyKGxvY2FsQm91bmRzLCAmcmVuZGVyZXItPnZpZXcoKSwgeyBmYWxzZSwgZmFsc2UsIHZpc2li
bGVSZWN0T3B0aW9ucyB9KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFyb290Q2xpcHBlZEJv
dW5kcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBhdXRvIHNuYXBwZWRCb3VuZHMgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKCpyb290Q2xp
cHBlZEJvdW5kcywgbm9kZS0+ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHNwYWNlID09IENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KQotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0Ns
aWVudFJlY3Qoc25hcHBlZEJvdW5kcywgcmVuZGVyZXItPnN0eWxlKCkpOwotICAgICAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBlZEJvdW5kcyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgVmVjdG9y
PEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5hYnNv
bHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlID09IENv
b3JkaW5hdGVTcGFjZTo6Q2xpZW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5kb2N1bWVu
dCgpLmNvbnZlcnRBYnNvbHV0ZVRvQ2xpZW50UXVhZHMoZWxlbWVudFF1YWRzLCByZW5kZXJlci0+
c3R5bGUoKSk7Ci0KLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmRWZWN0b3IoYm91bmRpbmdC
b3hlcyhlbGVtZW50UXVhZHMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChp
czxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGRvd25j
YXN0PFRleHQ+KCpub2RlKS5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0Zp
eGVkOwotICAgICAgICAgICAgICAgIGF1dG8gY2xpcHBlZFJlY3RzID0gYWJzb2x1dGVSZWN0c0Zv
clJhbmdlSW5UZXh0KG5vZGUsICpyZW5kZXJlciwgZmFsc2UsIGlzRml4ZWQsIHJlY3RPcHRpb25z
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmRvY3VtZW50KCkuY29udmVydEFic29sdXRlVG9D
bGllbnRSZWN0cyhjbGlwcGVkUmVjdHMsIHJlbmRlcmVyLT5zdHlsZSgpKTsKLQotICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZFZlY3RvcihjbGlwcGVkUmVjdHMpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5n
UmVjdEJlaGF2aW9yOjpJZ25vcmVUaW55UmVjdHMpKSB7Ci0gICAgICAgIHJlY3RzLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXSAoY29uc3QgRmxvYXRSZWN0JiByZWN0KSAtPiBib29sIHsKLSAgICAgICAg
ICAgIHJldHVybiByZWN0LmFyZWEoKSA8PSAxOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVjdHM7Ci19Ci0KLUZsb2F0UmVjdCBSYW5nZTo6Ym91bmRpbmdSZWN0KENvb3JkaW5h
dGVTcGFjZSBzcGFjZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9u
cykgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgcmVzdWx0OwotICAgIGZvciAoYXV0byYgcmVjdCA6
IGJvcmRlckFuZFRleHRSZWN0cyhzcGFjZSwgcmVjdE9wdGlvbnMpKQotICAgICAgICByZXN1bHQu
dW5pdGVJZk5vblplcm8ocmVjdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0
IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZp
b3I+IHJlY3RPcHRpb25zKSBjb25zdAotewotICAgIHJldHVybiBib3VuZGluZ1JlY3QoQ29vcmRp
bmF0ZVNwYWNlOjpBYnNvbHV0ZSwgcmVjdE9wdGlvbnMpOworICAgIHJldHVybiBET01SZWN0Ojpj
cmVhdGUodW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3Jk
ZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSkpKTsKIH0KIAogU2ltcGxlUmFu
Z2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXgg
ZmFiOGY4MmJhZmY4YjM1OWM4MjAxYjYyMWMwMWZmOTYwOTIyMzEyNC4uYjg4NzUzZmIwZTVkMjZk
MWEzNmU3NzJhZDk3MDk5YmNlNGZhNmVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTI0LDIwICsyNCwx
NCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKLSNpbmNsdWRlIDx3
dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NUmVjdDsK
IGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZsb2F0
UXVhZDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7Ci1jbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgU2Vs
ZWN0aW9uUmVjdDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKQEAgLTk4
LDIwICs5Miw2IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGZpcnN0Tm9k
ZSgpIGNvbnN0OwogCi0gICAgZW51bSBjbGFzcyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVpbnQ4
X3QgewotICAgICAgICBSZXNwZWN0Q2xpcHBpbmcgPSAxIDw8IDAsCi0gICAgICAgIFVzZVZpc2li
bGVCb3VuZHMgPSAxIDw8IDEsCi0gICAgICAgIElnbm9yZVRpbnlSZWN0cyA9IDEgPDwgMiwKLSAg
ICAgICAgSWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucyA9IDEgPDwgMywgLy8gRG8gbm90IHJldHVy
biBlbXB0eSB0ZXh0IHJlY3RhbmdsZXMsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBFbGVtZW50Lmdl
dENsaWVudFJlY3QoKSBjb25mb3JtYW5jZS4KLSAgICB9OwotCi0gICAgLy8gTm90IHRyYW5zZm9y
bS1mcmllbmRseQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWJzb2x1dGVUZXh0UmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
SW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlv
cj4gPSB7IH0pIGNvbnN0OwotCi0gICAgLy8gVHJhbnNmb3JtLWZyaWVuZGx5Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwotCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFu
Z2VkKENvbnRhaW5lck5vZGUmKTsKICAgICB2b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQo
Q29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYpOwpAQCAt
MTQ3LDEyICsxMjcsNiBAQCBwcml2YXRlOgogICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05v
ZGVXT2Zmc2V0KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9y
PFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwog
Ci0gICAgZW51bSBjbGFzcyBDb29yZGluYXRlU3BhY2UgeyBBYnNvbHV0ZSwgQ2xpZW50IH07Ci0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSwg
T3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7Ci0gICAgRmxvYXRS
ZWN0IGJvdW5kaW5nUmVjdChDb29yZGluYXRlU3BhY2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RC
ZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwotCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYWJzb2x1dGVS
ZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqLCBSZW5kZXJUZXh0JiwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQsIGJvb2wmIGlzRml4ZWQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4pIGNv
bnN0OwotCiAgICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7CiAKICAgICBSZWY8RG9jdW1l
bnQ+IG1fb3duZXJEb2N1bWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggZDk3ZTY2ZjhmOGFmMDVmYTAyNzc2YTAwODUwZjVmNTVhZTg2MWYzZi4uZTAx
MDhiMjNhNjVmZjA4NjVlMjM4MGY1ZWMxY2FhZDU4NjNhNTc2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzNDEsOCArMjM0MSwxMiBAQCB2b2lkIEZy
YW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0YW5nbAogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAg
IE9wdGlvblNldDxSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlvcjsK
KyAgICBpZiAodGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9u
SGVpZ2h0KQorICAgICAgICBiZWhhdmlvci5hZGQoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RC
ZWhhdmlvcjo6VXNlU2VsZWN0aW9uSGVpZ2h0KTsKKwogICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRS
ZWN0ID0gbV9kb2N1bWVudC0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFy
ZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwotICAgIGZvciAoYXV0byYgcmVjdCA6
IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRl
eHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7
CisgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFF1YWRzKCpyYW5nZSwgYmVoYXZpb3IpKSkgewogICAgICAgICBhdXRvIGludGVyc2Vj
dGlvblJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlzaWJsZUNvbnRlbnRSZWN0KTsKICAgICAg
ICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlY3Rhbmds
ZXMuYXBwZW5kKGludGVyc2VjdGlvblJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRv
ci5jcHAKaW5kZXggOGUwZTA3OWVhZDQzZDZmODRiZTRmYWRjYjc3ZDQzZjFmYzliYTMzYy4uNjY3
M2FhN2VlOGZjNDczM2Y1ZWU5MTg4ZjUyZTg1OTY0YjgzYTJkMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCkBAIC0xOTgsMTEgKzE5OCwxMSBAQCBzdGF0aWMgSGFzaFNldDxD
b2xvcj4gZXN0aW1hdGVkVGV4dENvbG9yc0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKIAogc3RhdGljIEZsb2F0UmVjdCBhYnNvbHV0ZUJvdW5kaW5nUmVjdEZvclJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS0+YWJzb2x1dGVCb3VuZGluZ1JlY3QoewotICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVo
YXZpb3I6OlJlc3BlY3RDbGlwcGluZywKLSAgICAgICAgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2
aW9yOjpVc2VWaXNpYmxlQm91bmRzLAotICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZp
b3I6Oklnbm9yZVRpbnlSZWN0cywKLSAgICB9KTsKKyAgICByZXR1cm4gdW5pb25SZWN0SWdub3Jp
bmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhyYW5n
ZSwgeworICAgICAgICBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0
Q2xpcHBpbmcsCisgICAgICAgIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVz
ZVZpc2libGVCb3VuZHMsCisgICAgICAgIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZp
b3I6Oklnbm9yZVRpbnlSZWN0cywKKyAgICB9KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBlc3RpbWF0
ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0
IEZyYW1lJiBmcmFtZSkKQEAgLTMwMywxOCArMzAzLDE4IEBAIHN0YXRpYyBib29sIGluaXRpYWxp
emVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3Qg
U2ltCiAgICAgICAgIGRhdGEub3B0aW9ucy5hZGQoVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRB
bGxDb250ZW50KTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGVsc2UgaWYgKGRhdGEu
b3B0aW9ucy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VTZWxlY3Rpb25SZWN0Rm9y
U2l6aW5nKSkgewotICAgICAgICB0ZXh0UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cyhyYW5nZSkubWFwKFsmXShjb25zdCBhdXRvJiByZWN0KSAtPiBGbG9hdFJlY3Qg
eworICAgICAgICB0ZXh0UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhyYW5nZSkubWFwKFsmXShhdXRvJiByZWN0KSAtPiBGbG9hdFJlY3QgewogICAgICAgICAgICAg
cmV0dXJuIHJlY3QucmVjdCgpOwogICAgICAgICB9KTsKICAgICB9CiAjZW5kaWYKICAgICBlbHNl
IHsKLSAgICAgICAgYXV0byB0ZXh0UmVjdEhlaWdodCA9IGRhdGEub3B0aW9ucy5jb250YWlucyhU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpUaWdodGx5Rml0Q29udGVudCkgPyBGcmFtZVNlbGVjdGlvbjo6
VGV4dFJlY3RhbmdsZUhlaWdodDo6VGV4dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVj
dGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQ7Ci0gICAgICAgIFZlY3RvcjxJbnRSZWN0PiBp
bnRSZWN0czsKLSAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVUZXh0UmVj
dHMoaW50UmVjdHMsIHRleHRSZWN0SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFu
Z2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6
UmVzcGVjdENsaXBwaW5nKTsKLSAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW50UmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBpbnRSZWN0IDogaW50UmVj
dHMpCi0gICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2VkQXBwZW5kKGludFJlY3QpOworICAg
ICAgICBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcj4gYmVoYXZp
b3IgeyBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xpcHBpbmcg
fTsKKyAgICAgICAgaWYgKCFkYXRhLm9wdGlvbnMuY29udGFpbnMoVGV4dEluZGljYXRvck9wdGlv
bjo6VGlnaHRseUZpdENvbnRlbnQpKQorICAgICAgICAgICAgYmVoYXZpb3IuYWRkKFJlbmRlck9i
amVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCk7CisgICAgICAg
IHRleHRSZWN0cyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UsIGJlaGF2
aW9yKS5tYXAoWyZdKGF1dG8mIHJlY3QpIC0+IEZsb2F0UmVjdCB7CisgICAgICAgICAgICByZXR1
cm4gcmVjdDsKKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKHRleHRSZWN0cy5pc0VtcHR5
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRy
eVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRy
eVV0aWxpdGllcy5jcHAKaW5kZXggYmFkMmU4MWMxMTdhYWEwYjYwNGM3YzViY2ZiMzM4MjI5Y2E2
NjlmMC4uYjdkZjA3MjhjMTA2YjJmYTQ1ODIxOWNiNjkwMTViODExZjY4MDExNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVz
LmNwcApAQCAtNzcsMjIgKzc3LDI0IEBAIGJvb2wgZmluZEludGVyc2VjdGlvbihjb25zdCBGbG9h
dFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0UG9pCiBJbnRSZWN0
IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzKQogewogICAgIEludFJlY3Qg
cmVzdWx0OwotCi0gICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ld
KTsKLQorICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQorICAgICAgICByZXN1bHQudW5pdGUo
cmVjdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRmxvYXRSZWN0IHVuaW9uUmVjdChjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCiB7CiAgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAg
ICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKKyAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3QpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CiAKLSAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICByZXN1bHQu
dW5pdGUocmVjdHNbaV0pOwotCitGbG9hdFJlY3QgdW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMo
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzKQoreworICAgIEZsb2F0UmVjdCByZXN1bHQ7
CisgICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCisgICAgICAgIHJlc3VsdC51bml0ZUlmTm9u
WmVybyhyZWN0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuaAppbmRleCAwZGRkNmMy
ZWE3MjAyNDNmMzAxNWZhZmU0ZjY4OGU0YmU1MDA0ZjI2Li40YTc2MDQ2MTAxYjdmMGI0ZDdiYzU5
YzRmODgzZDkxZGJiMjcxMDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmgKQEAgLTM4LDggKzM4LDkgQEAgZmxvYXQgZmlu
ZFNsb3BlKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQm
IGMpOwogLy8gRmluZCBwb2ludCB3aGVyZSBsaW5lcyB0aHJvdWdoIHRoZSB0d28gcGFpcnMgb2Yg
cG9pbnRzIGludGVyc2VjdC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgbGluZXMgZG9uJ3QgaW50ZXJz
ZWN0LgogV0VCQ09SRV9FWFBPUlQgYm9vbCBmaW5kSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgZDEsIGNvbnN0
IEZsb2F0UG9pbnQmIGQyLCBGbG9hdFBvaW50JiBpbnRlcnNlY3Rpb24pOwogCi1JbnRSZWN0IHVu
aW9uUmVjdChjb25zdCBWZWN0b3I8SW50UmVjdD4mKTsKK1dFQkNPUkVfRVhQT1JUIEludFJlY3Qg
dW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOwogV0VCQ09SRV9FWFBPUlQgRmxvYXRS
ZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYpOworV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+Jik7CiAKIC8vIE1hcCBwb2ludCBmcm9tIHNyY1JlY3QgdG8gYW4gZXF1aXZhbGVudCBwb2lu
dCBpbiBkZXN0UmVjdC4KIEZsb2F0UG9pbnQgbWFwUG9pbnQoRmxvYXRQb2ludCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAppbmRleCAyNDI5ZjU4ZjgzOTUzZmZiNTg2
OTRiNzRjYTllNDE5NDQyZDU5Yzg5Li4yYTYyNTFhZmRkOTVhYmFjYzk0ZTkzZDE3MmY2ZjZlYjE3
OWI0NWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBA
IC0zNiw5ICszNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5SZW5kZXJMaW5lQnJlYWsoKTsK
IAogICAgIC8vIEZJWE1FOiBUaGUgbGllcyBoZXJlIGtlZXAgcmVuZGVyIHRyZWUgZHVtcCBiYXNl
ZCB0ZXN0IHJlc3VsdHMgdW5jaGFuZ2VkLgotICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzV0JSID8gIlJlbmRlcldvcmRCcmVhayIgOiAiUmVu
ZGVyQlIiOyB9CisgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1faXNXQlIgPyAiUmVuZGVyV29yZEJyZWFrIiA6ICJSZW5kZXJCUiI7IH0KIAotICAgIGJv
b2wgaXNXQlIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2lzV0JSOyB9CisgICAgYm9vbCBp
c1dCUigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNXQlI7IH0KIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbmxpbmVFbGVtZW50Qm94PiBjcmVhdGVJbmxpbmVCb3goKTsKICAgICBJbmxpbmVFbGVt
ZW50Qm94KiBpbmxpbmVCb3hXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVCb3hXcmFw
cGVyOyB9CkBAIC01MCw0NSArNTAsNDUgQEAgcHVibGljOgogICAgIEludFJlY3QgbGluZXNCb3Vu
ZGluZ0JveCgpIGNvbnN0OwogICAgIEludFJlY3QgYm91bmRpbmdCb3hGb3JSZW5kZXJUcmVlRHVt
cCgpIGNvbnN0OwogCi0gICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogd2FzRml4ZWQpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IGZpbmFsOworICAgIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkID0gbnVs
bHB0cikgY29uc3QgZmluYWw7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZvaWQgY29sbGVj
dFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKSBvdmVycmlkZTsKKyAgICB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0
b3I8U2VsZWN0aW9uUmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVu
ZE9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkgZmluYWw7CiAj
ZW5kaWYKICAgICB2b2lkIGVuc3VyZUxpbmVCb3hlcygpOwogCiBwcml2YXRlOgogICAgIHZvaWQg
bm9kZSgpIGNvbnN0ID0gZGVsZXRlOwogCi0gICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZSB7IH0KLQotICAgIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRD
b250YWluZXIqKSBvdmVycmlkZTsKLSAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlOwotICAgIExheW91dFJlY3QgbG9j
YWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQq
IGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJpZGU7Ci0KLSAgICBMYXlvdXRVbml0IGxpbmVIZWln
aHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBj
b25zdCBvdmVycmlkZTsKLSAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJv
b2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBMYXlvdXRVbml0IG1hcmdpblRvcCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkJvdHRvbSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAwOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5SaWdodCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpbkJlZm9yZShjb25zdCBSZW5k
ZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1h
cmdpbkFmdGVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsg
fQotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgTGF5b3V0VW5pdCBv
ZmZzZXRXaWR0aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS53
aWR0aCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBvZmZzZXRIZWlnaHQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBsaW5lc0JvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRSZWN0IGJv
cmRlckJvdW5kaW5nQm94KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTGF5b3V0UmVjdChMYXlv
dXRQb2ludCgpLCBsaW5lc0JvdW5kaW5nQm94KCkuc2l6ZSgpKTsgfQotICAgIExheW91dFJlY3Qg
ZnJhbWVSZWN0Rm9yU3RpY2t5UG9zaXRpb25pbmcoKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9Ci0gICAgTGF5b3V0UmVjdCBjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Kikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9Ci0KLSAgICB2b2lkIHVwZGF0
ZUZyb21TdHlsZSgpIG92ZXJyaWRlOwotICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBmaW5hbCB7IH0KKworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWlu
ZXIqKSBmaW5hbDsKKyAgICBpbnQgY2FyZXRNaW5PZmZzZXQoKSBjb25zdCBmaW5hbDsKKyAgICBp
bnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGNhbkJlU2VsZWN0aW9u
TGVhZigpIGNvbnN0IGZpbmFsOworICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5l
Qm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9m
TGluZSkgZmluYWw7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkg
ZmluYWw7CisKKyAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBmaW5hbDsKKyAgICBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3QgZmluYWw7CisKKyAgICBMYXlvdXRVbml0IG1h
cmdpblRvcCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdp
bkJvdHRvbSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdp
bkxlZnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5S
aWdodCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBMYXlvdXRVbml0IG1hcmdpbkJl
Zm9yZShjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBM
YXlvdXRVbml0IG1hcmdpbkFmdGVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgZmluYWwgeyBy
ZXR1cm4gMDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQoY29u
c3QgUmVuZGVyU3R5bGUqKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgTGF5b3V0VW5p
dCBvZmZzZXRXaWR0aCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS53
aWR0aCgpOyB9CisgICAgTGF5b3V0VW5pdCBvZmZzZXRIZWlnaHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBsaW5lc0JvdW5kaW5nQm94KCkuaGVpZ2h0KCk7IH0KKyAgICBMYXlvdXRSZWN0IGJvcmRl
ckJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gTGF5b3V0UmVjdChMYXlvdXRQb2lu
dCgpLCBsaW5lc0JvdW5kaW5nQm94KCkuc2l6ZSgpKTsgfQorICAgIExheW91dFJlY3QgZnJhbWVS
ZWN0Rm9yU3RpY2t5UG9zaXRpb25pbmcoKSBjb25zdCBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CisgICAgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KikgY29uc3QgZmlu
YWwgeyByZXR1cm4gTGF5b3V0UmVjdCgpOyB9CisKKyAgICB2b2lkIHVwZGF0ZUZyb21TdHlsZSgp
IGZpbmFsOworICAgIGJvb2wgcmVxdWlyZXNMYXllcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZh
bHNlOyB9CiAKICAgICBJbmxpbmVFbGVtZW50Qm94KiBtX2lubGluZUJveFdyYXBwZXI7CiAgICAg
bXV0YWJsZSBpbnQgbV9jYWNoZWRMaW5lSGVpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAppbmRleCBhNWEzZmM3OThkNjBlNTY0MDNjZDA5ZDlmNGVhNTgwNjYy
NzQzNTg0Li45OTNjMmI4MTAyMGI4OGU2NDI1NmZiNjUwNWYxODA1OTMwNmRhYTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkVkaXRpbmcuaCIKKyNpbmNs
dWRlICJFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTUyLDYg
KzUzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
QmFja2luZy5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgorI2luY2x1ZGUg
IlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvdy5oIgog
I2luY2x1ZGUgIlJlbmRlclJ1YnkuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdCbG9jay5oIgpAQCAt
NjgwLDcgKzY4Miw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBwYWludEluZm8uY29udGV4dCgpLnNldFVSTEZvclJlY3Qobm9kZS0+ZG9jdW1lbnQo
KS5jb21wbGV0ZVVSTChocmVmKSwgdXJsUmVjdCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5z
ZXRVUkxGb3JSZWN0KGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChocmVmKSwgdXJsUmVj
dCk7CiAKIH0KIApAQCAtMTkwMCwzNyArMTkwMiwxNTUgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Omhh
c05vbkVtcHR5VmlzaWJsZVJlY3RSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCkKK1ZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gYmVoYXZpb3IpCiB7CiAgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7
CiAgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CiAgICAg
ICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7CiAgICAgICAgIGlmIChyZW5kZXJl
ciAmJiByZW5kZXJlci0+aXNCUigpKQotICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVh
ZHMocXVhZHMpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVy
ZXIpLmFic29sdXRlUXVhZHMocXVhZHMpOwogICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PihyZW5kZXJlcikpIHsKICAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0ZXJE
YXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpKTsKLSAg
ICAgICAgICAgIHF1YWRzLmFwcGVuZFZlY3Rvcihkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVy
ZXIpLmFic29sdXRlUXVhZHNGb3JSYW5nZShvZmZzZXRSYW5nZS5zdGFydCwgb2Zmc2V0UmFuZ2Uu
ZW5kLCB1c2VTZWxlY3Rpb25IZWlnaHQpKTsKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZFZlY3Rv
cihkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLmFic29sdXRlUXVhZHNGb3JSYW5nZShv
ZmZzZXRSYW5nZS5zdGFydCwgb2Zmc2V0UmFuZ2UuZW5kLCBiZWhhdmlvci5jb250YWlucyhCb3Vu
ZGluZ1JlY3RCZWhhdmlvcjo6VXNlU2VsZWN0aW9uSGVpZ2h0KSkpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiBxdWFkczsKIH0KIAotVmVjdG9yPEludFJlY3Q+IFJlbmRlck9iamVjdDo6
YWJzb2x1dGVUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHVzZVNlbGVj
dGlvbkhlaWdodCkKK3N0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBhYnNvbHV0ZVJlY3RzRm9yUmFu
Z2VJblRleHQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0JiBub2RlLCBPcHRpb25TZXQ8
UmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcj4gYmVoYXZpb3IpCiB7CisgICAgYXV0
byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZz
ZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgYXV0byB0ZXh0UXVhZHMgPSByZW5kZXJlci0+YWJz
b2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIGJl
aGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNl
bGVjdGlvbkhlaWdodCksIGJlaGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91bmRpbmdS
ZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMpKTsKKworICAgIGlmIChiZWhh
dmlvci5jb250YWlucyhSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0
Q2xpcHBpbmcpKSB7CisgICAgICAgIGF1dG8gYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0ID0g
cmVuZGVyZXItPmFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOworCisgICAgICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IGNsaXBwZWRSZWN0czsKKyAgICAgICAgY2xpcHBlZFJlY3RzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgcXVh
ZCA6IHRleHRRdWFkcykgeworICAgICAgICAgICAgYXV0byBjbGlwcGVkUmVjdCA9IGludGVyc2Vj
dGlvbihxdWFkLmJvdW5kaW5nQm94KCksIGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCk7Cisg
ICAgICAgICAgICBpZiAoIWNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBj
bGlwcGVkUmVjdHMudW5jaGVja2VkQXBwZW5kKGNsaXBwZWRSZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gY2xpcHBlZFJlY3RzOworICAgIH0KKworICAgIHJldHVybiBib3VuZGluZ0Jv
eGVzKHRleHRRdWFkcyk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIHNob3VsZCByZXR1cm4gVmVjdG9y
PEZsb2F0UmVjdD4gbGlrZSB0aGUgb3RoZXIgc2ltaWxhciBmdW5jdGlvbnMuCisvLyBGSVhNRTog
RmluZCBhIHdheSB0byBzaGFyZSB3aXRoIGFic29sdXRlVGV4dFF1YWRzIHJhdGhlciB0aGFuIHJl
cGVhdGluZyBzbyBtdWNoIG9mIHRoZSBsb2dpYyBmcm9tIHRoYXQgZnVuY3Rpb24uCitWZWN0b3I8
SW50UmVjdD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gYmVoYXZpb3IpCit7Cisg
ICAgQVNTRVJUKCFiZWhhdmlvci5jb250YWlucyhCb3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNlVmlz
aWJsZUJvdW5kcykpOworICAgIEFTU0VSVCghYmVoYXZpb3IuY29udGFpbnMoQm91bmRpbmdSZWN0
QmVoYXZpb3I6Oklnbm9yZVRpbnlSZWN0cykpOwogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsK
ICAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKICAgICAg
ICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVSZWN0
cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkp
OwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKLSAgICAgICAg
ICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIGRv
d25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgcXVh
ZCA6IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdl
KG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNlbGVjdGlvbkhlaWdodCkp
Ci0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3go
KSk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikuYWJz
b2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2NhbFRvQWJz
b2x1dGUoKSkpOworICAgICAgICBlbHNlIGlmIChpczxUZXh0Pihub2RlKSkgeworICAgICAgICAg
ICAgZm9yIChhdXRvJiByZWN0IDogYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KHJhbmdlLCBk
b3duY2FzdDxUZXh0Pihub2RlKSwgYmVoYXZpb3IpKQorICAgICAgICAgICAgICAgIHJlY3RzLmFw
cGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcmVjdHM7Cit9CisKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZShjb25zdCBCb3Vu
ZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQub2Zmc2V0KSB7CisgICAgICAgIGlm
IChhdXRvIG5vZGUgPSBwb2ludC5jb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9m
ZnNldCAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorICAgIHJldHVybiBw
b2ludC5jb250YWluZXIucHRyKCk7Cit9CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVNwYWNlIHsg
Q2xpZW50LCBBYnNvbHV0ZSB9OworCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5k
VGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgQ29vcmRpbmF0ZVNwYWNlIHNwYWNl
LCBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcj4gYmVoYXZpb3Ip
Cit7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7CisKKyAgICByYW5nZS5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7
CisKKyAgICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBiZWhhdmlvci5jb250YWlucyhSZW5kZXJP
YmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzKTsKKworICAgIEhh
c2hTZXQ8RWxlbWVudCo+IHNlbGVjdGVkRWxlbWVudHNTZXQ7CisgICAgZm9yIChhdXRvJiBub2Rl
IDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlmIChpczxFbGVtZW50Pihu
b2RlKSkKKyAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNTZXQuYWRkKCZkb3duY2FzdDxFbGVt
ZW50Pihub2RlKSk7CisgICAgfQorCisgICAgLy8gRG9uJ3QgaW5jbHVkZSBlbGVtZW50cyBhdCB0
aGUgZW5kIG9mIHRoZSByYW5nZSB0aGF0IGFyZSBvbmx5IHBhcnRpYWxseSBzZWxlY3RlZC4KKyAg
ICAvLyBGSVhNRTogV2hhdCBhYm91dCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlPyBUaGUgYXN5bW1l
dHJ5IGhlcmUgZG9lcyBub3QgbWFrZSBzZW5zZS4gU2VlbXMgbGlrZWx5IHRoaXMgbG9naWMgaXMg
bm90IHF1aXRlIHJpZ2h0IGluIG90aGVyIHJlc3BlY3RzLCB0b28uCisgICAgaWYgKGF1dG8gbGFz
dE5vZGUgPSBub2RlQmVmb3JlKHJhbmdlLmVuZCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBhbmNl
c3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PigqbGFzdE5vZGUpKQorICAgICAgICAgICAg
c2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUoJmFuY2VzdG9yKTsKKyAgICB9CisKKyAgICBjb25z
dGV4cHIgT3B0aW9uU2V0PFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uPiB2
aXNpYmxlUmVjdE9wdGlvbnMgPSB7CisgICAgICAgIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RD
b250ZXh0T3B0aW9uOjpVc2VFZGdlSW5jbHVzaXZlSW50ZXJzZWN0aW9uLAorICAgICAgICBSZW5k
ZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb21wb3NpdGVkQ2xpcHMs
CisgICAgICAgIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNv
bXBvc2l0ZWRDb250YWluZXJTY3JvbGxzCisgICAgfTsKKworICAgIGZvciAoYXV0byYgbm9kZSA6
IGludGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9k
ZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucygmZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkpICYmICh1c2VWaXNpYmxlQm91bmRzIHx8ICFub2RlLnBhcmVudEVsZW1lbnQoKSB8fCAhc2Vs
ZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLnBhcmVudEVsZW1lbnQoKSkpKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnJlbmRl
ckJveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodXNlVmlzaWJsZUJvdW5k
cykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2FsQm91bmRzID0gcmVuZGVyZXItPmJv
cmRlckJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcm9vdENsaXBwZWRC
b3VuZHMgPSByZW5kZXJlci0+Y29tcHV0ZVZpc2libGVSZWN0SW5Db250YWluZXIobG9jYWxCb3Vu
ZHMsICZyZW5kZXJlci0+dmlldygpLCB7IGZhbHNlLCBmYWxzZSwgdmlzaWJsZVJlY3RPcHRpb25z
IH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb3RDbGlwcGVkQm91bmRzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gc25h
cHBlZEJvdW5kcyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoKnJvb3RDbGlwcGVkQm91bmRzLCBu
b2RlLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVudCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0NsaWVudFJlY3Qoc25hcHBl
ZEJvdW5kcywgcmVuZGVyZXItPnN0eWxlKCkpOworICAgICAgICAgICAgICAgICAgICByZWN0cy5h
cHBlbmQoc25hcHBlZEJvdW5kcyk7CisKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxl
bWVudFF1YWRzOworICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGVsZW1l
bnRRdWFkcyk7CisgICAgICAgICAgICAgICAgaWYgKHNwYWNlID09IENvb3JkaW5hdGVTcGFjZTo6
Q2xpZW50KQorICAgICAgICAgICAgICAgICAgICBub2RlLmRvY3VtZW50KCkuY29udmVydEFic29s
dXRlVG9DbGllbnRRdWFkcyhlbGVtZW50UXVhZHMsIHJlbmRlcmVyLT5zdHlsZSgpKTsKKworICAg
ICAgICAgICAgICAgIHJlY3RzLmFwcGVuZFZlY3Rvcihib3VuZGluZ0JveGVzKGVsZW1lbnRRdWFk
cykpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGlzPFRleHQ+KG5vZGUpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KG5vZGUpLnJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNsaXBwZWRSZWN0cyA9IGFic29sdXRl
UmVjdHNGb3JSYW5nZUluVGV4dChyYW5nZSwgZG93bmNhc3Q8VGV4dD4obm9kZSksIGJlaGF2aW9y
KTsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQp
CisgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0Ns
aWVudFJlY3RzKGNsaXBwZWRSZWN0cywgcmVuZGVyZXItPnN0eWxlKCkpOworICAgICAgICAgICAg
ICAgIHJlY3RzLmFwcGVuZFZlY3RvcihjbGlwcGVkUmVjdHMpOworICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQorCisgICAgaWYgKGJlaGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6
Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZVRpbnlSZWN0cykpIHsKKyAgICAgICAgcmVjdHMu
cmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuIHJlY3QuYXJlYSgpIDw9IDE7CisgICAgICAgIH0pOworICAgIH0K
KwogICAgIHJldHVybiByZWN0czsKIH0KIAorVmVjdG9yPEZsb2F0UmVjdD4gUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9w
dGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gYmVoYXZpb3IpCit7CisgICAgcmV0dXJuIGJv
cmRlckFuZFRleHRSZWN0cyhyYW5nZSwgQ29vcmRpbmF0ZVNwYWNlOjpBYnNvbHV0ZSwgYmVoYXZp
b3IpOworfQorCitWZWN0b3I8RmxvYXRSZWN0PiBSZW5kZXJPYmplY3Q6OmNsaWVudEJvcmRlckFu
ZFRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIGJvcmRl
ckFuZFRleHRSZWN0cyhyYW5nZSwgQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQsIHsgfSk7Cit9CisK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBzdGF0aWMgYm9vbCBpbnRlcnZhbHNTdWZmaWNp
ZW50bHlPdmVybGFwKGludCBzdGFydEEsIGludCBlbmRBLCBpbnQgc3RhcnRCLCBpbnQgZW5kQikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCA3MTEzZjVjMzI5MDBl
ZDc2NGIzNmU0NDc5Yjk2MDdmMDc3OWIxMmY4Li41Mzc3Y2JlOGJkNjk5YTJmYWM2OWEyZGIxN2I0
Y2NjNWFhZjkxODMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBA
IC01NjAsOCArNTYwLDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIC8qd2FzRml4ZWQqLyA9IG51bGxwdHIpIGNvbnN0
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9h
dFF1YWQ+Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4g
YWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHVzZVNlbGVjdGlvbkhl
aWdodCA9IGZhbHNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEludFJlY3Q+
IGFic29sdXRlVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCB1c2VTZWxlY3Rpb25I
ZWlnaHQgPSBmYWxzZSk7CisgICAgZW51bSBjbGFzcyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVp
bnQ4X3QgeworICAgICAgICBSZXNwZWN0Q2xpcHBpbmcgPSAxIDw8IDAsCisgICAgICAgIFVzZVZp
c2libGVCb3VuZHMgPSAxIDw8IDEsCisgICAgICAgIElnbm9yZVRpbnlSZWN0cyA9IDEgPDwgMiwK
KyAgICAgICAgSWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucyA9IDEgPDwgMywKKyAgICAgICAgVXNl
U2VsZWN0aW9uSGVpZ2h0ID0gMSA8PCA0LAorICAgIH07CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFZlY3RvcjxGbG9hdFF1YWQ+IGFic29sdXRlVGV4dFF1YWRzKGNvbnN0IFNpbXBsZVJhbmdl
JiwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFZlY3RvcjxJbnRSZWN0PiBhYnNvbHV0ZVRleHRSZWN0cyhjb25zdCBTaW1w
bGVSYW5nZSYsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBhYnNvbHV0ZUJvcmRlckFuZFRl
eHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlv
cj4gPSB7IH0pOworICAgIHN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBjbGllbnRCb3JkZXJBbmRU
ZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogICAgIC8vIHRoZSByZWN0IHRoYXQgd2ls
bCBiZSBwYWludGVkIGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290
CiAgICAgV0VCQ09SRV9FWFBPUlQgTGF5b3V0UmVjdCBwYWludGluZ1Jvb3RSZWN0KExheW91dFJl
Y3QmIHRvcExldmVsUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlLmNwcAppbmRleCBkMDdiZDk4YTE3MTZiZDgxY2IwYzhiZTU4YjVmNDE3NmExYjc5Y2Rk
Li42M2YzYzc4NmU2ZmIyMTVjOWEyZjRlMjU5ZmFjOWU2MTFiNmRiOGIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxl
UmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVNlbGVj
dGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HZW9tZXRyeVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU1Jh
bmdlLmg+CkBAIC0xMDEsOSArMTAyLDggQEAgUmVmPEluamVjdGVkQnVuZGxlTm9kZUhhbmRsZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6ZG9jdW1lbnQoKQogCiBXZWJDb3JlOjpJbnRSZWN0
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmJvdW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0
ZXMoKSBjb25zdAogewotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBtX3JhbmdlLT5hYnNv
bHV0ZUJvdW5kaW5nUmVjdCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS5mcmFtZSgpOwotICAgIHJldHVybiBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdSZWN0KSk7CisgICAgcmV0dXJuIGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bmlvblJlY3RJZ25vcmlu
Z1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKG1ha2VT
aW1wbGVSYW5nZShtX3JhbmdlKSkpKSk7CiB9CiAKIFJlZlB0cjxXZWJJbWFnZT4gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucykK
QEAgLTEyNyw3ICsxMjcsNyBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKTsKIAogICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2
aWNlU2NhbGVGYWN0b3IpID8gMSA6IGZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
Ci0gICAgSW50UmVjdCBwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmFuZ2UtPmFic29s
dXRlQm91bmRpbmdSZWN0KCkpOworICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdCh1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9y
ZGVyQW5kVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShtX3JhbmdlKSkpKTsKICAgICBJbnRTaXpl
IGJhY2tpbmdTdG9yZVNpemUgPSBwYWludFJlY3Quc2l6ZSgpOwogICAgIGJhY2tpbmdTdG9yZVNp
emUuc2NhbGUoc2NhbGVGYWN0b3IpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGYwNWVmMzg0YzhhOGRjN2M1ZDkzNTNi
YmMyOTk0MWNlZDgzYmI3MTUuLjRjNzE5YjUwZTNjNzgwYjJhMTNmZjI2NDE3NzRkMDI3OGRlZjBi
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCkBAIC0xOTA2LDcgKzE5MDYsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RFdmFz
aW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZlYwog
CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlczsKICAg
ICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0aW9uQm91bmRzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY3JlYXRlTGl2
ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKKyAgICAgICAg
c2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50
c1RvUm9vdFZpZXcodW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnNl
bGVjdGVkUmFuZ2UpKSk7CiAgICAgZWxzZQogICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RW
aWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxl
Y3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogCkBAIC00MjY0LDkgKzQyNjQsOCBAQCB2
b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGlu
Z0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICBjb25zdCBpbnQgc3RyaWRlID0gMTsKICAg
ICAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBpZiAoIWl0ZXJh
dG9yLnRleHQoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRSYW5n
ZSA9IGNyZWF0ZUxpdmVSYW5nZShpdGVyYXRvci5yYW5nZSgpKTsKLSAgICAgICAgICAgICAgICBh
dXRvIGFic29sdXRlQm91bmRpbmdCb3ggPSBjdXJyZW50UmFuZ2UtPmFic29sdXRlQm91bmRpbmdC
b3goUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25z
KTsKLSAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoeyBjdXJyZW50UmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwg
eyBvZmZzZXRTb0ZhcisrLCBzdHJpZGUgfSB9KTsKKyAgICAgICAgICAgICAgICBhdXRvIGFic29s
dXRlQm91bmRpbmdCb3ggPSB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0
cyhpdGVyYXRvci5yYW5nZSgpLCBSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJ
Z25vcmVFbXB0eVRleHRTZWxlY3Rpb25zKSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5k
KHsgaXRlcmF0b3IucmFuZ2UoKS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudmlldygpLT5j
b250ZW50c1RvUm9vdFZpZXcoYWJzb2x1dGVCb3VuZGluZ0JveCksIHsgb2Zmc2V0U29GYXIrKywg
c3RyaWRlIH0gfSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdGVyYXRvci5hZHZhbmNl
KHN0cmlkZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IDE0
M2YwOGQzNTkyYTMwNTY1YzE1NzBjN2U2NzFjZmZjY2YyNDI0YTEuLmRlNWVhOGQ2YmM5MDNkZGVl
YWFmNjEwNDRmNDQ4NDgxOWQ2YmVlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpA
QCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR2VvbWV0cnlVdGlsaXRpZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTExpbmtFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MUGFyc2VySWRpb21zLmg+CkBAIC01NzIsNyArNTczLDcgQEAgLSAoTlNS
ZWN0KWJvdW5kaW5nQm94CiAgICAgLy8gRklYTUU6IFRoZSBjYWxsIHRvIHVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cyBzaG91bGQgYmUgbW92ZWQgaW50byBXZWJDb3JlOjpSYW5n
ZS4KICAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwogICAgIHJhbmdlLm93bmVyRG9jdW1l
bnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4g
cmFuZ2UuYWJzb2x1dGVCb3VuZGluZ0JveCgpOworICAgIHJldHVybiB1bmlvblJlY3QoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKSk7CiB9CiAK
ICNpZiBQTEFURk9STShNQUMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406939</attachid>
            <date>2020-08-20 09:57:02 -0700</date>
            <delta_ts>2020-08-20 13:27:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215677-20200820095701.patch</filename>
            <type>text/plain</type>
            <size>48161</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzllM2QxYjhmN2EyNDVm
MDU0MDBiZDcxZWQ3YWRhZDZkYTcxMGM3Zi4uZjRlNTVhNTZmZTQ4MmJmNjM3YWRiOWY5ZWRlMTJl
YzIxNDM5YmYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA4LTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG5vZGUgZ2VvbWV0cnkg
ZnVuY3Rpb25zIGZyb20gUmFuZ2UgdG8gUmVuZGVyT2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU2NzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBmdW5jdGlvbnMgdGhhdCByZXR1cm4g
cXVhZHMgYW5kIHJlY3RhbmdsZXMgb3V0IG9mIFJhbmdlIGludG8gUmVuZGVyT2JqZWN0LgorICAg
ICAgICBXZSBjb3VsZCBmaW5kIGFub3RoZXIgaG9tZSBmb3IgdGhlbSwgYnV0IGZvciBub3cgdGhl
eSBtYWtlIHNlbnNlIGFzIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVuY3Rpb25zIHRoZXJlIHNp
bmNlIFJlbmRlck9iamVjdCBoYXMgdGhlIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0aGF0
IHRoZXkKKyAgICAgICAgY2FsbCBvbiBtdWx0aXBsZSBub2Rlcy4gTW9zdGx5IGRpZCBub3QgY2hh
bmdlIHRoZSBkZXNpZ24gb2YgdGhlc2UgZnVuY3Rpb25zIG11Y2gsCisgICAgICAgIGFuZCB3YXMg
Y2FyZWZ1bCBub3QgdG8gY2hhbmdlIGJlaGF2aW9yIGF0IGFsbC4gQnV0IGRpZCBjaGFuZ2UgYSBm
ZXcgdGhpbmdzOgorCisgICAgICAgIC0gR290IHJpZCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgcmV0
dXJuIGEgc2luZ2xlIHVuaW9uZWQgcmVjdGFuZ2xlLgorICAgICAgICAgIEluc3RlYWQgY2FsbGVy
cyBjYWxsIHVuaW9uUmVjdCBhdCBlYWNoIGNhbGwgc2l0ZS4KKyAgICAgICAgLSBDaGFuZ2VkIHRo
ZSAidXNlIHNlbGVjdGlvbiBoZWlnaHQiIGJvb2xlYW4gdG8gYSBCb3VuZGluZ1JlY3RCZWhhdmlv
ciBmbGFnLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kc0ZvclJlY3RzKTogQ2FsbCB1bmlvblJl
Y3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykgaW5zdGVhZAorICAgICAgICBvZiBS
YW5nZTo6YWJzb2x1dGVCb3VuZGluZ0JveC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zv
ck1hcmtlcik6IEluc3RlYWQgb2YgcGFzc2luZyAidHJ1ZSIsIHBhc3MKKyAgICAgICAgIlJlbmRl
ck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCIuCisKKyAg
ICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29sdXRl
Qm91bmRpbmdCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFi
c29sdXRlUmVjdHNGb3JSYW5nZUluVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OmdldENsaWVudFJlY3RzIGNvbnN0KTogQ2FsbCBSZW5kZXJPYmplY3Q6
OmNsaWVudEJvcmRlckFuZFRleHRSZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRC
b3VuZGluZ0NsaWVudFJlY3QgY29uc3QpOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdChSZW5kZXJP
YmplY3Q6OmNsaWVudEJvcmRlckFuZFRleHRSZWN0cykuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Ym9yZGVyQW5kVGV4dFJlY3RzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpib3VuZGluZ1JlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmFic29sdXRlQm91bmRpbmdSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBk
b20vUmFuZ2UuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3IpOiBGaXggYnVnIGFmZmVjdGluZworICAgICAgICBlbXB0eSBy
YW5nZXMgYnkgY2FsbGluZyBlbmZvcmNlRW5kSW52YXJpYW50LgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjphZHZhbmNlKTogUmVmYWN0b3IgdG8gY2FsbCBlbmZv
cmNlRW5kSW52YXJpYW50LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJh
dG9yOjphZHZhbmNlU2tpcHBpbmdDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjplbmZvcmNlRW5kSW52YXJpYW50KTogQWRkZWQuCisg
ICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEFkZGVkIGVuZm9yY2VFbmRJbnZhcmlhbnQuCisK
KyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KTog
SW5zdGVhZCBvZgorICAgICAgICBwYXNzaW5nIGEgdXNlU2VsZWN0aW9uSGVpZ2h0IGJvb2xlYW4s
IHBhc3MgQm91bmRpbmdSZWN0QmVoYXZpb3IuCisKKyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZSk6
IENhbGwKKyAgICAgICAgdW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cykuCisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SW5kaWNhdG9yKTogQ2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMpOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDogTWFya2VkIGEgbG90IG9m
IGZ1bmN0aW9ucyBmaW5hbC4KKyAgICAgICAgQWRkZWQgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUg
YWJzb2x1dGVRdWFkcyBvdXQgYXJndW1lbnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVj
dCk6IFR3ZWFrZWQgY29kZSBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMpOiBSZXBsYWNlZCBib29sZWFuIHVzZVNlbGVjdGlvbkhl
aWdodAorICAgICAgICBhcmd1bWVudCB3aXRoIGEgQm91bmRpbmdSZWN0QmVoYXZpb3IgYXJndW1l
bnQuIEFsc28gYWRkZWQgYSBkb3duY2FzdCBzbyB0aGUKKyAgICAgICAgY2FsbCB0byBSZW5kZXJM
aW5lQnJlYWs6OmFic29sdXRlUXVhZHMgaXMgYSBub24tdmlydHVhbCBmdW5jdGlvbiBjYWxsLgor
ICAgICAgICAoV2ViQ29yZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKTogUmVwbGFj
ZWQgYm9vbGVhbiB1c2VTZWxlY3Rpb25IZWlnaHQKKyAgICAgICAgYXJndW1lbnQgd2l0aCBhIEJv
dW5kaW5nUmVjdEJlaGF2aW9yIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6bm9kZUJlZm9y
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyQW5kVGV4dFJlY3RzKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJl
Y3RzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNsaWVudEJvcmRl
ckFuZFRleHRSZWN0cyk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDogVXBkYXRlZCBmb3IgYWJvdmUuCisKIDIwMjAtMDgtMTkgIEthdGUgQ2hlbmV5ICA8a2F0aGVy
aW5lX2NoZW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhpcmQgcGFydHkgZG9tYWlucyBhcmUg
bm90IHN0b3JlZCBpbiB0aGUgY2FzZSBvZiBiYWNrL2ZvcndhcmQgbmF2aWdhdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggNzgyMDVjZjZkZTA2YTBlMzY3ZDcwZWZkNWI3NjdjMjhiN2VhMGI3YS4uYWYzNWVmOGMx
NWY3NTM5YTFmOTg1MTY5NTBjNTMxMzQ3ODNhNTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBA
QAorMjAyMC0wOC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
TW92ZSBub2RlIGdlb21ldHJ5IGZ1bmN0aW9ucyBmcm9tIFJhbmdlIHRvIFJlbmRlck9iamVjdAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1Njc3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdSZWN0SW5X
aW5kb3dDb29yZGluYXRlcyBjb25zdCk6CisgICAgICAgIENhbGwgdW5pb25SZWN0SWdub3Jpbmda
ZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cykuCisgICAg
ICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UpOiBD
YWxsCisgICAgICAgIHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJz
b2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RXZh
c2lvblJlY3RzQWJvdmVTZWxlY3Rpb24pOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdChSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVx
dWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQpOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdChSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKS4KKwogMjAyMC0wOC0yMCAgTGF1cm8gTW91cmEg
IDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjU4NTYpIFtHVEtd
W1dQRV0gaHliaSB3ZWJzb2NrZXRzIHRlc3RzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwppbmRleCA4NzBhMzk0ZDlhNTIyNjc3NDkyZTEyZWZlNWU5YzY0NWQ3OTRkMzk3Li45OGRj
YjA4NDA3OTZjNzZhMjA4NjY2Y2Q3OTg2ODY1Njk2YTYyYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDgtMTkgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJv
bSBSYW5nZSB0byBSZW5kZXJPYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxNTY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NUmFuZ2UgYm91bmRp
bmdCb3hdKTogQ2FsbCB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyku
CisKIDIwMjAtMDgtMTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDbGVhbiB1cCBEcmFnQXBwbGljYXRpb25GbGFncyBhZnRlciBzd2l0Y2ggdG8gT3B0aW9u
U2V0PD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3YjgwZDFjZjc0
ZjJlM2U4YWJlOWZjOThjNTUwNjIzLi5iMzQ4MmRhNGI0MWFiYmFkMmQzZDYxNGYxNWQzYTdjNDg5
MTE4MzdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjAtMDgtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUg
bm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0byBSZW5kZXJPYmplY3QKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTY3NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQWNjZXNzaWJsZVRl
eHRJbXBsLmNwcDoKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzY3JvbGxTdWJzdHJpbmdUbyk6
IENhbGwKKyAgICAgICAgdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMp
IGluc3RlYWQgb2YKKyAgICAgICAgUmFuZ2U6OmFic29sdXRlQm91bmRpbmdCb3guCisKIDIwMjAt
MDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBS
YW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKaW5kZXggMThkOWFkOWI4MjM4MmIzMDIxZjczYWNmMDI0NzhlOTQ4ZGIyNzJiZi4u
MDI4YjMxYzkzMTY0YzJhZjZjNTlkMjlmMWNiOTRlNzNhYWVlMjQwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiR2Vv
bWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MQXVkaW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERldGFpbHNFbGVtZW50LmgiCkBA
IC0yMTIwLDkgKzIxMjEsOCBAQCBzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhjb25zdCBM
YXlvdXRSZWN0JiByZWN0MSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdDIsCiAgICAgb3VyUmVjdC51
bml0ZShyZWN0Mik7CiAKICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBj
b250YWlucyBtdWx0aXBsZSB0ZXh0IGNoYXJhY3RlcnMsIHVzZSB0aGUgcmFuZ2UncyBib3VuZGlu
ZyBib3ggaW50ZWFkLgotICAgIGlmIChyZWN0MS5tYXhZKCkgIT0gcmVjdDIubWF4WSgpKSB7Ci0g
ICAgICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoZGF0YVJhbmdl
KS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOwotICAgICAgICBpZiAoY2hhcmFjdGVyQ291bnQoZGF0
YVJhbmdlKSA+IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICBpZiAocmVjdDEubWF4
WSgpICE9IHJlY3QyLm1heFkoKSAmJiBjaGFyYWN0ZXJDb3VudChkYXRhUmFuZ2UpID4gMSkgewor
ICAgICAgICBpZiAoYXV0byBib3VuZGluZ0JveCA9IHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFi
c29sdXRlVGV4dFJlY3RzKGRhdGFSYW5nZSkpOyAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAg
ICAgICAgICAgb3VyUmVjdCA9IGJvdW5kaW5nQm94OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBiYjJiNzdlOGE4ZjRm
Njc2MmNiZWUxNWRiZWFmZjE4MWE5ZDY1ZTc4Li4wZjdmOTkwZTNlZDlhNzVjNjMxMTI0MGFlZDU1
N2E4MTcwNTFjZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVu
CiBzdGF0aWMgdm9pZCB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2VyKFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXImIG1hcmtlciwgTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoIW5vZGUuZG9jdW1l
bnQoKS52aWV3KCkgfHwgIW5vZGUuZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkpOwot
ICAgIG1hcmtlci5zZXRVbmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94ZXMoUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhtYWtlU2ltcGxlUmFuZ2Uobm9kZSwgbWFya2VyKSwg
dHJ1ZSkpKTsKKyAgICBtYXJrZXIuc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhib3VuZGluZ0Jv
eGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMobWFrZVNpbXBsZVJhbmdlKG5vZGUs
IG1hcmtlciksIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlv
bkhlaWdodCkpKTsKIH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRh
dGVSZWN0c0ZvckFsbE1hcmtlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNzAwODFiZTIwY2Ix
YjczYjZiNGE3OTRmYWI5YTdhMWU5Y2IyY2U0NS4uZjg3NzIwOGYxYTc4ODA5NWUxYTJhZDhjZmMw
NjNhNTY3ZGVmNjkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1l
bnQuaCIKQEAgLTEwNzgsNjcgKzEwNzksNiBAQCBOb2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkg
Y29uc3QKICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5k
Q29udGFpbmVyKCkpOwogfQogCi1JbnRSZWN0IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nQm94KE9w
dGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAg
VmVjdG9yPEludFJlY3Q+IHJlY3RzOwotICAgIGFic29sdXRlVGV4dFJlY3RzKHJlY3RzLCBmYWxz
ZSwgcmVjdE9wdGlvbnMpOwotICAgIEludFJlY3QgcmVzdWx0OwotICAgIGZvciAoYXV0byYgcmVj
dCA6IHJlY3RzKQotICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmFic29sdXRlUmVjdHNGb3JSYW5nZUlu
VGV4dChOb2RlKiBub2RlLCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0LCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCwgYm9vbCYgaXNGaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiBy
ZWN0T3B0aW9ucykgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0g
JnN0YXJ0Q29udGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsKLSAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIoKSA/IG1fZW5kLm9mZnNldCgpIDogc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotCi0gICAgYXV0byB0ZXh0UXVhZHMg
PSByZW5kZXJUZXh0LmFic29sdXRlUXVhZHNGb3JSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0
LCB1c2VTZWxlY3Rpb25IZWlnaHQsIHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJl
aGF2aW9yOjpJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zKSwgJmlzRml4ZWQpOwotCi0gICAgaWYg
KHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xpcHBp
bmcpKSB7Ci0gICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaXBwZWRSZWN0czsKLSAgICAgICAg
Y2xpcHBlZFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7Ci0K
LSAgICAgICAgYXV0byBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QgPSByZW5kZXJUZXh0LmFi
c29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwotCi0gICAgICAgIGZvciAoYXV0byYgcXVhZCA6
IHRleHRRdWFkcykgewotICAgICAgICAgICAgYXV0byBjbGlwcGVkUmVjdCA9IGludGVyc2VjdGlv
bihxdWFkLmJvdW5kaW5nQm94KCksIGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCk7Ci0gICAg
ICAgICAgICBpZiAoIWNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjbGlw
cGVkUmVjdHMudW5jaGVja2VkQXBwZW5kKGNsaXBwZWRSZWN0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBjbGlwcGVkUmVjdHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94
ZXModGV4dFF1YWRzKTsKLX0KLQotdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIE9wdGlvblNldDxCb3Vu
ZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRo
aXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IHJldHVybiBGbG9hdFJlY3RzLgotCi0gICAgYm9v
bCBhbGxGaXhlZCA9IHRydWU7Ci0gICAgYm9vbCBzb21lRml4ZWQgPSBmYWxzZTsKLQotICAgIE5v
ZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmly
c3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlKSkgewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0g
ICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBv
aW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxS
ZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlY3RzRm9yUmVuZGVy
ZXIgPSBhYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQobm9kZSwgZG93bmNhc3Q8UmVuZGVyVGV4
dD4oKnJlbmRlcmVyKSwgdXNlU2VsZWN0aW9uSGVpZ2h0LCBpc0ZpeGVkLCByZWN0T3B0aW9ucyk7
Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0c0ZvclJlbmRlcmVyKQotICAgICAg
ICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhl
ZDsKLSAgICAgICAgc29tZUZpeGVkIHw9IGlzRml4ZWQ7Ci0gICAgfQotfQotCiAjaWYgRU5BQkxF
KFRSRUVfREVCVUdHSU5HKQogdm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiB7CkBAIC0xNDE4LDkxICsxMzU4LDEyIEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0KQogCiBSZWY8
RE9NUmVjdExpc3Q+IFJhbmdlOjpnZXRDbGllbnRSZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IERPTVJlY3RMaXN0OjpjcmVhdGUoYm9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZTo6
Q2xpZW50KSk7CisgICAgcmV0dXJuIERPTVJlY3RMaXN0OjpjcmVhdGUoUmVuZGVyT2JqZWN0Ojpj
bGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSkpOwogfQogCiBS
ZWY8RE9NUmVjdD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIERPTVJlY3Q6OmNyZWF0ZShib3VuZGluZ1JlY3QoQ29vcmRpbmF0ZVNwYWNlOjpDbGll
bnQpKTsKLX0KLQotVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0cyhD
b29yZGluYXRlU3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVj
dE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7Ci0KLSAgICBv
d25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0K
LSAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGJvb2wgdXNlVmlzaWJs
ZUJvdW5kcyA9IHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VW
aXNpYmxlQm91bmRzKTsKLQotICAgIEhhc2hTZXQ8Tm9kZSo+IHNlbGVjdGVkRWxlbWVudHNTZXQ7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKQotICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5hZGQobm9kZSk7Ci0g
ICAgfQotCi0gICAgLy8gRG9uJ3QgaW5jbHVkZSBlbGVtZW50cyB0aGF0IGFyZSBvbmx5IHBhcnRp
YWxseSBzZWxlY3RlZC4KLSAgICBOb2RlKiBsYXN0Tm9kZSA9IG1fZW5kLmNoaWxkQmVmb3JlKCkg
PyBtX2VuZC5jaGlsZEJlZm9yZSgpIDogJmVuZENvbnRhaW5lcigpOwotICAgIGZvciAoTm9kZSog
cGFyZW50ID0gbGFzdE5vZGUtPnBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE5vZGUoKSkKLSAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUocGFyZW50
KTsKLSAgICAKLSAgICBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHRP
cHRpb24+IHZpc2libGVSZWN0T3B0aW9ucyA9IHsgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENv
bnRleHRPcHRpb246OlVzZUVkZ2VJbmNsdXNpdmVJbnRlcnNlY3Rpb24sIFJlbmRlck9iamVjdDo6
VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDbGlwcywgUmVuZGVyT2Jq
ZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29tcG9zaXRlZENvbnRhaW5lclNj
cm9sbHMgfTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0
b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KCpub2RlKSAmJiBzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUp
ICYmICh1c2VWaXNpYmxlQm91bmRzIHx8ICFub2RlLT5wYXJlbnROb2RlKCkgfHwgIXNlbGVjdGVk
RWxlbWVudHNTZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkpIHsKLSAgICAgICAgICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJCb3hN
b2RlbE9iamVjdCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZVZpc2libGVCb3VuZHMpIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NhbEJvdW5kcyA9IHJlbmRlcmVyLT5ib3JkZXJC
b3VuZGluZ0JveCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHJvb3RDbGlwcGVkQm91bmRz
ID0gcmVuZGVyZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGxvY2FsQm91bmRzLCAm
cmVuZGVyZXItPnZpZXcoKSwgeyBmYWxzZSwgZmFsc2UsIHZpc2libGVSZWN0T3B0aW9ucyB9KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFyb290Q2xpcHBlZEJvdW5kcykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHNuYXBwZWRC
b3VuZHMgPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKCpyb290Q2xpcHBlZEJvdW5kcywgbm9kZS0+
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHNwYWNlID09IENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KQotICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0NsaWVudFJlY3Qoc25hcHBlZEJv
dW5kcywgcmVuZGVyZXItPnN0eWxlKCkpOwotICAgICAgICAgICAgICAgICAgICByZWN0cy5hcHBl
bmQoc25hcHBlZEJvdW5kcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVu
dFF1YWRzOwotICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRR
dWFkcyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNwYWNlID09IENvb3JkaW5hdGVTcGFjZTo6Q2xp
ZW50KQotICAgICAgICAgICAgICAgICAgICBub2RlLT5kb2N1bWVudCgpLmNvbnZlcnRBYnNvbHV0
ZVRvQ2xpZW50UXVhZHMoZWxlbWVudFF1YWRzLCByZW5kZXJlci0+c3R5bGUoKSk7Ci0KLSAgICAg
ICAgICAgICAgICByZWN0cy5hcHBlbmRWZWN0b3IoYm91bmRpbmdCb3hlcyhlbGVtZW50UXVhZHMp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0ZpeGVkOwotICAgICAgICAgICAg
ICAgIGF1dG8gY2xpcHBlZFJlY3RzID0gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KG5vZGUs
ICpyZW5kZXJlciwgZmFsc2UsIGlzRml4ZWQsIHJlY3RPcHRpb25zKTsKLSAgICAgICAgICAgICAg
ICBpZiAoc3BhY2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmRvY3VtZW50KCkuY29udmVydEFic29sdXRlVG9DbGllbnRSZWN0cyhjbGlwcGVk
UmVjdHMsIHJlbmRlcmVyLT5zdHlsZSgpKTsKLQotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVu
ZFZlY3RvcihjbGlwcGVkUmVjdHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25v
cmVUaW55UmVjdHMpKSB7Ci0gICAgICAgIHJlY3RzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZWN0LmFy
ZWEoKSA8PSAxOwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVjdHM7Ci19Ci0K
LUZsb2F0UmVjdCBSYW5nZTo6Ym91bmRpbmdSZWN0KENvb3JkaW5hdGVTcGFjZSBzcGFjZSwgT3B0
aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9ucykgY29uc3QKLXsKLSAgICBG
bG9hdFJlY3QgcmVzdWx0OwotICAgIGZvciAoYXV0byYgcmVjdCA6IGJvcmRlckFuZFRleHRSZWN0
cyhzcGFjZSwgcmVjdE9wdGlvbnMpKQotICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8ocmVj
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0IFJhbmdlOjphYnNvbHV0ZUJv
dW5kaW5nUmVjdChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+IHJlY3RPcHRpb25zKSBj
b25zdAotewotICAgIHJldHVybiBib3VuZGluZ1JlY3QoQ29vcmRpbmF0ZVNwYWNlOjpBYnNvbHV0
ZSwgcmVjdE9wdGlvbnMpOworICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUodW5pb25SZWN0SWdu
b3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFr
ZVNpbXBsZVJhbmdlKCp0aGlzKSkpKTsKIH0KIAogU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdl
KGNvbnN0IFJhbmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggZmFiOGY4MmJhZmY4YjM1OWM4
MjAxYjYyMWMwMWZmOTYwOTIyMzEyNC4uYjg4NzUzZmIwZTVkMjZkMWEzNmU3NzJhZDk3MDk5YmNl
NGZhNmVkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKQEAgLTI0LDIwICsyNCwxNCBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJSYW5nZUJvdW5kYXJ5UG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NUmVjdDsKIGNsYXNzIERPTVJlY3RMaXN0
OwogY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIE5vZGVX
aXRoSW5kZXg7Ci1jbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgU2VsZWN0aW9uUmVjdDsKIGNsYXNz
IFRleHQ7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKQEAgLTk4LDIwICs5Miw2IEBAIHB1Ymxp
YzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGZpcnN0Tm9kZSgpIGNvbnN0OwogCi0gICAg
ZW51bSBjbGFzcyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVpbnQ4X3QgewotICAgICAgICBSZXNw
ZWN0Q2xpcHBpbmcgPSAxIDw8IDAsCi0gICAgICAgIFVzZVZpc2libGVCb3VuZHMgPSAxIDw8IDEs
Ci0gICAgICAgIElnbm9yZVRpbnlSZWN0cyA9IDEgPDwgMiwKLSAgICAgICAgSWdub3JlRW1wdHlU
ZXh0U2VsZWN0aW9ucyA9IDEgPDwgMywgLy8gRG8gbm90IHJldHVybiBlbXB0eSB0ZXh0IHJlY3Rh
bmdsZXMsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBFbGVtZW50LmdldENsaWVudFJlY3QoKSBjb25m
b3JtYW5jZS4KLSAgICB9OwotCi0gICAgLy8gTm90IHRyYW5zZm9ybS1mcmllbmRseQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgYm9v
bCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2
aW9yPiA9IHsgfSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJv
dW5kaW5nQm94KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0Owot
Ci0gICAgLy8gVHJhbnNmb3JtLWZyaWVuZGx5Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0
IGFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7
IH0pIGNvbnN0OwotCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUm
KTsKICAgICB2b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwog
ICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYpOwpAQCAtMTQ3LDEyICsxMjcsNiBAQCBw
cml2YXRlOgogICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCB1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50Pj4gcHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwogCi0gICAgZW51bSBjbGFzcyBD
b29yZGluYXRlU3BhY2UgeyBBYnNvbHV0ZSwgQ2xpZW50IH07Ci0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYm9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSwgT3B0aW9uU2V0PEJvdW5kaW5n
UmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdChD
b29yZGluYXRlU3BhY2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNv
bnN0OwotCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0
KE5vZGUqLCBSZW5kZXJUZXh0JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wmIGlzRml4
ZWQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4pIGNvbnN0OwotCiAgICAgTm9kZSog
cGFzdExhc3ROb2RlKCkgY29uc3Q7CiAKICAgICBSZWY8RG9jdW1lbnQ+IG1fb3duZXJEb2N1bWVu
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDUzMGM3MDUyZTAzODBjZWQwNDYz
MDYwOTZmMWY5OGRmZmU3M2Q4ZWYuLmE3ZWY3YTI4MDY3NzBlNDA4OTBjNzY0Mzg1YTJhZWNjOTRl
MzVjYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtMTA4LDIyICsxMDgsMjUg
QEAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9ub2RlKGZpcnN0SW50ZXJzZWN0aW5nTm9k
ZShyYW5nZSkpCiAgICAgLCBtX3Bhc3RMYXN0Tm9kZShub2RlUGFzdExhc3RJbnRlcnNlY3RpbmdO
b2RlKHJhbmdlKSkKIHsKKyAgICBlbmZvcmNlRW5kSW52YXJpYW50KCk7CiB9CiAKIHZvaWQgSW50
ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjphZHZhbmNlKCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsK
ICAgICBtX25vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX25vZGUpOwotICAgIGlmIChtX25v
ZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgewotICAgICAgICBtX25vZGUgPSBudWxs
cHRyOwotICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7Ci0gICAgfQorICAgIGVuZm9y
Y2VFbmRJbnZhcmlhbnQoKTsKIH0KIAogdm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFk
dmFuY2VTa2lwcGluZ0NoaWxkcmVuKCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBtX25v
ZGUgPSBtX25vZGUtPmNvbnRhaW5zKG1fcGFzdExhc3ROb2RlLmdldCgpKSA/IG51bGxwdHIgOiBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsKKyAgICBlbmZvcmNl
RW5kSW52YXJpYW50KCk7Cit9CisKK3ZvaWQgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjplbmZv
cmNlRW5kSW52YXJpYW50KCkKK3sKICAgICBpZiAobV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8
ICFtX25vZGUpIHsKICAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKICAgICAgICAgbV9wYXN0TGFz
dE5vZGUgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCBmOTUzMDEzNzAy
ZTFkYzY1MjY1YmE3MTI0YWVlNDAzN2IxYTY3M2Q5Li4yOTA0YzM3ZWE4YjUyYWJmNmI0MmI3NmQ1
M2ViNGE3ZmRiNWU4NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtOTAsNiArOTAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZHZhbmNlU2tpcHBpbmdDaGlsZHJlbigpOwogCiBwcml2
YXRlOgorICAgIHZvaWQgZW5mb3JjZUVuZEludmFyaWFudCgpOworCiAgICAgUmVmUHRyPE5vZGU+
IG1fbm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9wYXN0TGFzdE5vZGU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkOTdlNjZmOGY4YWYwNWZhMDI3
NzZhMDA4NTBmNWY1NWFlODYxZjNmLi5lMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2
M2E1NzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAt
MjM0MSw4ICsyMzQxLDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxl
VGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsCiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgT3B0aW9uU2V0PFJlbmRlck9iamVjdDo6Qm91bmRp
bmdSZWN0QmVoYXZpb3I+IGJlaGF2aW9yOworICAgIGlmICh0ZXh0UmVjdEhlaWdodCA9PSBUZXh0
UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpCisgICAgICAgIGJlaGF2aW9yLmFkZChS
ZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25IZWlnaHQpOwor
CiAgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2li
bGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVj
dCk7Ci0gICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFi
c29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhl
aWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBib3VuZGlu
Z0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlLCBiZWhhdmlvcikp
KSB7CiAgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2
aXNpYmxlQ29udGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0
eSgpKQogICAgICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJzZWN0aW9uUmVjdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCA4ZTBlMDc5ZWFkNDNkNmY4NGJl
NGZhZGNiNzdkNDNmMWZjOWJhMzNjLi42NjczYWE3ZWU4ZmM0NzMzZjVlZTkxODhmNTJlODU5NjRi
ODNhMmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTE5OCwxMSAr
MTk4LDExIEBAIHN0YXRpYyBIYXNoU2V0PENvbG9yPiBlc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogCiBzdGF0aWMgRmxvYXRSZWN0IGFic29sdXRl
Qm91bmRpbmdSZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5hYnNvbHV0ZUJvdW5kaW5nUmVjdCh7Ci0gICAg
ICAgIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6UmVzcGVjdENsaXBwaW5nLAotICAgICAg
ICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVZpc2libGVCb3VuZHMsCi0gICAgICAg
IFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3RzLAotICAgIH0pOwor
ICAgIHJldHVybiB1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29s
dXRlQm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlLCB7CisgICAgICAgIFJlbmRlck9iamVjdDo6Qm91
bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZywKKyAgICAgICAgUmVuZGVyT2JqZWN0
OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNlVmlzaWJsZUJvdW5kcywKKyAgICAgICAgUmVuZGVy
T2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3RzLAorICAgIH0pKTsK
IH0KIAogc3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQpAQCAtMzAzLDE4ICszMDMs
MTggQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYg
ZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgZGF0YS5vcHRpb25zLmFkZChU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQpOwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgZWxzZSBpZiAoZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JP
cHRpb246OlVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcpKSB7Ci0gICAgICAgIHRleHRSZWN0cyA9
IFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKS5tYXAoWyZdKGNvbnN0
IGF1dG8mIHJlY3QpIC0+IEZsb2F0UmVjdCB7CisgICAgICAgIHRleHRSZWN0cyA9IFJlbmRlck9i
amVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKS5tYXAoWyZdKGF1dG8mIHJlY3QpIC0+
IEZsb2F0UmVjdCB7CiAgICAgICAgICAgICByZXR1cm4gcmVjdC5yZWN0KCk7CiAgICAgICAgIH0p
OwogICAgIH0KICNlbmRpZgogICAgIGVsc2UgewotICAgICAgICBhdXRvIHRleHRSZWN0SGVpZ2h0
ID0gZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlRpZ2h0bHlGaXRD
b250ZW50KSA/IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpUZXh0SGVpZ2h0
IDogRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodDsK
LSAgICAgICAgVmVjdG9yPEludFJlY3Q+IGludFJlY3RzOwotICAgICAgICBjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpLT5hYnNvbHV0ZVRleHRSZWN0cyhpbnRSZWN0cywgdGV4dFJlY3RIZWlnaHQgPT0g
RnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCwgUmFu
Z2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xpcHBpbmcpOwotICAgICAgICB0ZXh0
UmVjdHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnRSZWN0cy5zaXplKCkpOwotICAgICAgICBm
b3IgKGF1dG8mIGludFJlY3QgOiBpbnRSZWN0cykKLSAgICAgICAgICAgIHRleHRSZWN0cy51bmNo
ZWNrZWRBcHBlbmQoaW50UmVjdCk7CisgICAgICAgIE9wdGlvblNldDxSZW5kZXJPYmplY3Q6OkJv
dW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlvciB7IFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0
QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZyB9OworICAgICAgICBpZiAoIWRhdGEub3B0aW9ucy5j
b250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpUaWdodGx5Rml0Q29udGVudCkpCisgICAgICAg
ICAgICBiZWhhdmlvci5hZGQoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNl
U2VsZWN0aW9uSGVpZ2h0KTsKKyAgICAgICAgdGV4dFJlY3RzID0gUmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRSZWN0cyhyYW5nZSwgYmVoYXZpb3IpLm1hcChbJl0oYXV0byYgcmVjdCkgLT4gRmxv
YXRSZWN0IHsKKyAgICAgICAgICAgIHJldHVybiByZWN0OworICAgICAgICB9KTsKICAgICB9CiAK
ICAgICBpZiAodGV4dFJlY3RzLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmNwcAppbmRleCBiYWQyZTgxYzEx
N2FhYTBiNjA0YzdjNWJjZmIzMzgyMjljYTY2OWYwLi5iN2RmMDcyOGMxMDZiMmZhNDU4MjE5Y2I2
OTAxNWI4MTFmNjgwMTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HZW9tZXRyeVV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwCkBAIC03NywyMiArNzcsMjQgQEAgYm9vbCBm
aW5kSW50ZXJzZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBw
MiwgY29uc3QgRmxvYXRQb2kKIEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMpCiB7CiAgICAgSW50UmVjdCByZXN1bHQ7Ci0KLSAgICBzaXplX3QgY291bnQgPSBy
ZWN0cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAg
ICAgICByZXN1bHQudW5pdGUocmVjdHNbaV0pOwotCisgICAgZm9yIChhdXRvJiByZWN0IDogcmVj
dHMpCisgICAgICAgIHJlc3VsdC51bml0ZShyZWN0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykKIHsK
ICAgICBGbG9hdFJlY3QgcmVzdWx0OworICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQorICAg
ICAgICByZXN1bHQudW5pdGUocmVjdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotICAgIHNp
emVfdCBjb3VudCA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNv
dW50OyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0KK0Zsb2F0UmVjdCB1
bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMp
Cit7CisgICAgRmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykK
KyAgICAgICAgcmVzdWx0LnVuaXRlSWZOb25aZXJvKHJlY3QpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlb21l
dHJ5VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRy
eVV0aWxpdGllcy5oCmluZGV4IDBkZGQ2YzJlYTcyMDI0M2YzMDE1ZmFmZTRmNjg4ZTRiZTUwMDRm
MjYuLjRhNzYwNDYxMDFiN2YwYjRkN2JjNTljNGY4ODNkOTFkYmIyNzEwMTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuaApA
QCAtMzgsOCArMzgsOSBAQCBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCYgYyk7CiAvLyBGaW5kIHBvaW50IHdoZXJlIGxpbmVz
IHRocm91Z2ggdGhlIHR3byBwYWlycyBvZiBwb2ludHMgaW50ZXJzZWN0LiBSZXR1cm5zIGZhbHNl
IGlmIHRoZSBsaW5lcyBkb24ndCBpbnRlcnNlY3QuCiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbmRJ
bnRlcnNlY3Rpb24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBj
b25zdCBGbG9hdFBvaW50JiBkMSwgY29uc3QgRmxvYXRQb2ludCYgZDIsIEZsb2F0UG9pbnQmIGlu
dGVyc2VjdGlvbik7CiAKLUludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYp
OworV0VCQ09SRV9FWFBPUlQgSW50UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEludFJlY3Q+
Jik7CiBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+Jik7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdW5pb25SZWN0SWdub3JpbmdaZXJv
UmVjdHMoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mKTsKIAogLy8gTWFwIHBvaW50IGZyb20gc3Jj
UmVjdCB0byBhbiBlcXVpdmFsZW50IHBvaW50IGluIGRlc3RSZWN0LgogRmxvYXRQb2ludCBtYXBQ
b2ludChGbG9hdFBvaW50LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
CmluZGV4IDI0MjlmNThmODM5NTNmZmI1ODY5NGI3NGNhOWU0MTk0NDJkNTljODkuLjJhNjI1MWFm
ZGQ5NWFiYWNjOTRlOTNkMTcyZjZmNmViMTc5YjQ1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTM2LDkgKzM2LDkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgflJlbmRlckxpbmVCcmVhaygpOwogCiAgICAgLy8gRklYTUU6IFRoZSBsaWVzIGhlcmUg
a2VlcCByZW5kZXIgdHJlZSBkdW1wIGJhc2VkIHRlc3QgcmVzdWx0cyB1bmNoYW5nZWQuCi0gICAg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNXQlIg
PyAiUmVuZGVyV29yZEJyZWFrIiA6ICJSZW5kZXJCUiI7IH0KKyAgICBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1dCUiA/ICJSZW5kZXJXb3JkQnJlYWsi
IDogIlJlbmRlckJSIjsgfQogCi0gICAgYm9vbCBpc1dCUigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faXNXQlI7IH0KKyAgICBib29sIGlzV0JSKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9p
c1dCUjsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZUVsZW1lbnRCb3g+IGNyZWF0ZUlu
bGluZUJveCgpOwogICAgIElubGluZUVsZW1lbnRCb3gqIGlubGluZUJveFdyYXBwZXIoKSBjb25z
dCB7IHJldHVybiBtX2lubGluZUJveFdyYXBwZXI7IH0KQEAgLTUwLDQ1ICs1MCw0NSBAQCBwdWJs
aWM6CiAgICAgSW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBi
b3VuZGluZ0JveEZvclJlbmRlclRyZWVEdW1wKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFic29sdXRl
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhYnNvbHV0
ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9m
ZnNldCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiwgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlv
blJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIG92ZXJyaWRlOworICAgIHZvaWQg
Y29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgZW5zdXJlTGluZUJveGVz
KCk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBub2RlKCkgY29uc3QgPSBkZWxldGU7CiAKLSAgICBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlIHsg
fQotCi0gICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9p
bnQmLCBjb25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwotICAgIGludCBj
YXJldE1pbk9mZnNldCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBjYXJldE1heE9mZnNldCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25l
ZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBvdmVycmlkZTsK
LQotICAgIExheW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlv
bk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBiYXNlbGlu
ZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
LCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIExheW91dFVuaXQgbWFy
Z2luVG9wKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVuaXQgbWFy
Z2luQm90dG9tKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVuaXQg
bWFyZ2luTGVmdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0
IG1hcmdpblJpZ2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVu
aXQgbWFyZ2luQmVmb3JlKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gMDsgfQotICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydChj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlv
dXRVbml0IG1hcmdpbkVuZChjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IG9mZnNl
dEhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWln
aHQoKTsgfQotICAgIExheW91dFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KCksIGxpbmVzQm91bmRpbmdCb3goKS5z
aXplKCkpOyB9Ci0gICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RGb3JTdGlja3lQb3NpdGlvbmluZygp
IGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBMYXlvdXRSZWN0
KCk7IH0KLSAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0
IFJlbmRlckxheWVyTW9kZWxPYmplY3QqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRS
ZWN0KCk7IH0KLQotICAgIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgb3ZlcnJpZGU7Ci0gICAgYm9v
bCByZXF1aXJlc0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBi
b29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsIHsgfQorCisg
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBj
b25zdCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIGZpbmFsOworICAgIGludCBjYXJldE1pbk9m
ZnNldCgpIGNvbnN0IGZpbmFsOworICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZpbmFs
OworICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7CisgICAgTGF5b3V0
UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5
b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsKKworICAgIExheW91dFVuaXQgbGluZUhl
aWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUp
IGNvbnN0IGZpbmFsOworICAgIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBm
aW5hbDsKKworICAgIExheW91dFVuaXQgbWFyZ2luVG9wKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
MDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luQm90dG9tKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
MDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KKyAgICBMYXlvdXRVbml0IG1hcmdpblJpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsg
fQorICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qg
ZmluYWwgeyByZXR1cm4gMDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXIoY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgTGF5b3V0VW5pdCBtYXJn
aW5TdGFydChjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAg
ICBMYXlvdXRVbml0IG1hcmdpbkVuZChjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIDA7IH0KKyAgICBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbGluZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IG9mZnNl
dEhlaWdodCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQo
KTsgfQorICAgIExheW91dFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBMYXlvdXRSZWN0KExheW91dFBvaW50KCksIGxpbmVzQm91bmRpbmdCb3goKS5zaXplKCkp
OyB9CisgICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RGb3JTdGlja3lQb3NpdGlvbmluZygpIGNvbnN0
IGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAg
ICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKwor
ICAgIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgZmluYWw7CisgICAgYm9vbCByZXF1aXJlc0xheWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIElubGluZUVsZW1lbnRCb3gq
IG1faW5saW5lQm94V3JhcHBlcjsKICAgICBtdXRhYmxlIGludCBtX2NhY2hlZExpbmVIZWlnaHQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGE1YTNmYzc5
OGQ2MGU1NjQwM2NkMDlkOWY0ZWE1ODA2NjI3NDM1ODQuLjQzYWMxNjliOTM0YjBlNzY4ZjI1MmYx
ZTRhMzdhMTgwMzc3Mzc4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAj
aW5jbHVkZSAiRWRpdGluZy5oIgorI2luY2x1ZGUgIkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZVNlbGVjdGlvbi5oIgpAQCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXJDb21wb3NpdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCkBAIC02ODAsNyArNjgyLDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmFkZFBERlVSTFJlY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE8KICAgICAgICAgfQogICAgIH0KIAotICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0
VVJMRm9yUmVjdChub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKGhyZWYpLCB1cmxSZWN0KTsK
KyAgICBwYWludEluZm8uY29udGV4dCgpLnNldFVSTEZvclJlY3QoZWxlbWVudC5kb2N1bWVudCgp
LmNvbXBsZXRlVVJMKGhyZWYpLCB1cmxSZWN0KTsKIAogfQogCkBAIC0xOTAwLDM3ICsxOTAyLDE1
MiBAQCBib29sIFJlbmRlck9iamVjdDo6aGFzTm9uRW1wdHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQ
YXJlbnRGcmFtZXMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmVjdG9yPEZsb2F0
UXVhZD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorVmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlv
blNldDxSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlvcikKIHsKICAg
ICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNl
Y3RpbmdOb2RlcyhyYW5nZSkpIHsKICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVy
ZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAg
ICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAg
ICAgIGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewogICAgICAgICAgICAgYXV0
byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgZG93bmNhc3Q8
Q2hhcmFjdGVyRGF0YT4obm9kZSkpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRv
d25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNl
dFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpOworICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJl
cikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5l
bmQsIGJlaGF2aW9yLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25I
ZWlnaHQpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHF1YWRzOwogfQogCi1WZWN0
b3I8SW50UmVjdD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorc3RhdGljIFZlY3RvcjxGbG9h
dFJlY3Q+IGFic29sdXRlUmVjdHNGb3JSYW5nZUluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIFRleHQmIG5vZGUsIE9wdGlvblNldDxSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2
aW9yPiBiZWhhdmlvcikKIHsKKyAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOwor
ICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIG9mZnNl
dFJhbmdlID0gY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKHJhbmdlLCBub2RlKTsKKyAgICBhdXRv
IHRleHRRdWFkcyA9IHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2Uob2Zmc2V0UmFuZ2Uu
c3RhcnQsIG9mZnNldFJhbmdlLmVuZCwgYmVoYXZpb3IuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpC
b3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNlU2VsZWN0aW9uSGVpZ2h0KSwgYmVoYXZpb3IuY29udGFp
bnMoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlRW1wdHlUZXh0U2Vs
ZWN0aW9ucykpOworCisgICAgaWYgKGJlaGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91
bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZykpIHsKKyAgICAgICAgYXV0byBhYnNv
bHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QgPSByZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZs
b3dSZWN0KCk7CisgICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaXBwZWRSZWN0czsKKyAgICAg
ICAgY2xpcHBlZFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykgeworICAgICAgICAgICAgYXV0
byBjbGlwcGVkUmVjdCA9IGludGVyc2VjdGlvbihxdWFkLmJvdW5kaW5nQm94KCksIGFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCk7CisgICAgICAgICAgICBpZiAoIWNsaXBwZWRSZWN0LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBjbGlwcGVkUmVjdHMudW5jaGVja2VkQXBwZW5kKGNsaXBw
ZWRSZWN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xpcHBlZFJlY3RzOworICAgIH0K
KworICAgIHJldHVybiBib3VuZGluZ0JveGVzKHRleHRRdWFkcyk7Cit9CisKKy8vIEZJWE1FOiBU
aGlzIHNob3VsZCByZXR1cm4gVmVjdG9yPEZsb2F0UmVjdD4gbGlrZSB0aGUgb3RoZXIgc2ltaWxh
ciBmdW5jdGlvbnMuCisvLyBGSVhNRTogRmluZCBhIHdheSB0byBzaGFyZSB3aXRoIGFic29sdXRl
VGV4dFF1YWRzIHJhdGhlciB0aGFuIHJlcGVhdGluZyBzbyBtdWNoIG9mIHRoZSBsb2dpYyBmcm9t
IHRoYXQgZnVuY3Rpb24uCitWZWN0b3I8SW50UmVjdD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRl
eHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RC
ZWhhdmlvcj4gYmVoYXZpb3IpCit7CisgICAgQVNTRVJUKCFiZWhhdmlvci5jb250YWlucyhCb3Vu
ZGluZ1JlY3RCZWhhdmlvcjo6VXNlVmlzaWJsZUJvdW5kcykpOworICAgIEFTU0VSVCghYmVoYXZp
b3IuY29udGFpbnMoQm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZVRpbnlSZWN0cykpOwogICAg
IFZlY3RvcjxJbnRSZWN0PiByZWN0czsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3Rp
bmdOb2RlcyhyYW5nZSkpIHsKICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIo
KTsKICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAg
ICByZW5kZXJlci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PihyZW5kZXJlcikpIHsKLSAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0ZXJE
YXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpKTsKLSAg
ICAgICAgICAgIGZvciAoYXV0byYgcXVhZCA6IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJl
cikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5l
bmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1
YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJM
aW5lQnJlYWs+KCpyZW5kZXJlcikuYWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBv
aW50KHJlbmRlcmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOworICAgICAgICBlbHNlIGlmIChpczxU
ZXh0Pihub2RlKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogYWJzb2x1dGVSZWN0
c0ZvclJhbmdlSW5UZXh0KHJhbmdlLCBkb3duY2FzdDxUZXh0Pihub2RlKSwgYmVoYXZpb3IpKQor
ICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVjdHM7CiB9CiAKK3N0YXRpYyBSZWZQdHI8Tm9k
ZT4gbm9kZUJlZm9yZShjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9p
bnQub2Zmc2V0KSB7CisgICAgICAgIGlmIChhdXRvIG5vZGUgPSBwb2ludC5jb250YWluZXItPnRy
YXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9mZnNldCAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgfQorICAgIHJldHVybiBwb2ludC5jb250YWluZXIucHRyKCk7Cit9CisKK2VudW0g
Y2xhc3MgQ29vcmRpbmF0ZVNwYWNlIHsgQ2xpZW50LCBBYnNvbHV0ZSB9OworCitzdGF0aWMgVmVj
dG9yPEZsb2F0UmVjdD4gYm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgQ29vcmRpbmF0ZVNwYWNlIHNwYWNlLCBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpCb3VuZGlu
Z1JlY3RCZWhhdmlvcj4gYmVoYXZpb3IpCit7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7
CisKKyAgICByYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisKKyAgICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBi
ZWhhdmlvci5jb250YWlucyhSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VW
aXNpYmxlQm91bmRzKTsKKworICAgIEhhc2hTZXQ8RWxlbWVudCo+IHNlbGVjdGVkRWxlbWVudHNT
ZXQ7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7Cisg
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVu
dHNTZXQuYWRkKCZkb3duY2FzdDxFbGVtZW50Pihub2RlKSk7CisgICAgfQorCisgICAgLy8gRG9u
J3QgaW5jbHVkZSBlbGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB0aGF0IGFyZSBvbmx5
IHBhcnRpYWxseSBzZWxlY3RlZC4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB0aGUgc3RhcnQg
b2YgdGhlIHJhbmdlPyBUaGUgYXN5bW1ldHJ5IGhlcmUgZG9lcyBub3QgbWFrZSBzZW5zZS4gU2Vl
bXMgbGlrZWx5IHRoaXMgbG9naWMgaXMgbm90IHF1aXRlIHJpZ2h0IGluIG90aGVyIHJlc3BlY3Rz
LCB0b28uCisgICAgaWYgKGF1dG8gbGFzdE5vZGUgPSBub2RlQmVmb3JlKHJhbmdlLmVuZCkpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50Pigq
bGFzdE5vZGUpKQorICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUoJmFuY2Vz
dG9yKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgT3B0aW9uU2V0PFJlbmRlck9iamVjdDo6Vmlz
aWJsZVJlY3RDb250ZXh0T3B0aW9uPiB2aXNpYmxlUmVjdE9wdGlvbnMgPSB7CisgICAgICAgIFJl
bmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpVc2VFZGdlSW5jbHVzaXZlSW50
ZXJzZWN0aW9uLAorICAgICAgICBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlv
bjo6QXBwbHlDb21wb3NpdGVkQ2xpcHMsCisgICAgICAgIFJlbmRlck9iamVjdDo6VmlzaWJsZVJl
Y3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzCisgICAgfTsK
KworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlu
cygmZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpICYmICh1c2VWaXNpYmxlQm91bmRzIHx8ICFub2Rl
LnBhcmVudEVsZW1lbnQoKSB8fCAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLnBh
cmVudEVsZW1lbnQoKSkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRvd25j
YXN0PEVsZW1lbnQ+KG5vZGUpLnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodXNlVmlzaWJsZUJvdW5kcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxv
Y2FsQm91bmRzID0gcmVuZGVyZXItPmJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gcm9vdENsaXBwZWRCb3VuZHMgPSByZW5kZXJlci0+Y29tcHV0ZVZpc2libGVS
ZWN0SW5Db250YWluZXIobG9jYWxCb3VuZHMsICZyZW5kZXJlci0+dmlldygpLCB7IGZhbHNlLCBm
YWxzZSwgdmlzaWJsZVJlY3RPcHRpb25zIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJv
b3RDbGlwcGVkQm91bmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gc25hcHBlZEJvdW5kcyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhl
bHMoKnJvb3RDbGlwcGVkQm91bmRzLCBub2RlLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNs
aWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQoKS5jb252ZXJ0QWJz
b2x1dGVUb0NsaWVudFJlY3Qoc25hcHBlZEJvdW5kcywgcmVuZGVyZXItPnN0eWxlKCkpOworICAg
ICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBlZEJvdW5kcyk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IFZlY3RvcjxGbG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKKyAgICAgICAgICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVRdWFkcyhlbGVtZW50UXVhZHMpOworICAgICAgICAgICAgICAgIGlmIChzcGFj
ZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5k
b2N1bWVudCgpLmNvbnZlcnRBYnNvbHV0ZVRvQ2xpZW50UXVhZHMoZWxlbWVudFF1YWRzLCByZW5k
ZXJlci0+c3R5bGUoKSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kVmVjdG9yKGJvdW5k
aW5nQm94ZXMoZWxlbWVudFF1YWRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoaXM8VGV4dD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZG93
bmNhc3Q8VGV4dD4obm9kZSkucmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2xp
cHBlZFJlY3RzID0gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KHJhbmdlLCBkb3duY2FzdDxU
ZXh0Pihub2RlKSwgYmVoYXZpb3IpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29y
ZGluYXRlU3BhY2U6OkNsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5kb2N1bWVudCgp
LmNvbnZlcnRBYnNvbHV0ZVRvQ2xpZW50UmVjdHMoY2xpcHBlZFJlY3RzLCByZW5kZXJlci0+c3R5
bGUoKSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kVmVjdG9yKGNsaXBwZWRSZWN0cyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmVoYXZpb3IuY29u
dGFpbnMoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3Rz
KSkgeworICAgICAgICByZWN0cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gcmVjdC5hcmVhKCkgPD0gMTsK
KyAgICAgICAgfSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlY3RzOworfQorCitWZWN0b3I8Rmxv
YXRSZWN0PiBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlv
cikKK3sKKyAgICByZXR1cm4gYm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlLCBDb29yZGluYXRlU3Bh
Y2U6OkFic29sdXRlLCBiZWhhdmlvcik7Cit9CisKK1ZlY3RvcjxGbG9hdFJlY3Q+IFJlbmRlck9i
amVjdDo6Y2xpZW50Qm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gYm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlLCBDb29yZGluYXRlU3BhY2U6
OkNsaWVudCwgeyB9KTsKK30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIHN0YXRpYyBi
b29sIGludGVydmFsc1N1ZmZpY2llbnRseU92ZXJsYXAoaW50IHN0YXJ0QSwgaW50IGVuZEEsIGlu
dCBzdGFydEIsIGludCBlbmRCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CmluZGV4IDcxMTNmNWMzMjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjUzNzdjYmU4
YmQ2OTlhMmZhYzY5YTJkYjE3YjRjY2M1YWFmOTE4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKQEAgLTU2MCw4ICs1NjAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogLyp3YXNGaXhl
ZCovID0gbnVsbHB0cikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlRm9jdXNS
aW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYs
IGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBWZWN0b3I8SW50UmVjdD4gYWJzb2x1dGVUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2Um
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKKyAgICBlbnVtIGNsYXNzIEJvdW5k
aW5nUmVjdEJlaGF2aW9yIDogdWludDhfdCB7CisgICAgICAgIFJlc3BlY3RDbGlwcGluZyA9IDEg
PDwgMCwKKyAgICAgICAgVXNlVmlzaWJsZUJvdW5kcyA9IDEgPDwgMSwKKyAgICAgICAgSWdub3Jl
VGlueVJlY3RzID0gMSA8PCAyLAorICAgICAgICBJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zID0g
MSA8PCAzLAorICAgICAgICBVc2VTZWxlY3Rpb25IZWlnaHQgPSAxIDw8IDQsCisgICAgfTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVUZXh0UXVh
ZHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+ID0g
eyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEludFJlY3Q+IGFic29sdXRl
VGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2
aW9yPiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+
IGFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSk7CisgICAgc3RhdGljIFZlY3RvcjxGbG9hdFJl
Y3Q+IGNsaWVudEJvcmRlckFuZFRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAg
Ly8gdGhlIHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2Vk
IGFzIHRoZSBwYWludGluZ1Jvb3QKICAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IHBhaW50
aW5nUm9vdFJlY3QoTGF5b3V0UmVjdCYgdG9wTGV2ZWxSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IGQwN2JkOThhMTcxNmJkODFjYjBj
OGJlNThiNWY0MTc2YTFiNzljZGQuLjYzZjNjNzg2ZTZmYjIxNWM5YTJmNGUyNTlmYWM5ZTYxMWI2
ZGI4YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNw
cApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0pTUmFuZ2UuaD4KQEAgLTEwMSw5ICsxMDIsOCBAQCBSZWY8SW5qZWN0
ZWRCdW5kbGVOb2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpkb2N1bWVudCgp
CiAKIFdlYkNvcmU6OkludFJlY3QgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdS
ZWN0SW5XaW5kb3dDb29yZGluYXRlcygpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
UmVjdCA9IG1fcmFuZ2UtPmFic29sdXRlQm91bmRpbmdSZWN0KCk7CiAgICAgRnJhbWUqIGZyYW1l
ID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT52
aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ1JlY3QpKTsK
KyAgICByZXR1cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRS
ZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3Jk
ZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpKTsKIH0KIAogUmVmUHRy
PFdlYkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBz
aG90T3B0aW9ucyBvcHRpb25zKQpAQCAtMTI3LDcgKzEyNyw3IEBAIFJlZlB0cjxXZWJJbWFnZT4g
SW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMg
b3B0aW9uCiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFu
Z2UobV9yYW5nZSkpOwogCiAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAob3B0aW9ucyAmIFNuYXBz
aG90T3B0aW9uc0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvcikgPyAxIDogZnJhbWUtPnBhZ2UoKS0+
ZGV2aWNlU2NhbGVGYWN0b3IoKTsKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVuY2xvc2luZ0lu
dFJlY3QobV9yYW5nZS0+YWJzb2x1dGVCb3VuZGluZ1JlY3QoKSk7CisgICAgSW50UmVjdCBwYWlu
dFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFu
Z2UpKSkpOwogICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IHBhaW50UmVjdC5zaXplKCk7
CiAgICAgYmFja2luZ1N0b3JlU2l6ZS5zY2FsZShzY2FsZUZhY3Rvcik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZjA1
ZWYzODRjOGE4ZGM3YzVkOTM1M2JiYzI5OTQxY2VkODNiYjcxNS4uNGM3MTliNTBlM2M3ODBiMmEx
M2ZmMjY0MTc3NGQwMjc4ZGVmMGI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE5MDYsNyArMTkwNiw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoY29uc3QgVmVjCiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzSW5Sb290
Vmlld0Nvb3JkaW5hdGVzOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICBz
ZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRz
VG9Sb290VmlldyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5hYnNvbHV0ZUJvdW5k
aW5nQm94KCkpOworICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMg
PSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bmlvblJlY3QoUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRleHRSZWN0cygqc2VsZWN0ZWRSYW5nZSkpKTsKICAgICBlbHNlCiAgICAgICAgIHNl
bGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNU
b1Jvb3RWaWV3KGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiAKQEAg
LTQyNjQsOSArNDI2NCw4IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0Nv
bnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIGNvbnN0
IGludCBzdHJpZGUgPSAxOwogICAgICAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgIGlmICghaXRlcmF0b3IudGV4dCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gY3VycmVudFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGl0ZXJhdG9yLnJhbmdlKCkp
OwotICAgICAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IGN1cnJlbnRSYW5n
ZS0+YWJzb2x1dGVCb3VuZGluZ0JveChSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9y
ZUVtcHR5VGV4dFNlbGVjdGlvbnMpOwotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZCh7IGN1
cnJlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFi
c29sdXRlQm91bmRpbmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOworICAgICAg
ICAgICAgICAgIGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IHVuaW9uUmVjdChSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFJlY3RzKGl0ZXJhdG9yLnJhbmdlKCksIFJlbmRlck9iamVjdDo6Qm91
bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMpKTsKKyAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoeyBpdGVyYXRvci5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci0+
ZG9jdW1lbnQoKS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94
KSwgeyBvZmZzZXRTb0ZhcisrLCBzdHJpZGUgfSB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGl0ZXJhdG9yLmFkdmFuY2Uoc3RyaWRlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET00ubW0KaW5kZXggMTQzZjA4ZDM1OTJhMzA1NjVjMTU3MGM3ZTY3MWNmZmNjZjI0MjRh
MS4uZGU1ZWE4ZDZiYzkwM2RkZWVhYWY2MTA0NGY0NDg0ODE5ZDZiZWVhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Zv
Y3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTGlua0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuaD4KQEAgLTU3
Miw3ICs1NzMsNyBAQCAtIChOU1JlY3QpYm91bmRpbmdCb3gKICAgICAvLyBGSVhNRTogVGhlIGNh
bGwgdG8gdXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzIHNob3VsZCBiZSBtb3Zl
ZCBpbnRvIFdlYkNvcmU6OlJhbmdlLgogICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7CiAg
ICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotICAgIHJldHVybiByYW5nZS5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7CisgICAgcmV0
dXJuIHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1ha2VTaW1wbGVS
YW5nZShyYW5nZSkpKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCmluZGV4IDNkYTg5YzRjY2Q2MWMxZTZh
ZmJjYzAxYjIwYTg5OTIwMDllOWU0MjIuLjUxNTU4MGFkZGU5YmUxMjI5Njc3Yjk4ZjA0MzFmMjUw
NzBkMWM3M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVU
ZXh0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJ
bXBsLmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIEhSRVNVTFQgQWNjZXNzaWJsZVRleHQ6OnNjcm9s
bFN1YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwgZW51bSBJCiAgICAg
aWYgKCF0ZXh0UmFuZ2UpCiAgICAgICAgIHJldHVybiBTX0ZBTFNFOwogCi0gICAgSW50UmVjdCBi
b3VuZGluZ0JveCA9IGNyZWF0ZUxpdmVSYW5nZSgqdGV4dFJhbmdlKS0+YWJzb2x1dGVCb3VuZGlu
Z0JveCgpOworICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSB1bmlvblJlY3QoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRSZWN0cygqdGV4dFJhbmdlKSk7CiAgICAgc3dpdGNoIChzY3JvbGxUeXBl
KSB7CiAgICAgY2FzZSBJQTJfU0NST0xMX1RZUEVfVE9QX0xFRlQ6CiAgICAgICAgIG1fb2JqZWN0
LT5zY3JvbGxUb0dsb2JhbFBvaW50KGJvdW5kaW5nQm94Lm1pblhNaW5ZQ29ybmVyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406962</attachid>
            <date>2020-08-20 13:27:47 -0700</date>
            <delta_ts>2020-08-21 15:40:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215677-20200820132746.patch</filename>
            <type>text/plain</type>
            <size>51536</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1OTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJhM2VkZjgzMzE2NTk5
ZjA1OTY1MWZiMGQ3YTdiZTEyYmRiMzBmZi4uNjg0NDNiMTdhMjdmYTBiZTQxNmIzMGFmN2NmYjJk
NDg1MzBhYTY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIwLTA4LTIwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIG5vZGUgZ2VvbWV0cnkg
ZnVuY3Rpb25zIGZyb20gUmFuZ2UgdG8gUmVuZGVyT2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU2NzcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlZCBmdW5jdGlvbnMgdGhhdCByZXR1cm4g
cXVhZHMgYW5kIHJlY3RhbmdsZXMgb3V0IG9mIFJhbmdlIGludG8gUmVuZGVyT2JqZWN0LgorICAg
ICAgICBXZSBjb3VsZCBmaW5kIGFub3RoZXIgaG9tZSBmb3IgdGhlbSwgYnV0IGZvciBub3cgdGhl
eSBtYWtlIHNlbnNlIGFzIHN0YXRpYyBtZW1iZXIKKyAgICAgICAgZnVuY3Rpb25zIHRoZXJlIHNp
bmNlIFJlbmRlck9iamVjdCBoYXMgdGhlIG5vbi1zdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0aGF0
IHRoZXkKKyAgICAgICAgY2FsbCBvbiBtdWx0aXBsZSBub2Rlcy4gTW9zdGx5IGRpZCBub3QgY2hh
bmdlIHRoZSBkZXNpZ24gb2YgdGhlc2UgZnVuY3Rpb25zIG11Y2gsCisgICAgICAgIGFuZCB3YXMg
Y2FyZWZ1bCBub3QgdG8gY2hhbmdlIGJlaGF2aW9yIGF0IGFsbC4gQnV0IGRpZCBjaGFuZ2UgYSBm
ZXcgdGhpbmdzOgorCisgICAgICAgIC0gR290IHJpZCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgcmV0
dXJuIGEgc2luZ2xlIHVuaW9uZWQgcmVjdGFuZ2xlLgorICAgICAgICAgIEluc3RlYWQgY2FsbGVy
cyBjYWxsIHVuaW9uUmVjdCBhdCBlYWNoIGNhbGwgc2l0ZS4KKyAgICAgICAgLSBDaGFuZ2VkIHRo
ZSAidXNlIHNlbGVjdGlvbiBoZWlnaHQiIGJvb2xlYW4gdG8gYSBCb3VuZGluZ1JlY3RCZWhhdmlv
ciBmbGFnLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kc0ZvclJlY3RzKTogQ2FsbCB1bmlvblJl
Y3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykgaW5zdGVhZAorICAgICAgICBvZiBS
YW5nZTo6YWJzb2x1dGVCb3VuZGluZ0JveC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zv
ck1hcmtlcik6IEluc3RlYWQgb2YgcGFzc2luZyAidHJ1ZSIsIHBhc3MKKyAgICAgICAgIlJlbmRl
ck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCIuCisKKyAg
ICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29sdXRl
Qm91bmRpbmdCb3ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFi
c29sdXRlUmVjdHNGb3JSYW5nZUluVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmFuZ2U6OmdldENsaWVudFJlY3RzIGNvbnN0KTogQ2FsbCBSZW5kZXJPYmplY3Q6
OmNsaWVudEJvcmRlckFuZFRleHRSZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRC
b3VuZGluZ0NsaWVudFJlY3QgY29uc3QpOiBDYWxsCisgICAgICAgIHVuaW9uUmVjdChSZW5kZXJP
YmplY3Q6OmNsaWVudEJvcmRlckFuZFRleHRSZWN0cykuCisgICAgICAgIChXZWJDb3JlOjpSYW5n
ZTo6Ym9yZGVyQW5kVGV4dFJlY3RzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJhbmdlOjpib3VuZGluZ1JlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmFuZ2U6OmFic29sdXRlQm91bmRpbmdSZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBk
b20vUmFuZ2UuaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3IpOiBGaXggYnVnIGFmZmVjdGluZworICAgICAgICBlbXB0eSBy
YW5nZXMgYnkgY2FsbGluZyBlbmZvcmNlRW5kSW52YXJpYW50LgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjphZHZhbmNlKTogUmVmYWN0b3IgdG8gY2FsbCBlbmZv
cmNlRW5kSW52YXJpYW50LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJh
dG9yOjphZHZhbmNlU2tpcHBpbmdDaGlsZHJlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjplbmZvcmNlRW5kSW52YXJpYW50KTogQWRkZWQuCisg
ICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6IEFkZGVkIGVuZm9yY2VFbmRJbnZhcmlhbnQuCisK
KyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzIGNvbnN0KTog
SW5zdGVhZCBvZgorICAgICAgICBwYXNzaW5nIGEgdXNlU2VsZWN0aW9uSGVpZ2h0IGJvb2xlYW4s
IHBhc3MgQm91bmRpbmdSZWN0QmVoYXZpb3IuCisKKyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZSk6
IENhbGwKKyAgICAgICAgdW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZUJvcmRlckFuZFRleHRSZWN0cykuCisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SW5kaWNhdG9yKTogQ2FsbCBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMpOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGllcy5oOiBVcGRhdGVkIGZvciBhYm92ZS4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaDogTWFya2VkIGEgbG90IG9m
IGZ1bmN0aW9ucyBmaW5hbC4KKyAgICAgICAgQWRkZWQgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUg
YWJzb2x1dGVRdWFkcyBvdXQgYXJndW1lbnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVj
dCk6IFR3ZWFrZWQgY29kZSBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMpOiBSZXBsYWNlZCBib29sZWFuIHVzZVNlbGVjdGlvbkhl
aWdodAorICAgICAgICBhcmd1bWVudCB3aXRoIGEgQm91bmRpbmdSZWN0QmVoYXZpb3IgYXJndW1l
bnQuIEFsc28gYWRkZWQgYSBkb3duY2FzdCBzbyB0aGUKKyAgICAgICAgY2FsbCB0byBSZW5kZXJM
aW5lQnJlYWs6OmFic29sdXRlUXVhZHMgaXMgYSBub24tdmlydHVhbCBmdW5jdGlvbiBjYWxsLgor
ICAgICAgICAoV2ViQ29yZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKTogUmVwbGFj
ZWQgYm9vbGVhbiB1c2VTZWxlY3Rpb25IZWlnaHQKKyAgICAgICAgYXJndW1lbnQgd2l0aCBhIEJv
dW5kaW5nUmVjdEJlaGF2aW9yIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6bm9kZUJlZm9y
ZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyQW5kVGV4dFJlY3RzKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJl
Y3RzKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNsaWVudEJvcmRl
ckFuZFRleHRSZWN0cyk6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDogVXBkYXRlZCBmb3IgYWJvdmUuCisKIDIwMjAtMDgtMjAgIFNlcmdpbyBWaWxsYXIgU2VuaW4g
IDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIy
NjU4NTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IGRlY2ViMTI5MDNjYzk5OGMyOTI1MzcwNGE0MDVlOWEyODRmMGY3
OTguLmU0NGMwOGM4ZWY1OGZmODFlMmU3YWRjMTkzNjk2YjY3ZWFhZWMwOGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMjAtMDgtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0byBS
ZW5kZXJPYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxNTY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhh
bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmJv
dW5kaW5nUmVjdEluV2luZG93Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICBDYWxsIHVuaW9u
UmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0
UmVjdHMpLgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5k
ZXJlZEltYWdlKTogQ2FsbAorICAgICAgICB1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5k
ZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKTogQ2FsbAorICAgICAgICB1bmlv
blJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykuCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogQ2FsbAorICAgICAgICB1
bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykuCisKIDIwMjAtMDgtMjAg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBTYW5kYm94IHZpb2xh
dGlvbiB3aGVuIGNhbGxpbmcgW05TSFRUUENvb2tpZVN0b3JhZ2Ugc2hhcmVkSFRUUENvb2tpZVN0
b3JhZ2VdIGZyb20gdGhlIFdlYlByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRl
eCA4NzBhMzk0ZDlhNTIyNjc3NDkyZTEyZWZlNWU5YzY0NWQ3OTRkMzk3Li45OGRjYjA4NDA3OTZj
NzZhMjA4NjY2Y2Q3OTg2ODY1Njk2YTYyYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDgtMTkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0
byBSZW5kZXJPYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NUmFuZ2UgYm91bmRpbmdCb3hdKTog
Q2FsbCB1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cykuCisKIDIwMjAt
MDgtMTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBDbGVh
biB1cCBEcmFnQXBwbGljYXRpb25GbGFncyBhZnRlciBzd2l0Y2ggdG8gT3B0aW9uU2V0PD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCBiOThiN2FiM2U3YjgwZDFjZjc0ZjJlM2U4YWJl
OWZjOThjNTUwNjIzLi5iMzQ4MmRhNGI0MWFiYmFkMmQzZDYxNGYxNWQzYTdjNDg5MTE4MzdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjAtMDgtMjAg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgbm9kZSBnZW9t
ZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0byBSZW5kZXJPYmplY3QKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTY3NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQWNjZXNzaWJsZVRleHRJbXBsLmNw
cDoKKyAgICAgICAgKEFjY2Vzc2libGVUZXh0OjpzY3JvbGxTdWJzdHJpbmdUbyk6IENhbGwKKyAg
ICAgICAgdW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMpIGluc3RlYWQg
b2YKKyAgICAgICAgUmFuZ2U6OmFic29sdXRlQm91bmRpbmdCb3guCisKIDIwMjAtMDgtMDEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3Jl
YXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
aW5kZXggMThkOWFkOWI4MjM4MmIzMDIxZjczYWNmMDI0NzhlOTQ4ZGIyNzJiZi4uMDI4YjMxYzkz
MTY0YzJhZjZjNTlkMjlmMWNiOTRlNzNhYWVlMjQwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBA
IC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiR2VvbWV0cnlVdGls
aXRpZXMuaCIKICNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQXVk
aW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTERldGFpbHNFbGVtZW50LmgiCkBAIC0yMTIwLDkg
KzIxMjEsOCBAQCBzdGF0aWMgSW50UmVjdCBib3VuZHNGb3JSZWN0cyhjb25zdCBMYXlvdXRSZWN0
JiByZWN0MSwgY29uc3QgTGF5b3V0UmVjdCYgcmVjdDIsCiAgICAgb3VyUmVjdC51bml0ZShyZWN0
Mik7CiAKICAgICAvLyBJZiB0aGUgcmVjdGFuZ2xlIHNwYW5zIGxpbmVzIGFuZCBjb250YWlucyBt
dWx0aXBsZSB0ZXh0IGNoYXJhY3RlcnMsIHVzZSB0aGUgcmFuZ2UncyBib3VuZGluZyBib3ggaW50
ZWFkLgotICAgIGlmIChyZWN0MS5tYXhZKCkgIT0gcmVjdDIubWF4WSgpKSB7Ci0gICAgICAgIExh
eW91dFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoZGF0YVJhbmdlKS0+YWJzb2x1
dGVCb3VuZGluZ0JveCgpOwotICAgICAgICBpZiAoY2hhcmFjdGVyQ291bnQoZGF0YVJhbmdlKSA+
IDEgJiYgIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkKKyAgICBpZiAocmVjdDEubWF4WSgpICE9IHJl
Y3QyLm1heFkoKSAmJiBjaGFyYWN0ZXJDb3VudChkYXRhUmFuZ2UpID4gMSkgeworICAgICAgICBp
ZiAoYXV0byBib3VuZGluZ0JveCA9IHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFJlY3RzKGRhdGFSYW5nZSkpOyAhYm91bmRpbmdCb3guaXNFbXB0eSgpKQogICAgICAgICAgICAg
b3VyUmVjdCA9IGJvdW5kaW5nQm94OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBiYjJiNzdlOGE4ZjRmNjc2MmNiZWUx
NWRiZWFmZjE4MWE5ZDY1ZTc4Li4wZjdmOTkwZTNlZDlhNzVjNjMxMTI0MGFlZDU1N2E4MTcwNTFj
ZWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcApAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpm
aWx0ZXJNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuCiBzdGF0aWMg
dm9pZCB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
IG1hcmtlciwgTm9kZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoIW5vZGUuZG9jdW1lbnQoKS52aWV3
KCkgfHwgIW5vZGUuZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkpOwotICAgIG1hcmtl
ci5zZXRVbmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRleHRRdWFkcyhtYWtlU2ltcGxlUmFuZ2Uobm9kZSwgbWFya2VyKSwgdHJ1ZSkpKTsK
KyAgICBtYXJrZXIuc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMobWFrZVNpbXBsZVJhbmdlKG5vZGUsIG1hcmtlciks
IFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVNlbGVjdGlvbkhlaWdodCkp
KTsKIH0KIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZWN0c0Zv
ckFsbE1hcmtlcnMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNzAwODFiZTIwY2IxYjczYjZiNGE3
OTRmYWI5YTdhMWU5Y2IyY2U0NS4uZjg3NzIwOGYxYTc4ODA5NWUxYTJhZDhjZmMwNjNhNTY3ZGVm
NjkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSFRNTEJvZHlFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSHRtbEVsZW1lbnQuaCIKQEAg
LTEwNzgsNjcgKzEwNzksNiBAQCBOb2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKICAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kQ29udGFpbmVy
KCkpOwogfQogCi1JbnRSZWN0IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nQm94KE9wdGlvblNldDxC
b3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPElu
dFJlY3Q+IHJlY3RzOwotICAgIGFic29sdXRlVGV4dFJlY3RzKHJlY3RzLCBmYWxzZSwgcmVjdE9w
dGlvbnMpOwotICAgIEludFJlY3QgcmVzdWx0OwotICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3Rz
KQotICAgICAgICByZXN1bHQudW5pdGUocmVjdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
VmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmFic29sdXRlUmVjdHNGb3JSYW5nZUluVGV4dChOb2Rl
KiBub2RlLCBSZW5kZXJUZXh0JiByZW5kZXJUZXh0LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwg
Ym9vbCYgaXNGaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9u
cykgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29u
dGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQg
PSBub2RlID09ICZlbmRDb250YWluZXIoKSA/IG1fZW5kLm9mZnNldCgpIDogc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotCi0gICAgYXV0byB0ZXh0UXVhZHMgPSByZW5kZXJU
ZXh0LmFic29sdXRlUXVhZHNGb3JSYW5nZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCB1c2VTZWxl
Y3Rpb25IZWlnaHQsIHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJ
Z25vcmVFbXB0eVRleHRTZWxlY3Rpb25zKSwgJmlzRml4ZWQpOwotCi0gICAgaWYgKHJlY3RPcHRp
b25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xpcHBpbmcpKSB7Ci0g
ICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaXBwZWRSZWN0czsKLSAgICAgICAgY2xpcHBlZFJl
Y3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7Ci0KLSAgICAgICAg
YXV0byBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QgPSByZW5kZXJUZXh0LmFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpOwotCi0gICAgICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFk
cykgewotICAgICAgICAgICAgYXV0byBjbGlwcGVkUmVjdCA9IGludGVyc2VjdGlvbihxdWFkLmJv
dW5kaW5nQm94KCksIGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIWNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBjbGlwcGVkUmVjdHMu
dW5jaGVja2VkQXBwZW5kKGNsaXBwZWRSZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBjbGlwcGVkUmVjdHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94ZXModGV4dFF1
YWRzKTsKLX0KLQotdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RC
ZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rp
b24gc2hvdWxkIHByb2JhYmx5IHJldHVybiBGbG9hdFJlY3RzLgotCi0gICAgYm9vbCBhbGxGaXhl
ZCA9IHRydWU7Ci0gICAgYm9vbCBzb21lRml4ZWQgPSBmYWxzZTsKLQotICAgIE5vZGUqIHN0b3BO
b2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7
IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewot
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGlz
Rml4ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAg
ICByZW5kZXJlci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBhdXRvIHJlY3RzRm9yUmVuZGVyZXIgPSBhYnNv
bHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQobm9kZSwgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRl
cmVyKSwgdXNlU2VsZWN0aW9uSGVpZ2h0LCBpc0ZpeGVkLCByZWN0T3B0aW9ucyk7Ci0gICAgICAg
ICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0c0ZvclJlbmRlcmVyKQotICAgICAgICAgICAgICAg
IHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKLSAgICAg
ICAgc29tZUZpeGVkIHw9IGlzRml4ZWQ7Ci0gICAgfQotfQotCiAjaWYgRU5BQkxFKFRSRUVfREVC
VUdHSU5HKQogdm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNp
Z25lZCBsZW5ndGgpIGNvbnN0CiB7CkBAIC0xNDE4LDkxICsxMzU4LDEyIEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFJhbmdlOjpleHBhbmQoY29uc3QgU3RyaW5nJiB1bml0KQogCiBSZWY8RE9NUmVjdExp
c3Q+IFJhbmdlOjpnZXRDbGllbnRSZWN0cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERPTVJlY3RM
aXN0OjpjcmVhdGUoYm9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KSk7
CisgICAgcmV0dXJuIERPTVJlY3RMaXN0OjpjcmVhdGUoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3Jk
ZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCp0aGlzKSkpOwogfQogCiBSZWY8RE9NUmVj
dD4gUmFuZ2U6OmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERP
TVJlY3Q6OmNyZWF0ZShib3VuZGluZ1JlY3QoQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpKTsKLX0K
LQotVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0cyhDb29yZGluYXRl
U3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMp
IGNvbnN0Ci17Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7Ci0KLSAgICBvd25lckRvY3Vt
ZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0KLSAgICBOb2Rl
KiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGJvb2wgdXNlVmlzaWJsZUJvdW5kcyA9
IHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91
bmRzKTsKLQotICAgIEhhc2hTZXQ8Tm9kZSo+IHNlbGVjdGVkRWxlbWVudHNTZXQ7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4oKm5vZGUp
KQotICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5hZGQobm9kZSk7Ci0gICAgfQotCi0g
ICAgLy8gRG9uJ3QgaW5jbHVkZSBlbGVtZW50cyB0aGF0IGFyZSBvbmx5IHBhcnRpYWxseSBzZWxl
Y3RlZC4KLSAgICBOb2RlKiBsYXN0Tm9kZSA9IG1fZW5kLmNoaWxkQmVmb3JlKCkgPyBtX2VuZC5j
aGlsZEJlZm9yZSgpIDogJmVuZENvbnRhaW5lcigpOwotICAgIGZvciAoTm9kZSogcGFyZW50ID0g
bGFzdE5vZGUtPnBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUocGFyZW50KTsKLSAgICAK
LSAgICBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRpb24+IHZp
c2libGVSZWN0T3B0aW9ucyA9IHsgUmVuZGVyT2JqZWN0OjpWaXNpYmxlUmVjdENvbnRleHRPcHRp
b246OlVzZUVkZ2VJbmNsdXNpdmVJbnRlcnNlY3Rpb24sIFJlbmRlck9iamVjdDo6VmlzaWJsZVJl
Y3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDbGlwcywgUmVuZGVyT2JqZWN0OjpWaXNp
YmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29tcG9zaXRlZENvbnRhaW5lclNjcm9sbHMgfTsK
LQotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgaWYgKGlzPEVsZW1l
bnQ+KCpub2RlKSAmJiBzZWxlY3RlZEVsZW1lbnRzU2V0LmNvbnRhaW5zKG5vZGUpICYmICh1c2VW
aXNpYmxlQm91bmRzIHx8ICFub2RlLT5wYXJlbnROb2RlKCkgfHwgIXNlbGVjdGVkRWxlbWVudHNT
ZXQuY29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKS5yZW5kZXJCb3hNb2RlbE9iamVj
dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHVzZVZpc2libGVCb3VuZHMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBsb2NhbEJvdW5kcyA9IHJlbmRlcmVyLT5ib3JkZXJCb3VuZGluZ0Jv
eCgpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHJvb3RDbGlwcGVkQm91bmRzID0gcmVuZGVy
ZXItPmNvbXB1dGVWaXNpYmxlUmVjdEluQ29udGFpbmVyKGxvY2FsQm91bmRzLCAmcmVuZGVyZXIt
PnZpZXcoKSwgeyBmYWxzZSwgZmFsc2UsIHZpc2libGVSZWN0T3B0aW9ucyB9KTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFyb290Q2xpcHBlZEJvdW5kcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBhdXRvIHNuYXBwZWRCb3VuZHMgPSBz
bmFwUmVjdFRvRGV2aWNlUGl4ZWxzKCpyb290Q2xpcHBlZEJvdW5kcywgbm9kZS0+ZG9jdW1lbnQo
KS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlID09
IENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0NsaWVudFJlY3Qoc25hcHBlZEJvdW5kcywgcmVu
ZGVyZXItPnN0eWxlKCkpOwotICAgICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBl
ZEJvdW5kcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgVmVjdG9yPEZsb2F0UXVhZD4gZWxlbWVudFF1YWRzOwot
ICAgICAgICAgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKGVsZW1lbnRRdWFkcyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNwYWNlID09IENvb3JkaW5hdGVTcGFjZTo6Q2xpZW50KQotICAg
ICAgICAgICAgICAgICAgICBub2RlLT5kb2N1bWVudCgpLmNvbnZlcnRBYnNvbHV0ZVRvQ2xpZW50
UXVhZHMoZWxlbWVudFF1YWRzLCByZW5kZXJlci0+c3R5bGUoKSk7Ci0KLSAgICAgICAgICAgICAg
ICByZWN0cy5hcHBlbmRWZWN0b3IoYm91bmRpbmdCb3hlcyhlbGVtZW50UXVhZHMpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5yZW5kZXJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0ZpeGVkOwotICAgICAgICAgICAgICAgIGF1dG8g
Y2xpcHBlZFJlY3RzID0gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KG5vZGUsICpyZW5kZXJl
ciwgZmFsc2UsIGlzRml4ZWQsIHJlY3RPcHRpb25zKTsKLSAgICAgICAgICAgICAgICBpZiAoc3Bh
Y2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PmRvY3VtZW50KCkuY29udmVydEFic29sdXRlVG9DbGllbnRSZWN0cyhjbGlwcGVkUmVjdHMsIHJl
bmRlcmVyLT5zdHlsZSgpKTsKLQotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZFZlY3Rvcihj
bGlwcGVkUmVjdHMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHJlY3RPcHRpb25zLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25vcmVUaW55UmVj
dHMpKSB7Ci0gICAgICAgIHJlY3RzLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiByZWN0LmFyZWEoKSA8PSAx
OwotICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVjdHM7Ci19Ci0KLUZsb2F0UmVj
dCBSYW5nZTo6Ym91bmRpbmdSZWN0KENvb3JkaW5hdGVTcGFjZSBzcGFjZSwgT3B0aW9uU2V0PEJv
dW5kaW5nUmVjdEJlaGF2aW9yPiByZWN0T3B0aW9ucykgY29uc3QKLXsKLSAgICBGbG9hdFJlY3Qg
cmVzdWx0OwotICAgIGZvciAoYXV0byYgcmVjdCA6IGJvcmRlckFuZFRleHRSZWN0cyhzcGFjZSwg
cmVjdE9wdGlvbnMpKQotICAgICAgICByZXN1bHQudW5pdGVJZk5vblplcm8ocmVjdCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotRmxvYXRSZWN0IFJhbmdlOjphYnNvbHV0ZUJvdW5kaW5nUmVj
dChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+IHJlY3RPcHRpb25zKSBjb25zdAotewot
ICAgIHJldHVybiBib3VuZGluZ1JlY3QoQ29vcmRpbmF0ZVNwYWNlOjpBYnNvbHV0ZSwgcmVjdE9w
dGlvbnMpOworICAgIHJldHVybiBET01SZWN0OjpjcmVhdGUodW5pb25SZWN0SWdub3JpbmdaZXJv
UmVjdHMoUmVuZGVyT2JqZWN0OjpjbGllbnRCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJh
bmdlKCp0aGlzKSkpKTsKIH0KIAogU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJh
bmdlJiByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggZmFiOGY4MmJhZmY4YjM1OWM4MjAxYjYyMWMw
MWZmOTYwOTIyMzEyNC4uYjg4NzUzZmIwZTVkMjZkMWEzNmU3NzJhZDk3MDk5YmNlNGZhNmVkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTI0LDIwICsyNCwxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSYW5n
ZUJvdW5kYXJ5UG9pbnQuaCIKLSNpbmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NUmVjdDsKIGNsYXNzIERPTVJlY3RMaXN0OwogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudDsKLWNsYXNzIEZsb2F0UXVhZDsKIGNsYXNzIE5vZGVXaXRoSW5kZXg7
Ci1jbGFzcyBSZW5kZXJUZXh0OwotY2xhc3MgU2VsZWN0aW9uUmVjdDsKIGNsYXNzIFRleHQ7CiBj
bGFzcyBWaXNpYmxlUG9zaXRpb247CiAKQEAgLTk4LDIwICs5Miw2IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIE5vZGUqIGZpcnN0Tm9kZSgpIGNvbnN0OwogCi0gICAgZW51bSBjbGFz
cyBCb3VuZGluZ1JlY3RCZWhhdmlvciA6IHVpbnQ4X3QgewotICAgICAgICBSZXNwZWN0Q2xpcHBp
bmcgPSAxIDw8IDAsCi0gICAgICAgIFVzZVZpc2libGVCb3VuZHMgPSAxIDw8IDEsCi0gICAgICAg
IElnbm9yZVRpbnlSZWN0cyA9IDEgPDwgMiwKLSAgICAgICAgSWdub3JlRW1wdHlUZXh0U2VsZWN0
aW9ucyA9IDEgPDwgMywgLy8gRG8gbm90IHJldHVybiBlbXB0eSB0ZXh0IHJlY3RhbmdsZXMsIHdo
aWNoIGlzIHJlcXVpcmVkIGZvciBFbGVtZW50LmdldENsaWVudFJlY3QoKSBjb25mb3JtYW5jZS4K
LSAgICB9OwotCi0gICAgLy8gTm90IHRyYW5zZm9ybS1mcmllbmRseQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQgPSBmYWxzZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsg
fSkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94
KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwotCi0gICAgLy8g
VHJhbnNmb3JtLWZyaWVuZGx5Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGFic29sdXRl
Qm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0
OwotCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmKTsKICAgICB2
b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwogICAgIHZvaWQg
bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYpOwpAQCAtMTQ3LDEyICsxMjcsNiBAQCBwcml2YXRlOgog
ICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCB1bnNpZ25lZCBv
ZmZzZXQpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxEb2N1bWVudEZyYWdtZW50Pj4g
cHJvY2Vzc0NvbnRlbnRzKEFjdGlvblR5cGUpOwogCi0gICAgZW51bSBjbGFzcyBDb29yZGluYXRl
U3BhY2UgeyBBYnNvbHV0ZSwgQ2xpZW50IH07Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gYm9yZGVy
QW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2
aW9yPiA9IHsgfSkgY29uc3Q7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdChDb29yZGluYXRl
U3BhY2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwotCi0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqLCBS
ZW5kZXJUZXh0JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIGJvb2wmIGlzRml4ZWQsIE9wdGlv
blNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4pIGNvbnN0OwotCiAgICAgTm9kZSogcGFzdExhc3RO
b2RlKCkgY29uc3Q7CiAKICAgICBSZWY8RG9jdW1lbnQ+IG1fb3duZXJEb2N1bWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDUzMGM3MDUyZTAzODBjZWQwNDYzMDYwOTZmMWY5
OGRmZmU3M2Q4ZWYuLmE3ZWY3YTI4MDY3NzBlNDA4OTBjNzY0Mzg1YTJhZWNjOTRlMzVjYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtMTA4LDIyICsxMDgsMjUgQEAgSW50ZXJz
ZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQogICAgIDogbV9ub2RlKGZpcnN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkp
CiAgICAgLCBtX3Bhc3RMYXN0Tm9kZShub2RlUGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKHJhbmdl
KSkKIHsKKyAgICBlbmZvcmNlRW5kSW52YXJpYW50KCk7CiB9CiAKIHZvaWQgSW50ZXJzZWN0aW5n
Tm9kZUl0ZXJhdG9yOjphZHZhbmNlKCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBtX25v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX25vZGUpOwotICAgIGlmIChtX25vZGUgPT0gbV9w
YXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgewotICAgICAgICBtX25vZGUgPSBudWxscHRyOwotICAg
ICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7Ci0gICAgfQorICAgIGVuZm9yY2VFbmRJbnZh
cmlhbnQoKTsKIH0KIAogdm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2VTa2lw
cGluZ0NoaWxkcmVuKCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBtX25vZGUgPSBtX25v
ZGUtPmNvbnRhaW5zKG1fcGFzdExhc3ROb2RlLmdldCgpKSA/IG51bGxwdHIgOiBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsKKyAgICBlbmZvcmNlRW5kSW52YXJp
YW50KCk7Cit9CisKK3ZvaWQgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjplbmZvcmNlRW5kSW52
YXJpYW50KCkKK3sKICAgICBpZiAobV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFtX25vZGUp
IHsKICAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKICAgICAgICAgbV9wYXN0TGFzdE5vZGUgPSBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCBmOTUzMDEzNzAyZTFkYzY1MjY1
YmE3MTI0YWVlNDAzN2IxYTY3M2Q5Li4yOTA0YzM3ZWE4YjUyYWJmNmI0MmI3NmQ1M2ViNGE3ZmRi
NWU4NzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtOTAsNiArOTAsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBhZHZhbmNlU2tpcHBpbmdDaGlsZHJlbigpOwogCiBwcml2YXRlOgorICAg
IHZvaWQgZW5mb3JjZUVuZEludmFyaWFudCgpOworCiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsK
ICAgICBSZWZQdHI8Tm9kZT4gbV9wYXN0TGFzdE5vZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBkOTdlNjZmOGY4YWYwNWZhMDI3NzZhMDA4NTBm
NWY1NWFlODYxZjNmLi5lMDEwOGIyM2E2NWZmMDg2NWUyMzgwZjVlYzFjYWFkNTg2M2E1NzY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtMjM0MSw4ICsy
MzQxLDEyIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rh
bmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsCiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgT3B0aW9uU2V0PFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVo
YXZpb3I+IGJlaGF2aW9yOworICAgIGlmICh0ZXh0UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFuZ2xl
SGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpCisgICAgICAgIGJlaGF2aW9yLmFkZChSZW5kZXJPYmpl
Y3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25IZWlnaHQpOworCiAgICAgYXV0
byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2RvY3VtZW50LT52aWV3KCktPnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Ci0gICAg
Zm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2Vs
ZWN0aW9uSGVpZ2h0KSkpIHsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiBib3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlLCBiZWhhdmlvcikpKSB7CiAgICAg
ICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNpYmxlQ29u
dGVudFJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJzZWN0aW9uUmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCA4ZTBlMDc5ZWFkNDNkNmY4NGJlNGZhZGNiNzdk
NDNmMWZjOWJhMzNjLi42NjczYWE3ZWU4ZmM0NzMzZjVlZTkxODhmNTJlODU5NjRiODNhMmQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBA
IHN0YXRpYyBIYXNoU2V0PENvbG9yPiBlc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogCiBzdGF0aWMgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdS
ZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLT5hYnNvbHV0ZUJvdW5kaW5nUmVjdCh7Ci0gICAgICAgIFJhbmdl
OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6UmVzcGVjdENsaXBwaW5nLAotICAgICAgICBSYW5nZTo6
Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlVzZVZpc2libGVCb3VuZHMsCi0gICAgICAgIFJhbmdlOjpC
b3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3RzLAotICAgIH0pOworICAgIHJldHVy
biB1bmlvblJlY3RJZ25vcmluZ1plcm9SZWN0cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVy
QW5kVGV4dFJlY3RzKHJhbmdlLCB7CisgICAgICAgIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0
QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZywKKyAgICAgICAgUmVuZGVyT2JqZWN0OjpCb3VuZGlu
Z1JlY3RCZWhhdmlvcjo6VXNlVmlzaWJsZUJvdW5kcywKKyAgICAgICAgUmVuZGVyT2JqZWN0OjpC
b3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3RzLAorICAgIH0pKTsKIH0KIAogc3Rh
dGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQpAQCAtMzAzLDE4ICszMDMsMTggQEAgc3Rh
dGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJh
bWUmIGZyYW1lLCBjb25zdCBTaW0KICAgICAgICAgZGF0YS5vcHRpb25zLmFkZChUZXh0SW5kaWNh
dG9yT3B0aW9uOjpQYWludEFsbENvbnRlbnQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgZWxzZSBpZiAoZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVz
ZVNlbGVjdGlvblJlY3RGb3JTaXppbmcpKSB7Ci0gICAgICAgIHRleHRSZWN0cyA9IFJlbmRlck9i
amVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKS5tYXAoWyZdKGNvbnN0IGF1dG8mIHJl
Y3QpIC0+IEZsb2F0UmVjdCB7CisgICAgICAgIHRleHRSZWN0cyA9IFJlbmRlck9iamVjdDo6Y29s
bGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKS5tYXAoWyZdKGF1dG8mIHJlY3QpIC0+IEZsb2F0UmVj
dCB7CiAgICAgICAgICAgICByZXR1cm4gcmVjdC5yZWN0KCk7CiAgICAgICAgIH0pOwogICAgIH0K
ICNlbmRpZgogICAgIGVsc2UgewotICAgICAgICBhdXRvIHRleHRSZWN0SGVpZ2h0ID0gZGF0YS5v
cHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlRpZ2h0bHlGaXRDb250ZW50KSA/
IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpUZXh0SGVpZ2h0IDogRnJhbWVT
ZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodDsKLSAgICAgICAg
VmVjdG9yPEludFJlY3Q+IGludFJlY3RzOwotICAgICAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LT5hYnNvbHV0ZVRleHRSZWN0cyhpbnRSZWN0cywgdGV4dFJlY3RIZWlnaHQgPT0gRnJhbWVTZWxl
Y3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCwgUmFuZ2U6OkJvdW5k
aW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xpcHBpbmcpOwotICAgICAgICB0ZXh0UmVjdHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnRSZWN0cy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8m
IGludFJlY3QgOiBpbnRSZWN0cykKLSAgICAgICAgICAgIHRleHRSZWN0cy51bmNoZWNrZWRBcHBl
bmQoaW50UmVjdCk7CisgICAgICAgIE9wdGlvblNldDxSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVj
dEJlaGF2aW9yPiBiZWhhdmlvciB7IFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6
OlJlc3BlY3RDbGlwcGluZyB9OworICAgICAgICBpZiAoIWRhdGEub3B0aW9ucy5jb250YWlucyhU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpUaWdodGx5Rml0Q29udGVudCkpCisgICAgICAgICAgICBiZWhh
dmlvci5hZGQoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNlU2VsZWN0aW9u
SGVpZ2h0KTsKKyAgICAgICAgdGV4dFJlY3RzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRS
ZWN0cyhyYW5nZSwgYmVoYXZpb3IpLm1hcChbJl0oYXV0byYgcmVjdCkgLT4gRmxvYXRSZWN0IHsK
KyAgICAgICAgICAgIHJldHVybiByZWN0OworICAgICAgICB9KTsKICAgICB9CiAKICAgICBpZiAo
dGV4dFJlY3RzLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmNwcAppbmRleCBiYWQyZTgxYzExN2FhYTBiNjA0
YzdjNWJjZmIzMzgyMjljYTY2OWYwLi5iN2RmMDcyOGMxMDZiMmZhNDU4MjE5Y2I2OTAxNWI4MTFm
NjgwMTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9t
ZXRyeVV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2VvbWV0cnlVdGlsaXRpZXMuY3BwCkBAIC03NywyMiArNzcsMjQgQEAgYm9vbCBmaW5kSW50ZXJz
ZWN0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMiwgY29uc3Qg
RmxvYXRQb2kKIEludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMp
CiB7CiAgICAgSW50UmVjdCByZXN1bHQ7Ci0KLSAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICByZXN1
bHQudW5pdGUocmVjdHNbaV0pOwotCisgICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCisgICAg
ICAgIHJlc3VsdC51bml0ZShyZWN0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBGbG9hdFJl
Y3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cykKIHsKICAgICBGbG9h
dFJlY3QgcmVzdWx0OworICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQorICAgICAgICByZXN1
bHQudW5pdGUocmVjdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KIAotICAgIHNpemVfdCBjb3Vu
dCA9IHJlY3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
Ci0gICAgICAgIHJlc3VsdC51bml0ZShyZWN0c1tpXSk7Ci0KK0Zsb2F0UmVjdCB1bmlvblJlY3RJ
Z25vcmluZ1plcm9SZWN0cyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCit7CisgICAg
RmxvYXRSZWN0IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKKyAgICAgICAg
cmVzdWx0LnVuaXRlSWZOb25aZXJvKHJlY3QpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0
aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW9tZXRyeVV0aWxpdGll
cy5oCmluZGV4IDBkZGQ2YzJlYTcyMDI0M2YzMDE1ZmFmZTRmNjg4ZTRiZTUwMDRmMjYuLjRhNzYw
NDYxMDFiN2YwYjRkN2JjNTljNGY4ODNkOTFkYmIyNzEwMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlb21ldHJ5VXRpbGl0aWVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VvbWV0cnlVdGlsaXRpZXMuaApAQCAtMzgsOCAr
MzgsOSBAQCBmbG9hdCBmaW5kU2xvcGUoY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCYgYyk7CiAvLyBGaW5kIHBvaW50IHdoZXJlIGxpbmVzIHRocm91Z2gg
dGhlIHR3byBwYWlycyBvZiBwb2ludHMgaW50ZXJzZWN0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBs
aW5lcyBkb24ndCBpbnRlcnNlY3QuCiBXRUJDT1JFX0VYUE9SVCBib29sIGZpbmRJbnRlcnNlY3Rp
b24oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBGbG9h
dFBvaW50JiBkMSwgY29uc3QgRmxvYXRQb2ludCYgZDIsIEZsb2F0UG9pbnQmIGludGVyc2VjdGlv
bik7CiAKLUludFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYpOworV0VCQ09S
RV9FWFBPUlQgSW50UmVjdCB1bmlvblJlY3QoY29uc3QgVmVjdG9yPEludFJlY3Q+Jik7CiBXRUJD
T1JFX0VYUE9SVCBGbG9hdFJlY3QgdW5pb25SZWN0KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+Jik7
CitXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdW5pb25SZWN0SWdub3JpbmdaZXJvUmVjdHMoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mKTsKIAogLy8gTWFwIHBvaW50IGZyb20gc3JjUmVjdCB0byBh
biBlcXVpdmFsZW50IHBvaW50IGluIGRlc3RSZWN0LgogRmxvYXRQb2ludCBtYXBQb2ludChGbG9h
dFBvaW50LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVh
ay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IDI0
MjlmNThmODM5NTNmZmI1ODY5NGI3NGNhOWU0MTk0NDJkNTljODkuLjJhNjI1MWFmZGQ5NWFiYWNj
OTRlOTNkMTcyZjZmNmViMTc5YjQ1YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGluZUJyZWFrLmgKQEAgLTM2LDkgKzM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflJl
bmRlckxpbmVCcmVhaygpOwogCiAgICAgLy8gRklYTUU6IFRoZSBsaWVzIGhlcmUga2VlcCByZW5k
ZXIgdHJlZSBkdW1wIGJhc2VkIHRlc3QgcmVzdWx0cyB1bmNoYW5nZWQuCi0gICAgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNXQlIgPyAiUmVuZGVy
V29yZEJyZWFrIiA6ICJSZW5kZXJCUiI7IH0KKyAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1dCUiA/ICJSZW5kZXJXb3JkQnJlYWsiIDogIlJlbmRl
ckJSIjsgfQogCi0gICAgYm9vbCBpc1dCUigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faXNX
QlI7IH0KKyAgICBib29sIGlzV0JSKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1dCUjsgfQog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPElubGluZUVsZW1lbnRCb3g+IGNyZWF0ZUlubGluZUJveCgp
OwogICAgIElubGluZUVsZW1lbnRCb3gqIGlubGluZUJveFdyYXBwZXIoKSBjb25zdCB7IHJldHVy
biBtX2lubGluZUJveFdyYXBwZXI7IH0KQEAgLTUwLDQ1ICs1MCw0NSBAQCBwdWJsaWM6CiAgICAg
SW50UmVjdCBsaW5lc0JvdW5kaW5nQm94KCkgY29uc3Q7CiAgICAgSW50UmVjdCBib3VuZGluZ0Jv
eEZvclJlbmRlclRyZWVEdW1wKCkgY29uc3Q7CiAKLSAgICB2b2lkIGFic29sdXRlUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBi
b29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBhYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCkgY29u
c3QgZmluYWw7CisgICAgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9v
bCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdCBmaW5hbDsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+Jiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIG92ZXJyaWRlOworICAgIHZvaWQgY29sbGVjdFNl
bGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
ID0gMCwgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46
Om1heCgpKSBmaW5hbDsKICNlbmRpZgogICAgIHZvaWQgZW5zdXJlTGluZUJveGVzKCk7CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCBub2RlKCkgY29uc3QgPSBkZWxldGU7CiAKLSAgICBib29sIGNhbkhh
dmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBw
YWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlIHsgfQotCi0gICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwotICAgIGludCBjYXJldE1pbk9m
ZnNldCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9m
ZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBvdmVycmlkZTsKLQotICAgIExh
eW91dFVuaXQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExp
bmVQb3NpdGlvbk1vZGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGludCBiYXNlbGluZVBvc2l0aW9u
KEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9z
aXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKLQotICAgIExheW91dFVuaXQgbWFyZ2luVG9wKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVuaXQgbWFyZ2luQm90dG9t
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVuaXQgbWFyZ2luTGVm
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1hcmdpblJp
Z2h0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQotICAgIExheW91dFVuaXQgbWFyZ2lu
QmVmb3JlKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gMDsgfQot
ICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiAwOyB9Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydChjb25zdCBSZW5k
ZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KLSAgICBMYXlvdXRVbml0IG1h
cmdpbkVuZChjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0K
LSAgICBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbGlu
ZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQot
ICAgIExheW91dFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBMYXlvdXRSZWN0KExheW91dFBvaW50KCksIGxpbmVzQm91bmRpbmdCb3goKS5zaXplKCkpOyB9
Ci0gICAgTGF5b3V0UmVjdCBmcmFtZVJlY3RGb3JTdGlja3lQb3NpdGlvbmluZygpIGNvbnN0IG92
ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KLSAg
ICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0K
LQotICAgIHZvaWQgdXBkYXRlRnJvbVN0eWxlKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCByZXF1aXJl
c0xheWVyKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNhbkhh
dmVDaGlsZHJlbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBwYWlu
dChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIGZpbmFsIHsgfQorCisgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5k
ZXJGcmFnbWVudENvbnRhaW5lciopIGZpbmFsOworICAgIGludCBjYXJldE1pbk9mZnNldCgpIGNv
bnN0IGZpbmFsOworICAgIGludCBjYXJldE1heE9mZnNldCgpIGNvbnN0IGZpbmFsOworICAgIGJv
b2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3QgZmluYWw7CisgICAgTGF5b3V0UmVjdCBsb2Nh
bENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRl
KEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsKKworICAgIExheW91dFVuaXQgbGluZUhlaWdodChib29s
IGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0IGZp
bmFsOworICAgIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExp
bmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBmaW5hbDsKKwor
ICAgIExheW91dFVuaXQgbWFyZ2luVG9wKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQorICAg
IExheW91dFVuaXQgbWFyZ2luQm90dG9tKCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQorICAg
IExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBM
YXlvdXRVbml0IG1hcmdpblJpZ2h0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gMDsgfQorICAgIExh
eW91dFVuaXQgbWFyZ2luQmVmb3JlKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgZmluYWwgeyBy
ZXR1cm4gMDsgfQorICAgIExheW91dFVuaXQgbWFyZ2luQWZ0ZXIoY29uc3QgUmVuZGVyU3R5bGUq
KSBjb25zdCBmaW5hbCB7IHJldHVybiAwOyB9CisgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydChj
b25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7IH0KKyAgICBMYXlvdXRV
bml0IG1hcmdpbkVuZChjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IGZpbmFsIHsgcmV0dXJuIDA7
IH0KKyAgICBMYXlvdXRVbml0IG9mZnNldFdpZHRoKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbGlu
ZXNCb3VuZGluZ0JveCgpLndpZHRoKCk7IH0KKyAgICBMYXlvdXRVbml0IG9mZnNldEhlaWdodCgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIGxpbmVzQm91bmRpbmdCb3goKS5oZWlnaHQoKTsgfQorICAg
IExheW91dFJlY3QgYm9yZGVyQm91bmRpbmdCb3goKSBjb25zdCBmaW5hbCB7IHJldHVybiBMYXlv
dXRSZWN0KExheW91dFBvaW50KCksIGxpbmVzQm91bmRpbmdCb3goKS5zaXplKCkpOyB9CisgICAg
TGF5b3V0UmVjdCBmcmFtZVJlY3RGb3JTdGlja3lQb3NpdGlvbmluZygpIGNvbnN0IGZpbmFsIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKyAgICBMYXlvdXRS
ZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmplY3QqKSBjb25zdCBmaW5hbCB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KKworICAgIHZvaWQg
dXBkYXRlRnJvbVN0eWxlKCkgZmluYWw7CisgICAgYm9vbCByZXF1aXJlc0xheWVyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIElubGluZUVsZW1lbnRCb3gqIG1faW5saW5l
Qm94V3JhcHBlcjsKICAgICBtdXRhYmxlIGludCBtX2NhY2hlZExpbmVIZWlnaHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGE1YTNmYzc5OGQ2MGU1NjQw
M2NkMDlkOWY0ZWE1ODA2NjI3NDM1ODQuLjQzYWMxNjliOTM0YjBlNzY4ZjI1MmYxZTRhMzdhMTgw
Mzc3Mzc4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAi
RWRpdGluZy5oIgorI2luY2x1ZGUgIkVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgpAQCAtNTIsNiArNTMsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVs
dGlDb2x1bW5GbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgogI2luY2x1ZGUgIlJlbmRl
clNWR0Jsb2NrLmgiCkBAIC02ODAsNyArNjgyLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZFBE
RlVSTFJlY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE8K
ICAgICAgICAgfQogICAgIH0KIAotICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0VVJMRm9yUmVj
dChub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKGhyZWYpLCB1cmxSZWN0KTsKKyAgICBwYWlu
dEluZm8uY29udGV4dCgpLnNldFVSTEZvclJlY3QoZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRl
VVJMKGhyZWYpLCB1cmxSZWN0KTsKIAogfQogCkBAIC0xOTAwLDM3ICsxOTAyLDE1MiBAQCBib29s
IFJlbmRlck9iamVjdDo6aGFzTm9uRW1wdHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQYXJlbnRGcmFt
ZXMoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotVmVjdG9yPEZsb2F0UXVhZD4gUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJv
b2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorVmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyT2JqZWN0Ojph
YnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxSZW5k
ZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlvcikKIHsKICAgICBWZWN0b3I8
RmxvYXRRdWFkPiBxdWFkczsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rl
cyhyYW5nZSkpIHsKICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5k
ZXJlci0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJM
aW5lQnJlYWs+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkcyhxdWFkcyk7CiAgICAgICAgIGVsc2Ug
aWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgewogICAgICAgICAgICAgYXV0byBvZmZzZXRS
YW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgZG93bmNhc3Q8Q2hhcmFjdGVy
RGF0YT4obm9kZSkpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJl
bmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0
YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpOworICAgICAgICAgICAg
cXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1
dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIGJlaGF2
aW9yLmNvbnRhaW5zKEJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VTZWxlY3Rpb25IZWlnaHQpKSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHF1YWRzOwogfQogCi1WZWN0b3I8SW50UmVj
dD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQorc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGFi
c29sdXRlUmVjdHNGb3JSYW5nZUluVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFRleHQm
IG5vZGUsIE9wdGlvblNldDxSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhh
dmlvcikKIHsKKyAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOworICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIG9mZnNldFJhbmdlID0g
Y2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKHJhbmdlLCBub2RlKTsKKyAgICBhdXRvIHRleHRRdWFk
cyA9IHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2Uob2Zmc2V0UmFuZ2Uuc3RhcnQsIG9m
ZnNldFJhbmdlLmVuZCwgYmVoYXZpb3IuY29udGFpbnMoUmVuZGVyT2JqZWN0OjpCb3VuZGluZ1Jl
Y3RCZWhhdmlvcjo6VXNlU2VsZWN0aW9uSGVpZ2h0KSwgYmVoYXZpb3IuY29udGFpbnMoUmVuZGVy
T2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlRW1wdHlUZXh0U2VsZWN0aW9ucykp
OworCisgICAgaWYgKGJlaGF2aW9yLmNvbnRhaW5zKFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0
QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZykpIHsKKyAgICAgICAgYXV0byBhYnNvbHV0ZUNsaXBw
ZWRPdmVyZmxvd1JlY3QgPSByZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7
CisgICAgICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaXBwZWRSZWN0czsKKyAgICAgICAgY2xpcHBl
ZFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7CisgICAgICAg
IGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykgeworICAgICAgICAgICAgYXV0byBjbGlwcGVk
UmVjdCA9IGludGVyc2VjdGlvbihxdWFkLmJvdW5kaW5nQm94KCksIGFic29sdXRlQ2xpcHBlZE92
ZXJmbG93UmVjdCk7CisgICAgICAgICAgICBpZiAoIWNsaXBwZWRSZWN0LmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgICAgICBjbGlwcGVkUmVjdHMudW5jaGVja2VkQXBwZW5kKGNsaXBwZWRSZWN0KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2xpcHBlZFJlY3RzOworICAgIH0KKworICAgIHJl
dHVybiBib3VuZGluZ0JveGVzKHRleHRRdWFkcyk7Cit9CisKKy8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCByZXR1cm4gVmVjdG9yPEZsb2F0UmVjdD4gbGlrZSB0aGUgb3RoZXIgc2ltaWxhciBmdW5jdGlv
bnMuCisvLyBGSVhNRTogRmluZCBhIHdheSB0byBzaGFyZSB3aXRoIGFic29sdXRlVGV4dFF1YWRz
IHJhdGhlciB0aGFuIHJlcGVhdGluZyBzbyBtdWNoIG9mIHRoZSBsb2dpYyBmcm9tIHRoYXQgZnVu
Y3Rpb24uCitWZWN0b3I8SW50UmVjdD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cyhj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4g
YmVoYXZpb3IpCit7CisgICAgQVNTRVJUKCFiZWhhdmlvci5jb250YWlucyhCb3VuZGluZ1JlY3RC
ZWhhdmlvcjo6VXNlVmlzaWJsZUJvdW5kcykpOworICAgIEFTU0VSVCghYmVoYXZpb3IuY29udGFp
bnMoQm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZVRpbnlSZWN0cykpOwogICAgIFZlY3RvcjxJ
bnRSZWN0PiByZWN0czsKICAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcyhy
YW5nZSkpIHsKICAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRlcmVyLT5sb2Nh
bFRvQWJzb2x1dGUoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJl
cikpIHsKLSAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0ZXJEYXRhT2Zmc2V0
UmFuZ2UocmFuZ2UsIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KG5vZGUpKTsKLSAgICAgICAgICAg
IGZvciAoYXV0byYgcXVhZCA6IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1
dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNl
bGVjdGlvbkhlaWdodCkpCi0gICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1YWQuZW5jbG9z
aW5nQm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+
KCpyZW5kZXJlcikuYWJzb2x1dGVSZWN0cyhyZWN0cywgZmxvb3JlZExheW91dFBvaW50KHJlbmRl
cmVyLT5sb2NhbFRvQWJzb2x1dGUoKSkpOworICAgICAgICBlbHNlIGlmIChpczxUZXh0Pihub2Rl
KSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogYWJzb2x1dGVSZWN0c0ZvclJhbmdl
SW5UZXh0KHJhbmdlLCBkb3duY2FzdDxUZXh0Pihub2RlKSwgYmVoYXZpb3IpKQorICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KHJlY3QpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gcmVjdHM7CiB9CiAKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZUJl
Zm9yZShjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKK3sKKyAgICBpZiAocG9pbnQub2Zmc2V0
KSB7CisgICAgICAgIGlmIChhdXRvIG5vZGUgPSBwb2ludC5jb250YWluZXItPnRyYXZlcnNlVG9D
aGlsZEF0KHBvaW50Lm9mZnNldCAtIDEpKQorICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAg
fQorICAgIHJldHVybiBwb2ludC5jb250YWluZXIucHRyKCk7Cit9CisKK2VudW0gY2xhc3MgQ29v
cmRpbmF0ZVNwYWNlIHsgQ2xpZW50LCBBYnNvbHV0ZSB9OworCitzdGF0aWMgVmVjdG9yPEZsb2F0
UmVjdD4gYm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgQ29vcmRp
bmF0ZVNwYWNlIHNwYWNlLCBPcHRpb25TZXQ8UmVuZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhh
dmlvcj4gYmVoYXZpb3IpCit7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7CisKKyAgICBy
YW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CisKKyAgICBib29sIHVzZVZpc2libGVCb3VuZHMgPSBiZWhhdmlvci5j
b250YWlucyhSZW5kZXJPYmplY3Q6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91
bmRzKTsKKworICAgIEhhc2hTZXQ8RWxlbWVudCo+IHNlbGVjdGVkRWxlbWVudHNTZXQ7CisgICAg
Zm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlm
IChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNTZXQuYWRk
KCZkb3duY2FzdDxFbGVtZW50Pihub2RlKSk7CisgICAgfQorCisgICAgLy8gRG9uJ3QgaW5jbHVk
ZSBlbGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSB0aGF0IGFyZSBvbmx5IHBhcnRpYWxs
eSBzZWxlY3RlZC4KKyAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB0aGUgc3RhcnQgb2YgdGhlIHJh
bmdlPyBUaGUgYXN5bW1ldHJ5IGhlcmUgZG9lcyBub3QgbWFrZSBzZW5zZS4gU2VlbXMgbGlrZWx5
IHRoaXMgbG9naWMgaXMgbm90IHF1aXRlIHJpZ2h0IGluIG90aGVyIHJlc3BlY3RzLCB0b28uCisg
ICAgaWYgKGF1dG8gbGFzdE5vZGUgPSBub2RlQmVmb3JlKHJhbmdlLmVuZCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PigqbGFzdE5vZGUp
KQorICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1NldC5yZW1vdmUoJmFuY2VzdG9yKTsKKyAg
ICB9CisKKyAgICBjb25zdGV4cHIgT3B0aW9uU2V0PFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RD
b250ZXh0T3B0aW9uPiB2aXNpYmxlUmVjdE9wdGlvbnMgPSB7CisgICAgICAgIFJlbmRlck9iamVj
dDo6VmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpVc2VFZGdlSW5jbHVzaXZlSW50ZXJzZWN0aW9u
LAorICAgICAgICBSZW5kZXJPYmplY3Q6OlZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlD
b21wb3NpdGVkQ2xpcHMsCisgICAgICAgIFJlbmRlck9iamVjdDo6VmlzaWJsZVJlY3RDb250ZXh0
T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzCisgICAgfTsKKworICAgIGZv
ciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBpZiAo
aXM8RWxlbWVudD4obm9kZSkgJiYgc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucygmZG93bmNh
c3Q8RWxlbWVudD4obm9kZSkpICYmICh1c2VWaXNpYmxlQm91bmRzIHx8ICFub2RlLnBhcmVudEVs
ZW1lbnQoKSB8fCAhc2VsZWN0ZWRFbGVtZW50c1NldC5jb250YWlucyhub2RlLnBhcmVudEVsZW1l
bnQoKSkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpLnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dXNlVmlzaWJsZUJvdW5kcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGxvY2FsQm91bmRz
ID0gcmVuZGVyZXItPmJvcmRlckJvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgICAgIGF1
dG8gcm9vdENsaXBwZWRCb3VuZHMgPSByZW5kZXJlci0+Y29tcHV0ZVZpc2libGVSZWN0SW5Db250
YWluZXIobG9jYWxCb3VuZHMsICZyZW5kZXJlci0+dmlldygpLCB7IGZhbHNlLCBmYWxzZSwgdmlz
aWJsZVJlY3RPcHRpb25zIH0pOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb3RDbGlwcGVk
Qm91bmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gc25hcHBlZEJvdW5kcyA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoKnJvb3RD
bGlwcGVkQm91bmRzLCBub2RlLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVudCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVUb0Ns
aWVudFJlY3Qoc25hcHBlZEJvdW5kcywgcmVuZGVyZXItPnN0eWxlKCkpOworICAgICAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoc25hcHBlZEJvdW5kcyk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFZlY3RvcjxG
bG9hdFF1YWQ+IGVsZW1lbnRRdWFkczsKKyAgICAgICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1
dGVRdWFkcyhlbGVtZW50UXVhZHMpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29y
ZGluYXRlU3BhY2U6OkNsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5kb2N1bWVudCgp
LmNvbnZlcnRBYnNvbHV0ZVRvQ2xpZW50UXVhZHMoZWxlbWVudFF1YWRzLCByZW5kZXJlci0+c3R5
bGUoKSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kVmVjdG9yKGJvdW5kaW5nQm94ZXMo
ZWxlbWVudFF1YWRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4
dD4obm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZG93bmNhc3Q8VGV4
dD4obm9kZSkucmVuZGVyZXIoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gY2xpcHBlZFJlY3Rz
ID0gYWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KHJhbmdlLCBkb3duY2FzdDxUZXh0Pihub2Rl
KSwgYmVoYXZpb3IpOworICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3Bh
Y2U6OkNsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5kb2N1bWVudCgpLmNvbnZlcnRB
YnNvbHV0ZVRvQ2xpZW50UmVjdHMoY2xpcHBlZFJlY3RzLCByZW5kZXJlci0+c3R5bGUoKSk7Cisg
ICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kVmVjdG9yKGNsaXBwZWRSZWN0cyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmVoYXZpb3IuY29udGFpbnMoUmVu
ZGVyT2JqZWN0OjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6SWdub3JlVGlueVJlY3RzKSkgeworICAg
ICAgICByZWN0cy5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkg
LT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gcmVjdC5hcmVhKCkgPD0gMTsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlY3RzOworfQorCitWZWN0b3I8RmxvYXRSZWN0PiBS
ZW5kZXJPYmplY3Q6OmFic29sdXRlQm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiBiZWhhdmlvcikKK3sKKyAg
ICByZXR1cm4gYm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlLCBDb29yZGluYXRlU3BhY2U6OkFic29s
dXRlLCBiZWhhdmlvcik7Cit9CisKK1ZlY3RvcjxGbG9hdFJlY3Q+IFJlbmRlck9iamVjdDo6Y2xp
ZW50Qm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBy
ZXR1cm4gYm9yZGVyQW5kVGV4dFJlY3RzKHJhbmdlLCBDb29yZGluYXRlU3BhY2U6OkNsaWVudCwg
eyB9KTsKK30KKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIHN0YXRpYyBib29sIGludGVy
dmFsc1N1ZmZpY2llbnRseU92ZXJsYXAoaW50IHN0YXJ0QSwgaW50IGVuZEEsIGludCBzdGFydEIs
IGludCBlbmRCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDcx
MTNmNWMzMjkwMGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjguLjUzNzdjYmU4YmQ2OTlhMmZh
YzY5YTJkYjE3YjRjY2M1YWFmOTE4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgKQEAgLTU2MCw4ICs1NjAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogLyp3YXNGaXhlZCovID0gbnVs
bHB0cikgY29uc3QgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlRm9jdXNSaW5nUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8
RmxvYXRRdWFkPiBhYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgdXNl
U2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0
b3I8SW50UmVjdD4gYWJzb2x1dGVUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKKyAgICBlbnVtIGNsYXNzIEJvdW5kaW5nUmVjdEJl
aGF2aW9yIDogdWludDhfdCB7CisgICAgICAgIFJlc3BlY3RDbGlwcGluZyA9IDEgPDwgMCwKKyAg
ICAgICAgVXNlVmlzaWJsZUJvdW5kcyA9IDEgPDwgMSwKKyAgICAgICAgSWdub3JlVGlueVJlY3Rz
ID0gMSA8PCAyLAorICAgICAgICBJZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zID0gMSA8PCAzLAor
ICAgICAgICBVc2VTZWxlY3Rpb25IZWlnaHQgPSAxIDw8IDQsCisgICAgfTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVUZXh0UXVhZHMoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+ID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEludFJlY3Q+IGFic29sdXRlVGV4dFJlY3Rz
KGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsg
fSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGFic29sdXRl
Qm9yZGVyQW5kVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PEJvdW5kaW5n
UmVjdEJlaGF2aW9yPiA9IHsgfSk7CisgICAgc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IGNsaWVu
dEJvcmRlckFuZFRleHRSZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAgICAgLy8gdGhlIHJl
Y3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRoZSBw
YWludGluZ1Jvb3QKICAgICBXRUJDT1JFX0VYUE9SVCBMYXlvdXRSZWN0IHBhaW50aW5nUm9vdFJl
Y3QoTGF5b3V0UmVjdCYgdG9wTGV2ZWxSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVk
QnVuZGxlUmFuZ2VIYW5kbGUuY3BwCmluZGV4IGQwN2JkOThhMTcxNmJkODFjYjBjOGJlNThiNWY0
MTc2YTFiNzljZGQuLjYzZjNjNzg2ZTZmYjIxNWM5YTJmNGUyNTlmYWM5ZTYxMWI2ZGI4YjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcApAQCAtMzYs
NiArMzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0pTUmFuZ2UuaD4KQEAgLTEwMSw5ICsxMDIsOCBAQCBSZWY8SW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpkb2N1bWVudCgpCiAKIFdlYkNv
cmU6OkludFJlY3QgSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZTo6Ym91bmRpbmdSZWN0SW5XaW5k
b3dDb29yZGluYXRlcygpIGNvbnN0CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IG1f
cmFuZ2UtPmFic29sdXRlQm91bmRpbmdSZWN0KCk7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9yYW5n
ZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgcmV0dXJuIGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdChib3VuZGluZ1JlY3QpKTsKKyAgICByZXR1
cm4gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaW9u
UmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3JkZXJBbmRUZXh0
UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpKTsKIH0KIAogUmVmUHRyPFdlYkltYWdl
PiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90T3B0aW9u
cyBvcHRpb25zKQpAQCAtMTI3LDcgKzEyNyw3IEBAIFJlZlB0cjxXZWJJbWFnZT4gSW5qZWN0ZWRC
dW5kbGVSYW5nZUhhbmRsZTo6cmVuZGVyZWRJbWFnZShTbmFwc2hvdE9wdGlvbnMgb3B0aW9uCiAg
ICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UobV9yYW5n
ZSkpOwogCiAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9u
c0V4Y2x1ZGVEZXZpY2VTY2FsZUZhY3RvcikgPyAxIDogZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKLSAgICBJbnRSZWN0IHBhaW50UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV9y
YW5nZS0+YWJzb2x1dGVCb3VuZGluZ1JlY3QoKSk7CisgICAgSW50UmVjdCBwYWludFJlY3QgPSBl
bmNsb3NpbmdJbnRSZWN0KHVuaW9uUmVjdElnbm9yaW5nWmVyb1JlY3RzKFJlbmRlck9iamVjdDo6
YWJzb2x1dGVCb3JkZXJBbmRUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKSkpOwog
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IHBhaW50UmVjdC5zaXplKCk7CiAgICAgYmFj
a2luZ1N0b3JlU2l6ZS5zY2FsZShzY2FsZUZhY3Rvcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZjA1ZWYzODRjOGE4
ZGM3YzVkOTM1M2JiYzI5OTQxY2VkODNiYjcxNS4uNGM3MTliNTBlM2M3ODBiMmExM2ZmMjY0MTc3
NGQwMjc4ZGVmMGI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE5MDYsNyArMTkwNiw3IEBAIHZvaWQgV2ViUGFnZTo6
cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgVmVjCiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3Rpb25C
b3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290Vmll
dyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkp
OworICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bmlvblJlY3QoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRl
eHRSZWN0cygqc2VsZWN0ZWRSYW5nZSkpKTsKICAgICBlbHNlCiAgICAgICAgIHNlbGVjdGlvbkJv
dW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiAKQEAgLTQyNjQsOSAr
NDI2NCw4IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9j
dW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIGNvbnN0IGludCBzdHJp
ZGUgPSAxOwogICAgICAgICB3aGlsZSAoIWl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAg
IGlmICghaXRlcmF0b3IudGV4dCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGF1dG8g
Y3VycmVudFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGl0ZXJhdG9yLnJhbmdlKCkpOwotICAgICAg
ICAgICAgICAgIGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IGN1cnJlbnRSYW5nZS0+YWJzb2x1
dGVCb3VuZGluZ0JveChSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4
dFNlbGVjdGlvbnMpOwotICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZCh7IGN1cnJlbnRSYW5n
ZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGFic29sdXRlQm91
bmRpbmdCb3gpLCB7IG9mZnNldFNvRmFyKyssIHN0cmlkZSB9IH0pOworICAgICAgICAgICAgICAg
IGF1dG8gYWJzb2x1dGVCb3VuZGluZ0JveCA9IHVuaW9uUmVjdChSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFJlY3RzKGl0ZXJhdG9yLnJhbmdlKCksIFJlbmRlck9iamVjdDo6Qm91bmRpbmdSZWN0
QmVoYXZpb3I6Oklnbm9yZUVtcHR5VGV4dFNlbGVjdGlvbnMpKTsKKyAgICAgICAgICAgICAgICBy
ZWN0cy5hcHBlbmQoeyBpdGVyYXRvci5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhhYnNvbHV0ZUJvdW5kaW5nQm94KSwgeyBvZmZz
ZXRTb0ZhcisrLCBzdHJpZGUgfSB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGl0ZXJh
dG9yLmFkdmFuY2Uoc3RyaWRlKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00u
bW0KaW5kZXggMTQzZjA4ZDM1OTJhMzA1NjVjMTU3MGM3ZTY3MWNmZmNjZjI0MjRhMS4uZGU1ZWE4
ZDZiYzkwM2RkZWVhYWY2MTA0NGY0NDg0ODE5ZDZiZWVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJv
bGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9HZW9tZXRyeVV0aWxpdGllcy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MTGlua0VsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMuaD4KQEAgLTU3Miw3ICs1NzMs
NyBAQCAtIChOU1JlY3QpYm91bmRpbmdCb3gKICAgICAvLyBGSVhNRTogVGhlIGNhbGwgdG8gdXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzIHNob3VsZCBiZSBtb3ZlZCBpbnRvIFdl
YkNvcmU6OlJhbmdlLgogICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2VsZik7CiAgICAgcmFuZ2Uu
b3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgIHJldHVybiByYW5nZS5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIHVuaW9u
UmVjdChSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZShyYW5n
ZSkpKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCmluZGV4IDNkYTg5YzRjY2Q2MWMxZTZhZmJjYzAxYjIw
YTg5OTIwMDllOWU0MjIuLjU2OTc2N2ExMWUxZWRlNTg0NjEwOWFiZDEwZDdiMThhOTlmZTY3MzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm9kZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUG9zaXRpb24uaD4KQEAgLTQ2NSw3ICs0NjYsNyBAQCBIUkVTVUxU
IEFjY2Vzc2libGVUZXh0OjpzY3JvbGxTdWJzdHJpbmdUbyhsb25nIHN0YXJ0SW5kZXgsIGxvbmcg
ZW5kSW5kZXgsIGVudW0gSQogICAgIGlmICghdGV4dFJhbmdlKQogICAgICAgICByZXR1cm4gU19G
QUxTRTsKIAotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoKnRleHRS
YW5nZSktPmFic29sdXRlQm91bmRpbmdCb3goKTsKKyAgICBJbnRSZWN0IGJvdW5kaW5nQm94ID0g
dW5pb25SZWN0KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnRleHRSYW5nZSkpOwog
ICAgIHN3aXRjaCAoc2Nyb2xsVHlwZSkgewogICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX1RPUF9M
RUZUOgogICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChib3VuZGluZ0JveC5t
aW5YTWluWUNvcm5lcigpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlOWNmOGNlMzQ5MDRiYjViOGI3OGE5MmI3NTlmMjBh
OGZmOGU0YThkLi4wYWE2ODJjMWM1YjA4ZGM2MGVlNTViNjM0ZmRmYTUzOGEzODgwNDczIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDgtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIE1vdmUgbm9kZSBnZW9tZXRyeSBmdW5jdGlvbnMgZnJvbSBSYW5nZSB0
byBSZW5kZXJPYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNTY3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZmFzdC9kb20vUmFuZ2Uvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC5o
dG1sOiBGaXggdGhpcyB0ZXN0IHRoYXQgYWNjaWRlbnRhbGx5CisgICAgICAgIGRlcGVuZGVkIG9u
IGdldHRpbmcgcmVjdHMgZm9yIGFuIGVtcHR5IHJhbmdlICh0aGUgY29udGVudHMgb2YgYSBkaXYg
ZWxlbWVudCB3aXRoIG5vCisgICAgICAgIHRleHQgaW5zaWRlIGl0KSB0byBpbnN0ZWFkIGdldCBy
ZWN0cyBmb3IgYSBub24tZW1wdHkgZWxlbWVudCAodGhlIGRpdiBlbGVtZW50LCBub3QKKyAgICAg
ICAganVzdCBpdHMgY29udGVudHMpLiBUZXN0IG5vdyB3b3JrcyBjb3JyZWN0bHksIGJ1dCByZXN1
bHRzIGRvbid0IG5lZWQgdG8gY2hhbmdlLgorICAgICAgICAqIGZhc3QvZG9tL1JhbmdlL3NjYWxl
LXBhZ2UtY2xpZW50LXJlY3RzLmh0bWw6IERpdHRvLgorCiAyMDIwLTA4LTIwICBIZWN0b3IgTG9w
ZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+CiAKICAgICAgICAgWyBpT1MgRGVidWcgXSBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2h0bWwvc2VtYW50aWNzL3NjcmlwdGluZy0x
L3RoZS1zY3JpcHQtZWxlbWVudC9tb3ZpbmctYmV0d2Vlbi1kb2N1bWVudHMvYmVmb3JlLXByZXBh
cmUtY3JlYXRlSFRNTERvY3VtZW50LXBhcnNlLWVycm9yLWV4dGVybmFsLWNsYXNzaWMuaHRtbCBp
cyBhIGZsYWt5IGZhaWx1cmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1Jhbmdl
L3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL1JhbmdlL3NjYWxlLXBhZ2UtYm91bmRpbmctY2xpZW50LXJlY3QuaHRtbAppbmRleCA1ZjIw
NmY3M2ViODJiYjllZDNlOTRiODc0ODE1MTBmNzgxNjQyNzVkLi4xZjVkZTM5NzM5YWFhODg0NjNi
MDRkMDMwM2VjYTVmNWQxZGQ3YzA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9S
YW5nZS9zY2FsZS1wYWdlLWJvdW5kaW5nLWNsaWVudC1yZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vUmFuZ2Uvc2NhbGUtcGFnZS1ib3VuZGluZy1jbGllbnQtcmVjdC5odG1sCkBA
IC04LDEyICs4LDEyIEBAIGZ1bmN0aW9uIHRlc3RSZWN0cygpCiAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CiAKICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAg
IHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jykp
OworICAgIHJhbmdlLnNlbGVjdE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpKTsK
ICAgICB2YXIgcmVjdCA9IHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgCiAgICAg
d2luZG93LmludGVybmFscy5zZXRQYWdlU2NhbGVGYWN0b3IoMiwgMCwgMCk7CiAgICAgdmFyIHNj
YWxlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICBzY2FsZWRSYW5nZS5zZWxl
Y3ROb2RlQ29udGVudHMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RpdicpKTsKKyAgICBzY2Fs
ZWRSYW5nZS5zZWxlY3ROb2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYnKSk7CiAgICAg
dmFyIHNjYWxlZFJlY3QgPSBzY2FsZWRSYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKIAog
ICAgIHZhciByZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iik7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9zY2FsZS1wYWdlLWNsaWVudC1yZWN0
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vUmFuZ2Uvc2NhbGUtcGFnZS1jbGllbnQtcmVj
dHMuaHRtbAppbmRleCA4MjlmMzk4MzY3NmFhM2IzZTNiNDIxN2YyYzIzNWM5YmI2YTRmOTdmLi44
OTc4MGI5MzgzOWVjYmE2MmI1OTdhY2IzY2QyMTk3ZGJjOTQ3NDk2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9SYW5nZS9zY2FsZS1wYWdlLWNsaWVudC1yZWN0cy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1JhbmdlL3NjYWxlLXBhZ2UtY2xpZW50LXJlY3RzLmh0bWwK
QEAgLTgsMTMgKzgsMTMgQEAgZnVuY3Rpb24gdGVzdFJlY3RzKCkKICAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKIAogICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXYn
KSk7CisgICAgcmFuZ2Uuc2VsZWN0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2Jykp
OwogICAgIHZhciByZWN0TGlzdCA9IHJhbmdlLmdldENsaWVudFJlY3RzKCk7CiAgICAgdmFyIHJl
Y3QgPSByZWN0TGlzdFswXTsKICAgIAogICAgIHdpbmRvdy5pbnRlcm5hbHMuc2V0UGFnZVNjYWxl
RmFjdG9yKDIsIDAsIDApOwogICAgIHZhciBzY2FsZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJh
bmdlKCk7Ci0gICAgc2NhbGVkUmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdkaXYnKSk7CisgICAgc2NhbGVkUmFuZ2Uuc2VsZWN0Tm9kZShkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnZGl2JykpOwogICAgIHZhciBzY2FsZWRSZWN0TGlzdCA9IHNjYWxlZFJh
bmdlLmdldENsaWVudFJlY3RzKCk7CiAgICAgdmFyIHNjYWxlZFJlY3QgPSBzY2FsZWRSZWN0TGlz
dFswXTsKIAo=
</data>
<flag name="review"
          id="422330"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>