<?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>225497</bug_id>
          
          <creation_ts>2021-05-06 17:17:07 -0700</creation_ts>
          <short_desc>Make CanvasRenderingContext always non-null in CanvasBase</short_desc>
          <delta_ts>2021-05-13 17:18:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1757730</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 17:17:07 -0700</bug_when>
    <thetext>Make CanvasRenderingContext always non-null in CanvasBase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757737</commentid>
    <comment_count>1</comment_count>
      <attachid>427963</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 17:23:53 -0700</bug_when>
    <thetext>Created attachment 427963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757742</commentid>
    <comment_count>2</comment_count>
      <attachid>427964</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-06 17:34:38 -0700</bug_when>
    <thetext>Created attachment 427964
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757873</commentid>
    <comment_count>3</comment_count>
      <attachid>427998</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 08:33:46 -0700</bug_when>
    <thetext>Created attachment 427998
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757883</commentid>
    <comment_count>4</comment_count>
      <attachid>428001</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 09:05:56 -0700</bug_when>
    <thetext>Created attachment 428001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757926</commentid>
    <comment_count>5</comment_count>
      <attachid>428012</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 11:10:47 -0700</bug_when>
    <thetext>Created attachment 428012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757980</commentid>
    <comment_count>6</comment_count>
      <attachid>428027</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 13:34:21 -0700</bug_when>
    <thetext>Created attachment 428027
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757991</commentid>
    <comment_count>7</comment_count>
      <attachid>428031</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 14:04:49 -0700</bug_when>
    <thetext>Created attachment 428031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758093</commentid>
    <comment_count>8</comment_count>
      <attachid>428060</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 16:39:28 -0700</bug_when>
    <thetext>Created attachment 428060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758108</commentid>
    <comment_count>9</comment_count>
      <attachid>428060</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-05-07 17:06:20 -0700</bug_when>
    <thetext>Comment on attachment 428060
Patch

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

&gt; Source/WTF/ChangeLog:10
&gt; +        Add new helper to allow making UniqueRefs in a slight easier manner than always friending.

typo: slightly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758110</commentid>
    <comment_count>10</comment_count>
      <attachid>428060</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-07 17:11:03 -0700</bug_when>
    <thetext>Comment on attachment 428060
Patch

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

&gt; Source/WTF/wtf/UniqueRef.h:88
&gt; +    template&lt;class U&gt; friend UniqueRef&lt;U&gt; makeUniqueRefFromReference(U&amp;);

This needs &quot;adopt&quot; in its name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758120</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 17:35:15 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; Comment on attachment 428060 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=428060&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/UniqueRef.h:88
&gt; &gt; +    template&lt;class U&gt; friend UniqueRef&lt;U&gt; makeUniqueRefFromReference(U&amp;);
&gt; 
&gt; This needs &quot;adopt&quot; in its name.

WTF::makeUniqueRefAdoptingReference()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758122</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 17:43:16 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #11)
&gt; (In reply to Darin Adler from comment #10)
&gt; &gt; Comment on attachment 428060 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=428060&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/UniqueRef.h:88
&gt; &gt; &gt; +    template&lt;class U&gt; friend UniqueRef&lt;U&gt; makeUniqueRefFromReference(U&amp;);
&gt; &gt; 
&gt; &gt; This needs &quot;adopt&quot; in its name.
&gt; 
&gt; WTF::makeUniqueRefAdoptingReference()?

WTF::adoptReferenceMakingUniqueRef()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758123</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 17:43:36 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #12)
&gt; (In reply to Sam Weinig from comment #11)
&gt; &gt; (In reply to Darin Adler from comment #10)
&gt; &gt; &gt; Comment on attachment 428060 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=428060&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WTF/wtf/UniqueRef.h:88
&gt; &gt; &gt; &gt; +    template&lt;class U&gt; friend UniqueRef&lt;U&gt; makeUniqueRefFromReference(U&amp;);
&gt; &gt; &gt; 
&gt; &gt; &gt; This needs &quot;adopt&quot; in its name.
&gt; &gt; 
&gt; &gt; WTF::makeUniqueRefAdoptingReference()?
&gt; 
&gt; WTF::adoptReferenceMakingUniqueRef()?

Going to go with the latter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1758124</commentid>
    <comment_count>14</comment_count>
      <attachid>428067</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-07 17:46:02 -0700</bug_when>
    <thetext>Created attachment 428067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759923</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-13 17:18:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/77995159&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427963</attachid>
            <date>2021-05-06 17:23:53 -0700</date>
            <delta_ts>2021-05-06 17:38:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210506172352.patch</filename>
            <type>text/plain</type>
            <size>109202</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA2ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW09wZW5TU0xdIEltcGxlbWVudCBDcnlwdG9BbGdv
cml0aG1SU0EqCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNl
L1dURi93dGYvVW5pcXVlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDEzIEBAIFVu
aXF1ZVJlZjxUPiBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK1VuaXF1ZVJlZjxUPiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZShUJiByZWZl
cmVuY2UpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgVDo6d2Vi
a2l0RmFzdE1hbGxvY2VkLCBpbnQ+Ojp2YWx1ZSwgIlQgaXMgRmFzdE1hbGxvY2VkIik7CisgICAg
cmV0dXJuIFVuaXF1ZVJlZjxUPihyZWZlcmVuY2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgVW5pcXVlUmVmIHsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
QEAgLTc4LDYgKzg1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxjbGFzcyBV
LCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZXaXRob3V0
RmFzdE1hbGxvY0NoZWNrKEFyZ3MmJi4uLik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5k
IFVuaXF1ZVJlZjxVPiBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3RkOjp1bmlx
dWVfcHRyPFU+KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1h
a2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFUmKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmll
bmQgY2xhc3MgVW5pcXVlUmVmOwogCiAgICAgVW5pcXVlUmVmKFQmIG90aGVyKQpAQCAtOTUsMyAr
MTAzLDQgQEAgdXNpbmcgV1RGOjpVbmlxdWVSZWY7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVSZWY7
CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrOwogdXNpbmcg
V1RGOjptYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHI7Cit1c2luZyBXVEY6Om1ha2VV
bmlxdWVSZWZGcm9tUmVmZXJlbmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MTQyKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY0
IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlzIG5vbi1udWxsIGluIENhbnZhc0Jh
c2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTQ5
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBd
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVh
bVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRy
YWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L0dQ
VUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2FudmFzQ29udGV4dDo6
Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250ZXh0Lmg6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZh
c1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFs
dWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6Y2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogY3Nz
L0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVu
dCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6fkNh
bnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJhd2luZ0NvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJlbmRlcmluZ1Jlc3Vs
dHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWVtb3J5Q29zdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0aXZlSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpz
ZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRlc3Ryb3lJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6On5D
dXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6
Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6cmVwbGF5
RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGll
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGll
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNw
bGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp+SFRNTENh
bnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRl
eHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dDJk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2Vi
R0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJH
TCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdl
YkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dFdl
YkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4
dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpn
ZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWlu
dHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNH
UFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0
U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5z
ZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVkQnlPZmZzY3JlZW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpj
bGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2NyZWVuQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9m
ZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3Jl
YXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Z2V0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9J
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xk
ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpyZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05vbmUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllciBj
b25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QYWlu
dFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWludFJlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QYWludFJlbmRlcmlu
Z0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW52YXNJZkNvbnRl
eHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6aXNE
ZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52YXNBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0Fy
Z3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0
aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVj
b3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZp
bmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxD
YW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJl
cGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKwogMjAyMS0w
NS0wNiAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0c3VrYXdhQHNvbnkuY29tPgog
CiAgICAgICAgIFtPcGVuU1NMXSBJbXBsZW1lbnQgQ3J5cHRvQWxnb3JpdGhtUlNBKgpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEzMjAsNyBAQCBodG1sL2NhbnZhcy9DYW52
YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAogaHRtbC9jYW52YXMv
RVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVk
aWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDI3
NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVy
ZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjazo6U291cgogICAgIC8vIFdlIHNob3Vs
ZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9yIGJvdGggMmQgYW5kIDNkIGNvbnRleHRz
IHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50LgogICAgIC8vIEFuZCBjYWxsIGNhbnZh
cyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKSkgewotICAgICAgICBhdXRvJiBj
b250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNhbnZhcy5yZW5k
ZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAgICAg
IGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5nQnVmZmVyKCkpIHsKICAgICAgICAgICAg
IGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJUdXJuaW5nIGRyYXdpbmcgYnVm
ZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNhbnZhcyBiZWluZyBjYXB0dXJlZCJfcyk7
CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEdQVUNhbnZh
c0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BVQ2FudmFzQ29udGV4dD4gR1BVQ2FudmFz
Q29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK1VuaXF1ZVJlZjxHUFVDYW52YXND
b250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQogewot
ICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PihuZXcg
R1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVl
UmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXNDb250ZXh0KGNhbnZhcykpOwogICAgIGNv
bnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBjb250ZXh0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuaAko
cmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2Fu
dmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBXZWJH
UFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dCBmaW5hbCA6IHB1
YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAgIHN0YXRp
YyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKIAogICAg
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxIVE1M
Q2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcxNDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE0MjgxLDYgKzE0MjgxLDggQEAKIAkJQkM4MjQzMjYwRDBDRThBMjAw
NDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVh
dHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93RmVhdHVyZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFD
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRG
NDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxh
YmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxh
YmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJFQTA5
NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMDk4LDggQEAKIAkJCQkzMTQwQzUyMjFGREYz
MTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oICovLAogCQkJCUJD
RTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5n
cy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAqLywKKwkJCQlCQzg0RjQzRDI2NDFBQ0My
MDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JB
RDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5
M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3RhdGUuaWRsICovLAogCQkJCTQ5NDg0RkJG
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCkBAIC0zMTQyNiw3ICszMTQz
MCw2IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJy
YXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyog
QW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0NDlEODY0RjI2NDBDOUM1MDAw
MTIyREUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0
MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVu
dEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUsNiArMzI2NDgsNyBAQAogCQkJCTQ0MzBE
MDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
Q0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNp
YmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyog
SGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8q
IEhpc3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc0MUQxMTBCMDcyNTlB
MDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4
ODcsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhGMTFERSAvKiBTY3JpcHREaXNhbGxvd2Vk
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThBRUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4
MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlF
NEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVk
U2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQw
OURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMTIy
M0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIwMiw3IEBACiAJCQkJRTQ5NDZFQUYxNTZF
NjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBTdHlsZVNjb3Bl
UnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAv
KiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlENjM4MDEwMUFG
MTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkocmV2aXNpb24gMjc3MTQy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NT
Q2FudmFzVmFsdWUuaCIKIAorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENTU0NhbnZhc1Zh
bHVlOjp+Q1NTQ2FudmFzVmFsdWUoKQogewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1f
ZWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CisgICAgaWYgKG1fY2Fu
dmFzKQorICAgICAgICBtX2NhbnZhcy0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7
CiB9CiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC00
MSw1MyArNDIsNTMgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgYwog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCItd2Via2l0LWNhbnZhcygiLCBtX25hbWUsICcpJyk7CiB9
CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQm
LCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFz
VmFsdWU6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVj
dD4mIGNoYW5nZWRSZWN0KQogewogICAgIGlmICghY2hhbmdlZFJlY3QpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8gaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2Vk
UmVjdC52YWx1ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjbGllbnRzKCkuYmVnaW4oKSwgZW5k
ID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5rZXktPmlt
YWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFu
Z2VSZWN0KTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogY2xpZW50cygpLnZhbHVlcygpKQorICAg
ICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRo
aXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFz
UmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNS
ZXNpemVkKENhbnZhc0Jhc2UmKQogewotICAgIGZvciAoYXV0byBpdCA9IGNsaWVudHMoKS5iZWdp
bigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwor
ICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCkudmFsdWVzKCkpCisgICAgICAgIGNsaWVu
dC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQog
Ci12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQm
IGVsZW1lbnQpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFz
ZSYgY2FudmFzKQogewotICAgIEFTU0VSVF9VTlVTRUQoJmVsZW1lbnQsICZlbGVtZW50ID09IG1f
ZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKKyAgICBBU1NFUlRfVU5VU0VEKCZj
YW52YXMsICZjYW52YXMgPT0gbV9jYW52YXMpOworICAgIG1fY2FudmFzID0gbnVsbHB0cjsKIH0K
IAogRmxvYXRTaXplIENTU0NhbnZhc1ZhbHVlOjpmaXhlZFNpemUoY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50
KHJlbmRlcmVyLmRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKGVsdC0+d2lk
dGgoKSwgZWx0LT5oZWlnaHQoKSk7CisgICAgaWYgKGF1dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZh
cyhyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShjYW52YXMt
PndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUhUTUxD
YW52YXNFbGVtZW50KiBDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
CitDYW52YXNCYXNlKiBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICAgaWYgKCFtX2VsZW1lbnQpIHsKLSAgICAgICAgbV9lbGVtZW50ID0gZG9jdW1lbnQu
Z2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOwotICAgICAgICBpZiAoIW1fZWxlbWVudCkKKyAg
ICAgaWYgKCFtX2NhbnZhcykgeworICAgICAgICBtX2NhbnZhcyA9IGRvY3VtZW50LmdldENTU0Nh
bnZhc0VsZW1lbnQobV9uYW1lKTsKKyAgICAgICAgaWYgKCFtX2NhbnZhcykKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBtX2VsZW1lbnQtPmFkZE9ic2VydmVyKG1fY2FudmFz
T2JzZXJ2ZXIpOworICAgICAgICBtX2NhbnZhcy0+YWRkT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZl
cik7CiAgICAgfQotICAgIHJldHVybiBtX2VsZW1lbnQ7CisgICAgcmV0dXJuIG1fY2FudmFzOwog
fQogCiBSZWZQdHI8SW1hZ2U+IENTU0NhbnZhc1ZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiAvKnNpemUqLykKIHsKICAgICBBU1NFUlQoY2xpZW50
cygpLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQtPmJ1ZmZlcigpKQorICAgIGF1dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZhcyhy
ZW5kZXJlci5kb2N1bWVudCgpKTsKKyAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmNvcGllZElt
YWdlKCk7CisgICAgcmV0dXJuIGNhbnZhcy0+Y29waWVkSW1hZ2UoKTsKIH0KIAogYm9vbCBDU1ND
YW52YXNWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NhbnZhc1ZhbHVlJiBvdGhlcikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1
ZGUgIkNhbnZhc0Jhc2UuaCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyArNDQs
NyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICBGbG9hdFNpemUgZml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKIAotICAg
IEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9
CisgICAgQ2FudmFzQmFzZSogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0KIAog
ICAgIGJvb2wgaXNQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGxv
YWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmKSB7IH0KQEAgLTY4LDE4ICs2NywxNSBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIGNvbnN0IE9w
dGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KSBmaW5hbAogICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAg
ICAgIG1fb3duZXJWYWx1ZS5jYW52YXNDaGFuZ2VkKGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50
PihjYW52YXNCYXNlKSwgY2hhbmdlZFJlY3QpOworICAgICAgICAgICAgbV9vd25lclZhbHVlLmNh
bnZhc0NoYW5nZWQoY2FudmFzQmFzZSwgY2hhbmdlZFJlY3QpOwogICAgICAgICB9CiAgICAgICAg
IHZvaWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJiBjYW52YXNCYXNlKSBmaW5hbAogICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2Up
KTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNSZXNpemVkKGRvd25jYXN0PEhUTUxD
YW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7CisgICAgICAgICAgICBtX293bmVyVmFsdWUuY2Fu
dmFzUmVzaXplZChjYW52YXNCYXNlKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIGNhbnZhc0Rl
c3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXNCYXNlKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAg
ICAgIG1fb3duZXJWYWx1ZS5jYW52YXNEZXN0cm95ZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNEZXN0cm95
ZWQoY2FudmFzQmFzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBDU1NDYW52YXNWYWx1ZSYgbV9v
d25lclZhbHVlOwpAQCAtOTMsMTggKzg5LDE4IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAot
ICAgIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IE9wdGlvbmFs
PEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoSFRNTENh
bnZhc0VsZW1lbnQmKTsKLSAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVu
dCYpOworICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiwgY29uc3QgT3B0aW9uYWw8
RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOworICAgIHZvaWQgY2FudmFzUmVzaXplZChDYW52YXNC
YXNlJik7CisgICAgdm9pZCBjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYpOwogCi0gICAgSFRN
TENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoRG9jdW1lbnQmKTsKKyAgICBDYW52YXNCYXNlKiBjYW52
YXMoRG9jdW1lbnQmKTsKIAogICAgIENhbnZhc09ic2VydmVyUHJveHkgbV9jYW52YXNPYnNlcnZl
cjsKIAogICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBjYW52YXMuCiAgICAgU3RyaW5nIG1fbmFtZTsK
LSAgICAvLyBUaGUgZG9jdW1lbnQgc3VwcGxpZXMgdGhlIGVsZW1lbnQgYW5kIG93bnMgaXQuCi0g
ICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fZWxlbWVudCB7IG51bGxwdHIgfTsKKyAgICAvLyBUaGUg
ZG9jdW1lbnQgc3VwcGxpZXMgdGhlIGNhbnZhcyBhbmQgb3ducyBpdC4KKyAgICBDYW52YXNCYXNl
KiBtX2NhbnZhcyB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHJl
dmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIkNTU0lt
YWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NOYW1lZEltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQYWludEltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDYW52YXNCYXNlLmgiCiAjaW5jbHVkZSAi
R2VuZXJhdGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKIApAQCAtNzQsOCArNzQsOCBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENs
aWVudChSCiAgICAgbV9jbGllbnRzLmFkZCgmcmVuZGVyZXIpOwogCiAgICAgaWYgKGlzPENTU0Nh
bnZhc1ZhbHVlPih0aGlzKSkgewotICAgICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
c0VsZW1lbnQgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmVsZW1lbnQoKSkKLSAg
ICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xp
ZW50Tm9kZXMoKmNhbnZhc0VsZW1lbnQpOworICAgICAgICBpZiAoYXV0byogY2FudmFzID0gZG93
bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5jYW52YXMoKSkKKyAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZh
cyk7CiAgICAgfQogfQogCkBAIC04Niw4ICs4Niw4IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZTo6cmVtb3ZlQ2xpZW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzPENTU0NhbnZh
c1ZhbHVlPih0aGlzKSkgewotICAgICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0Vs
ZW1lbnQgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50
Tm9kZXMoKmNhbnZhc0VsZW1lbnQpOworICAgICAgICBpZiAoYXV0byogY2FudmFzID0gZG93bmNh
c3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5jYW52YXMoKSkKKyAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhcyk7
CiAgICAgfQogCiAgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ2FudmFzQmFzZS5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ2FudmFzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgpAQCAtNTEsNyArNTIsOCBAQCBjb25zdCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBkZWZh
dWx0SW50ZXJwCiAjZW5kaWYKIAogQ2FudmFzQmFzZTo6Q2FudmFzQmFzZShJbnRTaXplIHNpemUp
Ci0gICAgOiBtX3NpemUoc2l6ZSkKKyAgICA6IG1fc2l6ZSB7IHNpemUgfQorICAgICwgbV9jb250
ZXh0IHsgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZSgqdGhpcykgfQogewogfQog
CkBAIC01OSwxMyArNjEsMTMgQEAgQ2FudmFzQmFzZTo6fkNhbnZhc0Jhc2UoKQogewogICAgIEFT
U0VSVChtX2RpZE5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCk7CiAgICAgQVNTRVJUKG1f
b2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKKworICAg
IGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIENhbnZhc0Jhc2U6
OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5n
Q29udGV4dCgpOwotICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pczJkKCkgJiYgIWNvbnRl
eHQtPmlzT2Zmc2NyZWVuMmQoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+aXMyZCgpICYmICFtX2Nv
bnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXR1cm4gYnVmZmVyKCkgPyAmbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogbnVsbHB0cjsKQEAg
LTk0LDggKzk2LDcgQEAgQWZmaW5lVHJhbnNmb3JtIENhbnZhc0Jhc2U6OmJhc2VUcmFuc2Zvcgog
CiB2b2lkIENhbnZhc0Jhc2U6Om1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCkKIHsKLSAg
ICBpZiAoYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9CiAKIHNpemVfdCBDYW52YXNCYXNlOjptZW1v
cnlDb3N0KCkgY29uc3QKQEAgLTEwMyw3ICsxMDQsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6bWVt
b3J5Q29zdCgpIGNvbnN0CiAgICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFu
Z2VkIHdoaWxlIHdlIGFjY2VzcyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1h
Z2VCdWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZm
ZXJBc3NpZ25tZW50TG9jayB9OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPm1lbW9yeUNvc3QoKTsKQEAgLTExNCw3
ICsxMTUsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgCiAgICAg
Ly8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20g
YSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKICAgICAvLyBhYm91dCB3aGF0
IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4gV2UgbmVlZCB0byBob2xkIGEgbG9jayB0byBw
cmV2ZW50IG1faW1hZ2VCdWZmZXIKICAgICAvLyBmcm9tIGJlaW5nIGNoYW5nZWQgd2hpbGUgd2Ug
YWNjZXNzIGl0LgotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckFzc2ln
bm1lbnRMb2NrKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRM
b2NrIH07CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlci0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7CkBAIC0xODAsMTUgKzE4
MSwxOSBAQCBIYXNoU2V0PEVsZW1lbnQqPiBDYW52YXNCYXNlOjpjc3NDYW52YXNDCiAKIGJvb2wg
Q2FudmFzQmFzZTo6aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0CiB7
Ci0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29u
dGV4dCAmJiBjb250ZXh0LT5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCk7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigp
OworfQorCit2b2lkIENhbnZhc0Jhc2U6OnNldFJlbmRlcmluZ0NvbnRleHQoVW5pcXVlUmVmPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ+JiYgY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHQgPSBXVEZN
b3ZlKGNvbnRleHQpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpIGNvbnN0CitSZWZQdHI8SW1h
Z2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4m
JiBidWZmZXIpCiB7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiByZXR1cm5CdWZmZXI7CiAgICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50
TG9jayk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExv
Y2sgfTsKICAgICAgICAgbV9jb250ZXh0U3RhdGVTYXZlciA9IG51bGxwdHI7CiAgICAgICAgIHJl
dHVybkJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwgV1RGTW92ZShidWZmZXIp
KTsKICAgICB9CkBAIC0yMDAsOSArMjA1LDggQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNC
YXNlOjpzZXRJbWFnZQogICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gbWVtb3J5Q29zdCgpOwogICAg
IHNfYWN0aXZlUGl4ZWxNZW1vcnkgKz0gbV9pbWFnZUJ1ZmZlckNvc3QgLSBwcmV2aW91c01lbW9y
eUNvc3Q7CiAKLSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlm
IChjb250ZXh0ICYmIG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1h
Z2VCdWZmZXJDb3N0KQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5n
ZUNhbnZhc01lbW9yeSgqY29udGV4dCk7CisgICAgaWYgKCFtX2NvbnRleHQtPmlzTm9uZSgpICYm
IG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1hZ2VCdWZmZXJDb3N0
KQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNhbnZhc01lbW9y
eShtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKICAgICAgICAg
bV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUp
OwpAQCAtMjE3LDYgKzIyMSwyMCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNl
dEltYWdlCiAgICAgcmV0dXJuIHJldHVybkJ1ZmZlcjsKIH0KIAordm9pZCBDYW52YXNCYXNlOjpk
ZXN0cm95SW1hZ2VCdWZmZXIoKQoreworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gb2xkQnVmZmVy
OworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1l
bnRMb2NrIH07CisgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOworICAgICAg
ICBvbGRCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIG51bGxwdHIpOworICAg
IH0KKyAgICAKKyAgICBzX2FjdGl2ZVBpeGVsTWVtb3J5IC09IG1faW1hZ2VCdWZmZXJDb3N0Owor
ICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gMDsKK30KKwogc2l6ZV90IENhbnZhc0Jhc2U6OmFjdGl2
ZVBpeGVsTWVtb3J5KCkKIHsKICAgICByZXR1cm4gc19hY3RpdmVQaXhlbE1lbW9yeS5sb2FkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAkocmV2aXNpb24gMjc3MTQyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcwLDcgKzcxLDYgQEAgcHVibGljOgogICAgIGNvbnN0
IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIEltYWdlQnVm
ZmVyKiBidWZmZXIoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIHZvaWQgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFi
bGUoKTsKQEAgLTg1LDcgKzg1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyAgfQogCi0gICAgdmlydHVhbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgPSAwOworICAg
IGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBy
ZW5kZXJpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICB2b2lk
IGFkZE9ic2VydmVyKENhbnZhc09ic2VydmVyJik7CiAgICAgdm9pZCByZW1vdmVPYnNlcnZlcihD
YW52YXNPYnNlcnZlciYpOwpAQCAtMTAwLDggKzEwMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWREcmF3KGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlKiBjb3BpZWRJ
bWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpID0gMDsKIAog
ICAgIGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0OwogCkBA
IC0xMTIsNyArMTEzLDEwIEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQogCi0gICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UmVuZGVyaW5nQ29udGV4dChVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dD4mJik7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4mJik7CisgICAgdm9pZCBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICBzdGF0aWMgc2l6ZV90IGFjdGl2ZVBpeGVsTWVtb3J5KCk7CiAKQEAgLTEyNyw2ICsx
MzEsOCBAQCBwcml2YXRlOgogICAgIG11dGFibGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsg
MCB9OwogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXI+IG1fY29udGV4dFN0YXRlU2F2ZXI7CiAKKyAgICBVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dD4gbV9jb250ZXh0OworCiAgICAgYm9vbCBtX29yaWdpbkNsZWFuIHsgdHJ1ZSB9Owog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2RpZE5vdGlmeU9ic2VydmVyc0NhbnZhc0Rl
c3Ryb3llZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0
b21QYWludENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDQ1ICs0OCw0MiBAQCBDdXN0
b21QYWludENhbnZhczo6Q3VzdG9tUGFpbnRDYW52YXMoU2NyCiBDdXN0b21QYWludENhbnZhczo6
fkN1c3RvbVBhaW50Q2FudmFzKCkKIHsKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95
ZWQoKTsKLQotICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdh
eSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwog
fQogCiBFeGNlcHRpb25PcjxSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+PiBDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCgpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAg
cmV0dXJuIHsgUmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgIGlmICghcmVuZGVyaW5n
Q29udGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJp
bmdDb250ZXh0KCkpIH0gfTsKIAotICAgIG1fY29udGV4dCA9IFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMpOwotICAgIGRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHRydWUpOworICAgIGF1dG8g
Y29udGV4dCA9IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMpOworICAgIGNv
bnRleHQtPnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7CisgICAgc2V0UmVuZGVyaW5n
Q29udGV4dChXVEZNb3ZlKGNvbnRleHQpKTsKIAotICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJl
bmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpIH0gfTsKKyAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0
KCkpIH0gfTsKIH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6cmVwbGF5RGlzcGxheUxpc3Qo
R3JhcGhpY3NDb250ZXh0KiBjdHgpIGNvbnN0Cit2b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGN0eCkKIHsKICAgICBBU1NFUlQoIW1fZGVz
dGluYXRpb25HcmFwaGljc0NvbnRleHQpOwogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBVc2luZyBhbiBpbnRlcm1lZGlhdGUg
YnVmZmVyIGlzIG5vdCBuZWVkZWQgaWYgdGhlcmUgYXJlIG5vIGNvbXBvc2l0ZSBvcGVyYXRpb25z
LgotICAgIGF1dG8gY2xpcEJvdW5kcyA9IGN0eC0+Y2xpcEJvdW5kcygpOworICAgIGF1dG8gY2xp
cEJvdW5kcyA9IGN0eC5jbGlwQm91bmRzKCk7CiAKLSAgICBhdXRvIGltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY2xpcEJvdW5kcy5zaXplKCksICpjdHgpOworICAg
IGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91
bmRzLnNpemUoKSwgY3R4KTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gJmltYWdlLT5jb250ZXh0KCk7CiAgICAg
bV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1jbGlwQm91bmRzLmxvY2F0
aW9uKCkpOwotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0
ID0gbnVsbHB0cjsKIAotICAgIGN0eC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5k
cyk7CisgICAgY3R4LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2UsIGNsaXBCb3VuZHMpOwogfQogCi1J
bWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKK0ltYWdlKiBDdXN0
b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKQogewogICAgIEFTU0VSVCghbV9kZXN0aW5hdGlv
bkdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKQEAgLTk3
LDE1ICs5NCwxNCBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4
dCA9ICZtX2NvcGllZEJ1ZmZlci0+Y29udGV4dCgpOwotICAgIGlmIChtX2NvbnRleHQpCi0gICAg
ICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICByZW5k
ZXJpbmdDb250ZXh0KCkucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rl
c3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAogICAgIG1fY29waWVkSW1hZ2Ug
PSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb246Olllcyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAK
LXZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdAordm9pZCBD
dXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFn
ZSA9IG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZh
cy5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE3ICs1NSwxNiBAQCBwdWJsaWM6CiAKICAg
ICBFeGNlcHRpb25PcjxSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+PiBnZXRDb250ZXh0
KCk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29udGV4dCogZXhp
c3RpbmdEcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBkaWREcmF3KGNv
bnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSBmaW5hbCB7IH0KIAogICAgIEFmZmluZVRyYW5zZm9y
bSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgZmluYWwgeyBBU1NFUlQobV9kZXN0aW5hdGlvbkdyYXBo
aWNzQ29udGV4dCAmJiBtX2NvcGllZEJ1ZmZlcik7IHJldHVybiBtX2NvcGllZEJ1ZmZlci0+YmFz
ZVRyYW5zZm9ybSgpOyB9Ci0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2UqIGNvcGll
ZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7CiAKLSAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZv
aWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICB1c2luZyBSZWZD
b3VudGVkOjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CkBAIC03Nyw3ICs3Niw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXJlZkNhbnZhc0Jhc2UoKSBmaW5hbCB7IGRlcmVmKCk7
IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgbXV0YWJsZSBHcmFwaGljc0NvbnRl
eHQqIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogICAgIG11dGFibGUg
UmVmUHRyPEltYWdlQnVmZmVyPiBtX2NvcGllZEJ1ZmZlcjsKICAgICBtdXRhYmxlIFJlZlB0cjxJ
bWFnZT4gbV9jb3BpZWRJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDkgKzE1Niw2IEBAIEhU
TUxDYW52YXNFbGVtZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQoKQogICAgIC8vIGF2b2lkZWQgaW4g
ZGVzdHJ1Y3RvcnMsIGJ1dCB3b3JrcyBhcyBsb25nIGFzIGl0J3MgZG9uZSBiZWZvcmUgSFRNTENh
bnZhc0VsZW1lbnQgZGVzdHJ1Y3RzIGNvbXBsZXRlbHkuCiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2Fu
dmFzRGVzdHJveWVkKCk7CiAgICAgZG9jdW1lbnQoKS5jbGVhckNhbnZhc1ByZXBhcmF0aW9uKCp0
aGlzKTsKLQotICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdh
eSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwog
fQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAgLTIzOSw0NSArMjM2LDQ1
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldE1heFBpeGVsTWVtb3IKIAogRXhjZXB0aW9u
T3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250
ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCwg
VmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKQogewotICAgIGlm
IChtX2NvbnRleHQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXNQbGFjZWhvbGRlcigpKQor
ICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKSB7CisgICAgICAgIGlmIChyZW5k
ZXJpbmdDb250ZXh0KCkuaXNQbGFjZWhvbGRlcigpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXMy
ZCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpKSB7CiAgICAgICAg
ICAgICBpZiAoIWlzMmRUeXBlKGNvbnRleHRJZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPiB7ICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpIH0gfTsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7
IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobV9jb250ZXh0LT5pc0JpdG1hcFJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJl
bmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmICgh
aXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4o
Km1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0Nv
bnRleHQ+IHsgUmVmUHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dl
YkdMKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKICAg
ICAgICAgICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKICAgICAg
ICAgICAgIGF1dG8gdmVyc2lvbiA9IHRvV2ViR0xWZXJzaW9uKGNvbnRleHRJZCk7Ci0gICAgICAg
ICAgICBpZiAodmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5p
c1dlYkdMMSgpKQorICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJH
TDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAg
ICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgbV9jb250ZXh0LT5p
c1dlYkdMMSgpKQorICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpXZWJH
TDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2Nv
bnRleHQpIH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJl
bmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRl
cmluZ0NvbnRleHQ+IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICNpZiBFTkFC
TEUoV0VCR0wyKQotICAgICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KCptX2NvbnRleHQpKTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICBBU1NFUlQoaXM8
V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSk7CisgICAgICAgICAg
ICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVy
aW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5n
Q29udGV4dCgpKSB9IH07CiAjZW5kaWYKICAgICAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0VCR1BVKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dlYkdQVSgpKSB7CisgICAgICAgIGlm
IChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkgewogICAgICAgICAgICAgaWYgKCFpc1dl
YkdQVVR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVu
ZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZkb3du
Y2FzdDxHUFVDYW52YXNDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8R1BVQ2FudmFzQ29udGV4dD4g
eyAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAg
ICAgICAgIH0KICNlbmRpZgogCkBAIC0zNjcsNyArMzY0LDcgQEAgYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6aXMyZFR5cGUoY29uc3QgUwogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VE
KEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZSh0eXBlKSwgdHlwZSk7Ci0gICAgQVNTRVJUKCFt
X2NvbnRleHQpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCiAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSBtb3JlIHBpeGVsIG1lbW9yeSB0aGFuIHRoZSBz
eXN0ZW0gY2FuIHN1cHBvcnQuCiAgICAgc2l6ZV90IHJlcXVlc3RlZFBpeGVsTWVtb3J5ID0gNCAq
IHdpZHRoKCkgKiBoZWlnaHQoKTsKQEAgLTM4MCwyNiArMzc3LDI3IEBAIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUoc2V0dGluZ3MpLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKKyAgICBz
ZXRSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlz
LCBXVEZNb3ZlKHNldHRpbmdzKSwgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSkpOwogCiAjaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBOZWVkIHRvIG1ha2Ug
c3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3Ig
dGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAj
ZW5kaWYKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
PihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBl
LCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFT
U0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUpLCB0eXBlKTsKIAot
ICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMyZCgpKQorICAgIGlmIChyZW5kZXJp
bmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0MmQodHlw
ZSwgV1RGTW92ZShzZXR0aW5ncykpOworCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXMy
ZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAg
ICAgICByZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0
LmdldCgpKTsKKyAgICByZXR1cm4gJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2lmIEVOQUJMRShXRUJHTCkKQEAgLTQ0OCw3ICs0
NDYsNyBAQCBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbiBIVE1MQ2FudmFzCiAKIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2Vi
R0woV2ViR0xWZXJzaW9uIHR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBhdHRycykKIHsK
LSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5p
c05vbmUoKSk7CiAKICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDY1LDIwICs0NjMsMjQgQEAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0VsZQogCiAgICAgLy8gVE9ETyhXRUJY
Uik6IGVuc3VyZSB0aGUgY29udGV4dCBpcyBjcmVhdGVkIGluIGEgY29tcGF0aWJsZSBncmFwaGlj
cwogICAgIC8vIGFkYXB0ZXIgd2hlbiB0aGVyZSBpcyBhbiBhY3RpdmUgaW1tZXJzaXZlIGRldmlj
ZS4KLSAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoKnRo
aXMsIGF0dHJzLCB0eXBlKTsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIFRoaXMg
bmV3IGNvbnRleHQgbmVlZHMgdG8gYmUgb2JzZXJ2ZWQgYnkgdGhlIERvY3VtZW50LCBpbiBvcmRl
cgotICAgICAgICAvLyBmb3IgaXQgdG8gYmUgY29ycmVjdGx5IHByZXBhcmVkRm9yUmVuZGVyaW5n
IGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgotICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgp
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUo
KnRoaXMsIGF0dHJzLCB0eXBlKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChtYWtlVW5pcXVlUmVmRnJvbU5vbk51
bGxVbmlxdWVQdHIoV1RGTW92ZShjb250ZXh0KSkpOworCisgICAgLy8gVGhpcyBuZXcgY29udGV4
dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBieSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCisgICAgLy8g
Zm9yIGl0IHRvIGJlIGNvcnJlY3RseSBwcmVwYXJlZEZvclJlbmRlcmluZyBiZWZvcmUgaXQgaXMg
Y29tcG9zaXRlZC4KKyAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKKworICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVh
dGVkIGZvciB0aGUgQ2FudmFzLgorICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKIAotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBj
b21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KLSAgICAgICAgaW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogI2lmIEVOQUJMRShXRUJYUikKLSAg
ICAgICAgQVNTRVJUKCFhdHRycy54ckNvbXBhdGlibGUgfHwgZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKS0+aXNYUkNvbXBhdGlibGUoKSk7CisgICAg
QVNTRVJUKCFhdHRycy54ckNvbXBhdGlibGUgfHwgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKS5pc1hSQ29tcGF0aWJsZSgpKTsKICNlbmRpZgot
ICAgIH0KIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJHTChXZWJHTFZlcnNpb24gdHlw
ZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQpAQCAtNDg2LDIxICs0ODgsMjAgQEAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0VsZQogICAgIGlmICghc2hvdWxk
RW5hYmxlV2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5pc1dl
YkdMKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocmVuZGVyaW5nQ29u
dGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gY3JlYXRlQ29udGV4dFdlYkdMKHR5cGUs
IFdURk1vdmUoYXR0cnMpKTsKIAotICAgICAgICAvLyBUaGUgcGhyYXNpbmcgb2YgdGhlc2UgY2hl
Y2tzIGF2b2lkcyBjb21waWxlLXRpbWUgZ3VhcmRzIGZvciBXZWJHTDIgc3VwcG9ydC4KLSAgICAg
ICAgaWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJH
TDEoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghcmVuZGVyaW5nQ29u
dGV4dCgpLmlzV2ViR0woKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYg
KHR5cGUgIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgbV9jb250ZXh0LT5pc1dlYkdMMSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIC8vIFRoZSBwaHJhc2luZyBv
ZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBpbGUtdGltZSBndWFyZHMgZm9yIFdlYkdMMiBzdXBw
b3J0LgorICAgIGlmICh0eXBlID09IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmICFyZW5kZXJpbmdD
b250ZXh0KCkuaXNXZWJHTDEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
IW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHTCh0eXBlLCBXVEZN
b3ZlKGF0dHJzKSk7Ci0gICAgcmV0dXJuICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPigqbV9jb250ZXh0KTsKKyAgICBpZiAodHlwZSAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAm
JiByZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTDEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkBAIC01MTUsMTgg
KzUxNiwxNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5cGUoY29uCiBHUFVD
YW52YXNDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdQVShjb25z
dCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudDo6aXNXZWJHUFVUeXBlKHR5cGUpKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAg
QVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICBpZiAoIWRvY3VtZW50
KCkuc2V0dGluZ3MoKS53ZWJHUFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgbV9jb250ZXh0ID0gR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKCp0aGlzKTsKLSAgICBp
ZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgotICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7Ci0gICAgfQorICAgIHNl
dFJlbmRlcmluZ0NvbnRleHQoR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKCp0aGlzKSk7CiAKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQ2FudmFzQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7
CisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcg
bGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCisgICAgaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOworCisgICAgcmV0dXJuICZkb3duY2FzdDxHUFVDYW52YXNDb250
ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBHUFVDYW52YXNDb250ZXh0KiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Z2V0Q29udGV4dFdlYkdQVShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC01MzYs
MTIgKzUzNiwxMyBAQCBHUFVDYW52YXNDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAg
ICAgaWYgKCFkb2N1bWVudCgpLnNldHRpbmdzKCkud2ViR1BVRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXNXZWJH
UFUoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1
cm4gY3JlYXRlQ29udGV4dFdlYkdQVSh0eXBlKTsKKworICAgIGlmICghcmVuZGVyaW5nQ29udGV4
dCgpLmlzV2ViR1BVKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2Nv
bnRleHQpCi0gICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR1BVKHR5cGUpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpAQCAtNTU0LDI0ICs1NTUsMjkgQEAgYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlcgogSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVy
KGNvbnN0IFN0cmluZyYgdHlwZSwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mm
JiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50
Ojppc0JpdG1hcFJlbmRlcmVyVHlwZSh0eXBlKSk7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOwor
ICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCi0gICAgbV9jb250ZXh0
ID0gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0
dGluZ3MpKTsKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOwogCiAjaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJl
bmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZh
cy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAjZW5kaWYKIAot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqPihtX2Nv
bnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3Qg
U3RyaW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRp
bmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0
bWFwUmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICAKKyAgICBp
ZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gY3JlYXRlQ29u
dGV4dEJpdG1hcFJlbmRlcmVyKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgp
KTsKKyAgICAKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZkb3duY2FzdDxJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgcmVjdCkK
QEAgLTYxNSwxNCArNjIxLDE1IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAg
ICBpbnQgaCA9IGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oaGVpZ2h0QXR0ciksIGRlZmF1bHRIZWlnaHQpOwogCiAgICAgcmVzZXRHcmFw
aGljc0NvbnRleHRTdGF0ZSgpOwotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzZXQoKTsKIAogICAgIEludFNp
emUgb2xkU2l6ZSA9IHNpemUoKTsKICAgICBJbnRTaXplIG5ld1NpemUodywgaCk7CisKICAgICAv
LyBJZiB0aGUgc2l6ZSBvZiBhbiBleGlzdGluZyBidWZmZXIgbWF0Y2hlcywgd2UgY2FuIGp1c3Qg
Y2xlYXIgaXQgaW5zdGVhZCBvZiByZWFsbG9jYXRpbmcuCiAgICAgLy8gVGhpcyBvcHRpbWl6YXRp
b24gaXMgb25seSBkb25lIGZvciAyRCBjYW52YXNlcyBmb3Igbm93LgotICAgIGlmIChtX2hhc0Ny
ZWF0ZWRJbWFnZUJ1ZmZlciAmJiBvbGRTaXplID09IG5ld1NpemUgJiYgbV9jb250ZXh0ICYmIG1f
Y29udGV4dC0+aXMyZCgpICYmIGJ1ZmZlcigpICYmIG1fY29udGV4dC0+Y29sb3JTcGFjZSgpID09
IGJ1ZmZlcigpLT5jb2xvclNwYWNlKCkgJiYgbV9jb250ZXh0LT5waXhlbEZvcm1hdCgpID09IGJ1
ZmZlcigpLT5waXhlbEZvcm1hdCgpKSB7CisgICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
ICYmIG9sZFNpemUgPT0gbmV3U2l6ZSAmJiByZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpICYmIGJ1
ZmZlcigpICYmIHJlbmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNv
bG9yU3BhY2UoKSAmJiByZW5kZXJpbmdDb250ZXh0KCkucGl4ZWxGb3JtYXQoKSA9PSBidWZmZXIo
KS0+cGl4ZWxGb3JtYXQoKSkgewogICAgICAgICBpZiAoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcikK
ICAgICAgICAgICAgIGNsZWFySW1hZ2VCdWZmZXIoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjMx
LDcgKzYzOCw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICBzZXRTdXJm
YWNlU2l6ZShuZXdTaXplKTsKIAogICAgIGlmIChpc0dQVUJhc2VkKCkgJiYgb2xkU2l6ZSAhPSBz
aXplKCkpCi0gICAgICAgIGRvd25jYXN0PEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dD4o
Km1fY29udGV4dCkucmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIGRvd25jYXN0
PEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNo
YXBlKHdpZHRoKCksIGhlaWdodCgpKTsKIAogICAgIGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpOwogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcikpIHsKQEAgLTY1
MCwxMyArNjU3LDEyIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogYm9vbCBI
VE1MQ2FudmFzRWxlbWVudDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG1fY29udGV4dCk7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBpZiAobV9jb250ZXh0LT5pczJkKCkgfHwgbV9jb250ZXh0LT5pc0JpdG1hcFJlbmRl
cmVyKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkgfHwgcmVuZGVyaW5nQ29u
dGV4dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYK
IAotICAgIGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgaWYgKCFyZW5kZXJp
bmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGlmIChyZW5kZXJCb3goKSAmJiByZW5kZXJCb3goKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKQpAQCAtNjY4LDQyICs2NzQsMzUgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnRz
SW50b0NhbnZhcwogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHIpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkK
LSAgICAgICAgbV9jb250ZXh0LT5jbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KCk7CisgICAgcmVu
ZGVyaW5nQ29udGV4dCgpLmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKTsKIAogICAgIGlmICgh
Y29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAgYm9vbCBzaG91bGRQYWludCA9
IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAgICAgc2hvdWxkUGFp
bnQgPSBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgfHwgZG9jdW1lbnQoKS5wcmludGluZygpIHx8
IG1faXNTbmFwc2hvdHRpbmc7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUGFpbnQpIHsKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5V2l0aFBhaW50KCk7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgYm9vbCBzaG91bGRQYWludCA9IHBh
aW50c0ludG9DYW52YXNCdWZmZXIoKSB8fCBkb2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1Nu
YXBzaG90dGluZzsKICAgICAgICAgaWYgKHNob3VsZFBhaW50KSB7CisgICAgICAgICAgICByZW5k
ZXJpbmdDb250ZXh0KCkucHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKTsKKyAgICAgICAgICAg
IHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworCiAg
ICAgICAgICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCkpCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgc25hcHBlZEludFJlY3Qocikp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKG1f
Y29udGV4dCAmJiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIo
KSkpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVjb3JkaW5n
Q2FudmFzRnJhbWUoKm1fY29udGV4dCk7CisgICAgaWYgKFVOTElLRUxZKHJlbmRlcmluZ0NvbnRl
eHQoKS5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpKQorICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzR1BVQmFzZWQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc0dQVUJhc2Vk
KCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQoKS5pc0dQVUJhc2VkKCk7CiB9CiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgQ2FudmFzQmFzZTo6c2V0U2l6ZShzaXplKTsKICAgICBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciA9IGZhbHNlOwotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOworICAgIGNsZWFy
SW1hZ2VCdWZmZXIoKTsKICAgICBjbGVhckNvcGllZEltYWdlKCk7CiB9CiAKQEAgLTc5NSwxMSAr
Nzk0LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxDYW52YXNFbGVtZW50Ojp0b0IKICNpZiBF
TkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+
PiBIVE1MQ2FudmFzRWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQorICAgIGlmIChy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKLSAgICBpZiAobV9jb250ZXh0LT5pc0FjY2Vs
ZXJhdGVkKCkpCisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChQbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcykpOworCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkKCkpCiAgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKIAogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0LCAqdGhpcyk7
CkBAIC04MDksMTAgKzgwOSwxMCBAQCBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4g
SFRNTENhCiBSZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRh
KCkKIHsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KG1fY29udGV4dC5nZXQoKSkpIHsKKyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQog
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQo
ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlPigqbV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVy
aW5nQ29udGV4dCgpKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpAQCAtOTU4LDI1ICs5NTgsMTkgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIC8vIEZJWE1FOiBBZGQgYSBu
ZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCiAgICAgYXV0byB1
c2VEaXNwbGF5TGlzdCA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50
KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpID8gU2hvdWxkVXNlRGlz
cGxheUxpc3Q6OlllcyA6IFNob3VsZFVzZURpc3BsYXlMaXN0OjpObzsKIAotICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIHBpeGVsRm9ybWF0XSA9IFsmXSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV9jb250ZXh0LT5jb2xvclNwYWNlKCksIG1f
Y29udGV4dC0+cGl4ZWxGb3JtYXQoKSB9OwotICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTggfTsKLSAgICB9KCk7
Ci0KLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVy
aW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNhbnZhcywgMSwgY29s
b3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cpKTsKKyAgICBjb25zdF9jYXN0PEhUTUxD
YW52YXNFbGVtZW50Kj4odGhpcyktPnNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6
Q2FudmFzLCAxLCByZW5kZXJpbmdDb250ZXh0KCkuY29sb3JTcGFjZSgpLCByZW5kZXJpbmdDb250
ZXh0KCkucGl4ZWxGb3JtYXQoKSwgaG9zdFdpbmRvdykpOwogCiAgICAgaWYgKGJ1ZmZlcigpICYm
IGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQogICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlm
IChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKKyAgICBpZiAocmVuZGVyaW5nQ29u
dGV4dCgpLmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1
aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCiAgICAgICAgIGNvbnN0X2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21w
b3NpdGlvbigpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG1fY29udGV4dCAmJiBidWZmZXIo
KSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpKQorICAgIGlmICgh
cmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpICYmIGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5wcmVm
ZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZh
c0VsZW1lbnQqPih0aGlzKS0+YWRkT2JzZXJ2ZXIoZG9jdW1lbnQoKSk7CiB9CiAKQEAgLTEwMDMs
MzEgKzk5NywzMCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAg
ICAgZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2Uq
IEhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZh
c0VsZW1lbnQ6OmNvcGllZEltYWdlKCkKIHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVm
ZmVyKCkpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1h
Z2UgPSBidWZmZXIoKS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAK
LXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyKTsKICAgICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7
Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5p
czJkKCkpOwogCiAgICAgbV9kaWRDbGVhckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChp
czxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAv
LyBObyBuZWVkIHRvIHVuZG8gdHJhbnNmb3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2Fs
bGVkIHJpZ2h0IGFmdGVyIHRoZSBjb250ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0
aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
OwogICAgIH0KIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgp
IGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAg
ICBtX2NvcGllZEltYWdlID0gbnVsbHB0cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBm
YWxzZTsKQEAgLTEwNDEsOSArMTAzNCw5IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50
OjphY3RpdmVET00KIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAogewogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdl
YkdMIHJlbmRlcmluZyBjb250ZXh0IG1heSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5n
ZSAvIGNvbnRleHRyZXN0b3JlZCBldmVudHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4g
bV9oYXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsK
KyAgICAgICAgcmV0dXJuIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250
ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcw
LDcgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBh
ZGRPYnNlcnZlcihkb2N1bWVudCk7CiAgICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhh
dmUgYmVlbiBpc3N1ZWQgdG8gdGhlIGNhbnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAg
ICAgICAgIC8vIHRlbGwgdGhlIGRvY3VtZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAg
ICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBk
YXRpbmcoKSkKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3Vs
dHNOZWVkVXBkYXRpbmcoKSkKICAgICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRo
aXMsIEZsb2F0UmVjdCB7IH0pOwogICAgIH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0Vs
ZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0ICYmIG1fY29udGV4dC0+bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1
cm4gcmVuZGVyaW5nQ29udGV4dCgpLm5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NF
UlQobmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQot
ICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29u
dGV4dCgpLnByZXBhcmVGb3JEaXNwbGF5KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6
OmlzQ29udHJvbGxlZEJ5T2Zmc2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
ICYmIG1fY29udGV4dC0+aXNQbGFjZWhvbGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250
ZXh0KCkuaXNQbGFjZWhvbGRlcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJy
aWRlOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4+JiYgYXJndW1lbnRzKTsKLQogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRl
eHQoY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJp
bmcmKTsKQEAgLTExNiw4ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1l
ZGlhU3RyZWFtPj4gY2FwdHVyZVN0cmVhbShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBm
cmFtZVJlcXVlc3RSYXRlKTsKICNlbmRpZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29u
c3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAg
SW1hZ2UqIGNvcGllZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkg
ZmluYWw7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2NCw3ICsxNjIs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIHZvaWQgY3JlYXRlSW1hZ2VC
dWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsK
KyAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKTsKIAogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdl
QnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0K
IApAQCAtMTgzLDcgKzE4MSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5j
ZXN0b3JSZXN1bHQgaW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSwg
Q29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSkgZmluYWw7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwogICAgIG11dGFi
bGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jh
cnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJl
bmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiAKICAgICBPcHRpb25hbDxib29sPiBtX3Vz
ZXNEaXNwbGF5TGlzdERyYXdpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsNiBAQCBPZmZzY3Jl
ZW5DYW52YXM6Ok9mZnNjcmVlbkNhbnZhcyhTY3JpcHRFCiBPZmZzY3JlZW5DYW52YXM6On5PZmZz
Y3JlZW5DYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwot
Ci0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9y
ZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIHVu
c2lnbmVkIE9mZnNjcmVlbkNhbnZhczo6d2lkdGgoKSBjb25zdApAQCAtMTU0LDYgKzE1MSwyMyBA
QCB2b2lkIE9mZnNjcmVlbkNhbnZhczo6c2V0U2l6ZShjb25zdCBJbnRTCiAgICAgcmVzZXQoKTsK
IH0KIAorc3RhdGljIGJvb2wgaXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5
cGUpCit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpf
MmQ7Cit9CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogT2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4
dFR5cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250ZXh0VHlwZSksIGNvbnRl
eHRUeXBlKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKKworICAg
IC8vIEZJWE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBlbm91Z2ggcGl4ZWwgbWVt
b3J5LiBTZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZC4KKworICAgIHNldFJl
bmRlcmluZ0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUo
KnRoaXMpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYgRU5BQkxFKFdFQkdMKQog
c3RhdGljIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yV2ViR0woKQogewpA
QCAtMTc1LDI4ICsxODksNDEgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlV2ViR0woYm9vbCB3
ZWJHTAogICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKIH0KIAotdm9p
ZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlw
ZSBjb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQorc3RhdGljIGJv
b2wgaXNXZWJHTFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUpCiB7Ci0gICAg
QVNTRVJUKCFtX2NvbnRleHQpOworICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6V2ViZ2wgfHwgY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6
OldlYmdsMjsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBhdHRycykKK3sKKyAgICBBU1NFUlQoaXNXZWJHTFR5cGUo
Y29udGV4dFR5cGUpKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsK
IAogICAgIGF1dG8gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHRoaXMtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJHbG9i
YWxTY29wZSgpKSB7CiAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29w
ZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAgICAgICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0wod29ya2VyR2xvYmFsU2NvcGUuc2V0dGlu
Z3NWYWx1ZXMoKS53ZWJHTEVuYWJsZWQsIHdvcmtlckdsb2JhbFNjb3BlLnNldHRpbmdzVmFsdWVz
KCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlIGlmIChzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgYXV0byYgc2V0dGluZ3MgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNldHRpbmdzKCk7CiAgICAg
ICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0woc2V0dGluZ3Mud2ViR0xFbmFibGVkKCksIHNldHRp
bmdzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBHcmFwaGljc0NvbnRleHRHTFdlYkdM
VmVyc2lvbiB3ZWJHTFZlcnNpb24gPSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2Vi
R0wxOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgd2ViR0xWZXJzaW9uID0gKGNvbnRleHRUeXBl
ID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpXZWJnbCkgPyBHcmFwaGljc0NvbnRleHRHTFdlYkdM
VmVyc2lvbjo6V2ViR0wxIDogR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRUeXBlKTsKICNlbmRpZgotICAgIG1fY29u
dGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHdl
YkdMVmVyc2lvbik7CisKKyAgICBhdXRvIGNvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjcmVhdGUoKnRoaXMsIGF0dHJzLCB3ZWJHTFZlcnNpb24pOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KG1h
a2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihjb250ZXh0KSk7CisgICAgcmV0dXJuICZk
b3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpAQCAtMjA2LDQ0ICsyMzMsNTMgQEAgRXhjZXB0
aW9uT3I8T3B0aW9uYWw8T2Zmc2NyZWVuUmVuZGVyaW5nQwogICAgIGlmIChtX2RldGFjaGVkKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIGlm
IChjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6XzJkKSB7Ci0gICAgICAgIGlm
IChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICghaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5p
c05vbmUoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSkgeworICAg
ICAgICAgICAgaWYgKCFpczJkVHlwZShjb250ZXh0VHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwotICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZk
b3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRl
eHQoKSkgfSB9IH07CiAgICAgICAgIH0KIAotICAgICAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVl
PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKnRoaXMpOwotICAgICAgICBpZiAo
IW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLQot
ICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+IHsgJmRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29u
dGV4dCkgfSB9IH07Ci0gICAgfQogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpt
X2NvbnRleHQpIH0gfSB9OworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wo
KSkgeworICAgICAgICAgICAgaWYgKCFpc1dlYkdMVHlwZShjb250ZXh0VHlwZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNpZiBF
TkFCTEUoV0VCR0wyKQotICAgICAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2Nv
bnRleHQpIH0gfSB9OworICAgICAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8
V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKKyNlbmRpZgogI2VuZGlmCi0gICAgICAgICAg
ICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAgICAgICAgIH0KIAorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9Owor
ICAgIH0KKworICAgIGlmIChpczJkVHlwZShjb250ZXh0VHlwZSkpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRp
bmdzLgorICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoY29u
dGV4dFR5cGUpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqY29udGV4dCkgfSB9IH07CisgICAgfQorCisjaWYgRU5BQkxFKFdFQkdM
KQorICAgIGlmIChpc1dlYkdMVHlwZShjb250ZXh0VHlwZSkpIHsKICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CiAgICAgICAgIGF1dG8gYXR0cmli
dXRlcyA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPj4oc3Rh
dGUsICFhcmd1bWVudHMuaXNFbXB0eSgpID8gYXJndW1lbnRzWzBdLmdldCgpIDogSlNDOjpqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9u
IHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAotICAgICAgICBjcmVhdGVDb250ZXh0V2Vi
R0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmlidXRlcykpOwotICAgICAgICBpZiAoIW1fY29u
dGV4dCkKKyAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdMKGNvbnRleHRU
eXBlLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQogICAgICAg
ICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwogCiAjaWYgRU5BQkxFKFdFQkdMMikK
LSAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAg
ICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93
bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9IH07CisgICAgICAg
IGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKmNvbnRleHQpIH0gfSB9OwogICAgIH0KICNlbmRpZgogCkBAIC0yNTIsMTAgKzI4OCwx
MCBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDCiAKIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdl
Qml0bWFwKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9jb250ZXh0KQorICAgIGlmICht
X2RldGFjaGVkIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoaXM8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSkgeworICAgIGlmIChpczxPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsKICAg
ICAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB7IFJl
ZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIApAQCAtMjY4LDE1ICszMDQsMTUgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZQogICAgICAgICAvLyBieSBi
dWZmZXIoKSwgdG8gYXZvaWQgcmVzZXR0aW5nIHRoZSBjb250ZXh0IHN0YXRlLCB3ZSBoYXZlIHRv
IG1ha2UgYSBjb3B5IGFuZAogICAgICAgICAvLyBjbGVhciB0aGUgb3JpZ2luYWwgYnVmZmVyIHJh
dGhlciB0aGFuIHJldHVybmluZyB0aGUgb3JpZ2luYWwgYnVmZmVyLgogICAgICAgICBhdXRvIGJ1
ZmZlckNvcHkgPSBidWZmZXIoKS0+Y29weVJlY3RUb0J1ZmZlcihGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBidWZmZXIoKS0+bG9naWNhbFNpemUoKSksIGJ1ZmZlcigpLT5jb2xvclNwYWNlKCksICpk
cmF3aW5nQ29udGV4dCgpKTsKLSAgICAgICAgZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5jbGVhckNhbnZhcygpOworICAgICAgICBkb3duY2Fz
dDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSku
Y2xlYXJDYW52YXMoKTsKICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpOwogCiAgICAgICAgIHJl
dHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYnVm
ZmVyQ29weSksIG9yaWdpbkNsZWFuKCkgPyBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFu
IDogU2VyaWFsaXphdGlvblN0YXRlKCkpKSB9OwogICAgIH0KIAogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkgewotICAgICAg
ICBhdXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpt
X2NvbnRleHQpOworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkpIHsKKyAgICAgICAgYXV0byB3ZWJHTENvbnRleHQgPSAmZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogCiAgICAgICAgIC8vIEZJWE1F
OiBXZSdyZSBzdXBwb3NlZCB0byBjcmVhdGUgYW4gSW1hZ2VCaXRtYXAgdXNpbmcgdGhlIGJhY2tp
bmcKICAgICAgICAgLy8gc3RvcmUgZnJvbSB0aGlzIGNhbnZhcyAob3IgaXRzIGNvbnRleHQpLCBi
dXQgZm9yIG5vdyB3ZSdsbCBqdXN0CkBAIC0zNTgsMjAgKzM5NCwxOSBAQCB2b2lkIE9mZnNjcmVl
bkNhbnZhczo6ZGlkRHJhdyhjb25zdCBPcHRpCiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hh
bmdlZChyZWN0KTsKIH0KIAotSW1hZ2UqIE9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1hZ2UoKSBj
b25zdAorSW1hZ2UqIE9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1hZ2UoKQogewogICAgIGlmICht
X2RldGFjaGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9jb3BpZWRJ
bWFnZSAmJiBidWZmZXIoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAg
bV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0KCkucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICAgICAg
bV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIH0KICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIAotdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKSBjb25z
dAordm9pZCBPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAgIG1fY29w
aWVkSW1hZ2UgPSBudWxscHRyOwogfQpAQCAtNDMxLDggKzQ2Niw4IEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IFRyYW5zZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZwotICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJH
TCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIHJlbmRl
cmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCiAgICAgaWYg
KG1fcGxhY2Vob2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAgICAgIGF1dG8gYnVm
ZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ3OSw3ICs1MTQsNyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoCiAgICAgc2V0SW1hZ2VCdWZmZXIo
SW1hZ2VCaXRtYXA6OmNyZWF0ZUltYWdlQnVmZmVyKCpjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAot
UmVmUHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNv
bnN0CitSZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkKIHsKICAgICBBU1NFUlQobV9kZXRhY2hlZCk7CiAKQEAgLTQ5NCw3ICs1MjksNyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6cmVzZXQoKQogewogICAgIHJlc2V0R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKTsKICAgICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnJlc2V0KCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNldCgpOwog
CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKICAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAkocmV2
aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDE2ICsxMjIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
V2lkdGgodW5zaWduZWQpOwogICAgIHZvaWQgc2V0SGVpZ2h0KHVuc2lnbmVkKTsKIAotICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNj
cmVlblJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBS
ZW5kZXJpbmdDb250ZXh0VHlwZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYg
YXJndW1lbnRzKTsKICAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiB0cmFuc2Zl
clRvSW1hZ2VCaXRtYXAoKTsKICAgICB2b2lkIGNvbnZlcnRUb0Jsb2IoSW1hZ2VFbmNvZGVPcHRp
b25zJiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSBmaW5hbDsKIAotICAgIEltYWdlKiBjb3BpZWRJbWFnZSgp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOwor
ICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFn
ZSgpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCkBAIC0xNDgsNyArMTQ2LDYg
QEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCiBwcml2YXRlOgotCiAg
ICAgT2Zmc2NyZWVuQ2FudmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KTsKIAogICAgIGJvb2wgaXNPZmZzY3JlZW5DYW52YXMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0xNjUsMTIgKzE2MiwxMyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKIAorICAgIE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKFJlbmRl
cmluZ0NvbnRleHRUeXBlKTsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdm9pZCBjcmVhdGVDb250
ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiA9
IHsgfSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3JlYXRlQ29udGV4dFdlYkdM
KFJlbmRlcmluZ0NvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYpOwogI2VuZGlm
CiAKICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRy
PEltYWdlQnVmZmVyPiB0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAgdm9pZCByZXNldCgpOwogCkBAIC0xNzgs
OCArMTc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7
CiAgICAgdm9pZCBzY2hlZHVsZUNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0KICAgICAv
LyBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1
ZmZlci4gV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KICAgICBtdXRhYmxlIGJvb2wgbV9o
YXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJl
dmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIAotc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKQorVW5pcXVlUmVmPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKQogewotICAgIGF1dG8gcmVuZGVyaW5nQ29u
dGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG5ldyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSwgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBtYWtl
VW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChjYW52
YXMsIFdURk1vdmUoc2V0dGluZ3MpLCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOwog
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdD
b250ZXh0KCpyZW5kZXJpbmdDb250ZXh0KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQocmVuZGVyaW5nQ29udGV4dC5nZXQoKSk7
CiAKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZp
c2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBUZXh0
TWV0cmljczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0
eVBhcnNlTW9kZSk7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3Mm
JiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSk7CiAKICAgICB2aXJ0dWFsIH5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTQy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIENhbnZhc0Jh
c2UmIGNhbnZhc0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQogCisgICAgdmlydHVh
bCBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzMmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdM
MSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViR0wyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIC8v
IHVzZWQgZm9yIGNvbXBvc2l0aW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBib29sIGhh
c0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0Fj
dGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KICAgICB2b2lkIHNldEhhc0FjdGl2ZUlu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyKSB7IG1faGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciA9IGhhc0FjdGl2
ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dE5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dE5vbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworCitVbmlxdWVSZWY8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmU+IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoQ2Fu
dmFzQmFzZSYgY2FudmFzKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5j
ZSgqbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKGNhbnZhcykpOworfQorCitDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFz
ZSYgY2FudmFzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9Cit7Cit9
CisKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5v
bmUoKSA9IGRlZmF1bHQ7CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lIGZpbmFsIDogcHVi
bGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworcHVibGljOgorICAgIHN0YXRpYyBVbmlxdWVS
ZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU+IGNyZWF0ZShDYW52YXNCYXNlJik7CisKKyAg
ICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSgpOworCitwcml2YXRlOgorICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKENhbnZhc0Jhc2UmKTsKKworICAgIGJvb2wgaXNO
b25lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxMSArNDIsMTEgQEAgc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZQog
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFz
QmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRp
bmdzKQorVW5pcXVlUmVmPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewotICAgIGF1dG8gcmVuZGVyaW5n
Q29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KG5l
dyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkp
OworICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNl
KCpuZXcgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5n
cykpKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCgqcmVuZGVyaW5nQ29udGV4dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQu
Z2V0KCkpOwogCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVh
dGUoQ2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwor
ICAgIHN0YXRpYyBVbmlxdWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwogCiAg
ICAgZW51bSBjbGFzcyBCaXRtYXBNb2RlIHsKICAgICAgICAgVmFsaWQsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCk7CiAKK1VuaXF1ZVJlZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IE9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykK
K3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNhbnZhcyk7Cit9CisKIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZhcykKICAg
ICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoY2FudmFzLCBmYWxzZSkKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDE2IEBACiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9D
QU5WQVMpCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgiCi0KICNp
bmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOworICAgIGZyaWVuZCBVbmlxdWVSZWY8T2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBXVEY6Om1ha2VVbmlxdWVSZWZXaXRob3V0
RmFzdE1hbGxvY0NoZWNrPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgQ2FudmFz
QmFzZSY+KENhbnZhc0Jhc2UmKTsKIHB1YmxpYzoKLSAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKTsKKwog
ICAgIHZpcnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAgICAg
T2Zmc2NyZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxPZmZzY3Jl
ZW5DYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KQEAgLTUwLDYgKzUxLDggQEAgcHVibGljOgogICAg
IFJlZjxUZXh0TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogcHJp
dmF0ZToKKyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYp
OworCiAgICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7CiB9OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4
dDJELmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQ+IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
KQorVW5pcXVlUmVmPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBQYWludFJlbmRlcmluZ0NvbnRl
eHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihuZXcgUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQoY2FudmFzKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcg
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7CiB9CiAKIFBhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjpQYWludFJlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJiBjYW52YXMpCkBAIC00
Nyw0ICs0Nyw1IEBAIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpQYWludFJlbmRlcmluZ0MKIFBh
aW50UmVuZGVyaW5nQ29udGV4dDJEOjp+UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoKSA9IGRlZmF1
bHQ7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmgJKHJl
dmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVy
aW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTggKzM2LDIwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CisgICAg
c3RhdGljIFVuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jh
c2UmKTsKIAogICAgIHZpcnR1YWwgflBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKICAgICBD
dXN0b21QYWludENhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8Q3VzdG9t
UGFpbnRDYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzUGFp
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBQYWludFJlbmRlcmlu
Z0NvbnRleHQyRChDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzUGFpbnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKIFNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FOVkFTUkVOREVSSU5HQ09OVEVYVChXZWJDb3JlOjpQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRCwgaXNQYWludCgpKQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0LmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTAgKzM3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiAKK1VuaXF1ZVJlZjxQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQ+IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KENhbnZhc0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZl
cmVuY2UoKm5ldyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoY2FudmFzKSk7Cit9CisKIFBs
YWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENh
bnZhc0Jhc2UmIGNhbnZhcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQor
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9CisgICAgLCBtX2ltYWdlQnVm
ZmVyUGlwZSB7IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkgfQogewotICAgIG1faW1hZ2VCdWZm
ZXJQaXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZhc0VsZW1l
bnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTMgKzM3LDE1IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFBsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiBw
dWJsaWM6Ci0gICAgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmKTsKKyAg
ICBzdGF0aWMgVW5pcXVlUmVmPFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENh
bnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdDsKIAog
ICAgIGNvbnN0IFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+JiBpbWFnZUJ1ZmZlclBpcGUoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZTsgfQogCiBwcml2YXRlOgorICAgIFBsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CisKICAgICBib29sIGlzUGxhY2Vob2xk
ZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNp
b24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDEsNyArNDg0MSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgLy8gc28gZm9yIFdl
YkdMIDEuMCB1cGxvYWRzLCBkZWZlciBtZWFzdXJpbmcgdGhlaXIgcmVjdGFuZ2xlIGFzIGxvbmcg
YXMgcG9zc2libGUuCiAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZmFsc2UsIGlu
cHV0U291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VIZWlnaHQpOwogICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBj
YW52YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICB9LCBbJl0oUmVmUHRyPEhUTUxDYW52
YXNFbGVtZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CiAgICAgICAgIGF1dG8g
dmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoZnVuY3Rpb25OYW1l
LCBjYW52YXMuZ2V0KCkpOwogICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5oYXNFeGNlcHRp
b24oKSkKICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJlbGVhc2VFeGNlcHRp
b24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMu
Y3BwCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKICNpZiBFTkFCTEUoV0VC
R1BVKQotc3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2
aWNlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2aWNl
KQorc3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNl
KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2
aWNlKQogewogICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0KSkgewogICAgICAg
ICBhdXRvJiBjb250ZXh0R1BVID0gZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCk7
CkBAIC0xOTUsNyArMTk1LDcgQEAgV2ViR1BVRGV2aWNlKiBJbnNwZWN0b3JDYW52YXM6OmRldmlj
ZUNvbgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEluc3BlY3RvckNhbnZhczo6aXNE
ZXZpY2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0Citib29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KGNvbnN0
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8q
IGRldmljZSA9IGRldmljZUNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGNhbnZhc0lmQ29udGV4
dE1hdGNoZXNEZXZpY2UoY29udGV4dCwgKmRldmljZSk7CkBAIC0xMDc2LDE2ICsxMDc2LDE2IEBA
IFN0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnQKICAgICB9CiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0gICAgYXV0byogY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQo
KTsKKyAgICBhdXRvJiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29udGV4dCgpOwogICAgIGlm
IChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93bmNh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJD
bGVhckZvckluc3BlY3Rvcih0cnVlKTsKKyAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKHRy
dWUpOwogI2VuZGlmCiAKICAgICBFeGNlcHRpb25PcjxVbmNhY2hlZFN0cmluZz4gcmVzdWx0ID0g
bm9kZS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZm
ZXJDbGVhckZvckluc3BlY3RvcihmYWxzZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rv
cihmYWxzZSk7CiAjZW5kaWYKIAogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHJldmlzaW9u
IDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogICAgIFdlYkdQVURldmljZSogZGV2aWNlQ29udGV4dCgpIGNvbnN0OwotICAgIGJvb2wg
aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKSBjb25zdDsK
KyAgICBib29sIGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25zdCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAJKHJldmlzaW9u
IDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnZhc0Fn
ZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpCitzdGF0
aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNBZ2VudChjb25zdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQogewogICAgIEFTU0VSVChJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb25QdWJsaWM6Omhhc0Zyb250ZW5kcygpKTsKIApAQCAtODMs
NyArODMsNyBAQCBzdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52CiB9CiAK
ICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFyZ3VtZW50VHlwZSkgXAotT3B0
aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IEluc3Bl
Y3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250
ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKK09w
dGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50
KSBcCiB7IFwKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQo
Y2FudmFzUmVuZGVyaW5nQ29udGV4dCkpIFwKICAgICAgICAgcmV0dXJuIGNhbnZhc0FnZW50LT5w
cm9jZXNzQXJndW1lbnQoY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgYXJndW1lbnQpOyBcCkBAIC05
Myw3ICs5Myw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2MKICAg
ICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1Nf
QVJHVU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04K
IAotdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQor
dm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwg
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRz
KQogewogICAgIGlmIChhdXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRDYW52YXNBZ2VudChjYW52
YXNSZW5kZXJpbmdDb250ZXh0KSkKICAgICAgICAgY2FudmFzQWdlbnQtPnJlY29yZEFjdGlvbihj
YW52YXNSZW5kZXJpbmdDb250ZXh0LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGFyZ3VtZW50cykp
OwpAQCAtMTAxLDE0ICsxMDEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBYwogCiBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRB
cmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCB1aW50MzJfdCBhcmd1bWVudCkKIHsK
LSAgICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpOwotICAgIHJldHVy
biBwcm9jZXNzQXJndW1lbnQoKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBhcmd1
bWVudCk7CisgICAgcmV0dXJuIHByb2Nlc3NBcmd1bWVudChjYW52YXNFbGVtZW50LnJlbmRlcmlu
Z0NvbnRleHQoKSwgYXJndW1lbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXI6OnJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwg
U3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1l
bnRzJiYgYXJndW1lbnRzKQogewotICAgIEFTU0VSVChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0Nv
bnRleHQoKSk7Ci0gICAgcmVjb3JkQWN0aW9uKCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRl
eHQoKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICByZWNvcmRBY3Rp
b24oY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIFdURk1vdmUobmFtZSksIFdURk1v
dmUoYXJndW1lbnRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIu
aAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhc0NhbGxUcmFjZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDEyICsxOTQsMTIgQEAg
cHVibGljOgogICAgIHVzaW5nIFByb2Nlc3NlZEFyZ3VtZW50cyA9IHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4+OwogCiAjZGVmaW5lIFBST0NFU1NfQVJH
VU1FTlRfREVDTEFSQVRJT04oQXJndW1lbnRUeXBlKSBcCi0gICAgc3RhdGljIE9wdGlvbmFsPFBy
b2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYs
IEFyZ3VtZW50VHlwZSk7IFwKKyAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+
IHByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRU
eXBlKTsgXAogLy8gZW5kIG9mIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KICAgICBGT1Jf
RUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1F
TlRfREVDTEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTgogCi0g
ICAgc3RhdGljIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBTdHJp
bmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOworICAgIHN0YXRpYyB2b2lkIHJlY29y
ZEFjdGlvbihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIFByb2Nlc3Nl
ZEFyZ3VtZW50cyYmID0geyB9KTsKIAogICAgIHN0YXRpYyBPcHRpb25hbDxQcm9jZXNzZWRBcmd1
bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiwgdWludDMyX3Qp
OwogICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYs
IFN0cmluZyYmLCBQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMyArNDE3
LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZQogCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcyhDYW52YXNC
YXNlJiBjYW52YXNCYXNlKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRl
cmluZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGluc3BlY3RvckNh
bnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVjdG9y
Q2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQo
KSk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52
YXMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0Nyw3ICs0NDEsNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpkaWRDcmVhdGVDYW52CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JDYW52YXM+IGluc3BlY3RvckNhbnZhczsKIApAQCAtNDc3LDExICs0NzEsNyBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52CiAKIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0
aW9uYWw8RmxvYXRSZWN0PiYpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVu
ZGVyaW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsK
KyAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFz
ZS5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAg
IGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CkBAIC00OTEsMTEgKzQ4MSw3
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQKIAogdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2Up
CiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpOwot
ICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbnNwZWN0b3JD
YW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3Rv
ckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0
KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2Fu
dmFzKQogICAgICAgICByZXR1cm47CkBAIC01MDMsNyArNDg5LDcgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveQogICAgIHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2Fu
dmFzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5n
Q2FudmFzRnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURp
c3BhdGNoKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2Fu
dmFzRnJhbWUoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3Jj
ZURpc3BhdGNoKQogewogICAgIGlmICghY29udGV4dC5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNyw3ICs1MjMsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvCiAgICAgbV9yZWNvcmRpbmdDYW52YXNJ
ZGVudGlmaWVycy5yZW1vdmUoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCkpOwogfQogCi12
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywg
SlNDOjpKU09iamVjdCogb3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNv
bGVTdGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKQog
ewogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjb250ZXh0
KTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKQEAgLTU1OSw3ICs1NDUsNyBAQCB2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSCiAgICAgc3RhcnRSZWNvcmRpbmco
Kmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpDb25zb2xl
LCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5n
Q2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgZGlk
RmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoY29udGV4dCwgdHJ1ZSk7CiB9CkBAIC02ODIsNyAr
NjY4LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lXZQogI2VuZGlm
IC8vIEVOQUJMRShXRUJHUFUpCiAKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9O
KEFyZ3VtZW50VHlwZSkgXAotT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJv
Y2Vzc2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBl
IGFyZ3VtZW50KSBcCitPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNz
ZWRBcmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NBcmd1bWVudChjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5
cGUgYXJndW1lbnQpIFwKIHsgXAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3Bl
Y3RvckNhbnZhcyhjYW52YXNSZW5kZXJpbmdDb250ZXh0KTsgXAogICAgIEFTU0VSVChpbnNwZWN0
b3JDYW52YXMpOyBcCkBAIC02OTIsNyArNjc4LDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlcjo6UHJvYwogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFD
RVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKQogI3VuZGVmIFBST0NFU1Nf
QVJHVU1FTlRfREVGSU5JVElPTgogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRB
Y3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3Ry
aW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRz
JiYgYXJndW1lbnRzKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3JkQWN0aW9uKGNv
bnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmlu
ZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYm
IGFyZ3VtZW50cykKIHsKICAgICBBU1NFUlQoY2FudmFzUmVuZGVyaW5nQ29udGV4dC5oYXNBY3Rp
dmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpOwogCkBAIC04ODcsNyArODczLDcgQEAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQQogICAgIHJldHVybiBpbnNwZWN0
b3JDYW52YXM7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQp
CitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3Bl
Y3RvckNhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IGZvciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52
YXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGluc3BlY3RvckNhbnZhcy0+Y2FudmFzQ29udGV4
dCgpID09ICZjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAkocmV2aXNpb24gMjc3MTQyKQorKysg
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVO
YXZpZ2F0ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVz
KENhbnZhc0Jhc2UmKTsKICAgICB2b2lkIGRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2FudmFzTWVtb3J5
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZEZpbmlzaFJlY29yZGluZ0Nh
bnZhc0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBib29sIGZvcmNlRGlzcGF0Y2ggPSBm
YWxzZSk7Ci0gICAgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25z
KTsKLSAgICB2b2lkIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmKTsKKyAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9yeShjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNoID0gZmFsc2Up
OworICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0aW9u
cyk7CisgICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZvaWQgZGlkRW5hYmxlRXh0
ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2
b2lkIGRpZENyZWF0ZVdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgV2Vi
R0xQcm9ncmFtJik7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJ
T04oQXJndW1lbnRUeXBlKSBcCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250
ZXh0JiwgQXJndW1lbnRUeXBlKTsgXAorICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VN
RU5UX0RFQ0xBUkFUSU9OCiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNF
Ul9BUkdVTUVOVChQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1Nf
QVJHVU1FTlRfREVDTEFSQVRJT04KLSAgICB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3Nl
ZEFyZ3VtZW50cyYmID0geyB9KTsKKyAgICB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlBy
b2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjb3Jk
aW5nT3B0aW9ucyB7CkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBFTkFC
TEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYpOwogICAg
IFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZhcyhJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYpOworICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52
YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHUFUpCiAg
ICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZp
Y2UmKTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsMTAg
KzI0MiwxMCBAQCBzdGF0aWMgSlNDOjpKU09iamVjdCogb2JqZWN0QXJndW1lbnRBdChTCiBzdGF0
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY2FudmFzUmVuZGVyaW5nQ29udGV4dChKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHRhcmdldCkKIHsKICAgICBpZiAoYXV0byogY2FudmFzID0gSlNI
VE1MQ2FudmFzRWxlbWVudDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQotICAgICAgICByZXR1cm4g
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiAmY2FudmFzLT5yZW5k
ZXJpbmdDb250ZXh0KCk7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKGF1
dG8qIGNhbnZhcyA9IEpTT2Zmc2NyZWVuQ2FudmFzOjp0b1dyYXBwZWQodm0sIHRhcmdldCkpCi0g
ICAgICAgIHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJu
ICZjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICNlbmRpZgogICAgIGlmIChhdXRvKiBjb250
ZXh0ID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkK
ICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CkBAIC0zNDksMTAgKzM0OSw4IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8mIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4oKm5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNhbnZhc1JlbmRl
cmluZ0NvbnRleHQgPSBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNuYXBzaG90Q2FudmFzKGNh
bnZhc0VsZW1lbnQsICpjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc25h
cHNob3RDYW52YXMoY2FudmFzRWxlbWVudCwgY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUo
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcg
QEAgSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdAogICAgIGlmIChyZXN1
bHQudHlwZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKICAgICAgICAgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKIAotICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxh
eUxpc3QoJmRlc3RDb250ZXh0KTsKKyAgICBjYW52YXMtPnJlcGxheURpc3BsYXlMaXN0KGRlc3RD
b250ZXh0KTsKIAogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZp
c2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZh
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw3IEBAIGJvb2wgUmVuZGVySFRNTENh
bnZhczo6cmVxdWlyZXNMYXllcigpIGMKICAgICBpZiAoUmVuZGVyUmVwbGFjZWQ6OnJlcXVpcmVz
TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCA9IGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkpCi0g
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZCgpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTcz
LDcgKzcwLDcgQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaQogICAg
IExheW91dFJlY3QgY29udGVudEJveFJlY3QgPSB0aGlzLT5jb250ZW50Qm94UmVjdCgpOwogCiAg
ICAgaWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKLSAgICAgICAgaWYg
KCFjb250ZXh0LmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSAmJiBjYW52YXNFbGVtZW50KCkucmVu
ZGVyaW5nQ29udGV4dCgpKQorICAgICAgICBpZiAoIWNvbnRleHQuY29udGVuZnVsUGFpbnREZXRl
Y3RlZCgpICYmICFjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQog
ICAgICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwx
MiArOTEsMTIgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52YXNDb21wb3NpdAogewog
ICAgIEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2Fu
dmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVy
Lm5vZGUoKSk7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
OwotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIGNv
bnN0IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5u
b2RlKCkpOworICAgIGF1dG8mIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsK
KyAgICBpZiAoIWNvbnRleHQuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXR1cm4gVW5hY2Nl
bGVyYXRlZENhbnZhczsKICAgICAKLSAgICBpZiAoY29udGV4dC0+aXNHUFVCYXNlZCgpKQorICAg
IGlmIChjb250ZXh0LmlzR1BVQmFzZWQoKSkKICAgICAgICAgcmV0dXJuIENhbnZhc0FzTGF5ZXJD
b250ZW50czsKIAogICAgIHJldHVybiBDYW52YXNQYWludGVkVG9MYXllcjsgLy8gT24gTWFjIGFu
ZCBpT1Mgd2UgcGFpbnQgYWNjZWxlcmF0ZWQgY2FudmFzZXMgaW50byB0aGVpciBsYXllcnMuCkBA
IC0xMDY0LDkgKzEwNjQsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmln
dXJhCiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJM
RShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAm
JiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJD
b250ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICAgICAg
aWYgKGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAg
ICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY29udGV4dC0+
cGxhdGZvcm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2Fu
dmFzKTsKKyAgICAgICAgY29uc3QgYXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS5wbGF0
Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQdXJwb3NlOjpDYW52YXMp
OwogCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="448737"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427964</attachid>
            <date>2021-05-06 17:34:38 -0700</date>
            <delta_ts>2021-05-07 08:33:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210506173437.patch</filename>
            <type>text/plain</type>
            <size>110222</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA2ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW09wZW5TU0xdIEltcGxlbWVudCBDcnlwdG9BbGdv
cml0aG1SU0EqCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNl
L1dURi93dGYvVW5pcXVlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDEzIEBAIFVu
aXF1ZVJlZjxUPiBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmkKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK1VuaXF1ZVJlZjxUPiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZShUJiByZWZl
cmVuY2UpCit7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8dHlwZW5hbWUgVDo6d2Vi
a2l0RmFzdE1hbGxvY2VkLCBpbnQ+Ojp2YWx1ZSwgIlQgaXMgRmFzdE1hbGxvY2VkIik7CisgICAg
cmV0dXJuIFVuaXF1ZVJlZjxUPihyZWZlcmVuY2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgVW5pcXVlUmVmIHsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4K
QEAgLTc4LDYgKzg1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxjbGFzcyBV
LCBjbGFzcy4uLiBBcmdzPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZXaXRob3V0
RmFzdE1hbGxvY0NoZWNrKEFyZ3MmJi4uLik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5k
IFVuaXF1ZVJlZjxVPiBtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoc3RkOjp1bmlx
dWVfcHRyPFU+KTsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQgVW5pcXVlUmVmPFU+IG1h
a2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFUmKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmll
bmQgY2xhc3MgVW5pcXVlUmVmOwogCiAgICAgVW5pcXVlUmVmKFQmIG90aGVyKQpAQCAtOTUsMyAr
MTAzLDQgQEAgdXNpbmcgV1RGOjpVbmlxdWVSZWY7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVSZWY7
CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVSZWZXaXRob3V0RmFzdE1hbGxvY0NoZWNrOwogdXNpbmcg
V1RGOjptYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHI7Cit1c2luZyBXVEY6Om1ha2VV
bmlxdWVSZWZGcm9tUmVmZXJlbmNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjc3MTQyKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY0
IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlzIG5vbi1udWxsIGluIENhbnZhc0Jh
c2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTQ5
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtXSVBd
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVh
bVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRy
YWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L0dQ
VUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2FudmFzQ29udGV4dDo6
Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250ZXh0Lmg6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZh
c1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFs
dWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6Y2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICogY3Nz
L0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVu
dCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6fkNh
bnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJhd2luZ0NvbnRleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJlbmRlcmluZ1Jlc3Vs
dHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWVtb3J5Q29zdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0aXZlSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpz
ZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRlc3Ryb3lJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6On5D
dXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6
Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6cmVwbGF5
RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGll
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGll
ZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNw
bGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp+SFRNTENh
bnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRl
eHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dDJk
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2Vi
R0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJH
TCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdl
YkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dFdl
YkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4
dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpn
ZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWlu
dHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNH
UFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0
U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5z
ZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVkQnlPZmZzY3JlZW4g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpj
bGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2NyZWVuQ2Fu
dmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9m
ZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3Jl
YXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Z2V0
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9J
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZElt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xk
ZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpyZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05vbmUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXllciBj
b25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QYWlu
dFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWludFJlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QYWludFJlbmRlcmlu
Z0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW52YXNJZkNvbnRl
eHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhczo6aXNE
ZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52YXNBZ2VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0Fy
Z3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0
aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVj
b3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZp
bmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckhUTUxD
YW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNM
YXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJl
cGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9uKToKKwogMjAyMS0w
NS0wNiAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0c3VrYXdhQHNvbnkuY29tPgog
CiAgICAgICAgIFtPcGVuU1NMXSBJbXBsZW1lbnQgQ3J5cHRvQWxnb3JpdGhtUlNBKgpJbmRleDog
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEzMjAsNyBAQCBodG1sL2NhbnZhcy9DYW52
YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAKIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAogaHRtbC9jYW52YXMv
RVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVk
aWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9uIDI3
NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVy
ZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcgQEAg
dm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjazo6U291cgogICAgIC8vIFdlIHNob3Vs
ZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9yIGJvdGggMmQgYW5kIDNkIGNvbnRleHRz
IHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50LgogICAgIC8vIEFuZCBjYWxsIGNhbnZh
cyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKSkgewotICAgICAgICBhdXRvJiBj
b250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNhbnZhcy5yZW5k
ZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAgICAg
IGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5nQnVmZmVyKCkpIHsKICAgICAgICAgICAg
IGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJUdXJuaW5nIGRyYXdpbmcgYnVm
ZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNhbnZhcyBiZWluZyBjYXB0dXJlZCJfcyk7
CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEdQVUNhbnZh
c0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BVQ2FudmFzQ29udGV4dD4gR1BVQ2FudmFz
Q29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK1VuaXF1ZVJlZjxHUFVDYW52YXND
b250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQogewot
ICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PihuZXcg
R1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVl
UmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXNDb250ZXh0KGNhbnZhcykpOwogICAgIGNv
bnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBjb250ZXh0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuaAko
cmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2Fu
dmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBXZWJH
UFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dCBmaW5hbCA6IHB1
YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAgIHN0YXRp
YyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKIAogICAg
IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxIVE1M
Q2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcxNDIp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTE0MjgxLDYgKzE0MjgxLDggQEAKIAkJQkM4MjQzMjYwRDBDRThBMjAw
NDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVh
dHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93RmVhdHVyZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFD
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRG
NDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxh
YmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxh
YmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJFQTA5
NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMDk4LDggQEAKIAkJCQkzMTQwQzUyMjFGREYz
MTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oICovLAogCQkJCUJD
RTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5n
cy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAqLywKKwkJCQlCQzg0RjQzRDI2NDFBQ0My
MDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JB
RDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5
M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3RhdGUuaWRsICovLAogCQkJCTQ5NDg0RkJG
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCkBAIC0zMTQyNiw3ICszMTQz
MCw2IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJy
YXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyog
QW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk0NDlEODY0RjI2NDBDOUM1MDAw
MTIyREUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0
MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTggLyogQW5pbWF0aW9uRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUwMDZGRjM3QyAvKiBBbmltYXRpb25FdmVu
dEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUsNiArMzI2NDgsNyBAQAogCQkJCTQ0MzBE
MDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNE
Q0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNp
YmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyog
SGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8q
IEhpc3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc0MUQxMTBCMDcyNTlB
MDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4
ODcsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhGMTFERSAvKiBTY3JpcHREaXNhbGxvd2Vk
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThBRUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4
MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQlF
NEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVk
U2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTExQzlEOUIwRUIzNjgxMjAwRTQw
OURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMTIy
M0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIwMiw3IEBACiAJCQkJRTQ5NDZFQUYxNTZF
NjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVsZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBTdHlsZVNjb3BlLmggaW4gSGVhZGVycyAq
LywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVTY29wZU9yZGluYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERGQzAwMEVEQkIyOSAvKiBTdHlsZVNjb3Bl
UnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAv
KiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTlENjM4MDEwMUFG
MTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmggaW4gSGVhZGVycyAqLywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkocmV2aXNpb24gMjc3MTQy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NT
Q2FudmFzVmFsdWUuaCIKIAorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENTU0NhbnZhc1Zh
bHVlOjp+Q1NTQ2FudmFzVmFsdWUoKQogewotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1f
ZWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CisgICAgaWYgKG1fY2Fu
dmFzKQorICAgICAgICBtX2NhbnZhcy0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7
CiB9CiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC00
MSw1MyArNDIsNTMgQEAgU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgYwog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCItd2Via2l0LWNhbnZhcygiLCBtX25hbWUsICcpJyk7CiB9
CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQm
LCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFz
VmFsdWU6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVj
dD4mIGNoYW5nZWRSZWN0KQogewogICAgIGlmICghY2hhbmdlZFJlY3QpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8gaW1hZ2VDaGFuZ2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjaGFuZ2Vk
UmVjdC52YWx1ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBjbGllbnRzKCkuYmVnaW4oKSwgZW5k
ID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5rZXktPmlt
YWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFu
Z2VSZWN0KTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogY2xpZW50cygpLnZhbHVlcygpKQorICAg
ICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRo
aXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFz
UmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNS
ZXNpemVkKENhbnZhc0Jhc2UmKQogewotICAgIGZvciAoYXV0byBpdCA9IGNsaWVudHMoKS5iZWdp
bigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQt
PmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwor
ICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCkudmFsdWVzKCkpCisgICAgICAgIGNsaWVu
dC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcykpOwogfQog
Ci12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQm
IGVsZW1lbnQpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFz
ZSYgY2FudmFzKQogewotICAgIEFTU0VSVF9VTlVTRUQoJmVsZW1lbnQsICZlbGVtZW50ID09IG1f
ZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKKyAgICBBU1NFUlRfVU5VU0VEKCZj
YW52YXMsICZjYW52YXMgPT0gbV9jYW52YXMpOworICAgIG1fY2FudmFzID0gbnVsbHB0cjsKIH0K
IAogRmxvYXRTaXplIENTU0NhbnZhc1ZhbHVlOjpmaXhlZFNpemUoY29uc3QgUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKEhUTUxDYW52YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50
KHJlbmRlcmVyLmRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXplKGVsdC0+d2lk
dGgoKSwgZWx0LT5oZWlnaHQoKSk7CisgICAgaWYgKGF1dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZh
cyhyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShjYW52YXMt
PndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpOwogICAgIHJldHVybiB7IH07CiB9CiAKLUhUTUxD
YW52YXNFbGVtZW50KiBDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudChEb2N1bWVudCYgZG9jdW1lbnQp
CitDYW52YXNCYXNlKiBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICAgaWYgKCFtX2VsZW1lbnQpIHsKLSAgICAgICAgbV9lbGVtZW50ID0gZG9jdW1lbnQu
Z2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOwotICAgICAgICBpZiAoIW1fZWxlbWVudCkKKyAg
ICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1fY2FudmFzID0gZG9jdW1lbnQuZ2V0Q1NTQ2Fu
dmFzRWxlbWVudChtX25hbWUpOworICAgICAgICBpZiAoIW1fY2FudmFzKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fZWxlbWVudC0+YWRkT2JzZXJ2ZXIobV9jYW52YXNP
YnNlcnZlcik7CisgICAgICAgIG1fY2FudmFzLT5hZGRPYnNlcnZlcihtX2NhbnZhc09ic2VydmVy
KTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudDsKKyAgICByZXR1cm4gbV9jYW52YXM7CiB9
CiAKIFJlZlB0cjxJbWFnZT4gQ1NTQ2FudmFzVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIC8qc2l6ZSovKQogewogICAgIEFTU0VSVChjbGllbnRz
KCkuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQg
PSB0aGlzLT5lbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCkpOwotICAgIGlmICghZWxlbWVudCB8
fCAhZWxlbWVudC0+YnVmZmVyKCkpCisgICAgYXV0byogY2FudmFzID0gdGhpcy0+Y2FudmFzKHJl
bmRlcmVyLmRvY3VtZW50KCkpOworICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZWxlbWVudC0+Y29waWVkSW1h
Z2UoKTsKKyAgICByZXR1cm4gY2FudmFzLT5jb3BpZWRJbWFnZSgpOwogfQogCiBib29sIENTU0Nh
bnZhc1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FudmFzVmFsdWUmIG90aGVyKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgJKHJldmlzaW9uIDI3NzE0MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3
ICsyNyw2IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ2FudmFzQmFzZS5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw3ICs0NCw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzRml4ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIEZsb2F0U2l6ZSBmaXhlZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYpOwogCi0gICAg
SFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0K
KyAgICBDYW52YXNCYXNlKiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQogCiAg
ICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgbG9h
ZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0
aW9ucyYpIHsgfQpAQCAtNjgsMTggKzY3LDE1IEBAIHB1YmxpYzoKICAgICBwcml2YXRlOgogICAg
ICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0
aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpIGZpbmFsCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwotICAgICAgICAg
ICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KGNhbnZhc0Jhc2UpLCBjaGFuZ2VkUmVjdCk7CisgICAgICAgICAgICBtX293bmVyVmFsdWUuY2Fu
dmFzQ2hhbmdlZChjYW52YXNCYXNlLCBjaGFuZ2VkUmVjdCk7CiAgICAgICAgIH0KICAgICAgICAg
dm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpIGZpbmFsCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkp
OwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc1Jlc2l6ZWQoZG93bmNhc3Q8SFRNTENh
bnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52
YXNSZXNpemVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgY2FudmFzRGVz
dHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpIGZpbmFsCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwotICAgICAgICAg
ICAgbV9vd25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dD4oY2FudmFzQmFzZSkpOworICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0Rlc3Ryb3ll
ZChjYW52YXNCYXNlKTsKICAgICAgICAgfQogCiAgICAgICAgIENTU0NhbnZhc1ZhbHVlJiBtX293
bmVyVmFsdWU7CkBAIC05MywxOCArODksMTggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0g
ICAgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgT3B0aW9uYWw8
RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOwotICAgIHZvaWQgY2FudmFzUmVzaXplZChIVE1MQ2Fu
dmFzRWxlbWVudCYpOwotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50
Jik7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBPcHRpb25hbDxG
bG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7CisgICAgdm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jh
c2UmKTsKKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJik7CiAKLSAgICBIVE1M
Q2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCYpOworICAgIENhbnZhc0Jhc2UqIGNhbnZh
cyhEb2N1bWVudCYpOwogCiAgICAgQ2FudmFzT2JzZXJ2ZXJQcm94eSBtX2NhbnZhc09ic2VydmVy
OwogCiAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNhbnZhcy4KICAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUgZWxlbWVudCBhbmQgb3ducyBpdC4KLSAg
ICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50IHsgbnVsbHB0ciB9OworICAgIC8vIFRoZSBk
b2N1bWVudCBzdXBwbGllcyB0aGUgY2FudmFzIGFuZCBvd25zIGl0LgorICAgIENhbnZhc0Jhc2Uq
IG1fY2FudmFzIHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2
aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw4IEBACiAjaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU05hbWVkSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U1BhaW50SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIKICNpbmNsdWRlICJH
ZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5o
IgogCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xp
ZW50KFIKICAgICBtX2NsaWVudHMuYWRkKCZyZW5kZXJlcik7CiAKICAgICBpZiAoaXM8Q1NTQ2Fu
dmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
RWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+ZWxlbWVudCgpKQotICAg
ICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52YXNDbGll
bnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAgIGlmIChhdXRvKiBjYW52YXMgPSBkb3du
Y2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZhcygpKQorICAgICAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFz
KTsKICAgICB9CiB9CiAKQEAgLTg2LDggKzg2LDggQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOjpyZW1vdmVDbGllbgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFz
VmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxl
bWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+ZWxlbWVudCgpKQotICAgICAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnRO
b2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAgIGlmIChhdXRvKiBjYW52YXMgPSBkb3duY2Fz
dDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZhcygpKQorICAgICAgICAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzKTsK
ICAgICB9CiAKICAgICBpZiAobV9jbGllbnRzLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5Niw3ICszODk2LDcgQEAgc3RhdGljIGJvb2wg
aXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihEbwogCiAgICAgICAgIC8vIFNraXAgYDxjYW52YXM+
YCBidXQgb25seSBpZiB0aGV5J3ZlIGJlZW4gZHJhd24gaW50by4gR3Vlc3MgdGhpcyBieSBzZWVp
bmcgaWYgdGhlcmUncyBhbHJlYWR5CiAgICAgICAgIC8vIGEgYENhbnZhc1JlbmRlcmluZ0NvbnRl
eHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0ZWQgYnkgSmF2YVNjcmlwdC4KLSAgICAgICAgaWYgKGlz
PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4o
bm9kZSkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1l
bnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5n
Q29udGV4dCgpLT5pc05vbmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAvLyBTa2lwIDNyZC1wYXJ0eSBgPGlmcmFtZT5gIGFzIHRoZSBjb250ZW50IGxpa2VseSB3b24n
dCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgcGFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Q2FudmFzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNC
YXNlLmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NT
Q2FudmFzVmFsdWUuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBA
IC01MSw3ICs1Miw4IEBAIGNvbnN0IEludGVycG9sYXRpb25RdWFsaXR5IGRlZmF1bHRJbnRlcnAK
ICNlbmRpZgogCiBDYW52YXNCYXNlOjpDYW52YXNCYXNlKEludFNpemUgc2l6ZSkKLSAgICA6IG1f
c2l6ZShzaXplKQorICAgIDogbV9zaXplIHsgc2l6ZSB9CisgICAgLCBtX2NvbnRleHQgeyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Y3JlYXRlKCp0aGlzKSB9CiB7CiB9CiAKQEAgLTU5LDEz
ICs2MSwxMyBAQCBDYW52YXNCYXNlOjp+Q2FudmFzQmFzZSgpCiB7CiAgICAgQVNTRVJUKG1fZGlk
Tm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKTsKICAgICBBU1NFUlQobV9vYnNlcnZlcnMu
aXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1faW1hZ2VCdWZmZXIpOworCisgICAgZGVzdHJveUlt
YWdlQnVmZmVyKCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzQmFzZTo6ZHJhd2luZ0Nv
bnRleHQoKSBjb25zdAogewotICAgIGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7
Ci0gICAgaWYgKGNvbnRleHQgJiYgIWNvbnRleHQtPmlzMmQoKSAmJiAhY29udGV4dC0+aXNPZmZz
Y3JlZW4yZCgpKQorICAgIGlmICghbV9jb250ZXh0LT5pczJkKCkgJiYgIW1fY29udGV4dC0+aXNP
ZmZzY3JlZW4yZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBidWZm
ZXIoKSA/ICZtX2ltYWdlQnVmZmVyLT5jb250ZXh0KCkgOiBudWxscHRyOwpAQCAtOTQsOCArOTYs
NyBAQCBBZmZpbmVUcmFuc2Zvcm0gQ2FudmFzQmFzZTo6YmFzZVRyYW5zZm9yCiAKIHZvaWQgQ2Fu
dmFzQmFzZTo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKQogewotICAgIGlmIChhdXRv
KiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0LT5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKTsKIH0KIAogc2l6ZV90IENhbnZhc0Jhc2U6Om1lbW9yeUNvc3QoKSBj
b25zdApAQCAtMTAzLDcgKzEwNCw3IEBAIHNpemVfdCBDYW52YXNCYXNlOjptZW1vcnlDb3N0KCkg
Y29uc3QKICAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZy
b20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKICAgICAvLyBhYm91dCB3
aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4gV2UgbmVlZCB0byBob2xkIGEgbG9jayB0
byBwcmV2ZW50IG1faW1hZ2VCdWZmZXIKICAgICAvLyBmcm9tIGJlaW5nIGNoYW5nZWQgd2hpbGUg
d2UgYWNjZXNzIGl0LgotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckFz
c2lnbm1lbnRMb2NrKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1l
bnRMb2NrIH07CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gMDsKICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlci0+bWVtb3J5Q29zdCgpOwpAQCAtMTE0LDcgKzExNSw3IEBA
IHNpemVfdCBDYW52YXNCYXNlOjpleHRlcm5hbE1lbW9yeUNvc3QoKSAKICAgICAvLyBleHRlcm5h
bE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVh
ZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAogICAgIC8vIGFib3V0IHdoYXQgZGF0YSB3ZSBh
Y2Nlc3MgaGVyZSBhbmQgaG93LiBXZSBuZWVkIHRvIGhvbGQgYSBsb2NrIHRvIHByZXZlbnQgbV9p
bWFnZUJ1ZmZlcgogICAgIC8vIGZyb20gYmVpbmcgY2hhbmdlZCB3aGlsZSB3ZSBhY2Nlc3MgaXQu
Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sp
OworICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sgfTsKICAg
ICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLT5leHRlcm5hbE1lbW9yeUNvc3QoKTsKQEAgLTE4MCwxNSArMTgxLDE5IEBAIEhh
c2hTZXQ8RWxlbWVudCo+IENhbnZhc0Jhc2U6OmNzc0NhbnZhc0MKIAogYm9vbCBDYW52YXNCYXNl
OjpoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkgY29uc3QKIHsKLSAgICBhdXRv
KiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIHJldHVybiBjb250ZXh0ICYmIGNv
bnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKTsKKyAgICByZXR1cm4g
bV9jb250ZXh0LT5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCk7Cit9CisKK3Zv
aWQgQ2FudmFzQmFzZTo6c2V0UmVuZGVyaW5nQ29udGV4dChVbmlxdWVSZWY8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4mJiBjb250ZXh0KQoreworICAgIG1fY29udGV4dCA9IFdURk1vdmUoY29udGV4
dCk7CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIo
UmVmUHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4g
Q2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikK
IHsKICAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHJldHVybkJ1ZmZlcjsKICAgICB7Ci0gICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2NrKTsKKyAg
ICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9jayB9OwogICAg
ICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuQnVmZmVy
ID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0K
QEAgLTIwMCw5ICsyMDUsOCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldElt
YWdlCiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBtZW1vcnlDb3N0KCk7CiAgICAgc19hY3RpdmVQ
aXhlbE1lbW9yeSArPSBtX2ltYWdlQnVmZmVyQ29zdCAtIHByZXZpb3VzTWVtb3J5Q29zdDsKIAot
ICAgIGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKGNvbnRleHQg
JiYgbV9pbWFnZUJ1ZmZlciAmJiBwcmV2aW91c01lbW9yeUNvc3QgIT0gbV9pbWFnZUJ1ZmZlckNv
c3QpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ2FudmFzTWVt
b3J5KCpjb250ZXh0KTsKKyAgICBpZiAoIW1fY29udGV4dC0+aXNOb25lKCkgJiYgbV9pbWFnZUJ1
ZmZlciAmJiBwcmV2aW91c01lbW9yeUNvc3QgIT0gbV9pbWFnZUJ1ZmZlckNvc3QpCisgICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KG1fY29udGV4
dC5nZXQoKSk7CiAKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikgewogICAgICAgICBtX2ltYWdlQnVm
ZmVyLT5jb250ZXh0KCkuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXModHJ1ZSk7CkBAIC0yMTcs
NiArMjIxLDIwIEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2UKICAg
ICByZXR1cm4gcmV0dXJuQnVmZmVyOwogfQogCit2b2lkIENhbnZhc0Jhc2U6OmRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpCit7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBvbGRCdWZmZXI7CisKKyAgICB7
CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sgfTsK
KyAgICAgICAgbV9jb250ZXh0U3RhdGVTYXZlciA9IG51bGxwdHI7CisgICAgICAgIG9sZEJ1ZmZl
ciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwgbnVsbHB0cik7CisgICAgfQorICAgIAor
ICAgIHNfYWN0aXZlUGl4ZWxNZW1vcnkgLT0gbV9pbWFnZUJ1ZmZlckNvc3Q7CisgICAgbV9pbWFn
ZUJ1ZmZlckNvc3QgPSAwOworfQorCiBzaXplX3QgQ2FudmFzQmFzZTo6YWN0aXZlUGl4ZWxNZW1v
cnkoKQogewogICAgIHJldHVybiBzX2FjdGl2ZVBpeGVsTWVtb3J5LmxvYWQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQ2FudmFzQmFzZS5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9UeXBlQ2FzdHMuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNzAsNyArNzEsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50U2l6ZSYg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
cigpIGNvbnN0OwotCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgp
IGNvbnN0OwogCiAgICAgdm9pZCBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOwpAQCAt
ODUsNyArODUsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4oKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNhbnZhc0Jh
c2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7ICB9CiAKLSAgICB2aXJ0dWFsIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCA9IDA7CisgICAgY29uc3QgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIHJlbmRlcmluZ0Nv
bnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAogICAgIHZvaWQgYWRkT2JzZXJ2
ZXIoQ2FudmFzT2JzZXJ2ZXImKTsKICAgICB2b2lkIHJlbW92ZU9ic2VydmVyKENhbnZhc09ic2Vy
dmVyJik7CkBAIC0xMDAsOCArMTAxLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRp
ZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpID0gMDsKIAotICAgIHZpcnR1YWwgSW1h
Z2UqIGNvcGllZEltYWdlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvcGll
ZEltYWdlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW1hZ2UqIGNvcGllZEltYWdlKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgPSAwOwogCiAgICAgYm9vbCBo
YXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkgY29uc3Q7CiAKQEAgLTExMiw3ICsx
MTMsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgSW50
U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IHNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJikgY29uc3Q7CisgICAgdm9pZCBz
ZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiYmKTsK
KworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogICAgIHZpcnR1YWwgYm9v
bCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHN0
YXRpYyBzaXplX3QgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKIApAQCAtMTI3LDYgKzEzMSw4IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBzaXplX3QgbV9pbWFnZUJ1ZmZlckNvc3QgeyAwIH07CiAgICAg
bXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcj4gbV9jb250
ZXh0U3RhdGVTYXZlcjsKIAorICAgIFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBt
X2NvbnRleHQ7CisKICAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07CiAjaWYgQVNTRVJU
X0VOQUJMRUQKICAgICBib29sIG1fZGlkTm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkIHsg
ZmFsc2UgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3Bw
CShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNDUgKzQ4LDQyIEBAIEN1c3RvbVBhaW50Q2Fu
dmFzOjpDdXN0b21QYWludENhbnZhcyhTY3IKIEN1c3RvbVBhaW50Q2FudmFzOjp+Q3VzdG9tUGFp
bnRDYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwotCi0g
ICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9yZSB0
aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IEN1c3RvbVBhaW50Q2FudmFz
OjpnZXRDb250ZXh0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4geyBS
ZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCku
aXNOb25lKCkpCisgICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQy
RD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQo
KSkgfSB9OwogCi0gICAgbV9jb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZSgqdGhpcyk7Ci0gICAgZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7CisgICAgYXV0byBjb250ZXh0ID0g
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgY29udGV4dC0+c2V0
VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVlKTsKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KFdU
Rk1vdmUoY29udGV4dCkpOwogCi0gICAgcmV0dXJuIHsgUmVmUHRyPFBhaW50UmVuZGVyaW5nQ29u
dGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkg
fSB9OworICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93
bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9Owog
fQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0Nv
bnRleHQqIGN0eCkgY29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OnJlcGxheURpc3BsYXlM
aXN0KEdyYXBoaWNzQ29udGV4dCYgY3R4KQogewogICAgIEFTU0VSVCghbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIGFuIGludGVybWVkaWF0ZSBidWZmZXIgaXMg
bm90IG5lZWRlZCBpZiB0aGVyZSBhcmUgbm8gY29tcG9zaXRlIG9wZXJhdGlvbnMuCi0gICAgYXV0
byBjbGlwQm91bmRzID0gY3R4LT5jbGlwQm91bmRzKCk7CisgICAgYXV0byBjbGlwQm91bmRzID0g
Y3R4LmNsaXBCb3VuZHMoKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91bmRzLnNpemUoKSwgKmN0eCk7CisgICAgYXV0byBpbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNsaXBCb3VuZHMuc2l6ZSgp
LCBjdHgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGVzdGlu
YXRpb25HcmFwaGljc0NvbnRleHQgPSAmaW1hZ2UtPmNvbnRleHQoKTsKICAgICBtX2Rlc3RpbmF0
aW9uR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLWNsaXBCb3VuZHMubG9jYXRpb24oKSk7Ci0g
ICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRy
OwogCi0gICAgY3R4LT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBjbGlwQm91bmRzKTsKKyAgICBj
dHguZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5kcyk7CiB9CiAKLUltYWdlKiBDdXN0
b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAorSW1hZ2UqIEN1c3RvbVBhaW50Q2Fu
dmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rlc3RpbmF0aW9uR3JhcGhpY3ND
b250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQpAQCAtOTcsMTUgKzk0LDE0
IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSAKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gJm1fY29w
aWVkQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250
ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25H
cmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCiAgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVk
QnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIAotdm9pZCBDdXN0
b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIEN1c3RvbVBhaW50
Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVsbHB0
cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmgJKHJldmlz
aW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDE2IEBAIHB1YmxpYzoKIAogICAgIEV4Y2VwdGlv
bk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGdldENvbnRleHQoKTsKIAotICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdD
b250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBleGlzdGluZ0RyYXdp
bmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRpZERyYXcoY29uc3QgT3B0aW9u
YWw8RmxvYXRSZWN0PiYpIGZpbmFsIHsgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCBmaW5hbCB7IEFTU0VSVChtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0
ICYmIG1fY29waWVkQnVmZmVyKTsgcmV0dXJuIG1fY29waWVkQnVmZmVyLT5iYXNlVHJhbnNmb3Jt
KCk7IH0KLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNs
ZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBm
aW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKIAotICAgIHZvaWQgcmVw
bGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCByZXBsYXlE
aXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OnJl
ZjsKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKQEAgLTc3LDcgKzc2LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRlcmVmQ2FudmFzQmFzZSgpIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBtdXRhYmxlIEdyYXBoaWNzQ29udGV4dCogbV9kZXN0
aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAgICAgbXV0YWJsZSBSZWZQdHI8SW1h
Z2VCdWZmZXI+IG1fY29waWVkQnVmZmVyOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2Nv
cGllZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDYgQEAgSFRNTENhbnZhc0Vs
ZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCgpCiAgICAgLy8gYXZvaWRlZCBpbiBkZXN0cnVjdG9y
cywgYnV0IHdvcmtzIGFzIGxvbmcgYXMgaXQncyBkb25lIGJlZm9yZSBIVE1MQ2FudmFzRWxlbWVu
dCBkZXN0cnVjdHMgY29tcGxldGVseS4KICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95
ZWQoKTsKICAgICBkb2N1bWVudCgpLmNsZWFyQ2FudmFzUHJlcGFyYXRpb24oKnRoaXMpOwotCi0g
ICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9yZSB0
aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDQ1ICsyMzYsNDUgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6c2V0TWF4UGl4ZWxNZW1vcgogCiBFeGNlcHRpb25PcjxPcHRpb25h
bDxSZW5kZXJpbmdDb250ZXh0Pj4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoSlNDOjpK
U0dsb2JhbE9iamVjdCYgc3RhdGUsIGNvbnN0IFN0cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKG1fY29udGV4
dCkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1BsYWNlaG9sZGVyKCkpCisgICAgaWYgKCFy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRl
eHQoKS5pc1BsYWNlaG9sZGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgICAgICBpZiAobV9jb250ZXh0LT5pczJkKCkpIHsKKyAg
ICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsKICAgICAgICAgICAgIGlmICgh
aXMyZFR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVu
ZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
IHsgJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9Owor
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICht
X2NvbnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29u
dGV4dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkgewogICAgICAgICAgICAgaWYgKCFpc0JpdG1hcFJl
bmRlcmVyVHlwZShjb250ZXh0SWQpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxS
ZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dD4geyAmZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0
KSB9IH07CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBS
ZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogICAgICAgICB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgIGlmIChtX2NvbnRleHQtPmlzV2ViR0woKSkgewor
ICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0woKSkgewogICAgICAgICAgICAg
aWYgKCFpc1dlYkdMVHlwZShjb250ZXh0SWQpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwogICAgICAgICAgICAgYXV0
byB2ZXJzaW9uID0gdG9XZWJHTFZlcnNpb24oY29udGV4dElkKTsKLSAgICAgICAgICAgIGlmICh2
ZXJzaW9uID09IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmICFtX2NvbnRleHQtPmlzV2ViR0wxKCkp
CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhcmVu
ZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlv
bmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICBpZiAo
dmVyc2lvbiAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiBtX2NvbnRleHQtPmlzV2ViR0wxKCkp
CisgICAgICAgICAgICBpZiAodmVyc2lvbiAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiByZW5k
ZXJpbmdDb250ZXh0KCkuaXNXZWJHTDEoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9
OworICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29u
dGV4dCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4geyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogI2lmIEVOQUJMRShXRUJHTDIp
Ci0gICAgICAgICAgICBBU1NFUlQoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4
dCkpOwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVm
UHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBP
cHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0
PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkp
IH0gfTsKICNlbmRpZgogICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHUFUpCi0g
ICAgICAgIGlmIChtX2NvbnRleHQtPmlzV2ViR1BVKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmlu
Z0NvbnRleHQoKS5pc1dlYkdQVSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR1BVVHlwZShj
b250ZXh0SWQpKQogICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRl
cmluZ0NvbnRleHQ+IHsgUmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgJmRvd25jYXN0PEdQVUNh
bnZhc0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25h
bDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZkb3duY2Fz
dDxHUFVDYW52YXNDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICAgICAgICAgfQog
I2VuZGlmCiAKQEAgLTM2Nyw3ICszNjQsNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJk
VHlwZShjb25zdCBTCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50
OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQoSFRNTENhbnZh
c0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUpLCB0eXBlKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7
CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICAvLyBNYWtl
IHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUgcGl4ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBjYW4g
c3VwcG9ydC4KICAgICBzaXplX3QgcmVxdWVzdGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgoKSAq
IGhlaWdodCgpOwpAQCAtMzgwLDI2ICszNzcsMjcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBIVE1MQ2FudmFzRWxlbQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBt
X2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92
ZShzZXR0aW5ncyksIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOworICAgIHNldFJlbmRlcmlu
Z0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUo
c2V0dGluZ3MpLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKSk7CiAKICNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVu
ZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFz
LgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4
dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNF
RChIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUodHlwZSksIHR5cGUpOwogCi0gICAgaWYgKG1f
Y29udGV4dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQo
KS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQyZCh0eXBlLCBXVEZNb3Zl
KHNldHRpbmdzKSk7CisKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVy
biBjcmVhdGVDb250ZXh0MmQodHlwZSwgV1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkpOwor
ICAgIHJldHVybiAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdD
b250ZXh0KCkpOwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtNDQ4LDcgKzQ0Niw3IEBAIEdy
YXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uIEhUTUxDYW52YXMKIAogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHTChXZWJHTFZl
cnNpb24gdHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VS
VCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsK
IAogICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00NjUsMjAgKzQ2MywyNCBAQCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlCiAKICAgICAvLyBUT0RPKFdFQlhSKTogZW5zdXJl
IHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgaW4gYSBjb21wYXRpYmxlIGdyYXBoaWNzCiAgICAgLy8g
YWRhcHRlciB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBpbW1lcnNpdmUgZGV2aWNlLgotICAgIG1f
Y29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMs
IHR5cGUpOwotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gVGhpcyBuZXcgY29udGV4
dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBieSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCi0gICAgICAg
IC8vIGZvciBpdCB0byBiZSBjb3JyZWN0bHkgcHJlcGFyZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0
IGlzIGNvbXBvc2l0ZWQuCi0gICAgICAgIGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGF1
dG8gY29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0
cnMsIHR5cGUpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0
cihXVEZNb3ZlKGNvbnRleHQpKSk7CisKKyAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRv
IGJlIG9ic2VydmVkIGJ5IHRoZSBEb2N1bWVudCwgaW4gb3JkZXIKKyAgICAvLyBmb3IgaXQgdG8g
YmUgY29ycmVjdGx5IHByZXBhcmVkRm9yUmVuZGVyaW5nIGJlZm9yZSBpdCBpcyBjb21wb3NpdGVk
LgorICAgIGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1
cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRo
ZSBDYW52YXMuCisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0g
ICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgotICAgICAgICBpbnZhbGlkYXRlU3R5
bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAjaWYgRU5BQkxFKFdFQlhSKQotICAgICAgICBBU1NF
UlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPihtX2NvbnRleHQuZ2V0KCkpLT5pc1hSQ29tcGF0aWJsZSgpKTsKKyAgICBBU1NFUlQoIWF0
dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihy
ZW5kZXJpbmdDb250ZXh0KCkpLmlzWFJDb21wYXRpYmxlKCkpOwogI2VuZGlmCi0gICAgfQogCi0g
ICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5n
ZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihy
ZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1M
Q2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCkBAIC00ODYsMjEgKzQ4OCwyMCBAQCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlCiAgICAgaWYgKCFzaG91bGRFbmFibGVXZWJH
TChkb2N1bWVudCgpLnNldHRpbmdzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmlzV2ViR0woKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNO
b25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShh
dHRycykpOwogCi0gICAgICAgIC8vIFRoZSBwaHJhc2luZyBvZiB0aGVzZSBjaGVja3MgYXZvaWRz
IGNvbXBpbGUtdGltZSBndWFyZHMgZm9yIFdlYkdMMiBzdXBwb3J0LgotICAgICAgICBpZiAodHlw
ZSA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNX
ZWJHTCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAodHlwZSAhPSBX
ZWJHTFZlcnNpb246OldlYkdMMSAmJiBtX2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgLy8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNo
ZWNrcyBhdm9pZHMgY29tcGlsZS10aW1lIGd1YXJkcyBmb3IgV2ViR0wyIHN1cHBvcnQuCisgICAg
aWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5p
c1dlYkdMMSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0
KQotICAgICAgICByZXR1cm4gY3JlYXRlQ29udGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMp
KTsKLSAgICByZXR1cm4gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2Nv
bnRleHQpOworICAgIGlmICh0eXBlICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmlu
Z0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4
dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKQEAgLTUxNSwxOCArNTE2LDE3IEBA
IGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzV2ViR1BVVHlwZShjb24KIEdQVUNhbnZhc0NvbnRl
eHQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc1dl
YkdQVVR5cGUodHlwZSkpOwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVu
ZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5n
cygpLndlYkdQVUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2Nv
bnRleHQgPSBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoKnRoaXMpOwotICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29t
cG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICB9CisgICAgc2V0UmVuZGVyaW5n
Q29udGV4dChHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKIAotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KKyAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBv
c2l0aW9uKCk7CisKKyAgICByZXR1cm4gJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50
OjpnZXRDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTUzNiwxMiArNTM2LDEz
IEBAIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXQKICAgICBpZiAoIWRv
Y3VtZW50KCkuc2V0dGluZ3MoKS53ZWJHUFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pc1dlYkdQVSgpKQorICAg
IGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVD
b250ZXh0V2ViR1BVKHR5cGUpOworCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJH
UFUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHUFUodHlwZSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdQVUNhbnZhc0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAm
ZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCkBAIC01NTQsMjQgKzU1NSwyOSBAQCBib29sIEhUTUxDYW52
YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRlcmVyCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQq
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3QgU3Ry
aW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdz
KQogewogICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFw
UmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJU
KHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncykpOwor
ICAgIHNldFJlbmRlcmluZ0NvbnRleHQoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGUoKnRoaXMsIFdURk1vdmUoc2V0dGluZ3MpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIg
YW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGlu
dmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQo
KSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJl
bmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5
cGUsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJl
clR5cGUodHlwZSkpOwotICAgIGlmICghbV9jb250ZXh0KQorICAgIAorICAgIGlmIChyZW5kZXJp
bmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0Qml0bWFw
UmVuZGVyZXIodHlwZSwgV1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIAor
ICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6ZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiByZWN0KQpAQCAtNjE1LDE0
ICs2MjEsMTUgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgIGludCBoID0g
bGltaXRUb09ubHlIVE1MTm9uTmVnYXRpdmUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihoZWlnaHRBdHRyKSwgZGVmYXVsdEhlaWdodCk7CiAKICAgICByZXNldEdyYXBoaWNzQ29udGV4
dFN0YXRlKCk7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0
LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9j
b250ZXh0KS5yZXNldCgpOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJl
bmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNldCgpOwogCiAgICAgSW50U2l6ZSBvbGRTaXpl
ID0gc2l6ZSgpOwogICAgIEludFNpemUgbmV3U2l6ZSh3LCBoKTsKKwogICAgIC8vIElmIHRoZSBz
aXplIG9mIGFuIGV4aXN0aW5nIGJ1ZmZlciBtYXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBp
bnN0ZWFkIG9mIHJlYWxsb2NhdGluZy4KICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5
IGRvbmUgZm9yIDJEIGNhbnZhc2VzIGZvciBub3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdl
QnVmZmVyICYmIG9sZFNpemUgPT0gbmV3U2l6ZSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
czJkKCkgJiYgYnVmZmVyKCkgJiYgbV9jb250ZXh0LT5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCkt
PmNvbG9yU3BhY2UoKSAmJiBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBp
eGVsRm9ybWF0KCkpIHsKKyAgICBpZiAobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6
ZSA9PSBuZXdTaXplICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkgJiYgYnVmZmVyKCkgJiYg
cmVuZGVyaW5nQ29udGV4dCgpLmNvbG9yU3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgp
ICYmIHJlbmRlcmluZ0NvbnRleHQoKS5waXhlbEZvcm1hdCgpID09IGJ1ZmZlcigpLT5waXhlbEZv
cm1hdCgpKSB7CiAgICAgICAgIGlmICghbV9kaWRDbGVhckltYWdlQnVmZmVyKQogICAgICAgICAg
ICAgY2xlYXJJbWFnZUJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CkBAIC02MzEsNyArNjM4LDcg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgIHNldFN1cmZhY2VTaXplKG5l
d1NpemUpOwogCiAgICAgaWYgKGlzR1BVQmFzZWQoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAg
ICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0
KS5yZXNoYXBlKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRD
YW52YXNSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpLnJlc2hhcGUod2lkdGgo
KSwgaGVpZ2h0KCkpOwogCiAgICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKGlzPFJlbmRlckhUTUxDYW52YXM+KHJlbmRlcmVyKSkgewpAQCAtNjUwLDEzICs2NTcs
MTIgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9j
b250ZXh0KTsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlm
IChtX2NvbnRleHQtPmlzMmQoKSB8fCBtX2NvbnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkKKyAg
ICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSB8fCByZW5kZXJpbmdDb250ZXh0KCkuaXNC
aXRtYXBSZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgaWYg
KCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQo
KS5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlbmRl
ckJveCgpICYmIHJlbmRlckJveCgpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCkBAIC02
NjgsNDIgKzY3NCwzNSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFz
CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgTGF5b3V0UmVjdCYgcikKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBt
X2NvbnRleHQtPmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKTsKKyAgICByZW5kZXJpbmdDb250
ZXh0KCkuY2xlYXJBY2N1bXVsYXRlZERpcnR5UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBh
aW50aW5nRGlzYWJsZWQoKSkgewotICAgICAgICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKLQot
ICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBzaG91bGRQYWludCA9IHBhaW50
c0ludG9DYW52YXNCdWZmZXIoKSB8fCBkb2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1NuYXBz
aG90dGluZzsKLSAgICAgICAgICAgIGlmIChzaG91bGRQYWludCkgewotICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKTsKLSAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQorICAgICAgICBib29sIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0Nh
bnZhc0J1ZmZlcigpIHx8IGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5n
OwogICAgICAgICBpZiAoc2hvdWxkUGFpbnQpIHsKKyAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRl
eHQoKS5wcmVwYXJlRm9yRGlzcGxheVdpdGhQYWludCgpOworICAgICAgICAgICAgcmVuZGVyaW5n
Q29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgICAg
IGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChJbWFn
ZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0
byogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBzbmFwcGVkSW50UmVjdChyKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKSkKLSAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFt
ZSgqbV9jb250ZXh0KTsKKyAgICBpZiAoVU5MSUtFTFkocmVuZGVyaW5nQ29udGV4dCgpLmhhc0Fj
dGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSkpCisgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUocmVuZGVyaW5nQ29udGV4
dCgpKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXNHUFVCYXNlZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzR1BVQmFzZWQoKTsKKyAgICBy
ZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgpLmlzR1BVQmFzZWQoKTsKIH0KIAogdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6c2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBD
YW52YXNCYXNlOjpzZXRTaXplKHNpemUpOwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0g
ZmFsc2U7Ci0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CisgICAgY2xlYXJJbWFnZUJ1ZmZl
cigpOwogICAgIGNsZWFyQ29waWVkSW1hZ2UoKTsKIH0KIApAQCAtNzk1LDExICs3OTQsMTIgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gSFRNTENhbnZhc0VsZW1lbnQ6OnRvQgogI2lmIEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogRXhjZXB0aW9uT3I8UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYW52
YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbihTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0KQogewotICAgIGlmIChtX2NvbnRleHQpCisgICAgaWYgKHJlbmRlcmluZ0Nv
bnRleHQoKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0
ZUVycm9yIH07CiAKLSAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPFBsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dD4oKnRoaXMpOwotICAgIGlmIChtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkK
KyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlKCp0aGlzKSk7CisKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxlcmF0ZWQo
KSkKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCiAgICAg
cmV0dXJuIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlKGNvbnRleHQsICp0aGlzKTsKQEAgLTgwOSwx
MCArODA5LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2EKIFJl
ZlB0cjxJbWFnZURhdGE+IEhUTUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEoKQogewogI2lm
IEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9j
b250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihy
ZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFQSVN0YXRpc3RpY3NFbmFibGVkKCkpCiAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRPYnNlcnZlcjo6c2hhcmVkKCkubG9nQ2FudmFzUmVhZChkb2N1bWVudCgp
KTsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpt
X2NvbnRleHQpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0
KCkpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7CiAgICAgfQogI2VuZGlmCiAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NTgsMjUgKzk1OCwxOSBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5n
IGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KICAgICBhdXRvIHVzZURpc3BsYXlM
aXN0ID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5n
cygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSkgPyBTaG91bGRVc2VEaXNwbGF5TGlzdDo6
WWVzIDogU2hvdWxkVXNlRGlzcGxheUxpc3Q6Ok5vOwogCi0gICAgYXV0byBbY29sb3JTcGFjZSwg
cGl4ZWxGb3JtYXRdID0gWyZdIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6OnBhaXIgeyBtX2NvbnRleHQtPmNvbG9yU3BhY2UoKSwgbV9jb250ZXh0LT5w
aXhlbEZvcm1hdCgpIH07Ci0gICAgICAgIHJldHVybiBzdGQ6OnBhaXIgeyBEZXN0aW5hdGlvbkNv
bG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCB9OwotICAgIH0oKTsKLQotICAgIHNl
dEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1
c2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6Q2FudmFzLCAxLCBjb2xvclNwYWNlLCBw
aXhlbEZvcm1hdCwgaG9zdFdpbmRvdykpOworICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZhc0VsZW1l
bnQqPih0aGlzKS0+c2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEs
IHJlbmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCksIHJlbmRlcmluZ0NvbnRleHQoKS5waXhl
bEZvcm1hdCgpLCBob3N0V2luZG93KSk7CiAKICAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkpCiAgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5z
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4
dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgeworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMy
ZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBp
ZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KICAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAobV9jb250ZXh0ICYmIGJ1ZmZlcigpICYmIGJ1ZmZl
cigpLT5wcmVmZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkpCisgICAgaWYgKCFyZW5kZXJpbmdD
b250ZXh0KCkuaXNOb25lKCkgJiYgYnVmZmVyKCkgJiYgYnVmZmVyKCktPnByZWZlcnNQcmVwYXJh
dGlvbkZvckRpc3BsYXkoKSkKICAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+
KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKIH0KIApAQCAtMTAwMywzMSArOTk3LDMw
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldEltYWdlQnVmZmVyQW4KICAgICBkaWREcmF3
KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogfQogCi1JbWFnZSogSFRNTENhbnZh
c0VsZW1lbnQ6OmNvcGllZEltYWdlKCkgY29uc3QKK0ltYWdlKiBIVE1MQ2FudmFzRWxlbWVudDo6
Y29waWVkSW1hZ2UoKQogewogICAgIGlmICghbV9jb3BpZWRJbWFnZSAmJiBidWZmZXIoKSkgewot
ICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgICAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZl
cigpLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OwogICAgIH0KICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIAotdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjbGVhckltYWdlQnVmZmVyKCkKIHsKICAgICBBU1NFUlQobV9oYXNDcmVhdGVkSW1h
Z2VCdWZmZXIpOwogICAgIEFTU0VSVCghbV9kaWRDbGVhckltYWdlQnVmZmVyKTsKLSAgICBBU1NF
UlQobV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSk7CiAK
ICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSB0cnVlOwogCi0gICAgaWYgKGlzPENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkpIHsKKyAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIE5vIG5lZWQg
dG8gdW5kbyB0cmFuc2Zvcm1zL2NsaXAvZXRjLiBiZWNhdXNlIHdlIGFyZSBjYWxsZWQgcmlnaHQg
YWZ0ZXIgdGhlIGNvbnRleHQgaXMgcmVzZXQuCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuY2xlYXJSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdo
dCgpKTsKKyAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJp
bmdDb250ZXh0KCkpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgfQog
fQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkgY29uc3QKK3Zv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAgIG1fY29waWVk
SW1hZ2UgPSBudWxscHRyOwogICAgIG1fZGlkQ2xlYXJJbWFnZUJ1ZmZlciA9IGZhbHNlOwpAQCAt
MTA0MSw5ICsxMDM0LDkgQEAgY29uc3QgY2hhciogSFRNTENhbnZhc0VsZW1lbnQ6OmFjdGl2ZURP
TQogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0CiB7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsKICAgICAgICAgLy8gV2ViR0wgcmVuZGVy
aW5nIGNvbnRleHQgbWF5IGZpcmUgY29udGV4dGxvc3QgLyBjb250ZXh0Y2hhbmdlIC8gY29udGV4
dHJlc3RvcmVkIGV2ZW50cyBhdCBhbnkgcG9pbnQuCi0gICAgICAgIHJldHVybiBtX2hhc1JlbGV2
YW50V2ViR0xFdmVudExpc3RlbmVyICYmICFkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPigqbV9jb250ZXh0KS5pc0NvbnRleHRVbnJlY292ZXJhYmx5TG9zdCgpOworICAgICAgICBy
ZXR1cm4gbV9oYXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKS5pc0NvbnRleHRVbnJlY292
ZXJhYmx5TG9zdCgpOwogICAgIH0KICNlbmRpZgogCkBAIC0xMDc3LDcgKzEwNzAsNyBAQCBOb2Rl
OjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1MQ2FuCiAgICAgICAgIGFkZE9ic2VydmVy
KGRvY3VtZW50KTsKICAgICAgICAgLy8gRHJhd2luZyBjb21tYW5kcyBtYXkgaGF2ZSBiZWVuIGlz
c3VlZCB0byB0aGUgY2FudmFzIGJlZm9yZSBub3csIHNvIHdlIG5lZWQgdG8KICAgICAgICAgLy8g
dGVsbCB0aGUgZG9jdW1lbnQgaWYgd2UgbmVlZCBwcmVwYXJhdGlvbi4KLSAgICAgICAgaWYgKG1f
Y29udGV4dCAmJiBtX2NvbnRleHQtPmNvbXBvc2l0aW5nUmVzdWx0c05lZWRVcGRhdGluZygpKQor
ICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmNvbXBvc2l0aW5nUmVzdWx0c05lZWRVcGRh
dGluZygpKQogICAgICAgICAgICAgZG9jdW1lbnQuY2FudmFzQ2hhbmdlZCgqdGhpcywgRmxvYXRS
ZWN0IHsgfSk7CiAgICAgfQogCkBAIC0xMDk2LDIwICsxMDg5LDE5IEBAIHZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXMKIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6bmVl
ZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKQogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9j
b250ZXh0LT5uZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpOworICAgIHJldHVybiByZW5kZXJp
bmdDb250ZXh0KCkubmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKIH0KIAogdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAgIEFTU0VSVChuZWVkc1By
ZXBhcmF0aW9uRm9yRGlzcGxheSgpKTsKIAotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1f
Y29udGV4dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkucHJl
cGFyZUZvckRpc3BsYXkoKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9s
bGVkQnlPZmZzY3JlZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250
ZXh0LT5pc1BsYWNlaG9sZGVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQoKS5pc1Bs
YWNlaG9sZGVyKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkgb3ZlcnJpZGU7CiAKLSAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVu
ZGVyaW5nQ29udGV4dD4+IGdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0
cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1
bWVudHMpOwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogZ2V0Q29udGV4dChjb25zdCBT
dHJpbmcmKTsKIAogICAgIHN0YXRpYyBib29sIGlzMmRUeXBlKGNvbnN0IFN0cmluZyYpOwpAQCAt
MTE2LDggKzExNCw4IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8TWVkaWFTdHJlYW0+
PiBjYXB0dXJlU3RyZWFtKERvY3VtZW50JiwgT3B0aW9uYWw8ZG91YmxlPiYmIGZyYW1lUmVxdWVz
dFJhdGUpOwogI2VuZGlmCiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29w
aWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKICAg
ICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoKTsKIAogICAgIFNlY3VyaXR5T3JpZ2lu
KiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTY0LDcgKzE2Miw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZXNldCgpOwogCiAgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJJbWFnZUJ1ZmZlcigpIGNvbnN0OworICAgIHZvaWQg
Y2xlYXJJbWFnZUJ1ZmZlcigpOwogCiAgICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCkBAIC0xODMs
NyArMTgxLDYgQEAgcHJpdmF0ZToKICAgICBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3Vs
dCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmlu
YWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJO
b2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBmaW5hbDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgbXV0YWJsZSBSZWZQdHI8
SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxh
dGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQg
Zm9yIENTU0NhbnZhc1ZhbHVlKS4KIAogICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAJ
KHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDkgKzExNSw2IEBAIE9mZnNjcmVlbkNhbnZhczo6
T2Zmc2NyZWVuQ2FudmFzKFNjcmlwdEUKIE9mZnNjcmVlbkNhbnZhczo6fk9mZnNjcmVlbkNhbnZh
cygpCiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2Nv
bnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFn
ZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0KIAogdW5zaWduZWQgT2Zm
c2NyZWVuQ2FudmFzOjp3aWR0aCgpIGNvbnN0CkBAIC0xNTQsNiArMTUxLDIzIEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXNldCgpOwogfQogCitzdGF0
aWMgYm9vbCBpczJkVHlwZShSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSkKK3sKKyAg
ICByZXR1cm4gY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6Ol8yZDsKK30KKwor
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0
ZU9mZnNjcmVlbkNvbnRleHQyZChSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSkKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKGlzMmRUeXBlKGNvbnRleHRUeXBlKSwgY29udGV4dFR5cGUpOwor
ICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOworCisgICAgLy8gRklYTUU6
IEFkZCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIGVub3VnaCBwaXhlbCBtZW1vcnkuIFNlZSBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkLgorCisgICAgc2V0UmVuZGVyaW5nQ29u
dGV4dChPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcykpOwor
CisgICAgcmV0dXJuICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KHJlbmRlcmluZ0NvbnRleHQoKSk7Cit9CisKICNpZiBFTkFCTEUoV0VCR0wpCiBzdGF0aWMgYm9v
bCByZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JXZWJHTCgpCiB7CkBAIC0xNzUsMjgg
KzE4OSw0MSBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbmFibGVXZWJHTChib29sIHdlYkdMCiAgICAg
cmV0dXJuIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwogfQogCi12b2lkIE9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRU
eXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCitzdGF0aWMgYm9vbCBpc1dlYkdM
VHlwZShSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSkKIHsKLSAgICBBU1NFUlQoIW1f
Y29udGV4dCk7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpXZWJnbCB8fCBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wyOwor
fQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNv
bnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyYmIGF0dHJzKQoreworICAgIEFTU0VSVChpc1dlYkdMVHlwZShjb250ZXh0VHlw
ZSkpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCiAgICAgYXV0
byBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gdGhpcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkp
IHsKICAgICAgICAgV29ya2VyR2xvYmFsU2NvcGUmIHdvcmtlckdsb2JhbFNjb3BlID0gZG93bmNh
c3Q8V29ya2VyR2xvYmFsU2NvcGU+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KTsKICAgICAgICAg
aWYgKCFzaG91bGRFbmFibGVXZWJHTCh3b3JrZXJHbG9iYWxTY29wZS5zZXR0aW5nc1ZhbHVlcygp
LndlYkdMRW5hYmxlZCwgd29ya2VyR2xvYmFsU2NvcGUuc2V0dGluZ3NWYWx1ZXMoKS5hY2NlbGVy
YXRlZENvbXBvc2l0aW5nRW5hYmxlZCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9IGVsc2UgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PmlzRG9jdW1lbnQoKSkgewogICAgICAgICBhdXRvJiBzZXR0aW5ncyA9IGRvd25jYXN0PERvY3Vt
ZW50Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkuc2V0dGluZ3MoKTsKICAgICAgICAgaWYgKCFz
aG91bGRFbmFibGVXZWJHTChzZXR0aW5ncy53ZWJHTEVuYWJsZWQoKSwgc2V0dGluZ3MuYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKwogICAgIEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uIHdl
YkdMVmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDE7CiAjaWYg
RU5BQkxFKFdFQkdMMikKICAgICB3ZWJHTFZlcnNpb24gPSAoY29udGV4dFR5cGUgPT0gUmVuZGVy
aW5nQ29udGV4dFR5cGU6OldlYmdsKSA/IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpX
ZWJHTDEgOiBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0oY29udGV4dFR5cGUpOwogI2VuZGlmCi0gICAgbV9jb250ZXh0ID0gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgd2ViR0xWZXJzaW9u
KTsKKworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0
ZSgqdGhpcywgYXR0cnMsIHdlYkdMVmVyc2lvbik7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRlcmluZ0NvbnRleHQobWFrZVVuaXF1ZVJl
ZkZyb21Ob25OdWxsVW5pcXVlUHRyKGNvbnRleHQpKTsKKyAgICByZXR1cm4gJmRvd25jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCkBAIC0yMDYsNDQgKzIzMyw1MyBAQCBFeGNlcHRpb25PcjxPcHRp
b25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDCiAgICAgaWYgKG1fZGV0YWNoZWQpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgaWYgKGNvbnRleHRU
eXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpfMmQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4
dCkgewotICAgICAgICAgICAgaWYgKCFpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpKQorICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKSB7
CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpKSB7CisgICAgICAgICAgICBp
ZiAoIWlzMmRUeXBlKGNvbnRleHRUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdU
Rjo6bnVsbG9wdCB9IH07Ci0gICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7
IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0g
fTsKICAgICAgICAgfQogCi0gICAgICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqdGhpcyk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0
KQotICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwotCi0gICAgICAgIHJl
dHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93
bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSB9IH0g
fTsKLSAgICB9CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGVsc2UgewotICAgICAgICBpZiAobV9j
b250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9j
b250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkg
fSB9IH07CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWlzV2ViR0xUeXBlKGNvbnRleHRUeXBlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgICAgICBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogI2lmIEVOQUJMRShXRUJH
TDIpCi0gICAgICAgICAgICBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9
IH07CisgICAgICAgICAgICBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5n
Q29udGV4dCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJp
bmdDb250ZXh0KCkpIH0gfSB9OworI2VuZGlmCiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybiB7
IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICAgICAgfQogCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgfQorCisg
ICAgaWYgKGlzMmRUeXBlKGNvbnRleHRUeXBlKSkgeworICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIHBhc3NpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuCisgICAg
ICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZU9mZnNjcmVlbkNvbnRleHQyZChjb250ZXh0VHlwZSk7
CisgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxs
b3B0IH0gfTsKKyAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCpjb250ZXh0KSB9IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYg
KGlzV2ViR0xUeXBlKGNvbnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29u
dmVydDxJRExEaWN0aW9uYXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwgIWFyZ3Vt
ZW50cy5pc0VtcHR5KCkgPyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkp
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGlu
Z0V4Y2VwdGlvbkVycm9yIH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0
VHlwZSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQorICAg
ICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUsIFdURk1v
dmUoYXR0cmlidXRlcykpOworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1
cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICBp
ZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsg
UmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ+KCpjb250ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKm1fY29udGV4dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29u
dGV4dCkgfSB9IH07CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg4LDEwIEBAIEV4Y2Vw
dGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8UmVmUHRy
PEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQog
ewotICAgIGlmIChtX2RldGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0YWNoZWQg
fHwgcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdl
Qml0bWFwPiB7IG51bGxwdHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNCwxNSBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZlcigpLCB0
byBhdm9pZCByZXNldHRpbmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFrZSBhIGNv
cHkgYW5kCiAgICAgICAgIC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVyIHRoYW4g
cmV0dXJuaW5nIHRoZSBvcmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9
IGJ1ZmZlcigpLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJ1ZmZl
cigpLT5sb2dpY2FsU2l6ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdpbmdDb250
ZXh0KCkpOwotICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhckNhbnZh
cygpOwogICAgICAgICBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIHsgSW1h
Z2VCaXRtYXA6OmNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJDb3B5KSwg
b3JpZ2luQ2xlYW4oKSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxp
emF0aW9uU3RhdGUoKSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1dG8gd2Vi
R0xDb250ZXh0ID0gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCk7
CisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkg
eworICAgICAgICBhdXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1
cHBvc2VkIHRvIGNyZWF0ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwogICAgICAg
ICAvLyBzdG9yZSBmcm9tIHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBmb3Igbm93
IHdlJ2xsIGp1c3QKQEAgLTM1OCwyMCArMzk0LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpk
aWREcmF3KGNvbnN0IE9wdGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3Qp
OwogfQogCi1JbWFnZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFn
ZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1
ZmZlcigpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRl
eHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2NvcGllZElt
YWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQog
Ci12b2lkIE9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIE9m
ZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9
IG51bGxwdHI7CiB9CkBAIC00MzEsOCArNDY2LDggQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNv
bW1pdFRvUGxhY2Vob2xkZQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVHJhbnNm
ZXIgdGV4dHVyZSBvdmVyIGlmIHdlJ3JlIHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCi0g
ICAgaWYgKG1fY29udGV4dCAmJiAobV9jb250ZXh0LT5pc1dlYkdMKCkgfHwgbV9jb250ZXh0LT5p
c0FjY2VsZXJhdGVkKCkpKQotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKCk7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkgfHwgcmVu
ZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxlcmF0ZWQoKSkKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAKICAgICBpZiAobV9wbGFjZWhv
bGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UpIHsKICAgICAgICAgYXV0byBidWZmZXJDb3B5ID0g
aW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkpOwpAQCAtNDc5LDcgKzUxNCw3IEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJpdG1h
cDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKmNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCi1SZWZQdHI8SW1h
Z2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKK1JlZlB0
cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKQogewogICAg
IEFTU0VSVChtX2RldGFjaGVkKTsKIApAQCAtNDk0LDcgKzUyOSw3IEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpyZXNldCgpCiB7CiAgICAgcmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwogICAg
IGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkucmVzZXQoKTsKKyAgICAgICAgZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpLnJlc2V0KCk7CiAKICAgICBtX2hh
c0NyZWF0ZWRJbWFnZUJ1ZmZlciA9IGZhbHNlOwogICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCShyZXZpc2lvbiAyNzcx
NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjIsMTYgKzEyMiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0aCh1bnNp
Z25lZCk7CiAgICAgdm9pZCBzZXRIZWlnaHQodW5zaWduZWQpOwogCi0gICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQotCiAgICAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8T2Zmc2NyZWVuUmVuZGVy
aW5nQ29udGV4dD4+IGdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIFJlbmRlcmluZ0Nv
bnRleHRUeXBlLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMp
OwogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IHRyYW5zZmVyVG9JbWFnZUJp
dG1hcCgpOwogICAgIHZvaWQgY29udmVydFRvQmxvYihJbWFnZUVuY29kZU9wdGlvbnMmJiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJik7CiAKICAgICB2b2lkIGRpZERyYXcoY29uc3QgT3B0aW9uYWw8
RmxvYXRSZWN0PiYpIGZpbmFsOwogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmlu
YWw7Ci0gICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2Uq
IGNvcGllZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CiAKQEAgLTE0OCw3ICsxNDYsNiBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0KICAgICBPZmZzY3Jl
ZW5DYW52YXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpOwogCiAgICAgYm9vbCBpc09mZnNjcmVlbkNhbnZhcygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KQEAgLTE2NSwxMiArMTYyLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNldFNpemUoY29uc3QgSW50U2l6ZSYpIGZpbmFsOwogCisgICAgT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4
dFR5cGUpOwogI2lmIEVOQUJMRShXRUJHTCkKLSAgICB2b2lkIGNyZWF0ZUNvbnRleHRXZWJHTChS
ZW5kZXJpbmdDb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmID0geyB9KTsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5n
Q29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJik7CiAjZW5kaWYKIAogICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IHRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0OworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gdGFr
ZUltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlc2V0KCk7CiAKQEAgLTE3OCw4ICsxNzYsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgcHVzaEJ1ZmZlclRvUGxhY2Vob2xkZXIoKTsKICAgICB2b2lk
IHNjaGVkdWxlQ29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcygpOwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKLQogICAgIC8vIG1faGFzQ3Jl
YXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBk
aWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJ
bWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3
MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTEgKzY5LDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpCitVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpCiB7Ci0gICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gc3Rk
Ojp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obmV3IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpLCB1c2VzQ1NTQ29tcGF0aWJpbGl0
eVBhcnNlTW9kZSkpOworICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IG1ha2VVbmlxdWVSZWZG
cm9tUmVmZXJlbmNlKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcywgV1RGTW92
ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CiAKLSAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQoKnJl
bmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRl
Q2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250ZXh0LmdldCgpKTsKIAogICAgIHJl
dHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDI3NzE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFRleHRNZXRyaWNzOwog
Y2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2Rl
KTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRl
KENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVz
ZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKIAogICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogCiAgICAgQ2FudmFzQmFzZSYgY2FudmFz
QmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNO
b25lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViR0wxKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJHTDIoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgLy8gdXNlZCBmb3Ig
Y29tcG9zaXRpbmcgcHVycG9zZXMuCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5
V2l0aFBhaW50KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGJvb2wgaGFzQWN0aXZlSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWN0aXZlSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQogICAgIHZvaWQgc2V0SGFzQWN0aXZlSW5zcGVjdG9yQ2Fu
dmFzQ2FsbFRyYWNlcihib29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIpIHsg
bV9oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyID0gaGFzQWN0aXZlSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlcjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9u
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChDYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSk7CisKK1VuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0Tm9uZT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZShDYW52YXNCYXNlJiBj
YW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoY2FudmFzKSk7Cit9CisKK0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZShDYW52YXNCYXNlJiBjYW52YXMp
CisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsgY2FudmFzIH0KK3sKK30KKworQ2FudmFz
UmVuZGVyaW5nQ29udGV4dE5vbmU6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSgpID0gZGVm
YXVsdDsKKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUgZmluYWwgOiBwdWJsaWMgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZSk7CitwdWJsaWM6CisgICAgc3RhdGljIFVuaXF1ZVJlZjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZT4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKworICAgIHZpcnR1YWwg
fkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKCk7CisKK3ByaXZhdGU6CisgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFzZSYpOworCisgICAgYm9vbCBpc05vbmUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0Miwx
MSBAQCBzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlCiBzdGF0aWMgUmVu
ZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsKICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52
YXMsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCitVbmlx
dWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7Ci0gICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4obmV3IEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpKSk7CisgICAgYXV0
byByZW5kZXJpbmdDb250ZXh0ID0gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOwogCi0g
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250
ZXh0KCpyZW5kZXJpbmdDb250ZXh0KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQocmVuZGVyaW5nQ29udGV4dC5nZXQoKSk7CiAK
ICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oCShy
ZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6
IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNC
YXNlJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJik7CisgICAgc3RhdGlj
IFVuaXF1ZVJlZjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNl
JiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJik7CiAKICAgICBlbnVtIGNs
YXNzIEJpdG1hcE1vZGUgewogICAgICAgICBWYWxpZCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNiArNDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIAorVW5p
cXVlUmVmPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gT2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQoreworICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRChjYW52YXMpKTsKK30KKwogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYgY2Fu
dmFzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZShjYW52YXMsIGZhbHNlKQog
ewpAQCAtMTA4LDcgKzExMyw4IEBAIENhbnZhc0RpcmVjdGlvbiBPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmcKICAgICByZXR1cm4gRGlyZWN0aW9uOjpMdHI7CiB9CiAKLWF1dG8gT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAtPiBjb25zdCBGb250UHJveHkqIHsK
K2F1dG8gT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAtPiBj
b25zdCBGb250UHJveHkqCit7CiAgICAgaWYgKCFzdGF0ZSgpLmZvbnQucmVhbGl6ZWQoKSkKICAg
ICAgICAgc2V0Rm9udChzdGF0ZSgpLnVucGFyc2VkRm9udCk7CiAgICAgcmV0dXJuICZzdGF0ZSgp
LmZvbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjc3MTQy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuaCIKLQogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zNiw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKwogICAgIHZp
cnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAgICAgT2Zmc2Ny
ZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxPZmZzY3JlZW5DYW52
YXM+KGNhbnZhc0Jhc2UoKSk7IH0KQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIFJlZjxU
ZXh0TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogcHJpdmF0ZToK
KyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOworCiAg
ICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7CiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNw
cAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+
IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQorVW5p
cXVlUmVmPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6
Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihuZXcgUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoY2Fu
dmFzKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7CiB9CiAKIFBhaW50UmVuZGVyaW5nQ29udGV4dDJE
OjpQYWludFJlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJiBjYW52YXMpCkBAIC00Nyw0ICs0
Nyw1IEBAIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpQYWludFJlbmRlcmluZ0MKIFBhaW50UmVu
ZGVyaW5nQ29udGV4dDJEOjp+UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoKSA9IGRlZmF1bHQ7CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9u
IDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29u
dGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTggKzM2LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CisgICAgc3RhdGlj
IFVuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsK
IAogICAgIHZpcnR1YWwgflBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKICAgICBDdXN0b21Q
YWludENhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8Q3VzdG9tUGFpbnRD
YW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzUGFpbnQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBQYWludFJlbmRlcmluZ0NvbnRl
eHQyRChDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzUGFpbnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ0FOVkFTUkVOREVSSU5HQ09OVEVYVChXZWJDb3JlOjpQYWludFJlbmRl
cmluZ0NvbnRleHQyRCwgaXNQYWludCgpKQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxh
Y2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3
LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiAKK1VuaXF1ZVJlZjxQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ+IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZh
c0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2Uo
Km5ldyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoY2FudmFzKSk7Cit9CisKIFBsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jh
c2UmIGNhbnZhcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQorICAgIDog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9CisgICAgLCBtX2ltYWdlQnVmZmVyUGlw
ZSB7IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkgfQogewotICAgIG1faW1hZ2VCdWZmZXJQaXBl
ID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZhc0VsZW1lbnQqIFBs
YWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dC5oCShyZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9Q
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMgKzM3
LDE1IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFBsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJsaWM6
Ci0gICAgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0
aWMgVW5pcXVlUmVmPFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jh
c2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdDsKIAogICAgIGNv
bnN0IFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+JiBpbWFnZUJ1ZmZlclBpcGUoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlQnVmZmVyUGlwZTsgfQogCiBwcml2YXRlOgorICAgIFBsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CisKICAgICBib29sIGlzUGxhY2Vob2xkZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjc3
MTQyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDEsNyArNDg0MSw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgLy8gc28gZm9yIFdlYkdMIDEu
MCB1cGxvYWRzLCBkZWZlciBtZWFzdXJpbmcgdGhlaXIgcmVjdGFuZ2xlIGFzIGxvbmcgYXMgcG9z
c2libGUuCiAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZmFsc2UsIGlucHV0U291
cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VIZWlnaHQpOwogICAgICAgICByZXR1cm4g
eyB9OwotICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBjYW52YXMp
IC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICB9LCBbJl0oUmVmUHRyPEhUTUxDYW52YXNFbGVt
ZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CiAgICAgICAgIGF1dG8gdmFsaWRh
dGlvblJlc3VsdCA9IHZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoZnVuY3Rpb25OYW1lLCBjYW52
YXMuZ2V0KCkpOwogICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
ICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCShy
ZXZpc2lvbiAyNzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKICNpZiBFTkFCTEUoV0VCR1BVKQot
c3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2aWNlKQorc3Rh
dGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKGNvbnN0
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2aWNlKQog
ewogICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0KSkgewogICAgICAgICBhdXRv
JiBjb250ZXh0R1BVID0gZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCk7CkBAIC0x
OTUsNyArMTk1LDcgQEAgV2ViR1BVRGV2aWNlKiBJbnNwZWN0b3JDYW52YXM6OmRldmljZUNvbgog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZpY2VG
b3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0Citi
b29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRldmlj
ZSA9IGRldmljZUNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGNhbnZhc0lmQ29udGV4dE1hdGNo
ZXNEZXZpY2UoY29udGV4dCwgKmRldmljZSk7CkBAIC0xMDc2LDE2ICsxMDc2LDE2IEBAIFN0cmlu
ZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnQKICAgICB9CiAKICNpZiBFTkFCTEUo
V0VCR0wpCi0gICAgYXV0byogY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAg
ICBhdXRvJiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29udGV4dCgpOwogICAgIGlmIChpczxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93bmNhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZv
ckluc3BlY3Rvcih0cnVlKTsKKyAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZT4oY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKHRydWUpOwog
I2VuZGlmCiAKICAgICBFeGNlcHRpb25PcjxVbmNhY2hlZFN0cmluZz4gcmVzdWx0ID0gbm9kZS0+
dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVh
ckZvckluc3BlY3RvcihmYWxzZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3RvcihmYWxz
ZSk7CiAjZW5kaWYKIAogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHJldmlzaW9uIDI3NzE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoV0VCR1BVKQog
ICAgIFdlYkdQVURldmljZSogZGV2aWNlQ29udGV4dCgpIGNvbnN0OwotICAgIGJvb2wgaXNEZXZp
Y2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKSBjb25zdDsKKyAgICBi
b29sIGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDI3NzE0
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnZhc0FnZW50KENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpCitzdGF0aWMgSW5z
cGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNBZ2VudChjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQogewogICAgIEFTU0VSVChJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25QdWJsaWM6Omhhc0Zyb250ZW5kcygpKTsKIApAQCAtODMsNyArODMs
NyBAQCBzdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52CiB9CiAKICNkZWZp
bmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFyZ3VtZW50VHlwZSkgXAotT3B0aW9uYWw8
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IEluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
YW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKK09wdGlvbmFs
PEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBcCiB7
IFwKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQoY2FudmFz
UmVuZGVyaW5nQ29udGV4dCkpIFwKICAgICAgICAgcmV0dXJuIGNhbnZhc0FnZW50LT5wcm9jZXNz
QXJndW1lbnQoY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgYXJndW1lbnQpOyBcCkBAIC05Myw3ICs5
Myw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2MKICAgICBGT1Jf
RUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1F
TlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04KIAotdm9p
ZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQordm9pZCBJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQogewog
ICAgIGlmIChhdXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRDYW52YXNBZ2VudChjYW52YXNSZW5k
ZXJpbmdDb250ZXh0KSkKICAgICAgICAgY2FudmFzQWdlbnQtPnJlY29yZEFjdGlvbihjYW52YXNS
ZW5kZXJpbmdDb250ZXh0LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwpAQCAt
MTAxLDE0ICsxMDEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRB
YwogCiBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVu
dD4gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhUTUxD
YW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCB1aW50MzJfdCBhcmd1bWVudCkKIHsKLSAgICBB
U1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpOwotICAgIHJldHVybiBwcm9j
ZXNzQXJndW1lbnQoKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBhcmd1bWVudCk7
CisgICAgcmV0dXJuIHByb2Nlc3NBcmd1bWVudChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRl
eHQoKSwgYXJndW1lbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJl
Y29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgU3RyaW5n
JiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYg
YXJndW1lbnRzKQogewotICAgIEFTU0VSVChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQo
KSk7Ci0gICAgcmVjb3JkQWN0aW9uKCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwg
V1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICByZWNvcmRBY3Rpb24oY2Fu
dmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJn
dW1lbnRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaAkocmV2
aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDEyICsxOTQsMTIgQEAgcHVibGlj
OgogICAgIHVzaW5nIFByb2Nlc3NlZEFyZ3VtZW50cyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxP
cHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4+OwogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRf
REVDTEFSQVRJT04oQXJndW1lbnRUeXBlKSBcCi0gICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3Nl
ZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFyZ3Vt
ZW50VHlwZSk7IFwKKyAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nl
c3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRUeXBlKTsg
XAogLy8gZW5kIG9mIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KICAgICBGT1JfRUFDSF9J
TlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVD
TEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTgogCi0gICAgc3Rh
dGljIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcmJiwg
UHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOworICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlv
bihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIFByb2Nlc3NlZEFyZ3Vt
ZW50cyYmID0geyB9KTsKIAogICAgIHN0YXRpYyBPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4g
cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiwgdWludDMyX3QpOwogICAg
IHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYsIFN0cmlu
ZyYmLCBQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAko
cmV2aXNpb24gMjc3MTQyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMyArNDE3LDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcyhDYW52YXNCYXNlJiBj
YW52YXNCYXNlKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRlcmluZ0Nv
bnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9
IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAg
ICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAg
ICAgICAgIHJldHVybjsKQEAgLTQ0Nyw3ICs0NDEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpkaWRDcmVhdGVDYW52CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkK
K3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JD
YW52YXM+IGluc3BlY3RvckNhbnZhczsKIApAQCAtNDc3LDExICs0NzEsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0aW9uYWw8
RmxvYXRSZWN0PiYpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVyaW5n
Q29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBh
dXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5k
ZXJpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICgh
aW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CkBAIC00OTEsMTEgKzQ4MSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQKIAogdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpCiB7Ci0g
ICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlm
ICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbnNwZWN0b3JDYW52YXMg
PSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3RvckNhbnZh
cyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCkpOwog
ICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQog
ICAgICAgICByZXR1cm47CkBAIC01MDMsNyArNDg5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6Y2FudmFzRGVzdHJveQogICAgIHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFzKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFz
RnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURpc3BhdGNo
KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJh
bWUoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURpc3Bh
dGNoKQogewogICAgIGlmICghY29udGV4dC5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNyw3ICs1MjMsNyBAQCB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvCiAgICAgbV9yZWNvcmRpbmdDYW52YXNJZGVudGlm
aWVycy5yZW1vdmUoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCkpOwogfQogCi12b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpK
U09iamVjdCogb3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdGFy
dFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBK
U0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKQogewogICAg
IGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjb250ZXh0KTsKICAg
ICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKQEAgLTU1OSw3ICs1NDUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSCiAgICAgc3RhcnRSZWNvcmRpbmcoKmluc3Bl
Y3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZN
b3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFz
KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgZGlkRmluaXNo
UmVjb3JkaW5nQ2FudmFzRnJhbWUoY29udGV4dCwgdHJ1ZSk7CiB9CkBAIC02ODIsNyArNjY4LDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lXZQogI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCiAKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFyZ3Vt
ZW50VHlwZSkgXAotT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2Vk
QXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3Vt
ZW50KSBcCitPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1
bWVudD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJn
dW1lbnQpIFwKIHsgXAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNh
bnZhcyhjYW52YXNSZW5kZXJpbmdDb250ZXh0KTsgXAogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52
YXMpOyBcCkBAIC02OTIsNyArNjc4LDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRy
YWNlcjo6UHJvYwogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFDRVJfQVJH
VU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1F
TlRfREVGSU5JVElPTgogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRBY3Rpb24o
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYg
bmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJn
dW1lbnRzKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3JkQWN0aW9uKGNvbnN0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5h
bWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3Vt
ZW50cykKIHsKICAgICBBU1NFUlQoY2FudmFzUmVuZGVyaW5nQ29udGV4dC5oYXNBY3RpdmVJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpOwogCkBAIC04ODcsNyArODczLDcgQEAgUmVmUHRyPElu
c3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQQogICAgIHJldHVybiBpbnNwZWN0b3JDYW52
YXM7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpm
aW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCitSZWZQ
dHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3RvckNh
bnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGZvciAo
YXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMudmFs
dWVzKCkpIHsKICAgICAgICAgaWYgKGluc3BlY3RvckNhbnZhcy0+Y2FudmFzQ29udGV4dCgpID09
ICZjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAkocmV2aXNpb24gMjc3MTQyKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVOYXZpZ2F0
ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKENhbnZh
c0Jhc2UmKTsKICAgICB2b2lkIGRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0Zy
YW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBib29sIGZvcmNlRGlzcGF0Y2ggPSBmYWxzZSk7
Ci0gICAgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKTsKLSAg
ICB2b2lkIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQm
KTsKKyAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9yeShjb25zdCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNoID0gZmFsc2UpOworICAg
IHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0aW9ucyk7Cisg
ICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZvaWQgZGlkRW5hYmxlRXh0ZW5zaW9u
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGRp
ZENyZWF0ZVdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgV2ViR0xQcm9n
cmFtJik7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04oQXJn
dW1lbnRUeXBlKSBcCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJv
Y2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0Jiwg
QXJndW1lbnRUeXBlKTsgXAorICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6
OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VNRU5UX0RF
Q0xBUkFUSU9OCiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdV
TUVOVChQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1F
TlRfREVDTEFSQVRJT04KLSAgICB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250
ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3Vt
ZW50cyYmID0geyB9KTsKKyAgICB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3Nl
ZEFyZ3VtZW50cyYmID0geyB9KTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjb3JkaW5nT3B0
aW9ucyB7CkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBFTkFCTEUoV0VC
R1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYpOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZhcyhJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCYpOworICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmKTsK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsMTAgKzI0Miwx
MCBAQCBzdGF0aWMgSlNDOjpKU09iamVjdCogb2JqZWN0QXJndW1lbnRBdChTCiBzdGF0aWMgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCogY2FudmFzUmVuZGVyaW5nQ29udGV4dChKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHRhcmdldCkKIHsKICAgICBpZiAoYXV0byogY2FudmFzID0gSlNIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQotICAgICAgICByZXR1cm4gY2FudmFz
LT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiAmY2FudmFzLT5yZW5kZXJpbmdD
b250ZXh0KCk7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKGF1dG8qIGNh
bnZhcyA9IEpTT2Zmc2NyZWVuQ2FudmFzOjp0b1dyYXBwZWQodm0sIHRhcmdldCkpCi0gICAgICAg
IHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjYW52
YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICNlbmRpZgogICAgIGlmIChhdXRvKiBjb250ZXh0ID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKICAgICAg
ICAgcmV0dXJuIGNvbnRleHQ7CkBAIC0zNDksMTAgKzM0OSw4IEBAIHZvaWQgUGFnZUNvbnNvbGVD
bGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGF1dG8mIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oKm5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQgPSBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNuYXBzaG90Q2FudmFzKGNhbnZhc0Vs
ZW1lbnQsICpjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc25hcHNob3RD
YW52YXMoY2FudmFzRWxlbWVudCwgY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAJ
KHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1
c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAgSW1h
Z2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdAogICAgIGlmIChyZXN1bHQudHlw
ZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKICAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKIAotICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3Qo
JmRlc3RDb250ZXh0KTsKKyAgICBjYW52YXMtPnJlcGxheURpc3BsYXlMaXN0KGRlc3RDb250ZXh0
KTsKIAogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAy
NzcxNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw3IEBAIGJvb2wgUmVuZGVySFRNTENhbnZhczo6
cmVxdWlyZXNMYXllcigpIGMKICAgICBpZiAoUmVuZGVyUmVwbGFjZWQ6OnJlcXVpcmVzTGF5ZXIo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCA9IGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybiBjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZCgpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTczLDcgKzcw
LDcgQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaQogICAgIExheW91
dFJlY3QgY29udGVudEJveFJlY3QgPSB0aGlzLT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAgaWYg
KGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKLSAgICAgICAgaWYgKCFjb250
ZXh0LmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSAmJiBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5n
Q29udGV4dCgpKQorICAgICAgICBpZiAoIWNvbnRleHQuY29udGVuZnVsUGFpbnREZXRlY3RlZCgp
ICYmICFjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAg
ICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI3NzE0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiArOTEs
MTIgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52YXNDb21wb3NpdAogewogICAgIEFT
U0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLm5vZGUo
KSk7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIGNvbnN0IGF1
dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5ub2RlKCkp
OworICAgIGF1dG8mIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICBp
ZiAoIWNvbnRleHQuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXR1cm4gVW5hY2NlbGVyYXRl
ZENhbnZhczsKICAgICAKLSAgICBpZiAoY29udGV4dC0+aXNHUFVCYXNlZCgpKQorICAgIGlmIChj
b250ZXh0LmlzR1BVQmFzZWQoKSkKICAgICAgICAgcmV0dXJuIENhbnZhc0FzTGF5ZXJDb250ZW50
czsKIAogICAgIHJldHVybiBDYW52YXNQYWludGVkVG9MYXllcjsgLy8gT24gTWFjIGFuZCBpT1Mg
d2UgcGFpbnQgYWNjZWxlcmF0ZWQgY2FudmFzZXMgaW50byB0aGVpciBsYXllcnMuCkBAIC0xMDY0
LDkgKzEwNjQsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhCiAj
ZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJMRShPRkZT
Q1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBjYW52
YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250ZW50
cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8
SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICAgICAgaWYgKGF1
dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgICAgIG1f
Z3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY29udGV4dC0+cGxhdGZv
cm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2FudmFzKTsK
KyAgICAgICAgY29uc3QgYXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250
ZW50c1RvUGxhdGZvcm1MYXllcihjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS5wbGF0Zm9ybUxh
eWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQdXJwb3NlOjpDYW52YXMpOwogCiAg
ICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427998</attachid>
            <date>2021-05-07 08:33:46 -0700</date>
            <delta_ts>2021-05-07 11:10:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507083345.patch</filename>
            <type>text/plain</type>
            <size>110232</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNjQg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1dJUF0K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFt
VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJh
Y2s6OlNvdXJjZTo6Y2FudmFzQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvR1BV
Q2FudmFzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHUFVDYW52YXNDb250ZXh0Ojpj
cmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuaDoKKyAg
ICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjp+Q1NTQ2FudmFzVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFz
VmFsdWU6OmNhbnZhc0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1
ZTo6Zml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXMp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjplbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3Mv
Q1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW50
KToKKyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6Q2FudmFzQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjp+Q2Fu
dmFzQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpkcmF3aW5nQ29udGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0
c0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjptZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5Q29zdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpoYXNBY3RpdmVJbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNl
dFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6c2V0SW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZGVzdHJveUltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzQmFzZTo6cmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICogaHRtbC9DdXN0b21Q
YWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6fkN1
c3RvbVBhaW50Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpn
ZXRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlE
aXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6Y29waWVk
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVk
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OnJlcGxheURpc3Bs
YXlMaXN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2Fu
dmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaHRtbC9DdXN0b21QYWludENhbnZhcy5oOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2Fu
dmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4
dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0MmQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJH
TCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dFdlYkdM
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2Vi
R1BVKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2Vi
R1BVKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0
Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRCaXRtYXBSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50
c0ludG9DYW52YXNCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojppc0dQ
VUJhc2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRT
dXJmYWNlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dHJhbnNm
ZXJDb250cm9sVG9PZmZzY3JlZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpjbGVhckltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
Ojp2aXJ0dWFsSGFzUGVuZGluZ0FjdGl2aXR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjppbnNlcnRlZEludG9BbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnByZXBhcmVGb3JEaXNwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojppc0NvbnRyb2xsZWRCeU9mZnNjcmVlbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y29waWVkSW1hZ2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNs
ZWFySW1hZ2VCdWZmZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZh
cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6On5PZmZzY3JlZW5DYW52
YXMpOgorICAgICAgICAoV2ViQ29yZTo6aXMyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zm
c2NyZWVuQ2FudmFzOjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQpOgorICAgICAgICAoV2ViQ29y
ZTo6aXNXZWJHTFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpnZXRD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0lt
YWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjbGVhckNvcGllZEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29tbWl0VG9QbGFjZWhvbGRl
ckNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnJlc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjbGVhckNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUlt
YWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZh
cy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmlzTm9uZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyIGNv
bnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0Tm9uZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dE5vbmUuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BhaW50
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50UmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5n
Q29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleEltYWdlU291cmNlSGVscGVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0lmQ29udGV4
dE1hdGNoZXNEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzOjppc0Rl
dmljZUZvckNhbnZhc0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0Nh
bGxUcmFjZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlZENhbnZhc0FnZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJn
dW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rp
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNTU0Nh
bnZhc0NsaWVudE5vZGVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
Y29yZEFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6Zmlu
ZEluc3BlY3RvckNhbnZhcyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FudmFzUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWlu
dEltYWdlOjpkb0N1c3RvbVBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVw
bGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3VyYXRpb24pOgorCiAyMDIxLTA1
LTA3ICBDYXJsb3MgR2FybmFjaG8gIDxjYXJsb3NnQGdub21lLm9yZz4KIAogICAgICAgICBbR1RL
NF0gUmV3cml0ZSBHVEsgZ2VzdHVyZSBzdXBwb3J0IHRvIHdvcmsgZm9yIGJvdGggMy54IGFuZCA0
LnguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEzMjAsNiArMTMyMCw3IEBAIGh0bWwv
Y2FudmFzL0NhbnZhc1BhdHRlcm4uY3BwCiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcAogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKK2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCiBo
dG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAKIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVy
RmxvYXQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZh
c0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNwcAko
cmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9D
YW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3
ICsxNTgsNyBAQCB2b2lkIENhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrOjpTb3VyCiAgICAg
Ly8gV2Ugc2hvdWxkIGluc3RlYWQgYWRkIGFuIGFuY2hvciBwb2ludCBmb3IgYm90aCAyZCBhbmQg
M2QgY29udGV4dHMgd2hlcmUgY2FudmFzIHdpbGwgYWN0dWFsbHkgcGFpbnQuCiAgICAgLy8gQW5k
IGNhbGwgY2FudmFzIG9ic2VydmVycyBmcm9tIHRoYXQgcG9pbnQuCiAgICAgaWYgKGlzPFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+KGNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpKSB7Ci0gICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
Y2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgIGF1dG8mIGNvbnRleHQgPSBkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4dCgp
KTsKICAgICAgICAgaWYgKCFjb250ZXh0LmlzUHJlc2VydmluZ0RyYXdpbmdCdWZmZXIoKSkgewog
ICAgICAgICAgICAgY2FudmFzLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgIlR1cm5pbmcg
ZHJhd2luZyBidWZmZXIgcHJlc2VydmF0aW9uIGZvciB0aGUgV2ViR0wgY2FudmFzIGJlaW5nIGNh
cHR1cmVkIl9zKTsKICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlUHJlc2VydmVEcmF3aW5nQnVm
ZmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVD
YW52YXNDb250ZXh0LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkg
KzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoR1BVQ2FudmFzQ29udGV4dCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0
PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQorVW5pcXVlUmVm
PEdQVUNhbnZhc0NvbnRleHQ+IEdQVUNhbnZhc0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBj
YW52YXMpCiB7Ci0gICAgYXV0byBjb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPEdQVUNhbnZhc0Nv
bnRleHQ+KG5ldyBHUFVDYW52YXNDb250ZXh0KGNhbnZhcykpOworICAgIGF1dG8gY29udGV4dCA9
IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCogbmV3IEdQVUNhbnZhc0NvbnRleHQoY2FudmFz
KSk7CiAgICAgY29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGNvbnRleHQ7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFz
Q29udGV4dC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9HUFVDYW52YXNDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
c3RydWN0IFdlYkdQVVN3YXBDaGFpbkRlc2NyaXB0b3I7CiBjbGFzcyBHUFVDYW52YXNDb250ZXh0
IGZpbmFsIDogcHVibGljIEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChHUFVDYW52YXNDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEdQVUNhbnZhc0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJik7
CisgICAgc3RhdGljIFVuaXF1ZVJlZjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFz
ZSYpOwogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGRv
d25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKCkpOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyODEsNiArMTQyODEsOCBAQAogCQlCQzgyNDMy
NjBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDODI0M0U2MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5kb3dGZWF0dXJlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAv
KiBXaW5kb3dGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5k
b3dGZWF0dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzg0RjQzRDI2NDFB
Q0MyMDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkM4NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4QUUzNEMxMkVBMDk2QTAwRUIzQUU2
IC8qIFNjcm9sbGFibGVBcmVhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNjcm9sbGFibGVBcmVhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4
QUUzNEQxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJUaGVtZU1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAwOTYsNiArMjAwOTgsOCBAQAogCQkJCTMx
NDBDNTIyMUZERjMxODYwMEQyQTg3MyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgg
Ki8sCiAJCQkJQkNFMDQ5MEMyNjNBMkYxQzAwOURDQkI4IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRFNldHRpbmdzLmggKi8sCiAJCQkJQkNFMDQ5MEUyNjNBMkYxQzAwOURDQkI4IC8qIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLmlkbCAqLywKKwkJCQlCQzg0RjQzRTI2NDFBQ0My
MDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwICovLAorCQkJCUJDODRG
NDNEMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oICovLAog
CQkJCTdDMTkzQkFEMUY1RTBFQjMwMDg4RjNFNiAvKiBDYW52YXNTaGFkb3dTdHlsZXMuaWRsICov
LAogCQkJCTdDMTkzQkIyMUY1RTBFQjYwMDg4RjNFNiAvKiBDYW52YXNTdGF0ZS5pZGwgKi8sCiAJ
CQkJNDk0ODRGQkYxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCAqLywKQEAgLTMx
NDI2LDcgKzMxNDMwLDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyogQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlE
MENBRiAvKiBBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkw
MEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ0OUQ4NjRG
MjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxOTg0ODAxMUExRDgxN0IwMEExMzMxOCAvKiBBbmltYXRpb25F
dmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzExQUQxMjYyMzZEODZFNTAwNkZGMzdDIC8qIEFu
aW1hdGlvbkV2ZW50QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjY0NSw2ICszMjY0OCw3IEBA
CiAJCQkJNDQzMEQwMEIyNTc1QTgzRTAwNDZENDAxIC8qIEhpZ2hsaWdodC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ0MzBEMDBEMjU3NUE4QTUwMDQ2RDQwMSAvKiBIaWdobGlnaHRSZWdp
c3Rlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDQ5RDg2NEYyNjQwQzlDNTAwMDEyMkRFIC8qIEhp
Z2hsaWdodFZpc2liaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTU0MEMyNzVDOEIw
MDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1
MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzQx
RDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
NDg4Myw3ICszNDg4Nyw2IEBACiAJCQkJRTQ2QjQxRjkxQ0IyNEU3MDAwOEYxMURFIC8qIFNjcmlw
dERpc2FsbG93ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5OEFFRDIxM0ZCMjI0RDAw
OTBCMUFBIC8qIFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhBNDg0NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUU0RDg2RTZEMjY0MDM5NEMwMEI2MjQyNSAvKiBTdHlsZVNjb3BlT3JkaW5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFNEUyQTgxRTNCMTcxMDAwMjNCQjhBIC8qIFNjcmlwdEVs
ZW1lbnRDYWNoZWRTY3JpcHRGZXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTFDOUQ5QjBF
QjM2ODEyMDBFNDA5REIgLyogU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDExMjIzQkEyNjAyNDRGRTAwQjBBMEI2IC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM1MTk5LDYgKzM1MjAyLDcgQEAKIAkJCQlF
NDk0NkVBRjE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjk0RjM3RTIzNjYxNjI2MDAzQUE1QzcgLyogU3R5bGVSdWxlVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBp
biBIZWFkZXJzICovLAorCQkJCUU0RDg2RTZEMjY0MDM5NEMwMEI2MjQyNSAvKiBTdHlsZVNjb3Bl
T3JkaW5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEE0RjQ4QUExNkIwREZDMDAwRURCQjI5IC8q
IFN0eWxlU2NvcGVSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3QTVFM0UxOTVCOEM4
QTAwNDgzMTAwIC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OUQ2MzgwMTAxQUYxNzMyMjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdubWVudERhdGEuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCShyZXZp
c2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Q1NTQ2FudmFzVmFsdWU6On5DU1NDYW52YXNWYWx1ZSgpCiB7Ci0gICAgaWYgKG1fZWxlbWVudCkK
LSAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVPYnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKKyAg
ICBpZiAobV9jYW52YXMpCisgICAgICAgIG1fY2FudmFzLT5yZW1vdmVPYnNlcnZlcihtX2NhbnZh
c09ic2VydmVyKTsKIH0KIAogU3RyaW5nIENTU0NhbnZhc1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkg
Y29uc3QKQEAgLTQxLDUzICs0Miw1MyBAQCBTdHJpbmcgQ1NTQ2FudmFzVmFsdWU6OmN1c3RvbUNT
U1RleHQoKSBjCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIi13ZWJraXQtY2FudmFzKCIsIG1fbmFt
ZSwgJyknKTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChIVE1MQ2Fu
dmFzRWxlbWVudCYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KQordm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiwgY29uc3QgT3B0aW9u
YWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpCiB7CiAgICAgaWYgKCFjaGFuZ2VkUmVjdCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpbWFnZUNoYW5nZVJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGNoYW5nZWRSZWN0LnZhbHVlKCkpOwotICAgIGZvciAoYXV0byBpdCA9IGNsaWVudHMoKS5i
ZWdpbigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
aXQtPmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyks
ICZpbWFnZUNoYW5nZVJlY3QpOworICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCkudmFs
dWVzKCkpCisgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBwZWRJ
bWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOwogfQogCi12b2lkIENTU0NhbnZhc1Zh
bHVlOjpjYW52YXNSZXNpemVkKEhUTUxDYW52YXNFbGVtZW50JikKK3ZvaWQgQ1NTQ2FudmFzVmFs
dWU6OmNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpCiB7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2xp
ZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRy
Pih0aGlzKSk7CisgICAgZm9yIChhdXRvIGNsaWVudCA6IGNsaWVudHMoKS52YWx1ZXMoKSkKKyAg
ICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0
aGlzKSk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3llZChIVE1MQ2Fu
dmFzRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0Rlc3Ryb3ll
ZChDYW52YXNCYXNlJiBjYW52YXMpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRCgmZWxlbWVudCwgJmVs
ZW1lbnQgPT0gbV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRyOworICAgIEFTU0VS
VF9VTlVTRUQoJmNhbnZhcywgJmNhbnZhcyA9PSBtX2NhbnZhcyk7CisgICAgbV9jYW52YXMgPSBu
dWxscHRyOwogfQogCiBGbG9hdFNpemUgQ1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZShjb25zdCBS
ZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQqIGVs
dCA9IGVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSkpCi0gICAgICAgIHJldHVybiBGbG9hdFNp
emUoZWx0LT53aWR0aCgpLCBlbHQtPmhlaWdodCgpKTsKKyAgICBpZiAoYXV0byogY2FudmFzID0g
dGhpcy0+Y2FudmFzKHJlbmRlcmVyLmRvY3VtZW50KCkpKQorICAgICAgICByZXR1cm4gRmxvYXRT
aXplKGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotSFRNTENhbnZhc0VsZW1lbnQqIENTU0NhbnZhc1ZhbHVlOjplbGVtZW50KERvY3VtZW50
JiBkb2N1bWVudCkKK0NhbnZhc0Jhc2UqIENTU0NhbnZhc1ZhbHVlOjpjYW52YXMoRG9jdW1lbnQm
IGRvY3VtZW50KQogewotICAgICBpZiAoIW1fZWxlbWVudCkgewotICAgICAgICBtX2VsZW1lbnQg
PSBkb2N1bWVudC5nZXRDU1NDYW52YXNFbGVtZW50KG1fbmFtZSk7Ci0gICAgICAgIGlmICghbV9l
bGVtZW50KQorICAgIGlmICghbV9jYW52YXMpIHsKKyAgICAgICAgbV9jYW52YXMgPSBkb2N1bWVu
dC5nZXRDU1NDYW52YXNFbGVtZW50KG1fbmFtZSk7CisgICAgICAgIGlmICghbV9jYW52YXMpCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbV9lbGVtZW50LT5hZGRPYnNlcnZl
cihtX2NhbnZhc09ic2VydmVyKTsKKyAgICAgICAgbV9jYW52YXMtPmFkZE9ic2VydmVyKG1fY2Fu
dmFzT2JzZXJ2ZXIpOwogICAgIH0KLSAgICByZXR1cm4gbV9lbGVtZW50OworICAgIHJldHVybiBt
X2NhbnZhczsKIH0KIAogUmVmUHRyPEltYWdlPiBDU1NDYW52YXNWYWx1ZTo6aW1hZ2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgLypzaXplKi8pCiB7CiAgICAgQVNT
RVJUKGNsaWVudHMoKS5jb250YWlucygmcmVuZGVyZXIpKTsKLSAgICBIVE1MQ2FudmFzRWxlbWVu
dCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSk7Ci0gICAgaWYg
KCFlbGVtZW50IHx8ICFlbGVtZW50LT5idWZmZXIoKSkKKyAgICBhdXRvKiBjYW52YXMgPSB0aGlz
LT5jYW52YXMocmVuZGVyZXIuZG9jdW1lbnQoKSk7CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZh
cy0+YnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBlbGVtZW50
LT5jb3BpZWRJbWFnZSgpOworICAgIHJldHVybiBjYW52YXMtPmNvcGllZEltYWdlKCk7CiB9CiAK
IGJvb2wgQ1NTQ2FudmFzVmFsdWU6OmVxdWFscyhjb25zdCBDU1NDYW52YXNWYWx1ZSYgb3RoZXIp
IGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAkocmV2aXNpb24gMjc3
MTczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUu
aCIKICNpbmNsdWRlICJDYW52YXNCYXNlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ1LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaXhlZFNpemUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiAgICAgRmxvYXRTaXplIGZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50
Jik7CiAKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudDsgfQorICAgIENhbnZhc0Jhc2UqIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fu
dmFzOyB9CiAKICAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9hZGVyJiwgY29uc3QgUmVzb3Vy
Y2VMb2FkZXJPcHRpb25zJikgeyB9CkBAIC02OCwxOCArNjcsMTUgQEAgcHVibGljOgogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNl
LCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCkgZmluYWwKICAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7
Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzQ2hhbmdlZChkb3duY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudD4oY2FudmFzQmFzZSksIGNoYW5nZWRSZWN0KTsKKyAgICAgICAgICAgIG1fb3du
ZXJWYWx1ZS5jYW52YXNDaGFuZ2VkKGNhbnZhc0Jhc2UsIGNoYW5nZWRSZWN0KTsKICAgICAgICAg
fQogICAgICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkgZmlu
YWwKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxDYW52YXNFbGVtZW50Pihj
YW52YXNCYXNlKSk7Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzUmVzaXplZChkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOworICAgICAgICAgICAgbV9vd25l
clZhbHVlLmNhbnZhc1Jlc2l6ZWQoY2FudmFzQmFzZSk7CiAgICAgICAgIH0KICAgICAgICAgdm9p
ZCBjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkgZmluYWwKICAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7
Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzRGVzdHJveWVkKGRvd25jYXN0PEhUTUxD
YW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7CisgICAgICAgICAgICBtX293bmVyVmFsdWUuY2Fu
dmFzRGVzdHJveWVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9CiAKICAgICAgICAgQ1NTQ2FudmFz
VmFsdWUmIG1fb3duZXJWYWx1ZTsKQEAgLTkzLDE4ICs4OSwxOCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICB9CiAKLSAgICB2b2lkIGNhbnZhc0NoYW5nZWQoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25z
dCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7Ci0gICAgdm9pZCBjYW52YXNSZXNp
emVkKEhUTUxDYW52YXNFbGVtZW50Jik7Ci0gICAgdm9pZCBjYW52YXNEZXN0cm95ZWQoSFRNTENh
bnZhc0VsZW1lbnQmKTsKKyAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KTsKKyAgICB2b2lkIGNhbnZhc1Jlc2l6
ZWQoQ2FudmFzQmFzZSYpOworICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKTsK
IAotICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KERvY3VtZW50Jik7CisgICAgQ2FudmFz
QmFzZSogY2FudmFzKERvY3VtZW50Jik7CiAKICAgICBDYW52YXNPYnNlcnZlclByb3h5IG1fY2Fu
dmFzT2JzZXJ2ZXI7CiAKICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgY2FudmFzLgogICAgIFN0cmlu
ZyBtX25hbWU7Ci0gICAgLy8gVGhlIGRvY3VtZW50IHN1cHBsaWVzIHRoZSBlbGVtZW50IGFuZCBv
d25zIGl0LgotICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2VsZW1lbnQgeyBudWxscHRyIH07Cisg
ICAgLy8gVGhlIGRvY3VtZW50IHN1cHBsaWVzIHRoZSBjYW52YXMgYW5kIG93bnMgaXQuCisgICAg
Q2FudmFzQmFzZSogbV9jYW52YXMgeyBudWxscHRyIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFs
dWUuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKICNpbmNs
dWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTTmFtZWRJbWFnZVZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUGFpbnRJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgog
I2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJFbGVtZW50LmgiCiAKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlOjphZGRDbGllbnQoUgogICAgIG1fY2xpZW50cy5hZGQoJnJlbmRlcmVyKTsKIAogICAgIGlm
IChpczxDU1NDYW52YXNWYWx1ZT4odGhpcykpIHsKLSAgICAgICAgaWYgKEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5lbGVt
ZW50KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNT
U0NhbnZhc0NsaWVudE5vZGVzKCpjYW52YXNFbGVtZW50KTsKKyAgICAgICAgaWYgKGF1dG8qIGNh
bnZhcyA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+Y2FudmFzKCkpCisgICAgICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5v
ZGVzKCpjYW52YXMpOwogICAgIH0KIH0KIApAQCAtODYsOCArODYsOCBAQCB2b2lkIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVuCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChp
czxDU1NDYW52YXNWYWx1ZT4odGhpcykpIHsKLSAgICAgICAgaWYgKEhUTUxDYW52YXNFbGVtZW50
KiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5lbGVtZW50
KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNTU0Nh
bnZhc0NsaWVudE5vZGVzKCpjYW52YXNFbGVtZW50KTsKKyAgICAgICAgaWYgKGF1dG8qIGNhbnZh
cyA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+Y2FudmFzKCkpCisgICAgICAgICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVz
KCpjYW52YXMpOwogICAgIH0KIAogICAgIGlmIChtX2NsaWVudHMuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODk2LDcgKzM4OTYsNyBAQCBz
dGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKERvCiAKICAgICAgICAgLy8gU2tp
cCBgPGNhbnZhcz5gIGJ1dCBvbmx5IGlmIHRoZXkndmUgYmVlbiBkcmF3biBpbnRvLiBHdWVzcyB0
aGlzIGJ5IHNlZWluZyBpZiB0aGVyZSdzIGFscmVhZHkKICAgICAgICAgLy8gYSBgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dGAsIHdoaWNoIGlzIG9ubHkgY3JlYXRlZCBieSBKYXZhU2NyaXB0LgotICAg
ICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpICYmIGRvd25jYXN0PEhUTUxDYW52
YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIGlmIChpczxIVE1M
Q2FudmFzRWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2Rl
KS5yZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgLy8gU2tpcCAzcmQtcGFydHkgYDxpZnJhbWU+YCBhcyB0aGUgY29udGVudCBs
aWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHBhZ2UuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ2FudmFzQmFzZS5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvQ2FudmFzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgpAQCAtNTEsNyArNTIsOCBAQCBjb25zdCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBkZWZh
dWx0SW50ZXJwCiAjZW5kaWYKIAogQ2FudmFzQmFzZTo6Q2FudmFzQmFzZShJbnRTaXplIHNpemUp
Ci0gICAgOiBtX3NpemUoc2l6ZSkKKyAgICA6IG1fc2l6ZSB7IHNpemUgfQorICAgICwgbV9jb250
ZXh0IHsgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZSgqdGhpcykgfQogewogfQog
CkBAIC01OSwxMyArNjEsMTMgQEAgQ2FudmFzQmFzZTo6fkNhbnZhc0Jhc2UoKQogewogICAgIEFT
U0VSVChtX2RpZE5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCk7CiAgICAgQVNTRVJUKG1f
b2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2ltYWdlQnVmZmVyKTsKKworICAg
IGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIENhbnZhc0Jhc2U6
OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5n
Q29udGV4dCgpOwotICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pczJkKCkgJiYgIWNvbnRl
eHQtPmlzT2Zmc2NyZWVuMmQoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+aXMyZCgpICYmICFtX2Nv
bnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBy
ZXR1cm4gYnVmZmVyKCkgPyAmbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogbnVsbHB0cjsKQEAg
LTk0LDggKzk2LDcgQEAgQWZmaW5lVHJhbnNmb3JtIENhbnZhc0Jhc2U6OmJhc2VUcmFuc2Zvcgog
CiB2b2lkIENhbnZhc0Jhc2U6Om1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCkKIHsKLSAg
ICBpZiAoYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9CiAKIHNpemVfdCBDYW52YXNCYXNlOjptZW1v
cnlDb3N0KCkgY29uc3QKQEAgLTEwMyw3ICsxMDQsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6bWVt
b3J5Q29zdCgpIGNvbnN0CiAgICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFu
Z2VkIHdoaWxlIHdlIGFjY2VzcyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1h
Z2VCdWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZm
ZXJBc3NpZ25tZW50TG9jayB9OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPm1lbW9yeUNvc3QoKTsKQEAgLTExNCw3
ICsxMTUsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgCiAgICAg
Ly8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20g
YSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKICAgICAvLyBhYm91dCB3aGF0
IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4gV2UgbmVlZCB0byBob2xkIGEgbG9jayB0byBw
cmV2ZW50IG1faW1hZ2VCdWZmZXIKICAgICAvLyBmcm9tIGJlaW5nIGNoYW5nZWQgd2hpbGUgd2Ug
YWNjZXNzIGl0LgotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckFzc2ln
bm1lbnRMb2NrKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRM
b2NrIH07CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlci0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7CkBAIC0xODAsMTUgKzE4
MSwxOSBAQCBIYXNoU2V0PEVsZW1lbnQqPiBDYW52YXNCYXNlOjpjc3NDYW52YXNDCiAKIGJvb2wg
Q2FudmFzQmFzZTo6aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0CiB7
Ci0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29u
dGV4dCAmJiBjb250ZXh0LT5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCk7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigp
OworfQorCit2b2lkIENhbnZhc0Jhc2U6OnNldFJlbmRlcmluZ0NvbnRleHQoVW5pcXVlUmVmPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ+JiYgY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHQgPSBXVEZN
b3ZlKGNvbnRleHQpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpIGNvbnN0CitSZWZQdHI8SW1h
Z2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4m
JiBidWZmZXIpCiB7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiByZXR1cm5CdWZmZXI7CiAgICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50
TG9jayk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExv
Y2sgfTsKICAgICAgICAgbV9jb250ZXh0U3RhdGVTYXZlciA9IG51bGxwdHI7CiAgICAgICAgIHJl
dHVybkJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwgV1RGTW92ZShidWZmZXIp
KTsKICAgICB9CkBAIC0yMDAsOSArMjA1LDggQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNC
YXNlOjpzZXRJbWFnZQogICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gbWVtb3J5Q29zdCgpOwogICAg
IHNfYWN0aXZlUGl4ZWxNZW1vcnkgKz0gbV9pbWFnZUJ1ZmZlckNvc3QgLSBwcmV2aW91c01lbW9y
eUNvc3Q7CiAKLSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlm
IChjb250ZXh0ICYmIG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1h
Z2VCdWZmZXJDb3N0KQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5n
ZUNhbnZhc01lbW9yeSgqY29udGV4dCk7CisgICAgaWYgKCFtX2NvbnRleHQtPmlzTm9uZSgpICYm
IG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1hZ2VCdWZmZXJDb3N0
KQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNhbnZhc01lbW9y
eShtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKICAgICAgICAg
bV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUp
OwpAQCAtMjE3LDYgKzIyMSwyMCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNl
dEltYWdlCiAgICAgcmV0dXJuIHJldHVybkJ1ZmZlcjsKIH0KIAordm9pZCBDYW52YXNCYXNlOjpk
ZXN0cm95SW1hZ2VCdWZmZXIoKQoreworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gb2xkQnVmZmVy
OworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1l
bnRMb2NrIH07CisgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOworICAgICAg
ICBvbGRCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIG51bGxwdHIpOworICAg
IH0KKyAgICAKKyAgICBzX2FjdGl2ZVBpeGVsTWVtb3J5IC09IG1faW1hZ2VCdWZmZXJDb3N0Owor
ICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gMDsKK30KKwogc2l6ZV90IENhbnZhc0Jhc2U6OmFjdGl2
ZVBpeGVsTWVtb3J5KCkKIHsKICAgICByZXR1cm4gc19hY3RpdmVQaXhlbE1lbW9yeS5sb2FkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcwLDcgKzcxLDYgQEAgcHVibGljOgogICAgIGNvbnN0
IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIEltYWdlQnVm
ZmVyKiBidWZmZXIoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIHZvaWQgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFi
bGUoKTsKQEAgLTg1LDcgKzg1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyAgfQogCi0gICAgdmlydHVhbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgPSAwOworICAg
IGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBy
ZW5kZXJpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICB2b2lk
IGFkZE9ic2VydmVyKENhbnZhc09ic2VydmVyJik7CiAgICAgdm9pZCByZW1vdmVPYnNlcnZlcihD
YW52YXNPYnNlcnZlciYpOwpAQCAtMTAwLDggKzEwMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWREcmF3KGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlKiBjb3BpZWRJ
bWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpID0gMDsKIAog
ICAgIGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0OwogCkBA
IC0xMTIsNyArMTEzLDEwIEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQogCi0gICAgUmVmUHRyPElt
YWdlQnVmZmVyPiBzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYpIGNvbnN0Owor
ICAgIHZvaWQgc2V0UmVuZGVyaW5nQ29udGV4dChVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dD4mJik7CisKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4mJik7CisgICAgdm9pZCBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKICAgICB2
aXJ0dWFsIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICBzdGF0aWMgc2l6ZV90IGFjdGl2ZVBpeGVsTWVtb3J5KCk7CiAKQEAgLTEyNyw2ICsx
MzEsOCBAQCBwcml2YXRlOgogICAgIG11dGFibGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsg
MCB9OwogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXI+IG1fY29udGV4dFN0YXRlU2F2ZXI7CiAKKyAgICBVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dD4gbV9jb250ZXh0OworCiAgICAgYm9vbCBtX29yaWdpbkNsZWFuIHsgdHJ1ZSB9Owog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgYm9vbCBtX2RpZE5vdGlmeU9ic2VydmVyc0NhbnZhc0Rl
c3Ryb3llZCB7IGZhbHNlIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0
b21QYWludENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDQ1ICs0OCw0MiBAQCBDdXN0
b21QYWludENhbnZhczo6Q3VzdG9tUGFpbnRDYW52YXMoU2NyCiBDdXN0b21QYWludENhbnZhczo6
fkN1c3RvbVBhaW50Q2FudmFzKCkKIHsKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95
ZWQoKTsKLQotICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdh
eSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwog
fQogCiBFeGNlcHRpb25PcjxSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+PiBDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCgpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAg
cmV0dXJuIHsgUmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgIGlmICghcmVuZGVyaW5n
Q29udGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJp
bmdDb250ZXh0KCkpIH0gfTsKIAotICAgIG1fY29udGV4dCA9IFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMpOwotICAgIGRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHRydWUpOworICAgIGF1dG8g
Y29udGV4dCA9IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMpOworICAgIGNv
bnRleHQtPnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7CisgICAgc2V0UmVuZGVyaW5n
Q29udGV4dChXVEZNb3ZlKGNvbnRleHQpKTsKIAotICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJl
bmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpIH0gfTsKKyAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0
KCkpIH0gfTsKIH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6cmVwbGF5RGlzcGxheUxpc3Qo
R3JhcGhpY3NDb250ZXh0KiBjdHgpIGNvbnN0Cit2b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGN0eCkKIHsKICAgICBBU1NFUlQoIW1fZGVz
dGluYXRpb25HcmFwaGljc0NvbnRleHQpOwogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBVc2luZyBhbiBpbnRlcm1lZGlhdGUg
YnVmZmVyIGlzIG5vdCBuZWVkZWQgaWYgdGhlcmUgYXJlIG5vIGNvbXBvc2l0ZSBvcGVyYXRpb25z
LgotICAgIGF1dG8gY2xpcEJvdW5kcyA9IGN0eC0+Y2xpcEJvdW5kcygpOworICAgIGF1dG8gY2xp
cEJvdW5kcyA9IGN0eC5jbGlwQm91bmRzKCk7CiAKLSAgICBhdXRvIGltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY2xpcEJvdW5kcy5zaXplKCksICpjdHgpOworICAg
IGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91
bmRzLnNpemUoKSwgY3R4KTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gJmltYWdlLT5jb250ZXh0KCk7CiAgICAg
bV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1jbGlwQm91bmRzLmxvY2F0
aW9uKCkpOwotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0
ID0gbnVsbHB0cjsKIAotICAgIGN0eC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5k
cyk7CisgICAgY3R4LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2UsIGNsaXBCb3VuZHMpOwogfQogCi1J
bWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKK0ltYWdlKiBDdXN0
b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKQogewogICAgIEFTU0VSVCghbV9kZXN0aW5hdGlv
bkdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKQEAgLTk3
LDE1ICs5NCwxNCBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4
dCA9ICZtX2NvcGllZEJ1ZmZlci0+Y29udGV4dCgpOwotICAgIGlmIChtX2NvbnRleHQpCi0gICAg
ICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICByZW5k
ZXJpbmdDb250ZXh0KCkucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rl
c3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAogICAgIG1fY29waWVkSW1hZ2Ug
PSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb246Olllcyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAK
LXZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdAordm9pZCBD
dXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFn
ZSA9IG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZh
cy5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE3ICs1NSwxNiBAQCBwdWJsaWM6CiAKICAg
ICBFeGNlcHRpb25PcjxSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+PiBnZXRDb250ZXh0
KCk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogICAgIEdyYXBoaWNzQ29udGV4dCogZXhp
c3RpbmdEcmF3aW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCBkaWREcmF3KGNv
bnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSBmaW5hbCB7IH0KIAogICAgIEFmZmluZVRyYW5zZm9y
bSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgZmluYWwgeyBBU1NFUlQobV9kZXN0aW5hdGlvbkdyYXBo
aWNzQ29udGV4dCAmJiBtX2NvcGllZEJ1ZmZlcik7IHJldHVybiBtX2NvcGllZEJ1ZmZlci0+YmFz
ZVRyYW5zZm9ybSgpOyB9Ci0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2UqIGNvcGll
ZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7CiAKLSAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCopIGNvbnN0OworICAgIHZv
aWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICB1c2luZyBSZWZD
b3VudGVkOjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CkBAIC03Nyw3ICs3Niw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkZXJlZkNhbnZhc0Jhc2UoKSBmaW5hbCB7IGRlcmVmKCk7
IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVy
OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgbXV0YWJsZSBHcmFwaGljc0NvbnRl
eHQqIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogICAgIG11dGFibGUg
UmVmUHRyPEltYWdlQnVmZmVyPiBtX2NvcGllZEJ1ZmZlcjsKICAgICBtdXRhYmxlIFJlZlB0cjxJ
bWFnZT4gbV9jb3BpZWRJbWFnZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDkgKzE1Niw2IEBAIEhU
TUxDYW52YXNFbGVtZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQoKQogICAgIC8vIGF2b2lkZWQgaW4g
ZGVzdHJ1Y3RvcnMsIGJ1dCB3b3JrcyBhcyBsb25nIGFzIGl0J3MgZG9uZSBiZWZvcmUgSFRNTENh
bnZhc0VsZW1lbnQgZGVzdHJ1Y3RzIGNvbXBsZXRlbHkuCiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2Fu
dmFzRGVzdHJveWVkKCk7CiAgICAgZG9jdW1lbnQoKS5jbGVhckNhbnZhc1ByZXBhcmF0aW9uKCp0
aGlzKTsKLQotICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdh
eSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwog
fQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSkKQEAgLTIzOSw0NSArMjM2LDQ1
IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldE1heFBpeGVsTWVtb3IKIAogRXhjZXB0aW9u
T3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250
ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCwg
VmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKQogewotICAgIGlm
IChtX2NvbnRleHQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXNQbGFjZWhvbGRlcigpKQor
ICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKSB7CisgICAgICAgIGlmIChyZW5k
ZXJpbmdDb250ZXh0KCkuaXNQbGFjZWhvbGRlcigpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXMy
ZCgpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpKSB7CiAgICAgICAg
ICAgICBpZiAoIWlzMmRUeXBlKGNvbnRleHRJZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPiB7ICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpIH0gfTsKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7
IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobV9jb250ZXh0LT5pc0JpdG1hcFJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJl
bmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmICgh
aXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4o
Km1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0Nv
bnRleHQ+IHsgUmVmUHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICAg
ICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dl
YkdMKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKICAg
ICAgICAgICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKICAgICAg
ICAgICAgIGF1dG8gdmVyc2lvbiA9IHRvV2ViR0xWZXJzaW9uKGNvbnRleHRJZCk7Ci0gICAgICAg
ICAgICBpZiAodmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5p
c1dlYkdMMSgpKQorICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJH
TDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAg
ICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgbV9jb250ZXh0LT5p
c1dlYkdMMSgpKQorICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpXZWJH
TDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2Nv
bnRleHQpIH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJl
bmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRl
cmluZ0NvbnRleHQ+IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfTsKICNpZiBFTkFC
TEUoV0VCR0wyKQotICAgICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KCptX2NvbnRleHQpKTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICBBU1NFUlQoaXM8
V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSk7CisgICAgICAgICAg
ICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVy
aW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5n
Q29udGV4dCgpKSB9IH07CiAjZW5kaWYKICAgICAgICAgfQogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0VCR1BVKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dlYkdQVSgpKSB7CisgICAgICAgIGlm
IChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkgewogICAgICAgICAgICAgaWYgKCFpc1dl
YkdQVVR5cGUoY29udGV4dElkKSkKICAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVu
ZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZkb3du
Y2FzdDxHUFVDYW52YXNDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8R1BVQ2FudmFzQ29udGV4dD4g
eyAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAg
ICAgICAgIH0KICNlbmRpZgogCkBAIC0zNjcsNyArMzY0LDcgQEAgYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6aXMyZFR5cGUoY29uc3QgUwogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VE
KEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZSh0eXBlKSwgdHlwZSk7Ci0gICAgQVNTRVJUKCFt
X2NvbnRleHQpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCiAg
ICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHVzZSBtb3JlIHBpeGVsIG1lbW9yeSB0aGFuIHRoZSBz
eXN0ZW0gY2FuIHN1cHBvcnQuCiAgICAgc2l6ZV90IHJlcXVlc3RlZFBpeGVsTWVtb3J5ID0gNCAq
IHdpZHRoKCkgKiBoZWlnaHQoKTsKQEAgLTM4MCwyNiArMzc3LDI3IEBAIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW0KICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCi0gICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUoc2V0dGluZ3MpLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKKyAgICBz
ZXRSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlz
LCBXVEZNb3ZlKHNldHRpbmdzKSwgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSkpOwogCiAjaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBOZWVkIHRvIG1ha2Ug
c3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3Ig
dGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAj
ZW5kaWYKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
PihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBl
LCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFT
U0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUpLCB0eXBlKTsKIAot
ICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMyZCgpKQorICAgIGlmIChyZW5kZXJp
bmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0MmQodHlw
ZSwgV1RGTW92ZShzZXR0aW5ncykpOworCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXMy
ZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAg
ICAgICByZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0
LmdldCgpKTsKKyAgICByZXR1cm4gJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2lmIEVOQUJMRShXRUJHTCkKQEAgLTQ0OCw3ICs0
NDYsNyBAQCBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbiBIVE1MQ2FudmFzCiAKIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2Vi
R0woV2ViR0xWZXJzaW9uIHR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBhdHRycykKIHsK
LSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5p
c05vbmUoKSk7CiAKICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDY1LDIwICs0NjMsMjQgQEAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0VsZQogCiAgICAgLy8gVE9ETyhXRUJY
Uik6IGVuc3VyZSB0aGUgY29udGV4dCBpcyBjcmVhdGVkIGluIGEgY29tcGF0aWJsZSBncmFwaGlj
cwogICAgIC8vIGFkYXB0ZXIgd2hlbiB0aGVyZSBpcyBhbiBhY3RpdmUgaW1tZXJzaXZlIGRldmlj
ZS4KLSAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUoKnRo
aXMsIGF0dHJzLCB0eXBlKTsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIFRoaXMg
bmV3IGNvbnRleHQgbmVlZHMgdG8gYmUgb2JzZXJ2ZWQgYnkgdGhlIERvY3VtZW50LCBpbiBvcmRl
cgotICAgICAgICAvLyBmb3IgaXQgdG8gYmUgY29ycmVjdGx5IHByZXBhcmVkRm9yUmVuZGVyaW5n
IGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgotICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgp
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUo
KnRoaXMsIGF0dHJzLCB0eXBlKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChtYWtlVW5pcXVlUmVmRnJvbU5vbk51
bGxVbmlxdWVQdHIoV1RGTW92ZShjb250ZXh0KSkpOworCisgICAgLy8gVGhpcyBuZXcgY29udGV4
dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBieSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCisgICAgLy8g
Zm9yIGl0IHRvIGJlIGNvcnJlY3RseSBwcmVwYXJlZEZvclJlbmRlcmluZyBiZWZvcmUgaXQgaXMg
Y29tcG9zaXRlZC4KKyAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKKworICAgIC8vIE5lZWQg
dG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVh
dGVkIGZvciB0aGUgQ2FudmFzLgorICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKIAotICAgICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBj
b21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KLSAgICAgICAgaW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogI2lmIEVOQUJMRShXRUJYUikKLSAg
ICAgICAgQVNTRVJUKCFhdHRycy54ckNvbXBhdGlibGUgfHwgZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKS0+aXNYUkNvbXBhdGlibGUoKSk7CisgICAg
QVNTRVJUKCFhdHRycy54ckNvbXBhdGlibGUgfHwgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKS5pc1hSQ29tcGF0aWJsZSgpKTsKICNlbmRpZgot
ICAgIH0KIAotICAgIHJldHVybiBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJHTChXZWJHTFZlcnNpb24gdHlw
ZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQpAQCAtNDg2LDIxICs0ODgsMjAgQEAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0VsZQogICAgIGlmICghc2hvdWxk
RW5hYmxlV2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5pc1dl
YkdMKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocmVuZGVyaW5nQ29u
dGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm4gY3JlYXRlQ29udGV4dFdlYkdMKHR5cGUs
IFdURk1vdmUoYXR0cnMpKTsKIAotICAgICAgICAvLyBUaGUgcGhyYXNpbmcgb2YgdGhlc2UgY2hl
Y2tzIGF2b2lkcyBjb21waWxlLXRpbWUgZ3VhcmRzIGZvciBXZWJHTDIgc3VwcG9ydC4KLSAgICAg
ICAgaWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJH
TDEoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghcmVuZGVyaW5nQ29u
dGV4dCgpLmlzV2ViR0woKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYg
KHR5cGUgIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgbV9jb250ZXh0LT5pc1dlYkdMMSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIC8vIFRoZSBwaHJhc2luZyBv
ZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBpbGUtdGltZSBndWFyZHMgZm9yIFdlYkdMMiBzdXBw
b3J0LgorICAgIGlmICh0eXBlID09IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmICFyZW5kZXJpbmdD
b250ZXh0KCkuaXNXZWJHTDEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAo
IW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHTCh0eXBlLCBXVEZN
b3ZlKGF0dHJzKSk7Ci0gICAgcmV0dXJuICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPigqbV9jb250ZXh0KTsKKyAgICBpZiAodHlwZSAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAm
JiByZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTDEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkBAIC01MTUsMTgg
KzUxNiwxNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5cGUoY29uCiBHUFVD
YW52YXNDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdQVShjb25z
dCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudDo6aXNXZWJHUFVUeXBlKHR5cGUpKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAg
QVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICBpZiAoIWRvY3VtZW50
KCkuc2V0dGluZ3MoKS53ZWJHUFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgbV9jb250ZXh0ID0gR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKCp0aGlzKTsKLSAgICBp
ZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgotICAg
ICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7Ci0gICAgfQorICAgIHNl
dFJlbmRlcmluZ0NvbnRleHQoR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKCp0aGlzKSk7CiAKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQ2FudmFzQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7
CisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcg
bGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCisgICAgaW52YWxpZGF0ZVN0eWxlQW5k
TGF5ZXJDb21wb3NpdGlvbigpOworCisgICAgcmV0dXJuICZkb3duY2FzdDxHUFVDYW52YXNDb250
ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBHUFVDYW52YXNDb250ZXh0KiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Z2V0Q29udGV4dFdlYkdQVShjb25zdCBTdHJpbmcmIHR5cGUpCkBAIC01MzYs
MTIgKzUzNiwxMyBAQCBHUFVDYW52YXNDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAg
ICAgaWYgKCFkb2N1bWVudCgpLnNldHRpbmdzKCkud2ViR1BVRW5hYmxlZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXNXZWJH
UFUoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQorICAgICAgICByZXR1
cm4gY3JlYXRlQ29udGV4dFdlYkdQVSh0eXBlKTsKKworICAgIGlmICghcmVuZGVyaW5nQ29udGV4
dCgpLmlzV2ViR1BVKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2Nv
bnRleHQpCi0gICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR1BVKHR5cGUpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAg
ICByZXR1cm4gJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpAQCAtNTU0LDI0ICs1NTUsMjkgQEAgYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlcgogSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVy
KGNvbnN0IFN0cmluZyYgdHlwZSwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mm
JiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50
Ojppc0JpdG1hcFJlbmRlcmVyVHlwZSh0eXBlKSk7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOwor
ICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCi0gICAgbV9jb250ZXh0
ID0gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0
dGluZ3MpKTsKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOwogCiAjaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJl
bmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZh
cy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAjZW5kaWYKIAot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqPihtX2Nv
bnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3Qg
U3RyaW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRp
bmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0
bWFwUmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICAKKyAgICBp
ZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gY3JlYXRlQ29u
dGV4dEJpdG1hcFJlbmRlcmVyKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgp
KTsKKyAgICAKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZkb3duY2FzdDxJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgcmVjdCkK
QEAgLTYxNSwxNCArNjIxLDE1IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAg
ICBpbnQgaCA9IGxpbWl0VG9Pbmx5SFRNTE5vbk5lZ2F0aXZlKGF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oaGVpZ2h0QXR0ciksIGRlZmF1bHRIZWlnaHQpOwogCiAgICAgcmVzZXRHcmFw
aGljc0NvbnRleHRTdGF0ZSgpOwotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzZXQoKTsKIAogICAgIEludFNp
emUgb2xkU2l6ZSA9IHNpemUoKTsKICAgICBJbnRTaXplIG5ld1NpemUodywgaCk7CisKICAgICAv
LyBJZiB0aGUgc2l6ZSBvZiBhbiBleGlzdGluZyBidWZmZXIgbWF0Y2hlcywgd2UgY2FuIGp1c3Qg
Y2xlYXIgaXQgaW5zdGVhZCBvZiByZWFsbG9jYXRpbmcuCiAgICAgLy8gVGhpcyBvcHRpbWl6YXRp
b24gaXMgb25seSBkb25lIGZvciAyRCBjYW52YXNlcyBmb3Igbm93LgotICAgIGlmIChtX2hhc0Ny
ZWF0ZWRJbWFnZUJ1ZmZlciAmJiBvbGRTaXplID09IG5ld1NpemUgJiYgbV9jb250ZXh0ICYmIG1f
Y29udGV4dC0+aXMyZCgpICYmIGJ1ZmZlcigpICYmIG1fY29udGV4dC0+Y29sb3JTcGFjZSgpID09
IGJ1ZmZlcigpLT5jb2xvclNwYWNlKCkgJiYgbV9jb250ZXh0LT5waXhlbEZvcm1hdCgpID09IGJ1
ZmZlcigpLT5waXhlbEZvcm1hdCgpKSB7CisgICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
ICYmIG9sZFNpemUgPT0gbmV3U2l6ZSAmJiByZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpICYmIGJ1
ZmZlcigpICYmIHJlbmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNv
bG9yU3BhY2UoKSAmJiByZW5kZXJpbmdDb250ZXh0KCkucGl4ZWxGb3JtYXQoKSA9PSBidWZmZXIo
KS0+cGl4ZWxGb3JtYXQoKSkgewogICAgICAgICBpZiAoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcikK
ICAgICAgICAgICAgIGNsZWFySW1hZ2VCdWZmZXIoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjMx
LDcgKzYzOCw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKICAgICBzZXRTdXJm
YWNlU2l6ZShuZXdTaXplKTsKIAogICAgIGlmIChpc0dQVUJhc2VkKCkgJiYgb2xkU2l6ZSAhPSBz
aXplKCkpCi0gICAgICAgIGRvd25jYXN0PEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dD4o
Km1fY29udGV4dCkucmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIGRvd25jYXN0
PEdQVUJhc2VkQ2FudmFzUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNo
YXBlKHdpZHRoKCksIGhlaWdodCgpKTsKIAogICAgIGF1dG8gcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpOwogICAgIGlmIChpczxSZW5kZXJIVE1MQ2FudmFzPihyZW5kZXJlcikpIHsKQEAgLTY1
MCwxMyArNjU3LDEyIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogYm9vbCBI
VE1MQ2FudmFzRWxlbWVudDo6cGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0CiB7Ci0gICAg
QVNTRVJUKG1fY29udGV4dCk7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBpZiAobV9jb250ZXh0LT5pczJkKCkgfHwgbV9jb250ZXh0LT5pc0JpdG1hcFJlbmRl
cmVyKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkgfHwgcmVuZGVyaW5nQ29u
dGV4dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYK
IAotICAgIGlmICghbV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgaWYgKCFyZW5kZXJp
bmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IGlmIChyZW5kZXJCb3goKSAmJiByZW5kZXJCb3goKS0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpKQpAQCAtNjY4LDQyICs2NzQsMzUgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnRz
SW50b0NhbnZhcwogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IExheW91dFJlY3QmIHIpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkK
LSAgICAgICAgbV9jb250ZXh0LT5jbGVhckFjY3VtdWxhdGVkRGlydHlSZWN0KCk7CisgICAgcmVu
ZGVyaW5nQ29udGV4dCgpLmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKTsKIAogICAgIGlmICgh
Y29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpIHsKLSAgICAgICAgYm9vbCBzaG91bGRQYWludCA9
IHRydWU7Ci0KLSAgICAgICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAgICAgc2hvdWxkUGFp
bnQgPSBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgfHwgZG9jdW1lbnQoKS5wcmludGluZygpIHx8
IG1faXNTbmFwc2hvdHRpbmc7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkUGFpbnQpIHsKLSAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5V2l0aFBhaW50KCk7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KKyAgICAgICAgYm9vbCBzaG91bGRQYWludCA9IHBh
aW50c0ludG9DYW52YXNCdWZmZXIoKSB8fCBkb2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1Nu
YXBzaG90dGluZzsKICAgICAgICAgaWYgKHNob3VsZFBhaW50KSB7CisgICAgICAgICAgICByZW5k
ZXJpbmdDb250ZXh0KCkucHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKTsKKyAgICAgICAgICAg
IHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworCiAg
ICAgICAgICAgICBpZiAoaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gYnVmZmVyKCkpCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIGltYWdlQnVmZmVyID0gYnVmZmVyKCkpCiAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgc25hcHBlZEludFJlY3Qocikp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFVOTElLRUxZKG1f
Y29udGV4dCAmJiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIo
KSkpCi0gICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVjb3JkaW5n
Q2FudmFzRnJhbWUoKm1fY29udGV4dCk7CisgICAgaWYgKFVOTElLRUxZKHJlbmRlcmluZ0NvbnRl
eHQoKS5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpKQorICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzR1BVQmFzZWQo
KSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pc0dQVUJhc2Vk
KCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQoKS5pc0dQVUJhc2VkKCk7CiB9CiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgQ2FudmFzQmFzZTo6c2V0U2l6ZShzaXplKTsKICAgICBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciA9IGZhbHNlOwotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOworICAgIGNsZWFy
SW1hZ2VCdWZmZXIoKTsKICAgICBjbGVhckNvcGllZEltYWdlKCk7CiB9CiAKQEAgLTc5NSwxMSAr
Nzk0LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEhUTUxDYW52YXNFbGVtZW50Ojp0b0IKICNpZiBF
TkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIEV4Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+
PiBIVE1MQ2FudmFzRWxlbWVudDo6dHJhbnNmZXJDb250cm9sVG9PZmZzY3JlZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQorICAgIGlmIChy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlzKTsKLSAgICBpZiAobV9jb250ZXh0LT5pc0FjY2Vs
ZXJhdGVkKCkpCisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChQbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcykpOworCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkKCkpCiAgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKIAogICAgIHJldHVybiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZShjb250ZXh0LCAqdGhpcyk7
CkBAIC04MDksMTAgKzgwOSwxMCBAQCBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4g
SFRNTENhCiBSZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRh
KCkKIHsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KG1fY29udGV4dC5nZXQoKSkpIHsKKyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQog
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQo
ZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlPigqbV9jb250ZXh0KS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVy
aW5nQ29udGV4dCgpKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAgIH0K
ICNlbmRpZgogICAgIHJldHVybiBudWxscHRyOwpAQCAtOTU4LDI1ICs5NTgsMTkgQEAgdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZQogICAgIC8vIEZJWE1FOiBBZGQgYSBu
ZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCiAgICAgYXV0byB1
c2VEaXNwbGF5TGlzdCA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50
KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpID8gU2hvdWxkVXNlRGlz
cGxheUxpc3Q6OlllcyA6IFNob3VsZFVzZURpc3BsYXlMaXN0OjpObzsKIAotICAgIGF1dG8gW2Nv
bG9yU3BhY2UsIHBpeGVsRm9ybWF0XSA9IFsmXSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgbV9jb250ZXh0LT5jb2xvclNwYWNlKCksIG1f
Y29udGV4dC0+cGl4ZWxGb3JtYXQoKSB9OwotICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgRGVz
dGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQaXhlbEZvcm1hdDo6QkdSQTggfTsKLSAgICB9KCk7
Ci0KLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVy
aW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNhbnZhcywgMSwgY29s
b3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cpKTsKKyAgICBjb25zdF9jYXN0PEhUTUxD
YW52YXNFbGVtZW50Kj4odGhpcyktPnNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSgpLCByZW5kZXJpbmdNb2RlLCB1c2VEaXNwbGF5TGlzdCwgUmVuZGVyaW5nUHVycG9zZTo6
Q2FudmFzLCAxLCByZW5kZXJpbmdDb250ZXh0KCkuY29sb3JTcGFjZSgpLCByZW5kZXJpbmdDb250
ZXh0KCkucGl4ZWxGb3JtYXQoKSwgaG9zdFdpbmRvdykpOwogCiAgICAgaWYgKGJ1ZmZlcigpICYm
IGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQogICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlm
IChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKKyAgICBpZiAocmVuZGVyaW5nQ29u
dGV4dCgpLmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1
aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCiAgICAgICAgIGNvbnN0X2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnQqPih0aGlzKS0+aW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21w
b3NpdGlvbigpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKG1fY29udGV4dCAmJiBidWZmZXIo
KSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpKQorICAgIGlmICgh
cmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpICYmIGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5wcmVm
ZXJzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8SFRNTENhbnZh
c0VsZW1lbnQqPih0aGlzKS0+YWRkT2JzZXJ2ZXIoZG9jdW1lbnQoKSk7CiB9CiAKQEAgLTEwMDMs
MzEgKzk5NywzMCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAg
ICAgZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2Uq
IEhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZh
c0VsZW1lbnQ6OmNvcGllZEltYWdlKCkKIHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVm
ZmVyKCkpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1h
Z2UgPSBidWZmZXIoKS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAK
LXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyKTsKICAgICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7
Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5p
czJkKCkpOwogCiAgICAgbV9kaWRDbGVhckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChp
czxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAv
LyBObyBuZWVkIHRvIHVuZG8gdHJhbnNmb3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2Fs
bGVkIHJpZ2h0IGFmdGVyIHRoZSBjb250ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0
aCgpLCBoZWlnaHQoKSk7CisgICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
OwogICAgIH0KIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgp
IGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAg
ICBtX2NvcGllZEltYWdlID0gbnVsbHB0cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBm
YWxzZTsKQEAgLTEwNDEsOSArMTAzNCw5IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50
OjphY3RpdmVET00KIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdAogewogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdl
YkdMIHJlbmRlcmluZyBjb250ZXh0IG1heSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5n
ZSAvIGNvbnRleHRyZXN0b3JlZCBldmVudHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4g
bV9oYXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsK
KyAgICAgICAgcmV0dXJuIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250
ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcw
LDcgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBh
ZGRPYnNlcnZlcihkb2N1bWVudCk7CiAgICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhh
dmUgYmVlbiBpc3N1ZWQgdG8gdGhlIGNhbnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAg
ICAgICAgIC8vIHRlbGwgdGhlIGRvY3VtZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAg
ICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBk
YXRpbmcoKSkKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3Vs
dHNOZWVkVXBkYXRpbmcoKSkKICAgICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRo
aXMsIEZsb2F0UmVjdCB7IH0pOwogICAgIH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0Vs
ZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0ICYmIG1fY29udGV4dC0+bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1
cm4gcmVuZGVyaW5nQ29udGV4dCgpLm5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NF
UlQobmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQot
ICAgICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29u
dGV4dCgpLnByZXBhcmVGb3JEaXNwbGF5KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6
OmlzQ29udHJvbGxlZEJ5T2Zmc2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
ICYmIG1fY29udGV4dC0+aXNQbGFjZWhvbGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250
ZXh0KCkuaXNQbGFjZWhvbGRlcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJy
aWRlOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9w
dGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3Qm
LCBjb25zdCBTdHJpbmcmIGNvbnRleHRJZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93
bj4+JiYgYXJndW1lbnRzKTsKLQogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRl
eHQoY29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJp
bmcmKTsKQEAgLTExNiw4ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1l
ZGlhU3RyZWFtPj4gY2FwdHVyZVN0cmVhbShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBm
cmFtZVJlcXVlc3RSYXRlKTsKICNlbmRpZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29u
c3QgZmluYWw7Ci0gICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAg
SW1hZ2UqIGNvcGllZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkg
ZmluYWw7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1
cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2NCw3ICsxNjIs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAgIHZvaWQgY3JlYXRlSW1hZ2VC
dWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsK
KyAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKTsKIAogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdl
QnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0K
IApAQCAtMTgzLDcgKzE4MSw2IEBAIHByaXZhdGU6CiAgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5j
ZXN0b3JSZXN1bHQgaW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFsVHlwZSwg
Q29udGFpbmVyTm9kZSYgb2xkUGFyZW50T2ZSZW1vdmVkVHJlZSkgZmluYWw7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwogICAgIG11dGFi
bGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOyAvLyBGSVhNRTogVGhpcyBpcyB0ZW1wb3Jh
cnkgZm9yIHBsYXRmb3JtcyB0aGF0IGhhdmUgdG8gY29weSB0aGUgaW1hZ2UgYnVmZmVyIHRvIHJl
bmRlciAoYW5kIGZvciBDU1NDYW52YXNWYWx1ZSkuCiAKICAgICBPcHRpb25hbDxib29sPiBtX3Vz
ZXNEaXNwbGF5TGlzdERyYXdpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsNiBAQCBPZmZzY3Jl
ZW5DYW52YXM6Ok9mZnNjcmVlbkNhbnZhcyhTY3JpcHRFCiBPZmZzY3JlZW5DYW52YXM6On5PZmZz
Y3JlZW5DYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwot
Ci0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9y
ZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIHVu
c2lnbmVkIE9mZnNjcmVlbkNhbnZhczo6d2lkdGgoKSBjb25zdApAQCAtMTU0LDYgKzE1MSwyMyBA
QCB2b2lkIE9mZnNjcmVlbkNhbnZhczo6c2V0U2l6ZShjb25zdCBJbnRTCiAgICAgcmVzZXQoKTsK
IH0KIAorc3RhdGljIGJvb2wgaXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5
cGUpCit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpf
MmQ7Cit9CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogT2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4
dFR5cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250ZXh0VHlwZSksIGNvbnRl
eHRUeXBlKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKKworICAg
IC8vIEZJWE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBlbm91Z2ggcGl4ZWwgbWVt
b3J5LiBTZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZC4KKworICAgIHNldFJl
bmRlcmluZ0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUo
KnRoaXMpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYgRU5BQkxFKFdFQkdMKQog
c3RhdGljIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yV2ViR0woKQogewpA
QCAtMTc1LDI4ICsxODksNDEgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlV2ViR0woYm9vbCB3
ZWJHTAogICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKIH0KIAotdm9p
ZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlw
ZSBjb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQorc3RhdGljIGJv
b2wgaXNXZWJHTFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUpCiB7Ci0gICAg
QVNTRVJUKCFtX2NvbnRleHQpOworICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6V2ViZ2wgfHwgY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6
OldlYmdsMjsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBhdHRycykKK3sKKyAgICBBU1NFUlQoaXNXZWJHTFR5cGUo
Y29udGV4dFR5cGUpKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsK
IAogICAgIGF1dG8gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHRoaXMtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNXb3JrZXJHbG9i
YWxTY29wZSgpKSB7CiAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29w
ZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7
CiAgICAgICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0wod29ya2VyR2xvYmFsU2NvcGUuc2V0dGlu
Z3NWYWx1ZXMoKS53ZWJHTEVuYWJsZWQsIHdvcmtlckdsb2JhbFNjb3BlLnNldHRpbmdzVmFsdWVz
KCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlIGlmIChzY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgYXV0byYgc2V0dGluZ3MgPSBkb3du
Y2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNldHRpbmdzKCk7CiAgICAg
ICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0woc2V0dGluZ3Mud2ViR0xFbmFibGVkKCksIHNldHRp
bmdzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpKQotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBHcmFwaGljc0NvbnRleHRHTFdlYkdM
VmVyc2lvbiB3ZWJHTFZlcnNpb24gPSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2Vi
R0wxOwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgd2ViR0xWZXJzaW9uID0gKGNvbnRleHRUeXBl
ID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpXZWJnbCkgPyBHcmFwaGljc0NvbnRleHRHTFdlYkdM
VmVyc2lvbjo6V2ViR0wxIDogR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMjsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHRUeXBlKTsKICNlbmRpZgotICAgIG1fY29u
dGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHdl
YkdMVmVyc2lvbik7CisKKyAgICBhdXRvIGNvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjcmVhdGUoKnRoaXMsIGF0dHJzLCB3ZWJHTFZlcnNpb24pOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KG1h
a2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihjb250ZXh0KSk7CisgICAgcmV0dXJuICZk
b3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpAQCAtMjA2LDQ0ICsyMzMsNTMgQEAgRXhjZXB0
aW9uT3I8T3B0aW9uYWw8T2Zmc2NyZWVuUmVuZGVyaW5nQwogICAgIGlmIChtX2RldGFjaGVkKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIGlm
IChjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6XzJkKSB7Ci0gICAgICAgIGlm
IChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIGlmICghaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5p
c05vbmUoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSkgeworICAg
ICAgICAgICAgaWYgKCFpczJkVHlwZShjb250ZXh0VHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwotICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZk
b3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRl
eHQoKSkgfSB9IH07CiAgICAgICAgIH0KIAotICAgICAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVl
PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKnRoaXMpOwotICAgICAgICBpZiAo
IW1fY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLQot
ICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+IHsgJmRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29u
dGV4dCkgfSB9IH07Ci0gICAgfQogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpt
X2NvbnRleHQpIH0gfSB9OworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wo
KSkgeworICAgICAgICAgICAgaWYgKCFpc1dlYkdMVHlwZShjb250ZXh0VHlwZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNpZiBF
TkFCTEUoV0VCR0wyKQotICAgICAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2Nv
bnRleHQpIH0gfSB9OworICAgICAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8
V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKKyNlbmRpZgogI2VuZGlmCi0gICAgICAgICAg
ICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAgICAgICAgIH0KIAorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9Owor
ICAgIH0KKworICAgIGlmIChpczJkVHlwZShjb250ZXh0VHlwZSkpIHsKKyAgICAgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBwYXNzaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRp
bmdzLgorICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoY29u
dGV4dFR5cGUpOworICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqY29udGV4dCkgfSB9IH07CisgICAgfQorCisjaWYgRU5BQkxFKFdFQkdM
KQorICAgIGlmIChpc1dlYkdMVHlwZShjb250ZXh0VHlwZSkpIHsKICAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUudm0oKSk7CiAgICAgICAgIGF1dG8gYXR0cmli
dXRlcyA9IGNvbnZlcnQ8SURMRGljdGlvbmFyeTxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPj4oc3Rh
dGUsICFhcmd1bWVudHMuaXNFbXB0eSgpID8gYXJndW1lbnRzWzBdLmdldCgpIDogSlNDOjpqc1Vu
ZGVmaW5lZCgpKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9u
IHsgRXhpc3RpbmdFeGNlcHRpb25FcnJvciB9KTsKIAotICAgICAgICBjcmVhdGVDb250ZXh0V2Vi
R0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmlidXRlcykpOwotICAgICAgICBpZiAoIW1fY29u
dGV4dCkKKyAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdMKGNvbnRleHRU
eXBlLCBXVEZNb3ZlKGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQogICAgICAg
ICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwogCiAjaWYgRU5BQkxFKFdFQkdMMikK
LSAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAg
ICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93
bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9IH07CisgICAgICAg
IGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpCisgICAgICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07CiAjZW5kaWYKLSAgICAgICAgcmV0
dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKmNvbnRleHQpIH0gfSB9OwogICAgIH0KICNlbmRpZgogCkBAIC0yNTIsMTAgKzI4OCwx
MCBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDCiAKIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdl
Qml0bWFwKCkKIHsKLSAgICBpZiAobV9kZXRhY2hlZCB8fCAhbV9jb250ZXh0KQorICAgIGlmICht
X2RldGFjaGVkIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoaXM8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSkgeworICAgIGlmIChpczxPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsKICAg
ICAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiB7IFJl
ZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIApAQCAtMjY4LDE1ICszMDQsMTUgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZQogICAgICAgICAvLyBieSBi
dWZmZXIoKSwgdG8gYXZvaWQgcmVzZXR0aW5nIHRoZSBjb250ZXh0IHN0YXRlLCB3ZSBoYXZlIHRv
IG1ha2UgYSBjb3B5IGFuZAogICAgICAgICAvLyBjbGVhciB0aGUgb3JpZ2luYWwgYnVmZmVyIHJh
dGhlciB0aGFuIHJldHVybmluZyB0aGUgb3JpZ2luYWwgYnVmZmVyLgogICAgICAgICBhdXRvIGJ1
ZmZlckNvcHkgPSBidWZmZXIoKS0+Y29weVJlY3RUb0J1ZmZlcihGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBidWZmZXIoKS0+bG9naWNhbFNpemUoKSksIGJ1ZmZlcigpLT5jb2xvclNwYWNlKCksICpk
cmF3aW5nQ29udGV4dCgpKTsKLSAgICAgICAgZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5jbGVhckNhbnZhcygpOworICAgICAgICBkb3duY2Fz
dDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSku
Y2xlYXJDYW52YXMoKTsKICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpOwogCiAgICAgICAgIHJl
dHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoSW1hZ2VCaXRtYXBCYWNraW5nKFdURk1vdmUoYnVm
ZmVyQ29weSksIG9yaWdpbkNsZWFuKCkgPyBTZXJpYWxpemF0aW9uU3RhdGU6Ok9yaWdpbkNsZWFu
IDogU2VyaWFsaXphdGlvblN0YXRlKCkpKSB9OwogICAgIH0KIAogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkgewotICAgICAg
ICBhdXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpt
X2NvbnRleHQpOworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkpIHsKKyAgICAgICAgYXV0byB3ZWJHTENvbnRleHQgPSAmZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogCiAgICAgICAgIC8vIEZJWE1F
OiBXZSdyZSBzdXBwb3NlZCB0byBjcmVhdGUgYW4gSW1hZ2VCaXRtYXAgdXNpbmcgdGhlIGJhY2tp
bmcKICAgICAgICAgLy8gc3RvcmUgZnJvbSB0aGlzIGNhbnZhcyAob3IgaXRzIGNvbnRleHQpLCBi
dXQgZm9yIG5vdyB3ZSdsbCBqdXN0CkBAIC0zNTgsMjAgKzM5NCwxOSBAQCB2b2lkIE9mZnNjcmVl
bkNhbnZhczo6ZGlkRHJhdyhjb25zdCBPcHRpCiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzQ2hh
bmdlZChyZWN0KTsKIH0KIAotSW1hZ2UqIE9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1hZ2UoKSBj
b25zdAorSW1hZ2UqIE9mZnNjcmVlbkNhbnZhczo6Y29waWVkSW1hZ2UoKQogewogICAgIGlmICht
X2RldGFjaGVkKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGlmICghbV9jb3BpZWRJ
bWFnZSAmJiBidWZmZXIoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAg
bV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0KCkucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICAgICAg
bV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIH0KICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIAotdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKSBjb25z
dAordm9pZCBPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAgIG1fY29w
aWVkSW1hZ2UgPSBudWxscHRyOwogfQpAQCAtNDMxLDggKzQ2Niw4IEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IFRyYW5zZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBjb21w
b3NpdGluZwotICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1f
Y29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJH
TCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIHJlbmRl
cmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCiAgICAgaWYg
KG1fcGxhY2Vob2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAgICAgIGF1dG8gYnVm
ZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRpb25Db2xvclNwYWNl
OjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ3OSw3ICs1MTQsNyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoCiAgICAgc2V0SW1hZ2VCdWZmZXIo
SW1hZ2VCaXRtYXA6OmNyZWF0ZUltYWdlQnVmZmVyKCpjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAot
UmVmUHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNv
bnN0CitSZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkKIHsKICAgICBBU1NFUlQobV9kZXRhY2hlZCk7CiAKQEAgLTQ5NCw3ICs1MjksNyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6cmVzZXQoKQogewogICAgIHJlc2V0R3JhcGhpY3NDb250ZXh0U3Rh
dGUoKTsKICAgICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnJlc2V0KCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNldCgpOwog
CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKICAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAkocmV2
aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDE2ICsxMjIsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
V2lkdGgodW5zaWduZWQpOwogICAgIHZvaWQgc2V0SGVpZ2h0KHVuc2lnbmVkKTsKIAotICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNj
cmVlblJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBS
ZW5kZXJpbmdDb250ZXh0VHlwZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYg
YXJndW1lbnRzKTsKICAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiB0cmFuc2Zl
clRvSW1hZ2VCaXRtYXAoKTsKICAgICB2b2lkIGNvbnZlcnRUb0Jsb2IoSW1hZ2VFbmNvZGVPcHRp
b25zJiYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSBmaW5hbDsKIAotICAgIEltYWdlKiBjb3BpZWRJbWFnZSgp
IGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOwor
ICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFn
ZSgpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCkBAIC0xNDgsNyArMTQ2LDYg
QEAgcHVibGljOgogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCiBwcml2YXRlOgotCiAg
ICAgT2Zmc2NyZWVuQ2FudmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KTsKIAogICAgIGJvb2wgaXNPZmZzY3JlZW5DYW52YXMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CkBAIC0xNjUsMTIgKzE2MiwxMyBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKIAorICAgIE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKFJlbmRl
cmluZ0NvbnRleHRUeXBlKTsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdm9pZCBjcmVhdGVDb250
ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiA9
IHsgfSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3JlYXRlQ29udGV4dFdlYkdM
KFJlbmRlcmluZ0NvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYpOwogI2VuZGlm
CiAKICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QgZmluYWw7Ci0gICAgUmVmUHRy
PEltYWdlQnVmZmVyPiB0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdDsKKyAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAgdm9pZCByZXNldCgpOwogCkBAIC0xNzgs
OCArMTc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7
CiAgICAgdm9pZCBzY2hlZHVsZUNvbW1pdFRvUGxhY2Vob2xkZXJDYW52YXMoKTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0KICAgICAv
LyBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1
ZmZlci4gV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KICAgICBtdXRhYmxlIGJvb2wgbV9o
YXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJl
dmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDExICs2OSwxMSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIAotc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKQorVW5pcXVlUmVmPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKQogewotICAgIGF1dG8gcmVuZGVyaW5nQ29u
dGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG5ldyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSwgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKKyAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBtYWtl
VW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChjYW52
YXMsIFdURk1vdmUoc2V0dGluZ3MpLCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOwog
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdD
b250ZXh0KCpyZW5kZXJpbmdDb250ZXh0KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQocmVuZGVyaW5nQ29udGV4dC5nZXQoKSk7
CiAKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZp
c2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBUZXh0
TWV0cmljczsKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0
eVBhcnNlTW9kZSk7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3Mm
JiwgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSk7CiAKICAgICB2aXJ0dWFsIH5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTcz
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIENhbnZhc0Jh
c2UmIGNhbnZhc0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQogCisgICAgdmlydHVh
bCBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzMmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdM
MSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViR0wyKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIC8v
IHVzZWQgZm9yIGNvbXBvc2l0aW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBib29sIGhh
c0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0Fj
dGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KICAgICB2b2lkIHNldEhhc0FjdGl2ZUlu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyKSB7IG1faGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciA9IGhhc0FjdGl2
ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dE5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dE5vbmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworCitVbmlxdWVSZWY8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmU+IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoQ2Fu
dmFzQmFzZSYgY2FudmFzKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5j
ZSgqbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKGNhbnZhcykpOworfQorCitDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFz
ZSYgY2FudmFzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9Cit7Cit9
CisKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5v
bmUoKSA9IGRlZmF1bHQ7CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lIGZpbmFsIDogcHVi
bGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworcHVibGljOgorICAgIHN0YXRpYyBVbmlxdWVS
ZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU+IGNyZWF0ZShDYW52YXNCYXNlJik7CisKKyAg
ICB2aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSgpOworCitwcml2YXRlOgorICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKENhbnZhc0Jhc2UmKTsKKworICAgIGJvb2wgaXNO
b25lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MiwxMSArNDIsMTEgQEAgc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZQog
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFz
QmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRp
bmdzKQorVW5pcXVlUmVmPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewotICAgIGF1dG8gcmVuZGVyaW5n
Q29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KG5l
dyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkp
OworICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNl
KCpuZXcgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5n
cykpKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCgqcmVuZGVyaW5nQ29udGV4dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQu
Z2V0KCkpOwogCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQw
LDcgQEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVh
dGUoQ2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwor
ICAgIHN0YXRpYyBVbmlxdWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwogCiAg
ICAgZW51bSBjbGFzcyBCaXRtYXBNb2RlIHsKICAgICAgICAgVmFsaWQsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCk7CiAKK1VuaXF1ZVJlZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IE9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykK
K3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7Cit9CisKIE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZh
c0Jhc2UmIGNhbnZhcykKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoY2FudmFz
LCBmYWxzZSkKIHsKQEAgLTEwOCw3ICsxMTMsOCBAQCBDYW52YXNEaXJlY3Rpb24gT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nCiAgICAgcmV0dXJuIERpcmVjdGlvbjo6THRyOwogfQogCi1hdXRvIE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9u
dFByb3h5KiB7CithdXRvIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFBy
b3h5KCkgLT4gY29uc3QgRm9udFByb3h5KgorewogICAgIGlmICghc3RhdGUoKS5mb250LnJlYWxp
emVkKCkpCiAgICAgICAgIHNldEZvbnQoc3RhdGUoKS51bnBhcnNlZEZvbnQpOwogICAgIHJldHVy
biAmc3RhdGUoKS5mb250OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlz
aW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAj
aWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmgiCi0KICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzYsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJik7CisgICAgc3RhdGljIFVuaXF1ZVJl
ZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7
CisKICAgICB2aXJ0dWFsIH5PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAog
ICAgIE9mZnNjcmVlbkNhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8T2Zm
c2NyZWVuQ2FudmFzPihjYW52YXNCYXNlKCkpOyB9CkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoK
ICAgICBSZWY8VGV4dE1ldHJpY3M+IG1lYXN1cmVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAK
IHByaXZhdGU6CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jh
c2UmKTsKKwogICAgIGJvb2wgaXNPZmZzY3JlZW4yZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KICAgICBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIGZpbmFsOwogfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0Nv
bnRleHQyRC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFBh
aW50UmVuZGVyaW5nQ29udGV4dDJEKTsKIAotc3RkOjp1bmlxdWVfcHRyPFBhaW50UmVuZGVyaW5n
Q29udGV4dDJEPiBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNh
bnZhcykKK1VuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4obmV3IFBhaW50UmVuZGVyaW5nQ29u
dGV4dDJEKGNhbnZhcykpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgq
bmV3IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcykpOwogfQogCiBQYWludFJlbmRlcmlu
Z0NvbnRleHQyRDo6UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYgY2FudmFzKQpA
QCAtNDcsNCArNDcsNSBAQCBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6UGFpbnRSZW5kZXJpbmdD
CiBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6flBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCkgPSBk
ZWZhdWx0OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5o
CShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJl
bmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDE4ICszNiwyMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBQYWludFJlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1Ymxp
YyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOwor
ICAgIHN0YXRpYyBVbmlxdWVSZWY8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52
YXNCYXNlJik7CiAKICAgICB2aXJ0dWFsIH5QYWludFJlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAg
ICAgQ3VzdG9tUGFpbnRDYW52YXMmIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEN1
c3RvbVBhaW50Q2FudmFzPihjYW52YXNCYXNlKCkpOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBp
c1BhaW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOworCisgICAgYm9vbCBpc1BhaW50KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTlZBU1JFTkRFUklOR0NPTlRFWFQoV2ViQ29yZTo6
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQsIGlzUGFpbnQoKSkKKwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEwICszNywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogCitVbmlxdWVSZWY8UGxh
Y2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9t
UmVmZXJlbmNlKCpuZXcgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykpOworfQor
CiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dChDYW52YXNCYXNlJiBjYW52YXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNhbnZh
cykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeyBjYW52YXMgfQorICAgICwgbV9pbWFn
ZUJ1ZmZlclBpcGUgeyBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpIH0KIHsKLSAgICBtX2ltYWdl
QnVmZmVyUGlwZSA9IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCk7CiB9CiAKIEhUTUxDYW52YXNF
bGVtZW50KiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEzICszNywxNSBAQCBjbGFzcyBPZmZzY3JlZW5DYW52YXM7CiBjbGFzcyBQbGFjZWhvbGRl
clJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7
CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQp
OwogcHVibGljOgotICAgIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7
CisgICAgc3RhdGljIFVuaXF1ZVJlZjxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0
ZShDYW52YXNCYXNlJik7CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7
CiAKICAgICBjb25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KIAogcHJpdmF0ZToKKyAgICBQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOworCiAgICAgYm9vbCBpc1BsYWNl
aG9sZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJl
dmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQxLDcgKzQ4NDEsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAgICAgICAgIC8vIHNvIGZv
ciBXZWJHTCAxLjAgdXBsb2FkcywgZGVmZXIgbWVhc3VyaW5nIHRoZWlyIHJlY3RhbmdsZSBhcyBs
b25nIGFzIHBvc3NpYmxlLgogICAgICAgICB0ZXhJbWFnZUltcGwoZnVuY3Rpb25JRCwgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3Vy
Y2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGZhbHNl
LCBpbnB1dFNvdXJjZUltYWdlUmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0KTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50
PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAgfSwgWyZdKFJlZlB0cjxIVE1M
Q2FudmFzRWxlbWVudD4mIGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBh
dXRvIHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGZ1bmN0aW9u
TmFtZSwgY2FudmFzLmdldCgpKTsKICAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKLXN0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hl
c0RldmljZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2UmIGRl
dmljZSkKK3N0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hlc0Rl
dmljZShjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2Um
IGRldmljZSkKIHsKICAgICBpZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCkpIHsKICAg
ICAgICAgYXV0byYgY29udGV4dEdQVSA9IGRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRl
eHQpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIFdlYkdQVURldmljZSogSW5zcGVjdG9yQ2FudmFzOjpk
ZXZpY2VDb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBJbnNwZWN0b3JDYW52YXM6
OmlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
KSBjb25zdAorYm9vbCBJbnNwZWN0b3JDYW52YXM6OmlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChh
dXRvKiBkZXZpY2UgPSBkZXZpY2VDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBjYW52YXNJZkNv
bnRleHRNYXRjaGVzRGV2aWNlKGNvbnRleHQsICpkZXZpY2UpOwpAQCAtMTA3NiwxNiArMTA3Niwx
NiBAQCBTdHJpbmcgSW5zcGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50CiAgICAgfQogCiAj
aWYgRU5BQkxFKFdFQkdMKQotICAgIGF1dG8qIGNvbnRleHQgPSBub2RlLT5yZW5kZXJpbmdDb250
ZXh0KCk7CisgICAgYXV0byYgY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQoKTsKICAg
ICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAgIGRv
d25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50QnVm
ZmVyQ2xlYXJGb3JJbnNwZWN0b3IodHJ1ZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rv
cih0cnVlKTsKICNlbmRpZgogCiAgICAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IHJlc3Vs
dCA9IG5vZGUtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zKTsKIAogI2lmIEVOQUJMRShXRUJHTCkK
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAg
IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50
QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3IoZmFsc2UpOworICAgICAgICBkb3duY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNw
ZWN0b3IoZmFsc2UpOwogI2VuZGlmCiAKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZp
c2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKICAgICBXZWJHUFVEZXZpY2UqIGRldmljZUNvbnRleHQoKSBjb25zdDsKLSAgICBi
b29sIGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JikgY29u
c3Q7CisgICAgYm9vbCBpc0RldmljZUZvckNhbnZhc0NvbnRleHQoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYpIGNvbnN0OwogI2VuZGlmCiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCShyZXZp
c2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52
YXNBZ2VudChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQor
c3RhdGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudmFzQWdlbnQoY29uc3QgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCkKIHsKICAgICBBU1NF
UlQoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGljOjpoYXNGcm9udGVuZHMoKSk7CiAKQEAg
LTgzLDcgKzgzLDcgQEAgc3RhdGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2Fudgog
fQogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTihBcmd1bWVudFR5cGUpIFwK
LU9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBc
CitPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4g
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1
bWVudCkgXAogeyBcCiAgICAgaWYgKGF1dG8qIGNhbnZhc0FnZW50ID0gZW5hYmxlZENhbnZhc0Fn
ZW50KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpKSBcCiAgICAgICAgIHJldHVybiBjYW52YXNBZ2Vu
dC0+cHJvY2Vzc0FyZ3VtZW50KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIGFyZ3VtZW50KTsgXApA
QCAtOTMsNyArOTMsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9j
CiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9D
RVNTX0FSR1VNRU5UX0RFRklOSVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklU
SU9OCiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5hbWUs
IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50
cykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKGNvbnN0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5h
bWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3Vt
ZW50cykKIHsKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQo
Y2FudmFzUmVuZGVyaW5nQ29udGV4dCkpCiAgICAgICAgIGNhbnZhc0FnZW50LT5yZWNvcmRBY3Rp
b24oY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVu
dHMpKTsKQEAgLTEwMSwxNCArMTAxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWMKIAogT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vz
c2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChj
b25zdCBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgdWludDMyX3QgYXJndW1lbnQp
CiB7Ci0gICAgQVNTRVJUKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKTsKLSAgICBy
ZXR1cm4gcHJvY2Vzc0FyZ3VtZW50KCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwg
YXJndW1lbnQpOworICAgIHJldHVybiBwcm9jZXNzQXJndW1lbnQoY2FudmFzRWxlbWVudC5yZW5k
ZXJpbmdDb250ZXh0KCksIGFyZ3VtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyOjpyZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1l
bnQsIFN0cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFy
Z3VtZW50cyYmIGFyZ3VtZW50cykKIHsKLSAgICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJp
bmdDb250ZXh0KCkpOwotICAgIHJlY29yZEFjdGlvbigqY2FudmFzRWxlbWVudC5yZW5kZXJpbmdD
b250ZXh0KCksIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgcmVjb3Jk
QWN0aW9uKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKGFyZ3VtZW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDEy
IEBAIHB1YmxpYzoKICAgICB1c2luZyBQcm9jZXNzZWRBcmd1bWVudHMgPSBzdGQ6OmluaXRpYWxp
emVyX2xpc3Q8T3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+PjsKIAogI2RlZmluZSBQUk9DRVNT
X0FSR1VNRU5UX0RFQ0xBUkFUSU9OKEFyZ3VtZW50VHlwZSkgXAotICAgIHN0YXRpYyBPcHRpb25h
bDxQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmLCBBcmd1bWVudFR5cGUpOyBcCisgICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3Vt
ZW50PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFyZ3Vt
ZW50VHlwZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAgICAg
Rk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNTX0FS
R1VNRU5UX0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04K
IAotICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0Jiwg
U3RyaW5nJiYsIFByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKKyAgICBzdGF0aWMgdm9pZCBy
ZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBQcm9j
ZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CiAKICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2Vk
QXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYsIHVpbnQz
Ml90KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1l
bnQmLCBTdHJpbmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNB
Z2VudC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsMTMg
KzQxNyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGUKIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoQ2Fu
dmFzQmFzZSYgY2FudmFzQmFzZSkKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5y
ZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3Bl
Y3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250
ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9y
Q2FudmFzKQogICAgICAgICByZXR1cm47CkBAIC00NDcsNyArNDQxLDcgQEAgdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1v
cnkoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8
SW5zcGVjdG9yQ2FudmFzPiBpbnNwZWN0b3JDYW52YXM7CiAKQEAgLTQ3NywxMSArNDcxLDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudgogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNl
LnJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4
dCk7CisgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZh
c0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsK
ICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNDkxLDExICs0
ODEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkCiAKIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXNC
YXNlKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQo
KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaW5zcGVj
dG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7CisgICAgYXV0byBpbnNw
ZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29u
dGV4dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3Rv
ckNhbnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzLDcgKzQ4OSw3IEBAIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3kKICAgICB1bmJpbmRDYW52YXMoKmluc3BlY3Rv
ckNhbnZhcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29y
ZGluZ0NhbnZhc0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9y
Y2VEaXNwYXRjaCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGlu
Z0NhbnZhc0ZyYW1lKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wg
Zm9yY2VEaXNwYXRjaCkKIHsKICAgICBpZiAoIWNvbnRleHQuaGFzQWN0aXZlSW5zcGVjdG9yQ2Fu
dmFzQ2FsbFRyYWNlcigpKQogICAgICAgICByZXR1cm47CkBAIC01MzcsNyArNTIzLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjbwogICAgIG1fcmVjb3JkaW5nQ2Fu
dmFzSWRlbnRpZmllcnMucmVtb3ZlKGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmllcigpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGV4
ZWMsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpj
b25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9u
cykKIHsKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY29u
dGV4dCk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CkBAIC01NTksNyArNTQ1LDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UgogICAgIHN0YXJ0UmVjb3Jk
aW5nKCppbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29u
c29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmIGNvbnRleHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RvcFJlY29y
ZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAg
IGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKGNvbnRleHQsIHRydWUpOwogfQpAQCAtNjgy
LDcgKzY2OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2UKICNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5J
VElPTihBcmd1bWVudFR5cGUpIFwKLU9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6
OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvY2Vzc0FyZ3VtZW50
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50
VHlwZSBhcmd1bWVudCkgXAorT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJv
Y2Vzc2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1l
bnRUeXBlIGFyZ3VtZW50KSBcCiB7IFwKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJ
bnNwZWN0b3JDYW52YXMoY2FudmFzUmVuZGVyaW5nQ29udGV4dCk7IFwKICAgICBBU1NFUlQoaW5z
cGVjdG9yQ2FudmFzKTsgXApAQCAtNjkyLDcgKzY3OCw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXI6OlByb2MKICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExf
VFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9D
RVNTX0FSR1VNRU5UX0RFRklOSVRJT04KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVj
b3JkQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQs
IFN0cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3Vt
ZW50cyYmIGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZEFjdGlv
bihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBT
dHJpbmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVu
dHMmJiBhcmd1bWVudHMpCiB7CiAgICAgQVNTRVJUKGNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaGFz
QWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKTsKIApAQCAtODg3LDcgKzg3Myw3IEBA
IFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0EKICAgICByZXR1cm4gaW5z
cGVjdG9yQ2FudmFzOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0KQorUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJ
bnNwZWN0b3JDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9y
Q2FudmFzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0Nv
bnRleHQoKSA9PSAmY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHJldmlzaW9uIDI3NzE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZy
YW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnRO
b2RlcyhDYW52YXNCYXNlJik7CiAgICAgdm9pZCBkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250
ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01l
bW9yeShDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRp
bmdDYW52YXNGcmFtZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNo
ID0gZmFsc2UpOwotICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0
aW9ucyk7Ci0gICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VDYW52YXNNZW1vcnkoY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYpOworICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJh
bWUoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9IGZh
bHNlKTsKKyAgICB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9w
dGlvbnMpOworICAgIHZvaWQgY29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIGRpZEVuYWJs
ZUV4dGVuc2lvbihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBkaWRDcmVhdGVXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYs
IFdlYkdMUHJvZ3JhbSYpOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgcHVibGljOgogCiAgICAgLy8g
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcgogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xB
UkFUSU9OKEFyZ3VtZW50VHlwZSkgXAotICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKKyAgICBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmLCBBcmd1bWVudFR5cGUpOyBcCiAvLyBlbmQgb2YgUFJPQ0VTU19B
UkdVTUVOVF9ERUNMQVJBVElPTgogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9U
UkFDRVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTikKICN1bmRlZiBQUk9D
RVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCi0gICAgdm9pZCByZWNvcmRBY3Rpb24oQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9j
ZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CisgICAgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
OjpQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFJl
Y29yZGluZ09wdGlvbnMgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9y
Q2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BV
KQogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BV
RGV2aWNlJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQy
LDEwICsyNDIsMTAgQEAgc3RhdGljIEpTQzo6SlNPYmplY3QqIG9iamVjdEFyZ3VtZW50QXQoUwog
c3RhdGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB0YXJnZXQpCiB7CiAgICAgaWYgKGF1dG8qIGNhbnZhcyA9
IEpTSFRNTENhbnZhc0VsZW1lbnQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKLSAgICAgICAgcmV0
dXJuIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNhbnZhcy0+
cmVuZGVyaW5nQ29udGV4dCgpOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlm
IChhdXRvKiBjYW52YXMgPSBKU09mZnNjcmVlbkNhbnZhczo6dG9XcmFwcGVkKHZtLCB0YXJnZXQp
KQotICAgICAgICByZXR1cm4gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJl
dHVybiAmY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICBpZiAoYXV0byog
Y29udGV4dCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1dyYXBwZWQodm0sIHRhcmdl
dCkpCiAgICAgICAgIHJldHVybiBjb250ZXh0OwpAQCAtMzQ5LDEwICszNDksOCBAQCB2b2lkIFBh
Z2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6CiAjZW5kaWYKICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBjYW52YXNS
ZW5kZXJpbmdDb250ZXh0ID0gY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzbmFwc2hvdENhbnZh
cyhjYW52YXNFbGVtZW50LCAqY2FudmFzUmVuZGVyaW5nQ29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9
IHNuYXBzaG90Q2FudmFzKGNhbnZhc0VsZW1lbnQsIGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29u
dGV4dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gcmVzdWx0LnZh
bHVlKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2
Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1c3QKICAgICBpZiAo
cmVzdWx0LnR5cGUoKSAhPSBDYWxsYmFja1Jlc3VsdFR5cGU6OlN1Y2Nlc3MpCiAgICAgICAgIHJl
dHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CiAKLSAgICBjYW52YXMtPnJlcGxheURp
c3BsYXlMaXN0KCZkZXN0Q29udGV4dCk7CisgICAgY2FudmFzLT5yZXBsYXlEaXNwbGF5TGlzdChk
ZXN0Q29udGV4dCk7CiAKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWREcmF3OwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAko
cmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxD
YW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNyBAQCBib29sIFJlbmRlckhU
TUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBjCiAgICAgaWYgKFJlbmRlclJlcGxhY2VkOjpyZXF1
aXJlc0xheWVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgp
KQotICAgICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOwotCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlz
QWNjZWxlcmF0ZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2Vk
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBA
IC03Myw3ICs3MCw3IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWkK
ICAgICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gdGhpcy0+Y29udGVudEJveFJlY3QoKTsK
IAogICAgIGlmIChjb250ZXh0LmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpKSB7Ci0gICAgICAg
IGlmICghY29udGV4dC5jb250ZW5mdWxQYWludERldGVjdGVkKCkgJiYgY2FudmFzRWxlbWVudCgp
LnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgaWYgKCFjb250ZXh0LmNvbnRlbmZ1bFBhaW50
RGV0ZWN0ZWQoKSAmJiAhY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUo
KSkKICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTEsMTIgKzkxLDEyIEBAIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY2FudmFzQ29tcG9zaXQK
IHsKICAgICBBU1NFUlQocmVuZGVyZXIuaXNDYW52YXMoKSk7CiAgICAgCi0gICAgY29uc3QgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5k
ZXJlci5ub2RlKCkpOwotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRl
eHQoKTsKLSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKKyAg
ICBjb25zdCBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVy
ZXIubm9kZSgpKTsKKyAgICBhdXRvJiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0LmlzQWNjZWxlcmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIFVu
YWNjZWxlcmF0ZWRDYW52YXM7CiAgICAgCi0gICAgaWYgKGNvbnRleHQtPmlzR1BVQmFzZWQoKSkK
KyAgICBpZiAoY29udGV4dC5pc0dQVUJhc2VkKCkpCiAgICAgICAgIHJldHVybiBDYW52YXNBc0xh
eWVyQ29udGVudHM7CiAKICAgICByZXR1cm4gQ2FudmFzUGFpbnRlZFRvTGF5ZXI7IC8vIE9uIE1h
YyBhbmQgaU9TIHdlIHBhaW50IGFjY2VsZXJhdGVkIGNhbnZhc2VzIGludG8gdGhlaXIgbGF5ZXJz
LgpAQCAtMTA2NCw5ICsxMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNv
bmZpZ3VyYQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSB8fCBF
TkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzQ2FudmFz
KCkgJiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xh
eWVyQ29udGVudHMpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9
IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAg
ICAgIGlmIChhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAg
ICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGNvbnRl
eHQtPnBsYXRmb3JtTGF5ZXIoKSwgR3JhcGhpY3NMYXllcjo6Q29udGVudHNMYXllclB1cnBvc2U6
OkNhbnZhcyk7CisgICAgICAgIGNvbnN0IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52
YXNFbGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgICAgIG1fZ3JhcGhpY3NMYXll
ci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCku
cGxhdGZvcm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2Fu
dmFzKTsKIAogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428001</attachid>
            <date>2021-05-07 09:05:56 -0700</date>
            <delta_ts>2021-05-07 11:29:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507090555.patch</filename>
            <type>text/plain</type>
            <size>114427</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgY2FudmFzIHJlbGF0ZWQgY2xhc3NlcyBhIGJpdCB0byBtYWtlIHRoZW0gYSBiaXQgZWFzaWVy
IHRvIHdvcmsgd2l0aC4KKyAgICAgICAgLSBIVE1MQ2FudmFzRWxlbWVudCwgT2Zmc2NyZWVuQ2Fu
dmFzIGFuZCBDdXN0b21QYWludENhbnZhcyBub3cgYWx3YXlzIGhhdmUgCisgICAgICAgICAgYSB2
YWxpZCwgbm9uLW51bGwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAobm93IHN0b3JlZCBpbiBDYW52
YXNCYXNlIGFzCisgICAgICAgICAgVW5pcXVlUmVmKS4gSW4gcGxhY2Ugb2YgdGhlIG9sZCBudWxs
IHZhbHVlIHN0YXRlIHdlIG5vdyBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUgdHlwZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIG1vdmUgbW9yZSBj
b250ZXh0CisgICAgICAgICAgc3BlY2lmaWMgbG9naWMgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCBhbmQgaXRzIHN1YmNsYXNzZXMgYW5kIG91dCBvZiAKKyAgICAgICAgICBDYW52YXNCYXNlIGFu
ZCBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgLSBDU1NDYW52YXNWYWx1ZSBub3cgc3RvcmVzIGEg
Q2FudmFzQmFzZSByYXRoZXIgdGhhbiBhbiBIVE1MQ2FudmFzRWxlbWVudAorICAgICAgICAgIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IGRvd25jYXN0cy4gVGhlIGNhbGxzIHdlcmUgYWxsIHN1cHBvcnRl
ZCBieSBDYW52YXNCYXNlCisgICAgICAgICAgYWxyZWFkeSwgc28gdGhpcyBqdXN0IHJlbW92ZXMg
c29tZSB1bm5lY2Vzc2FyeSBoZWZ0LgorICAgICAgICAtIE1vdmUgaW1hZ2UgYnVmZmVyIGRlc3Ry
dWN0aW9uIHRvIHRoZSBDYW52YXNCYXNlIGRlc3RydWN0b3IgcmF0aGVyIHRoYW4KKyAgICAgICAg
ICBoYXZpbmcgaXQgZHVwbGljYXRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4gTmV3IGRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpIGhlbHBlcgorICAgICAgICAgIGltcGxlbWVudHMgdGhlIHN0ZXBzIG5lZWRlZCBp
biBhIG1vcmUgb3B0aW1hbCBtYW5uZXIgdGhhbiBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKS4KKyAg
ICAgICAgLSBSZW1vdmUgY29uc3QgZnJvbSBhIGxvdCBvZiBub3QgYWN0dWFsIGNvbnN0IGZ1bmN0
aW9ucyBsaWtlIGNvcGllZEltYWdlKCksCisgICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpIGFu
ZCBzZXRJbWFnZUJ1ZmZlcigpLiAKKyAgICAgICAgLSBGaXh1cCBPZmZzY3JlZW5DYW52YXM6Omdl
dENvbnRleHQgdG8gdXNlIHRoZSBjb250ZXh0IGNyZWF0aW9uIHBhdHRlcm4gYXMgCisgICAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQ6Z2V0Q29udGV4dCwgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHRo
ZSBwYXJhbGxlbHMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVN
ZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6fkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJh
d2luZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRl
c3Ryb3lJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFn
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAq
IGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRXZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlQ29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVk
QnlPZmZzY3JlZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+
T2Zmc2NyZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xl
YXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFz
Ojp0YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05v
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNv
bnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpyZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2Fu
dmFzOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9u
KToKKwogMjAyMS0wNS0wNyAgQ2FybG9zIEdhcm5hY2hvICA8Y2FybG9zZ0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgW0dUSzRdIFJld3JpdGUgR1RLIGdlc3R1cmUgc3VwcG9ydCB0byB3b3JrIGZvciBi
b3RoIDMueCBhbmQgNC54LgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3NzE3MykKKysr
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEz
MjAsNyBAQCBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmNwcAogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9F
WFRDb2xvckJ1ZmZlckZsb2F0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJl
YW1UcmFjay5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFj
azo6U291cgogICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9y
IGJvdGggMmQgYW5kIDNkIGNvbnRleHRzIHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50
LgogICAgIC8vIEFuZCBjYWxsIGNhbnZhcyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4
dCgpKSkgewotICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oKmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBj
b250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRl
cmluZ0NvbnRleHQoKSk7CiAgICAgICAgIGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5n
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5p
bmcsICJUdXJuaW5nIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNh
bnZhcyBiZWluZyBjYXB0dXJlZCJfcyk7CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNl
cnZlRHJhd2luZ0J1ZmZlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
R1BVQ2FudmFzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEdQVUNhbnZhc0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BV
Q2FudmFzQ29udGV4dD4gR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZh
cykKK1VuaXF1ZVJlZjxHUFVDYW52YXNDb250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUo
Q2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0
cjxHUFVDYW52YXNDb250ZXh0PihuZXcgR1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXND
b250ZXh0KGNhbnZhcykpOwogICAgIGNvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BV
Q2FudmFzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L0dQVUNhbnZhc0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHN0cnVjdCBXZWJHUFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BV
Q2FudmFzQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3Jl
YXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25z
dCB7IHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgxLDYgKzE0MjgxLDgg
QEAKIAkJQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93
RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENG
RDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2luZG93RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJF
QTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xs
YmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFy
VGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMDk4
LDggQEAKIAkJCQkzMTQwQzUyMjFGREYzMTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5oICovLAogCQkJCUJDRTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlE
Q0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4
NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAq
LywKKwkJCQlCQzg0RjQzRDI2NDFBQ0MyMDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JBRDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93
U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3Rh
dGUuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5j
cHAgKi8sCkBAIC0zMTQyNiw3ICszMTQzMCw2IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgy
RjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJB
QjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVG
Q0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIyREUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVm
ZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTgg
LyogQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUw
MDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUs
NiArMzI2NDgsNyBAQAogCQkJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGln
aHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyog
SGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUw
MDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0
RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdE
Q0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4ODcsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhG
MTFERSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThB
RUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVT
Y29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4
QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIw
Miw3IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVs
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBT
dHlsZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUg
LyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERG
QzAwMEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0
N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1l
bnREYXRhLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKIAorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIENTU0NhbnZhc1ZhbHVlOjp+Q1NTQ2FudmFzVmFsdWUoKQogewotICAgIGlm
IChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNP
YnNlcnZlcik7CisgICAgaWYgKG1fY2FudmFzKQorICAgICAgICBtX2NhbnZhcy0+cmVtb3ZlT2Jz
ZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CiB9CiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC00MSw1MyArNDIsNTMgQEAgU3RyaW5nIENTU0NhbnZhc1Zh
bHVlOjpjdXN0b21DU1NUZXh0KCkgYwogICAgIHJldHVybiBtYWtlU3RyaW5nKCItd2Via2l0LWNh
bnZhcygiLCBtX25hbWUsICcpJyk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0No
YW5nZWQoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFu
Z2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYs
IGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KQogewogICAgIGlmICghY2hh
bmdlZFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gaW1hZ2VDaGFuZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdC52YWx1ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBjbGllbnRzKCkuYmVnaW4oKSwgZW5kID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5rZXktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1h
Z2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDog
Y2xpZW50cygpLnZhbHVlcygpKQorICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpCit2b2lk
IENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKQogewotICAgIGZvciAo
YXV0byBpdCA9IGNsaWVudHMoKS5iZWdpbigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdy
YXBwZWRJbWFnZVB0cj4odGhpcykpOworICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCku
dmFsdWVzKCkpCisgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBw
ZWRJbWFnZVB0cj4odGhpcykpOwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0
cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmIGVsZW1lbnQpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpj
YW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIEFTU0VSVF9VTlVTRUQo
JmVsZW1lbnQsICZlbGVtZW50ID09IG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0
cjsKKyAgICBBU1NFUlRfVU5VU0VEKCZjYW52YXMsICZjYW52YXMgPT0gbV9jYW52YXMpOworICAg
IG1fY2FudmFzID0gbnVsbHB0cjsKIH0KIAogRmxvYXRTaXplIENTU0NhbnZhc1ZhbHVlOjpmaXhl
ZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKEhUTUxDYW52
YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKGVsdC0+d2lkdGgoKSwgZWx0LT5oZWlnaHQoKSk7CisgICAgaWYgKGF1
dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZhcyhyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLUhUTUxDYW52YXNFbGVtZW50KiBDU1NDYW52YXNWYWx1ZTo6ZWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCitDYW52YXNCYXNlKiBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICAgaWYgKCFtX2VsZW1lbnQpIHsKLSAgICAg
ICAgbV9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOwotICAg
ICAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1fY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOworICAgICAgICBpZiAo
IW1fY2FudmFzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fZWxlbWVu
dC0+YWRkT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CisgICAgICAgIG1fY2FudmFzLT5hZGRP
YnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudDsK
KyAgICByZXR1cm4gbV9jYW52YXM7CiB9CiAKIFJlZlB0cjxJbWFnZT4gQ1NTQ2FudmFzVmFsdWU6
OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIC8qc2l6ZSov
KQogewogICAgIEFTU0VSVChjbGllbnRzKCkuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgSFRN
TENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50
KCkpOwotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+YnVmZmVyKCkpCisgICAgYXV0byog
Y2FudmFzID0gdGhpcy0+Y2FudmFzKHJlbmRlcmVyLmRvY3VtZW50KCkpOworICAgIGlmICghY2Fu
dmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+Y29waWVkSW1hZ2UoKTsKKyAgICByZXR1cm4gY2FudmFzLT5jb3BpZWRJ
bWFnZSgpOwogfQogCiBib29sIENTU0NhbnZhc1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FudmFz
VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgJ
KHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00NSw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRml4ZWRTaXpl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIEZsb2F0U2l6ZSBmaXhlZFNpemUoY29uc3Qg
UmVuZGVyRWxlbWVudCYpOwogCi0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBDYW52YXNCYXNlKiBjYW52YXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbnZhczsgfQogCiAgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYs
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIHsgfQpAQCAtNjgsMTggKzY3LDE1IEBAIHB1
YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpLCBjaGFuZ2VkUmVjdCk7CisgICAg
ICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzQ2hhbmdlZChjYW52YXNCYXNlLCBjaGFuZ2VkUmVj
dCk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmIGNh
bnZhc0Jhc2UpIGZpbmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2Fu
dmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZh
c1Jlc2l6ZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAg
ICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNSZXNpemVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9
CiAgICAgICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOworICAgICAgICAgICAgbV9v
d25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChjYW52YXNCYXNlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIENTU0NhbnZhc1ZhbHVlJiBtX293bmVyVmFsdWU7CkBAIC05MywxOCArODksMTggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNF
bGVtZW50JiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOwotICAgIHZv
aWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIHZvaWQgY2FudmFzRGVz
dHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZh
c0Jhc2UmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7CisgICAgdm9p
ZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKTsKKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChD
YW52YXNCYXNlJik7CiAKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCYp
OworICAgIENhbnZhc0Jhc2UqIGNhbnZhcyhEb2N1bWVudCYpOwogCiAgICAgQ2FudmFzT2JzZXJ2
ZXJQcm94eSBtX2NhbnZhc09ic2VydmVyOwogCiAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNhbnZh
cy4KICAgICBTdHJpbmcgbV9uYW1lOwotICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUg
ZWxlbWVudCBhbmQgb3ducyBpdC4KLSAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50IHsg
bnVsbHB0ciB9OworICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUgY2FudmFzIGFuZCBv
d25zIGl0LgorICAgIENhbnZhc0Jhc2UqIG1fY2FudmFzIHsgbnVsbHB0ciB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw4IEBACiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU05hbWVkSW1h
Z2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhaW50SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNh
bnZhc0Jhc2UuaCIKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFIKICAgICBtX2NsaWVudHMuYWRkKCZyZW5kZXJl
cik7CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVl
Pih0aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAg
IGlmIChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZh
cygpKQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiB9CiAKQEAgLTg2LDggKzg2LDggQEAg
dm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0
aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAgIGlm
IChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZhcygp
KQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52
YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiAKICAgICBpZiAobV9jbGllbnRzLmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5Niw3
ICszODk2LDcgQEAgc3RhdGljIGJvb2wgaXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihEbwogCiAg
ICAgICAgIC8vIFNraXAgYDxjYW52YXM+YCBidXQgb25seSBpZiB0aGV5J3ZlIGJlZW4gZHJhd24g
aW50by4gR3Vlc3MgdGhpcyBieSBzZWVpbmcgaWYgdGhlcmUncyBhbHJlYWR5CiAgICAgICAgIC8v
IGEgYENhbnZhc1JlbmRlcmluZ0NvbnRleHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0ZWQgYnkgSmF2
YVNjcmlwdC4KLSAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAg
ICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFNraXAgM3JkLXBhcnR5IGA8aWZyYW1lPmAgYXMg
dGhlIGNvbnRlbnQgbGlrZWx5IHdvbid0IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBwYWdlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTUxLDcgKzUyLDggQEAgY29uc3QgSW50ZXJwb2xhdGlv
blF1YWxpdHkgZGVmYXVsdEludGVycAogI2VuZGlmCiAKIENhbnZhc0Jhc2U6OkNhbnZhc0Jhc2Uo
SW50U2l6ZSBzaXplKQotICAgIDogbV9zaXplKHNpemUpCisgICAgOiBtX3NpemUgeyBzaXplIH0K
KyAgICAsIG1fY29udGV4dCB7IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoKnRo
aXMpIH0KIHsKIH0KIApAQCAtNTksMTMgKzYxLDEzIEBAIENhbnZhc0Jhc2U6On5DYW52YXNCYXNl
KCkKIHsKICAgICBBU1NFUlQobV9kaWROb3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQpOwog
ICAgIEFTU0VSVChtX29ic2VydmVycy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9pbWFnZUJ1
ZmZlcik7CisKKyAgICBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0
KiBDYW52YXNCYXNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogY29udGV4
dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+aXMy
ZCgpICYmICFjb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCisgICAgaWYgKCFtX2NvbnRleHQtPmlz
MmQoKSAmJiAhbV9jb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIGJ1ZmZlcigpID8gJm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSA6
IG51bGxwdHI7CkBAIC05NCw4ICs5Niw3IEBAIEFmZmluZVRyYW5zZm9ybSBDYW52YXNCYXNlOjpi
YXNlVHJhbnNmb3IKIAogdm9pZCBDYW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWls
YWJsZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCkpCi0g
ICAgICAgIGNvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgbV9j
b250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogfQogCiBzaXplX3QgQ2Fu
dmFzQmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CkBAIC0xMDMsNyArMTA0LDcgQEAgc2l6ZV90IENh
bnZhc0Jhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAogICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUg
aW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUg
Y2FyZWZ1bAogICAgIC8vIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LiBX
ZSBuZWVkIHRvIGhvbGQgYSBsb2NrIHRvIHByZXZlbnQgbV9pbWFnZUJ1ZmZlcgogICAgIC8vIGZy
b20gYmVpbmcgY2hhbmdlZCB3aGlsZSB3ZSBhY2Nlc3MgaXQuCi0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2spOworICAgIExvY2tlciBsb2NrZXIg
eyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sgfTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5tZW1vcnlDb3N0
KCk7CkBAIC0xMTQsNyArMTE1LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIAogICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFu
Z2VkIHdoaWxlIHdlIGFjY2VzcyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1h
Z2VCdWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZm
ZXJBc3NpZ25tZW50TG9jayB9OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpA
QCAtMTgwLDE1ICsxODEsMTkgQEAgSGFzaFNldDxFbGVtZW50Kj4gQ2FudmFzQmFzZTo6Y3NzQ2Fu
dmFzQwogCiBib29sIENhbnZhc0Jhc2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXIoKSBjb25zdAogewotICAgIGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlcigpOworICAgIHJldHVybiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIoKTsKK30KKwordm9pZCBDYW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0
KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9j
b250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52
YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKSBjb25z
dAorUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8
SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gcmV0dXJu
QnVmZmVyOwogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVm
ZmVyQXNzaWdubWVudExvY2spOworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZl
ckFzc2lnbm1lbnRMb2NrIH07CiAgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRy
OwogICAgICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgfQpAQCAtMjAwLDkgKzIwNSw4IEBAIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2UKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9y
eUNvc3QoKTsKICAgICBzX2FjdGl2ZVBpeGVsTWVtb3J5ICs9IG1faW1hZ2VCdWZmZXJDb3N0IC0g
cHJldmlvdXNNZW1vcnlDb3N0OwogCi0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRl
eHQoKTsKLSAgICBpZiAoY29udGV4dCAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5
Q29zdCAhPSBtX2ltYWdlQnVmZmVyQ29zdCkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoKmNvbnRleHQpOworICAgIGlmICghbV9jb250ZXh0
LT5pc05vbmUoKSAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2lt
YWdlQnVmZmVyQ29zdCkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFu
Z2VDYW52YXNNZW1vcnkobV9jb250ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX2ltYWdlQnVmZmVy
KSB7CiAgICAgICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zZXRTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtcyh0cnVlKTsKQEAgLTIxNyw2ICsyMjEsMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBD
YW52YXNCYXNlOjpzZXRJbWFnZQogICAgIHJldHVybiByZXR1cm5CdWZmZXI7CiB9CiAKK3ZvaWQg
Q2FudmFzQmFzZTo6ZGVzdHJveUltYWdlQnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IG9sZEJ1ZmZlcjsKKworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VC
dWZmZXJBc3NpZ25tZW50TG9jayB9OworICAgICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVs
bHB0cjsKKyAgICAgICAgb2xkQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBu
dWxscHRyKTsKKyAgICB9CisgICAgCisgICAgc19hY3RpdmVQaXhlbE1lbW9yeSAtPSBtX2ltYWdl
QnVmZmVyQ29zdDsKKyAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IDA7Cit9CisKIHNpemVfdCBDYW52
YXNCYXNlOjphY3RpdmVQaXhlbE1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIHNfYWN0aXZlUGl4ZWxN
ZW1vcnkubG9hZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHJldmlzaW9uIDI3
NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCw3ICs3MSw2IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAK
ICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICB2b2lkIG1ha2VSZW5kZXJpbmdS
ZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC04NSw3ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gY2FudmFzQmFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgIH0KIAot
ICAgIHZpcnR1YWwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNv
bnN0ID0gMDsKKyAgICBjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiByZW5kZXJpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgcmVuZGVyaW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgdm9pZCBhZGRPYnNlcnZlcihDYW52YXNPYnNlcnZlciYpOwogICAgIHZvaWQgcmVt
b3ZlT2JzZXJ2ZXIoQ2FudmFzT2JzZXJ2ZXImKTsKQEAgLTEwMCw4ICsxMDEsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+Jikg
PSAwOwogCi0gICAgdmlydHVhbCBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJ
bWFnZSogY29waWVkSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1h
Z2UoKSA9IDA7CiAKICAgICBib29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIo
KSBjb25zdDsKIApAQCAtMTEyLDcgKzExMywxMCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFs
IHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KIAot
ICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiYmKSBjb25zdDsKKyAgICB2b2lkIHNldFJlbmRlcmluZ0NvbnRleHQoVW5pcXVlUmVmPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQ+JiYpOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzZXRJbWFn
ZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYpOworICAgIHZvaWQgZGVzdHJveUltYWdlQnVm
ZmVyKCk7CiAgICAgdmlydHVhbCBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgc3RhdGljIHNpemVfdCBhY3RpdmVQaXhlbE1lbW9yeSgpOwog
CkBAIC0xMjcsNiArMTMxLDggQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIHNpemVfdCBtX2ltYWdl
QnVmZmVyQ29zdCB7IDAgfTsKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyPiBtX2NvbnRleHRTdGF0ZVNhdmVyOwogCisgICAgVW5pcXVlUmVmPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKKwogICAgIGJvb2wgbV9vcmlnaW5DbGVh
biB7IHRydWUgfTsKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIGJvb2wgbV9kaWROb3RpZnlPYnNl
cnZlcnNDYW52YXNEZXN0cm95ZWQgeyBmYWxzZSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw0NSAr
NDgsNDIgQEAgQ3VzdG9tUGFpbnRDYW52YXM6OkN1c3RvbVBhaW50Q2FudmFzKFNjcgogQ3VzdG9t
UGFpbnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcygpCiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJz
Q2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUg
dGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEPj4gQ3VzdG9tUGFpbnRDYW52YXM6OmdldENvbnRleHQoKQogewotICAgIGlmIChtX2NvbnRl
eHQpCi0gICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4geyAm
ZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICBp
ZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgUmVmUHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRl
eHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAKLSAgICBtX2NvbnRleHQgPSBQYWludFJl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzKTsKLSAgICBkb3duY2FzdDxQYWludFJlbmRl
cmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVl
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0
aGlzKTsKKyAgICBjb250ZXh0LT5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHRydWUpOworICAg
IHNldFJlbmRlcmluZ0NvbnRleHQoV1RGTW92ZShjb250ZXh0KSk7CiAKLSAgICByZXR1cm4geyBS
ZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgcmV0dXJuIHsgUmVmUHRyPFBhaW50UmVu
ZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4ocmVu
ZGVyaW5nQ29udGV4dCgpKSB9IH07CiB9CiAKLXZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OnJlcGxh
eURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCogY3R4KSBjb25zdAordm9pZCBDdXN0b21QYWlu
dENhbnZhczo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBjdHgpCiB7CiAgICAg
QVNTRVJUKCFtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkg
fHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVXNpbmcgYW4g
aW50ZXJtZWRpYXRlIGJ1ZmZlciBpcyBub3QgbmVlZGVkIGlmIHRoZXJlIGFyZSBubyBjb21wb3Np
dGUgb3BlcmF0aW9ucy4KLSAgICBhdXRvIGNsaXBCb3VuZHMgPSBjdHgtPmNsaXBCb3VuZHMoKTsK
KyAgICBhdXRvIGNsaXBCb3VuZHMgPSBjdHguY2xpcEJvdW5kcygpOwogCi0gICAgYXV0byBpbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNsaXBCb3VuZHMuc2l6ZSgp
LCAqY3R4KTsKKyAgICBhdXRvIGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY2xpcEJvdW5kcy5zaXplKCksIGN0eCk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9ICZpbWFnZS0+Y29u
dGV4dCgpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtY2xp
cEJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBjdHgtPmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2UsIGNsaXBCb3VuZHMpOworICAgIGN0eC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBjbGlwQm91
bmRzKTsKIH0KIAotSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0
CitJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkKIHsKICAgICBBU1NFUlQo
IW1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQpOwogICAgIGlmICghd2lkdGgoKSB8fCAhaGVp
Z2h0KCkpCkBAIC05NywxNSArOTQsMTQgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3Bp
ZWRJbWFnZSgpIAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIG1fZGVzdGluYXRpb25H
cmFwaGljc0NvbnRleHQgPSAmbV9jb3BpZWRCdWZmZXItPmNvbnRleHQoKTsKLSAgICBpZiAobV9j
b250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CisgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKICAgICBt
X2NvcGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIHJldHVybiBtX2NvcGllZEltYWdl
LmdldCgpOwogfQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkg
Y29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAg
IG1fY29waWVkSW1hZ2UgPSBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNyArNTUsMTYgQEAg
cHVibGljOgogCiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJE
Pj4gZ2V0Q29udGV4dCgpOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5n
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEdy
YXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGlj
c0NvbnRleHQqIGV4aXN0aW5nRHJhd2luZ0NvbnRleHQoKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikgZmluYWwgeyB9CiAKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IGZpbmFsIHsgQVNTRVJUKG1fZGVz
dGluYXRpb25HcmFwaGljc0NvbnRleHQgJiYgbV9jb3BpZWRCdWZmZXIpOyByZXR1cm4gbV9jb3Bp
ZWRCdWZmZXItPmJhc2VUcmFuc2Zvcm0oKTsgfQotICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOworICAg
IEltYWdlKiBjb3BpZWRJbWFnZSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgp
IGZpbmFsOwogCi0gICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQqKSBj
b25zdDsKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiAg
ICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwpA
QCAtNzcsNyArNzYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVyZWZDYW52YXNCYXNlKCkgZmlu
YWwgeyBkZXJlZigpOyB9CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY2FudmFzQmFzZVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDb250ZXh0RGVzdHJ1
Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwogICAgIG11dGFibGUg
R3JhcGhpY3NDb250ZXh0KiBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsK
ICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9jb3BpZWRCdWZmZXI7CiAgICAgbXV0
YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw5
ICsxNTYsNiBAQCBIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52YXNFbGVtZW50KCkKICAgICAv
LyBhdm9pZGVkIGluIGRlc3RydWN0b3JzLCBidXQgd29ya3MgYXMgbG9uZyBhcyBpdCdzIGRvbmUg
YmVmb3JlIEhUTUxDYW52YXNFbGVtZW50IGRlc3RydWN0cyBjb21wbGV0ZWx5LgogICAgIG5vdGlm
eU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwogICAgIGRvY3VtZW50KCkuY2xlYXJDYW52YXNQ
cmVwYXJhdGlvbigqdGhpcyk7Ci0KLSAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUg
dGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkBAIC0y
MzksNTAgKzIzNiw1MCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRNYXhQaXhlbE1lbW9y
CiAKIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiBjb250ZXh0SWQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50
cykKIHsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmlzUGxh
Y2Vob2xkZXIoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkgeworICAg
ICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzUGxhY2Vob2xkZXIoKSkKICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgICAgIGlmICht
X2NvbnRleHQtPmlzMmQoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQo
KSkgewogICAgICAgICAgICAgaWYgKCFpczJkVHlwZShjb250ZXh0SWQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9Owot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51
bGxvcHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPiB7ICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9IH07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9jb250ZXh0LT5p
c0JpdG1hcFJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc0Jp
dG1hcFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmICghaXNCaXRtYXBSZW5kZXJlclR5cGUo
Y29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRv
d25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIHJl
dHVybiB7IHsgUmVmUHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9Owog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgIGlmIChtX2NvbnRleHQtPmlz
V2ViR0woKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0woKSkgewog
ICAgICAgICAgICAgaWYgKCFpc1dlYkdMVHlwZShjb250ZXh0SWQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICAgICAgICAgIGF1
dG8gdmVyc2lvbiA9IHRvV2ViR0xWZXJzaW9uKGNvbnRleHRJZCk7Ci0gICAgICAgICAgICBpZiAo
dmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdU
Rjo6bnVsbG9wdCB9OwotICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpX
ZWJHTDEgJiYgbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBP
cHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICAgICAg
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPFdlYkdMUmVuZGVy
aW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0
KSB9IH07CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAm
JiAhcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xW
ZXJzaW9uOjpXZWJHTDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNpZiBF
TkFCTEUoV0VCR0wyKQotICAgICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ+KCptX2NvbnRleHQpKTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdD
b250ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICBBU1NFUlQo
aXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSk7CisgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogI2Vu
ZGlmCiAgICAgICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdQVSkKLSAgICAgICAgaWYg
KG1fY29udGV4dC0+aXNXZWJHUFUoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgp
LmlzV2ViR1BVKCkpIHsKICAgICAgICAgICAgIGlmICghaXNXZWJHUFVUeXBlKGNvbnRleHRJZCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RG
OjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4geyBSZWZQdHI8R1BVQ2FudmFzQ29udGV4dD4geyAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4
dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxs
b3B0IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+
IHsgJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07
CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsK
KyAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwogICAgIH0KIAogICAgIGlmIChp
czJkVHlwZShjb250ZXh0SWQpKSB7CkBAIC0yOTIsOCArMjg5LDggQEAgRXhjZXB0aW9uT3I8T3B0
aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IAogCiAgICAgICAgIGF1dG8gY29udGV4dCA9IGNyZWF0
ZUNvbnRleHQyZChjb250ZXh0SWQsIFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICAgICAgaWYgKCFj
b250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
V1RGOjpudWxsb3B0IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9IH07CisgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsg
UmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyBjb250ZXh0IH0gfSB9OwogICAgIH0K
IAogICAgIGlmIChpc0JpdG1hcFJlbmRlcmVyVHlwZShjb250ZXh0SWQpKSB7CkBAIC0zMDMsOCAr
MzAwLDggQEAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IAogCiAgICAg
ICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcihjb250ZXh0SWQs
IFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAg
ICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQ+IHsgY29udGV4dCB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dD4geyBjb250ZXh0IH0gfSB9OwogICAgIH0KIAogI2lmIEVOQUJMRShX
RUJHTCkKQEAgLTMxNSwxMyArMzEyLDEzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmlu
Z0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0wo
dG9XZWJHTFZlcnNpb24oY29udGV4dElkKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiAgICAgICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxv
cHQgfSB9OwogCiAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0
KSkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4oKmNvbnRleHQpIH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4
dCkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSk7Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9OworICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07CiAjZW5kaWYKICAgICB9CiAjZW5kaWYKQEAg
LTMzMCwxMiArMzI3LDEyIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
PiAKICAgICBpZiAoaXNXZWJHUFVUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgYXV0byBjb250
ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdQVShjb250ZXh0SWQpOwogICAgICAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6
Om51bGxvcHQgfTsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
UmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgY29udGV4dCB9IH07CisgICAgICAgICAgICByZXR1
cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEdQVUNh
bnZhc0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMzY3LDcg
KzM2NCw3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKGNvbnN0IFMKIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChj
b25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUo
dHlwZSksIHR5cGUpOwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVy
aW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2Ug
bW9yZSBwaXhlbCBtZW1vcnkgdGhhbiB0aGUgc3lzdGVtIGNhbiBzdXBwb3J0LgogICAgIHNpemVf
dCByZXF1ZXN0ZWRQaXhlbE1lbW9yeSA9IDQgKiB3aWR0aCgpICogaGVpZ2h0KCk7CkBAIC0zODAs
MjYgKzM3NywyNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIG1fY29udGV4dCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSwgZG9jdW1l
bnQoKS5pblF1aXJrc01vZGUoKSk7CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncyksIGRvY3VtZW50
KCkuaW5RdWlya3NNb2RlKCkpKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1
cm4gJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0
dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKEhUTUxDYW52YXNFbGVtZW50
OjppczJkVHlwZSh0eXBlKSwgdHlwZSk7CiAKLSAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRl
eHQtPmlzMmQoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQorICAgICAg
ICByZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKKworICAg
IGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQyZCh0
eXBlLCBXVEZNb3ZlKHNldHRpbmdzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCkBAIC00NDgsNyArNDQ2LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xXZWJH
TFZlcnNpb24gSFRNTENhbnZhcwogCiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAg
IEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCiAgICAgaWYgKCFzaG91bGRF
bmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTQ2NSwyMCArNDYzLDI0IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxD
YW52YXNFbGUKIAogICAgIC8vIFRPRE8oV0VCWFIpOiBlbnN1cmUgdGhlIGNvbnRleHQgaXMgY3Jl
YXRlZCBpbiBhIGNvbXBhdGlibGUgZ3JhcGhpY3MKICAgICAvLyBhZGFwdGVyIHdoZW4gdGhlcmUg
aXMgYW4gYWN0aXZlIGltbWVyc2l2ZSBkZXZpY2UuCi0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgdHlwZSk7Ci0gICAgaWYgKG1f
Y29udGV4dCkgewotICAgICAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9ic2Vy
dmVkIGJ5IHRoZSBEb2N1bWVudCwgaW4gb3JkZXIKLSAgICAgICAgLy8gZm9yIGl0IHRvIGJlIGNv
cnJlY3RseSBwcmVwYXJlZEZvclJlbmRlcmluZyBiZWZvcmUgaXQgaXMgY29tcG9zaXRlZC4KLSAg
ICAgICAgYWRkT2JzZXJ2ZXIoZG9jdW1lbnQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgdHlwZSk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRlcmluZ0Nv
bnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoY29udGV4dCkp
KTsKKworICAgIC8vIFRoaXMgbmV3IGNvbnRleHQgbmVlZHMgdG8gYmUgb2JzZXJ2ZWQgYnkgdGhl
IERvY3VtZW50LCBpbiBvcmRlcgorICAgIC8vIGZvciBpdCB0byBiZSBjb3JyZWN0bHkgcHJlcGFy
ZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNvbXBvc2l0ZWQuCisgICAgYWRkT2JzZXJ2ZXIo
ZG9jdW1lbnQoKSk7CisKKyAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFu
ZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KKyAgICBpbnZh
bGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKLSAgICAgICAgLy8gTmVlZCB0byBt
YWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQg
Zm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKICNpZiBFTkFCTEUoV0VCWFIpCi0gICAgICAgIEFTU0VSVCghYXR0cnMueHJDb21wYXRp
YmxlIHx8IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQo
KSktPmlzWFJDb21wYXRpYmxlKCkpOworICAgIEFTU0VSVCghYXR0cnMueHJDb21wYXRpYmxlIHx8
IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSku
aXNYUkNvbXBhdGlibGUoKSk7CiAjZW5kaWYKLSAgICB9CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
JmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSk7
CiB9CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0V2ViR0woV2ViR0xWZXJzaW9uIHR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBh
dHRycykKQEAgLTQ4NiwyMSArNDg4LDIwIEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhU
TUxDYW52YXNFbGUKICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fY29udGV4dCkgewot
ICAgICAgICBpZiAoIW1fY29udGV4dC0+aXNXZWJHTCgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUNvbnRleHRXZWJHTCh0eXBlLCBXVEZNb3ZlKGF0dHJzKSk7CiAKLSAgICAgICAg
Ly8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBhdm9pZHMgY29tcGlsZS10aW1lIGd1YXJk
cyBmb3IgV2ViR0wyIHN1cHBvcnQuCi0gICAgICAgIGlmICh0eXBlID09IFdlYkdMVmVyc2lvbjo6
V2ViR0wxICYmICFtX2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgICAgIGlmICh0eXBlICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wx
ICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KKyAgICAvLyBUaGUgcGhyYXNpbmcgb2YgdGhlc2UgY2hlY2tzIGF2b2lkcyBjb21waWxl
LXRpbWUgZ3VhcmRzIGZvciBXZWJHTDIgc3VwcG9ydC4KKyAgICBpZiAodHlwZSA9PSBXZWJHTFZl
cnNpb246OldlYkdMMSAmJiAhcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBj
cmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykpOwotICAgIHJldHVybiAmZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCk7CisgICAgaWYgKHR5
cGUgIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wx
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZkb3duY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpAQCAtNTE1LDE4ICs1MTYsMTcgQEAgYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6aXNXZWJHUFVUeXBlKGNvbgogR1BVQ2FudmFzQ29udGV4dCogSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUNvbnRleHRXZWJHUFUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIEFTU0VS
VF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzV2ViR1BVVHlwZSh0eXBlKSk7Ci0g
ICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNO
b25lKCkpOwogCiAgICAgaWYgKCFkb2N1bWVudCgpLnNldHRpbmdzKCkud2ViR1BVRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29udGV4dCA9IEdQVUNhbnZhc0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KLSAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwotICAgIH0KKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KEdQVUNhbnZhc0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcykpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUNhbnZh
c0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEg
UmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2Fu
dmFzLgorICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKKworICAgIHJl
dHVybiAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0K
IAogR1BVQ2FudmFzQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJHUFUo
Y29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNTM2LDEyICs1MzYsMTMgQEAgR1BVQ2FudmFzQ29udGV4
dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygp
LndlYkdQVUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9j
b250ZXh0ICYmICFtX2NvbnRleHQtPmlzV2ViR1BVKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRl
eHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHUFUodHlwZSk7
CisKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdQVSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRl
Q29udGV4dFdlYkdQVSh0eXBlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQ2FudmFzQ29u
dGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxHUFVDYW52YXND
b250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKQEAgLTU1NCwyNCArNTU1LDI5IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFw
UmVuZGVyZXIKIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VO
VVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUodHlwZSkp
OwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgp
LmlzTm9uZSgpKTsKIAotICAgIG1fY29udGV4dCA9IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSk7CisgICAgc2V0UmVuZGVyaW5nQ29u
dGV4dChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShz
ZXR0aW5ncykpKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAg
ICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5
ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gJmRv
d25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsK
IH0KIAogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dEJpdG1hcFJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHR5
cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRlcmVyVHlwZSh0eXBlKSk7Ci0gICAg
aWYgKCFtX2NvbnRleHQpCisgICAgCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcih0eXBlLCBXVEZN
b3ZlKHNldHRpbmdzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgCisgICAgaWYgKCFyZW5kZXJpbmdD
b250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiAmZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJp
bmdDb250ZXh0KCkpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mIHJlY3QpCkBAIC02MTUsMTQgKzYyMSwxNSBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgaW50IGggPSBsaW1pdFRvT25seUhUTUxOb25O
ZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGhlaWdodEF0dHIpLCBkZWZh
dWx0SGVpZ2h0KTsKIAogICAgIHJlc2V0R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKLSAgICBpZiAo
aXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlc2V0KCk7Cisg
ICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkK
KyAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpLnJlc2V0KCk7CiAKICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7CiAgICAgSW50
U2l6ZSBuZXdTaXplKHcsIGgpOworCiAgICAgLy8gSWYgdGhlIHNpemUgb2YgYW4gZXhpc3Rpbmcg
YnVmZmVyIG1hdGNoZXMsIHdlIGNhbiBqdXN0IGNsZWFyIGl0IGluc3RlYWQgb2YgcmVhbGxvY2F0
aW5nLgogICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlzIG9ubHkgZG9uZSBmb3IgMkQgY2FudmFz
ZXMgZm9yIG5vdy4KLSAgICBpZiAobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9
PSBuZXdTaXplICYmIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSAmJiBidWZmZXIoKSAm
JiBtX2NvbnRleHQtPmNvbG9yU3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIG1f
Y29udGV4dC0+cGl4ZWxGb3JtYXQoKSA9PSBidWZmZXIoKS0+cGl4ZWxGb3JtYXQoKSkgeworICAg
IGlmIChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciAmJiBvbGRTaXplID09IG5ld1NpemUgJiYgcmVu
ZGVyaW5nQ29udGV4dCgpLmlzMmQoKSAmJiBidWZmZXIoKSAmJiByZW5kZXJpbmdDb250ZXh0KCku
Y29sb3JTcGFjZSgpID09IGJ1ZmZlcigpLT5jb2xvclNwYWNlKCkgJiYgcmVuZGVyaW5nQ29udGV4
dCgpLnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9ybWF0KCkpIHsKICAgICAgICAg
aWYgKCFtX2RpZENsZWFySW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBjbGVhckltYWdlQnVmZmVy
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYzMSw3ICs2MzgsNyBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpyZXNldCgpCiAgICAgc2V0U3VyZmFjZVNpemUobmV3U2l6ZSk7CiAKICAgICBpZiAo
aXNHUFVCYXNlZCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICBkb3duY2FzdDxHUFVC
YXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpLnJlc2hhcGUod2lkdGgoKSwg
aGVpZ2h0KCkpOworICAgICAgICBkb3duY2FzdDxHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAKICAg
ICBhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoaXM8UmVuZGVySFRN
TENhbnZhcz4ocmVuZGVyZXIpKSB7CkBAIC02NTAsMTMgKzY1NywxMiBAQCB2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpyZXNldCgpCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NvbnRleHQpOwogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4dC0+aXMyZCgp
IHx8IG1fY29udGV4dC0+aXNCaXRtYXBSZW5kZXJlcigpKQorICAgIGlmIChyZW5kZXJpbmdDb250
ZXh0KCkuaXMyZCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICBpZiAoIW1fY29udGV4dC0+aXNBY2Nl
bGVyYXRlZCgpKQorICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxlcmF0ZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmVuZGVyQm94KCkgJiYgcmVuZGVyQm94
KCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKQEAgLTY2OCw0MiArNjc0LDM1IEBAIGJv
b2wgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50c0ludG9DYW52YXMKIAogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByKQogewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJBY2N1
bXVsYXRlZERpcnR5UmVjdCgpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5jbGVhckFjY3VtdWxh
dGVkRGlydHlSZWN0KCk7CiAKICAgICBpZiAoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7
Ci0gICAgICAgIGJvb2wgc2hvdWxkUGFpbnQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgICAgIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
IHx8IGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwotICAgICAgICAg
ICAgaWYgKHNob3VsZFBhaW50KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCisg
ICAgICAgIGJvb2wgc2hvdWxkUGFpbnQgPSBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgfHwgZG9j
dW1lbnQoKS5wcmludGluZygpIHx8IG1faXNTbmFwc2hvdHRpbmc7CiAgICAgICAgIGlmIChzaG91
bGRQYWludCkgeworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnByZXBhcmVGb3JEaXNw
bGF5V2l0aFBhaW50KCk7CisgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKwogICAgICAgICAgICAgaWYgKGhhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbWFnZUJ1ZmZlciA9IGJ1
ZmZlcigpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIHNuYXBwZWRJbnRSZWN0KHIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5oYXNBY3Rp
dmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKCptX2NvbnRleHQpOworICAg
IGlmIChVTkxJS0VMWShyZW5kZXJpbmdDb250ZXh0KCkuaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlcigpKSkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5p
c2hSZWNvcmRpbmdDYW52YXNGcmFtZShyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBib29sIEhU
TUxDYW52YXNFbGVtZW50Ojppc0dQVUJhc2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0ICYmIG1fY29udGV4dC0+aXNHUFVCYXNlZCgpOworICAgIHJldHVybiByZW5kZXJpbmdDb250
ZXh0KCkuaXNHUFVCYXNlZCgpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJm
YWNlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIENhbnZhc0Jhc2U6OnNldFNpemUo
c2l6ZSk7CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKLSAgICBzZXRJbWFn
ZUJ1ZmZlcihudWxscHRyKTsKKyAgICBjbGVhckltYWdlQnVmZmVyKCk7CiAgICAgY2xlYXJDb3Bp
ZWRJbWFnZSgpOwogfQogCkBAIC03OTUsMTEgKzc5NCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBI
VE1MQ2FudmFzRWxlbWVudDo6dG9CCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiBFeGNl
cHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5zZmVy
Q29udHJvbFRvT2Zmc2NyZWVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0g
ICAgaWYgKG1fY29udGV4dCkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIG1f
Y29udGV4dCA9IG1ha2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7
Ci0gICAgaWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIHNldFJlbmRlcmluZ0Nv
bnRleHQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKKworICAg
IGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICBpbnZhbGlk
YXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2Fu
dmFzOjpjcmVhdGUoY29udGV4dCwgKnRoaXMpOwpAQCAtODA5LDEwICs4MDksMTAgQEAgRXhjZXB0
aW9uT3I8UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYQogUmVmUHRyPEltYWdlRGF0YT4gSFRN
TENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiB7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKSB7Cisg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkp
IHsKICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2Vy
dmVyOjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGRvY3VtZW50KCkpOwotICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkucGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkucGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gbnVsbHB0cjsK
QEAgLTk1OCwyNSArOTU4LDE5IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdl
QnVmZmUKICAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRy
YXdpbmcgb24gY2FudmFzLgogICAgIGF1dG8gdXNlRGlzcGxheUxpc3QgPSBtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3
aW5nRW5hYmxlZCgpKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91bGRVc2VEaXNw
bGF5TGlzdDo6Tm87CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBwaXhlbEZvcm1hdF0gPSBbJl0g
ewotICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7
IG1fY29udGV4dC0+Y29sb3JTcGFjZSgpLCBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgfTsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4
ZWxGb3JtYXQ6OkJHUkE4IH07Ci0gICAgfSgpOwotCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5k
ZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBob3N0V2lu
ZG93KSk7CisgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5zZXRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgdXNlRGlz
cGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNhbnZhcywgMSwgcmVuZGVyaW5nQ29udGV4dCgp
LmNvbG9yU3BhY2UoKSwgcmVuZGVyaW5nQ29udGV4dCgpLnBpeGVsRm9ybWF0KCksIGhvc3RXaW5k
b3cpKTsKIAogICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkK
ICAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMy
ZCgpKSB7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsKICAgICAgICAgLy8g
UmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0
ZSBjaGFuZ2VkLgogICAgICAgICBjb25zdF9jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4odGhpcykt
PmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICB9CiAjZW5kaWYKIAot
ICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYgYnVmZmVyKCktPnByZWZlcnNQcmVwYXJh
dGlvbkZvckRpc3BsYXkoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSAm
JiBidWZmZXIoKSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpKQog
ICAgICAgICBjb25zdF9jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4odGhpcyktPmFkZE9ic2VydmVy
KGRvY3VtZW50KCkpOwogfQogCkBAIC0xMDAzLDMxICs5OTcsMzAgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6c2V0SW1hZ2VCdWZmZXJBbgogICAgIGRpZERyYXcoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgc2l6ZSgpKSk7CiB9CiAKLUltYWdlKiBIVE1MQ2FudmFzRWxlbWVudDo6Y29waWVkSW1h
Z2UoKSBjb25zdAorSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSgpCiB7CiAg
ICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpOwogICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZShDb3B5
QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgfQogICAgIHJldHVy
biBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVh
ckltYWdlQnVmZmVyKCkgY29uc3QKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFySW1hZ2VC
dWZmZXIoKQogewogICAgIEFTU0VSVChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcik7CiAgICAgQVNT
RVJUKCFtX2RpZENsZWFySW1hZ2VCdWZmZXIpOwotICAgIEFTU0VSVChtX2NvbnRleHQpOworICAg
IEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpKTsKIAogICAgIG1fZGlkQ2xlYXJJbWFn
ZUJ1ZmZlciA9IHRydWU7CiAKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KSkgeworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRl
cmluZ0NvbnRleHQoKSkpIHsKICAgICAgICAgLy8gTm8gbmVlZCB0byB1bmRvIHRyYW5zZm9ybXMv
Y2xpcC9ldGMuIGJlY2F1c2Ugd2UgYXJlIGNhbGxlZCByaWdodCBhZnRlciB0aGUgY29udGV4dCBp
cyByZXNldC4KLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9j
b250ZXh0KS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAgICBkb3du
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkuY2xlYXJS
ZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OmNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdAordm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9IG51bGxwdHI7CiAg
ICAgbV9kaWRDbGVhckltYWdlQnVmZmVyID0gZmFsc2U7CkBAIC0xMDQxLDkgKzEwMzQsOSBAQCBj
b25zdCBjaGFyKiBIVE1MQ2FudmFzRWxlbWVudDo6YWN0aXZlRE9NCiBib29sIEhUTUxDYW52YXNF
bGVtZW50Ojp2aXJ0dWFsSGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKICNpZiBFTkFCTEUo
V0VCR0wpCi0gICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5n
ZXQoKSkpIHsKKyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5n
Q29udGV4dCgpKSkgewogICAgICAgICAvLyBXZWJHTCByZW5kZXJpbmcgY29udGV4dCBtYXkgZmly
ZSBjb250ZXh0bG9zdCAvIGNvbnRleHRjaGFuZ2UgLyBjb250ZXh0cmVzdG9yZWQgZXZlbnRzIGF0
IGFueSBwb2ludC4KLSAgICAgICAgcmV0dXJuIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVu
ZXIgJiYgIWRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRleHQpLmlz
Q29udGV4dFVucmVjb3ZlcmFibHlMb3N0KCk7CisgICAgICAgIHJldHVybiBtX2hhc1JlbGV2YW50
V2ViR0xFdmVudExpc3RlbmVyICYmICFkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
PihyZW5kZXJpbmdDb250ZXh0KCkpLmlzQ29udGV4dFVucmVjb3ZlcmFibHlMb3N0KCk7CiAgICAg
fQogI2VuZGlmCiAKQEAgLTEwNzcsNyArMTA3MCw3IEBAIE5vZGU6Okluc2VydGVkSW50b0FuY2Vz
dG9yUmVzdWx0IEhUTUxDYW4KICAgICAgICAgYWRkT2JzZXJ2ZXIoZG9jdW1lbnQpOwogICAgICAg
ICAvLyBEcmF3aW5nIGNvbW1hbmRzIG1heSBoYXZlIGJlZW4gaXNzdWVkIHRvIHRoZSBjYW52YXMg
YmVmb3JlIG5vdywgc28gd2UgbmVlZCB0bwogICAgICAgICAvLyB0ZWxsIHRoZSBkb2N1bWVudCBp
ZiB3ZSBuZWVkIHByZXBhcmF0aW9uLgotICAgICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4
dC0+Y29tcG9zaXRpbmdSZXN1bHRzTmVlZFVwZGF0aW5nKCkpCisgICAgICAgIGlmIChyZW5kZXJp
bmdDb250ZXh0KCkuY29tcG9zaXRpbmdSZXN1bHRzTmVlZFVwZGF0aW5nKCkpCiAgICAgICAgICAg
ICBkb2N1bWVudC5jYW52YXNDaGFuZ2VkKCp0aGlzLCBGbG9hdFJlY3QgeyB9KTsKICAgICB9CiAK
QEAgLTEwOTYsMjAgKzEwODksMTkgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVtb3ZlZEZy
b21BbmNlcwogCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjpuZWVkc1ByZXBhcmF0aW9uRm9yRGlz
cGxheSgpCiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPm5lZWRzUHJlcGFy
YXRpb25Gb3JEaXNwbGF5KCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQoKS5uZWVkc1By
ZXBhcmF0aW9uRm9yRGlzcGxheSgpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwcmVw
YXJlRm9yRGlzcGxheSgpCiB7CiAgICAgQVNTRVJUKG5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5
KCkpOwogCi0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJlRm9y
RGlzcGxheSgpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wcmVwYXJlRm9yRGlzcGxheSgpOwog
fQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc0NvbnRyb2xsZWRCeU9mZnNjcmVlbigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzUGxhY2Vob2xkZXIo
KTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgpLmlzUGxhY2Vob2xkZXIoKTsKIH0KIAog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAkocmV2aXNpb24g
Mjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw5ICs3Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBJbnRTaXplJiBuZXdTaXplKSBvdmVycmlkZTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gZ2V0
Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgY29uc3QgU3RyaW5nJiBjb250ZXh0SWQsIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7Ci0KICAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiBnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgc3Rh
dGljIGJvb2wgaXMyZFR5cGUoY29uc3QgU3RyaW5nJik7CkBAIC0xMTYsOCArMTE0LDggQEAgcHVi
bGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbT4+IGNhcHR1cmVTdHJlYW0oRG9j
dW1lbnQmLCBPcHRpb25hbDxkb3VibGU+JiYgZnJhbWVSZXF1ZXN0UmF0ZSk7CiAjZW5kaWYKIAot
ICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJDb3Bp
ZWRJbWFnZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGZpbmFsOwor
ICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGZpbmFsOwogICAgIFJlZlB0cjxJbWFnZURhdGE+
IGdldEltYWdlRGF0YSgpOwogCiAgICAgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKCkg
Y29uc3QgZmluYWw7CkBAIC0xNjQsNyArMTYyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0
KCk7CiAKICAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QgZmluYWw7Ci0gICAgdm9p
ZCBjbGVhckltYWdlQnVmZmVyKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckltYWdlQnVmZmVyKCk7
CiAKICAgICBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyOyB9CiAKQEAgLTE4Myw3ICsxODEsNiBAQCBwcml2YXRl
OgogICAgIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGluc2VydGVkSW50b0FuY2Vz
dG9yKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92
ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVt
b3ZlZFRyZWUpIGZpbmFsOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+IG1fY29udGV4dDsKICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFn
ZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRv
IGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUp
LgogCiAgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAkocmV2aXNpb24gMjc3MTczKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTUsOSArMTE1LDYgQEAgT2Zmc2NyZWVuQ2FudmFzOjpPZmZzY3JlZW5DYW52YXMoU2Ny
aXB0RQogT2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2NyZWVuQ2FudmFzKCkKIHsKICAgICBub3RpZnlP
YnNlcnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKLQotICAgIG1fY29udGV4dCA9IG51bGxwdHI7IC8v
IEVuc3VyZSB0aGlzIGdvZXMgYXdheSBiZWZvcmUgdGhlIEltYWdlQnVmZmVyLgotICAgIHNldElt
YWdlQnVmZmVyKG51bGxwdHIpOwogfQogCiB1bnNpZ25lZCBPZmZzY3JlZW5DYW52YXM6OndpZHRo
KCkgY29uc3QKQEAgLTE1NCw2ICsxNTEsMjMgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldFNp
emUoY29uc3QgSW50UwogICAgIHJlc2V0KCk7CiB9CiAKK3N0YXRpYyBib29sIGlzMmRUeXBlKFJl
bmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlKQoreworICAgIHJldHVybiBjb250ZXh0VHlw
ZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6XzJkOworfQorCitPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJk
KFJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlKQoreworICAgIEFTU0VSVF9VTlVTRUQo
aXMyZFR5cGUoY29udGV4dFR5cGUpLCBjb250ZXh0VHlwZSk7CisgICAgQVNTRVJUKHJlbmRlcmlu
Z0NvbnRleHQoKS5pc05vbmUoKSk7CisKKyAgICAvLyBGSVhNRTogQWRkIGNoZWNrIHRvIHNlZSBp
ZiB3ZSBoYXZlIGEgZW5vdWdoIHBpeGVsIG1lbW9yeS4gU2VlIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVDb250ZXh0MmQuCisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzKSk7CisKKyAgICByZXR1cm4gJmRvd25j
YXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KTsKK30KKwogI2lmIEVOQUJMRShXRUJHTCkKIHN0YXRpYyBib29sIHJlcXVpcmVzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0ZvcldlYkdMKCkKIHsKQEAgLTE3NSwyOCArMTg5LDQxIEBAIHN0YXRpYyBi
b29sIHNob3VsZEVuYWJsZVdlYkdMKGJvb2wgd2ViR0wKICAgICByZXR1cm4gYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQ7CiB9CiAKLXZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVDb250
ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXMmJiBhdHRycykKK3N0YXRpYyBib29sIGlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRl
eHRUeXBlIGNvbnRleHRUeXBlKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICByZXR1
cm4gY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsIHx8IGNvbnRleHRU
eXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpXZWJnbDI7Cit9CisKK1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmlu
Z0NvbnRleHRUeXBlIGNvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMp
Cit7CisgICAgQVNTRVJUKGlzV2ViR0xUeXBlKGNvbnRleHRUeXBlKSk7CisgICAgQVNTRVJUKHJl
bmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSB0aGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBXb3JrZXJH
bG9iYWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29w
ZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdl
YkdMKHdvcmtlckdsb2JhbFNjb3BlLnNldHRpbmdzVmFsdWVzKCkud2ViR0xFbmFibGVkLCB3b3Jr
ZXJHbG9iYWxTY29wZS5zZXR0aW5nc1ZhbHVlcygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0gZWxzZSBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAg
ICAgICAgIGF1dG8mIHNldHRpbmdzID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KS5zZXR0aW5ncygpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHNl
dHRpbmdzLndlYkdMRW5hYmxlZCgpLCBzZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0gZWxzZQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBudWxscHRyOwor
CiAgICAgR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb24gd2ViR0xWZXJzaW9uID0gR3JhcGhp
Y3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMTsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAg
IHdlYkdMVmVyc2lvbiA9IChjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2Vi
Z2wpID8gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMSA6IEdyYXBoaWNzQ29u
dGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDI7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250
ZXh0VHlwZSk7CiAjZW5kaWYKLSAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpjcmVhdGUoKnRoaXMsIGF0dHJzLCB3ZWJHTFZlcnNpb24pOworCisgICAgYXV0byBjb250
ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgd2Vi
R0xWZXJzaW9uKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQ
dHIoY29udGV4dCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
QEAgLTIwNiw0NCArMjMzLDUzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRl
cmluZ0MKICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29u
dGV4dFR5cGU6Ol8yZCkgewotICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBp
ZiAoIWlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkpCisg
ICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRl
cmluZ0NvbnRleHQoKS5pczJkKCkpIHsKKyAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4
dFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLSAg
ICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9j
b250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAg
ICAgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCp0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1
cm4geyB7IFdURjo6bnVsbG9wdCB9IH07Ci0KLSAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OwotICAgIH0KICNpZiBFTkFC
TEUoV0VCR0wpCi0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAg
ICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYg
KHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNXZWJH
TFR5cGUoY29udGV4dFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxs
b3B0IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRl
cmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRl
cmluZ0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIGlm
IChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIGlm
IChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRv
d25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07
CisjZW5kaWYKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9
OwogICAgICAgICB9CiAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICB9CisKKyAgICBpZiAoaXMyZFR5cGUoY29u
dGV4dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy4KKyAgICAgICAgYXV0byBjb250ZXh0ID0g
Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKGNvbnRleHRUeXBlKTsKKyAgICAgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29u
dGV4dCB9IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYgKGlzV2ViR0xU
eXBlKGNvbnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udmVydDxJRExE
aWN0aW9uYXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwgIWFyZ3VtZW50cy5pc0Vt
cHR5KCkgPyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkpOwogICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlv
bkVycm9yIH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0VHlwZSwgV1RG
TW92ZShhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBhdXRv
IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmli
dXRlcykpOworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4geyB7IFdU
Rjo6bnVsbG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICBpZiAoaXM8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICByZXR1cm4geyB7
IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+
KCpjb250ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1f
Y29udGV4dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5n
Q29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9
IH07CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg4LDEwIEBAIEV4Y2VwdGlvbk9yPE9w
dGlvbmFsPE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0
bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogewotICAgIGlm
IChtX2RldGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0YWNoZWQgfHwgcmVuZGVy
aW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoIXdpZHRoKCkg
fHwgIWhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7
IG51bGxwdHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNCwxNSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZlcigpLCB0byBhdm9pZCBy
ZXNldHRpbmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFrZSBhIGNvcHkgYW5kCiAg
ICAgICAgIC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVyIHRoYW4gcmV0dXJuaW5n
IHRoZSBvcmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9IGJ1ZmZlcigp
LT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJ1ZmZlcigpLT5sb2dp
Y2FsU2l6ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdpbmdDb250ZXh0KCkpOwot
ICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhckNhbnZhcygpOwogICAg
ICAgICBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6
OmNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJDb3B5KSwgb3JpZ2luQ2xl
YW4oKSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxpemF0aW9uU3Rh
dGUoKSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1dG8gd2ViR0xDb250ZXh0
ID0gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCk7CisgICAgaWYg
KGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgeworICAgICAg
ICBhdXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJl
bmRlcmluZ0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1cHBvc2VkIHRv
IGNyZWF0ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwogICAgICAgICAvLyBzdG9y
ZSBmcm9tIHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBmb3Igbm93IHdlJ2xsIGp1
c3QKQEAgLTM1OCwyMCArMzk0LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpkaWREcmF3KGNv
bnN0IE9wdGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwogfQogCi1J
bWFnZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogT2Zmc2Ny
ZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKSB7
Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2NvcGllZEltYWdlID0gYnVm
ZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCi12b2lkIE9m
ZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNh
bnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9IG51bGxwdHI7
CiB9CkBAIC00MzEsOCArNDY2LDggQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxh
Y2Vob2xkZQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVHJhbnNmZXIgdGV4dHVy
ZSBvdmVyIGlmIHdlJ3JlIHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nCi0gICAgaWYgKG1f
Y29udGV4dCAmJiAobV9jb250ZXh0LT5pc1dlYkdMKCkgfHwgbV9jb250ZXh0LT5pc0FjY2VsZXJh
dGVkKCkpKQotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkgfHwgcmVuZGVyaW5nQ29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWQoKSkKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAKICAgICBpZiAobV9wbGFjZWhvbGRlckRhdGEt
PmJ1ZmZlclBpcGVTb3VyY2UpIHsKICAgICAgICAgYXV0byBidWZmZXJDb3B5ID0gaW1hZ2VCdWZm
ZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VCdWZmZXIt
PmxvZ2ljYWxTaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIGltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOwpAQCAtNDc5LDcgKzUxNCw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpj
cmVhdGVJbWFnZUJ1ZmZlcigKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJpdG1hcDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoKmNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+
IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKK1JlZlB0cjxJbWFnZUJ1
ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKQogewogICAgIEFTU0VSVCht
X2RldGFjaGVkKTsKIApAQCAtNDkzLDggKzUyOCw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zm
c2NyZWVuQ2FudmFzOjp0YWsKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCiB7CiAgICAg
cmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVzZXQoKTsKKyAg
ICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpKQorICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzZXQoKTsKIAogICAgIG1faGFzQ3JlYXRlZEltYWdl
QnVmZmVyID0gZmFsc2U7CiAgICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiwx
NiArMTIyLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpZHRoKHVuc2lnbmVkKTsKICAgICB2
b2lkIHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBy
ZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9
Ci0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0Pj4g
Z2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVuZGVyaW5nQ29udGV4dFR5cGUsIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CiAgICAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICAg
dm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyYmLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKIAogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+Jikg
ZmluYWw7CiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2Uo
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKIAogICAgIGJvb2wg
aGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVk
SW1hZ2VCdWZmZXI7IH0KIApAQCAtMTQ4LDcgKzE0Niw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBS
ZWZDb3VudGVkOjpkZXJlZjsKIAogcHJpdmF0ZToKLQogICAgIE9mZnNjcmVlbkNhbnZhcyhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAK
ICAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtMTY1LDEyICsxNjIsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBJbnRTaXplJikgZmluYWw7CiAKKyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqIGNyZWF0ZU9mZnNjcmVlbkNvbnRleHQyZChSZW5kZXJpbmdDb250ZXh0VHlwZSk7CiAjaWYg
RU5BQkxFKFdFQkdMKQotICAgIHZvaWQgY3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmluZ0NvbnRl
eHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgPSB7IH0pOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqIGNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSwg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyYmKTsKICNlbmRpZgogCiAgICAgdm9pZCBjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdl
QnVmZmVyKCkgY29uc3Q7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiB0YWtlSW1hZ2VCdWZmZXIo
KTsKIAogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtMTc4LDggKzE3Niw2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBwdXNoQnVmZmVyVG9QbGFjZWhvbGRlcigpOwogICAgIHZvaWQgc2NoZWR1bGVDb21t
aXRUb1BsYWNlaG9sZGVyQ2FudmFzKCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwotCiAgICAgLy8gbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIgbWVhbnMgd2UgdHJpZWQgdG8gbWFsbG9jIHRoZSBidWZmZXIuIFdlIGRpZG4ndCBuZWNlc3Nh
cmlseSBnZXQgaXQuCiAgICAgbXV0YWJsZSBib29sIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIHsg
ZmFsc2UgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OSwxMSArNjksMTEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7
CiAKLXN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSkKK1VuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSkKIHsKLSAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKGNh
bnZhcywgV1RGTW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7
CisgICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2Uo
Km5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSwg
dXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dCgqcmVuZGVyaW5nQ29udGV4
dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJp
bmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgVGV4dE1ldHJpY3M7CiBjbGFzcyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNl
dHRpbmdzJiYsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpOworICAgIHN0YXRp
YyBVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYs
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYsIGJvb2wgdXNlc0NTU0NvbXBhdGli
aWxpdHlQYXJzZU1vZGUpOwogCiAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksNyBAQCBwdWJsaWM6CiAKICAgICBDYW52YXNCYXNlJiBjYW52YXNCYXNlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW52YXM7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBpc05vbmUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpczJkKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJHTDEoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAvLyB1c2VkIGZvciBjb21wb3NpdGluZyBw
dXJwb3Nlcy4KICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7IH0K
LSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXND
YWxsVHJhY2VyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyOyB9CiAgICAgdm9pZCBzZXRIYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
KGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcikgeyBtX2hhc0FjdGl2ZUlu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXIgPSBoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lKTsKKworVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lPiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK3sKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZShjYW52YXMpKTsKK30KKworQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHROb25lKENhbnZhc0Jhc2UmIGNhbnZhcykKKyAgICA6IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQgeyBjYW52YXMgfQoreworfQorCitDYW52YXNSZW5kZXJpbmdDb250
ZXh0Tm9uZTo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKCkgPSBkZWZhdWx0OworCit9CisK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHROb25lPiBjcmVhdGUoQ2FudmFzQmFzZSYpOworCisgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVy
aW5nQ29udGV4dE5vbmUoKTsKKworcHJpdmF0ZToKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
Tm9uZShDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
Mjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHN0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUKIHN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlm
CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKK1VuaXF1ZVJlZjxJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KENhbnZhc0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mm
JiBzZXR0aW5ncykKIHsKLSAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihuZXcgSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncykpKTsKKyAgICBhdXRvIHJlbmRlcmluZ0Nv
bnRleHQgPSBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpKSk7CiAKLSAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQoKnJlbmRlcmlu
Z0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFz
UmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250ZXh0LmdldCgpKTsKIAogICAgIHJldHVybiBy
ZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3NzE3
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIEltYWdlQnVmZmVy
OwogY2xhc3MgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmKTsKIAogICAgIGVudW0gY2xhc3MgQml0bWFwTW9k
ZSB7CiAgICAgICAgIFZhbGlkLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogCitVbmlxdWVSZWY8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KGNhbnZhcykpOworfQorCiBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJiBjYW52YXMpCiAgICAgOiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlKGNhbnZhcywgZmFsc2UpCiB7CkBAIC0xMDgsNyAr
MTEzLDggQEAgQ2FudmFzRGlyZWN0aW9uIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZwogICAgIHJl
dHVybiBEaXJlY3Rpb246Okx0cjsKIH0KIAotYXV0byBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmZvbnRQcm94eSgpIC0+IGNvbnN0IEZvbnRQcm94eSogeworYXV0byBPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnRQcm94eSgpIC0+IGNvbnN0IEZvbnRQcm94
eSoKK3sKICAgICBpZiAoIXN0YXRlKCkuZm9udC5yZWFsaXplZCgpKQogICAgICAgICBzZXRGb250
KHN0YXRlKCkudW5wYXJzZWRGb250KTsKICAgICByZXR1cm4gJnN0YXRlKCkuZm9udDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FO
VkFTKQogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIgotCiAjaW5j
bHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2LDcg
KzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Ug
ewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKTsKIHB1YmxpYzoKLSAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQo
Q2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOworCiAgICAgdmlydHVhbCB+T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKICAgICBPZmZzY3JlZW5DYW52YXMmIGNh
bnZhcygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhcz4oY2FudmFzQmFz
ZSgpKTsgfQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgUmVmPFRleHRNZXRyaWNzPiBt
ZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwogCiBwcml2YXRlOgorICAgIE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJik7CisKICAgICBib29sIGlzT2Zm
c2NyZWVuMmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgY29uc3QgRm9udFBy
b3h5KiBmb250UHJveHkoKSBmaW5hbDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAy
NzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChQYWludFJlbmRlcmluZ0NvbnRleHQyRCk7
CiAKLXN0ZDo6dW5pcXVlX3B0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCitVbmlxdWVSZWY8UGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQ+IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFz
QmFzZSYgY2FudmFzKQogewotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ+KG5ldyBQYWludFJlbmRlcmluZ0NvbnRleHQyRChjYW52YXMpKTsKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBQYWludFJlbmRlcmluZ0NvbnRl
eHQyRChjYW52YXMpKTsKIH0KIAogUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OlBhaW50UmVuZGVy
aW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZhcykKQEAgLTQ3LDQgKzQ3LDUgQEAgUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQ6OlBhaW50UmVuZGVyaW5nQwogUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ6On5QYWludFJlbmRlcmluZ0NvbnRleHQyRCgpID0gZGVmYXVsdDsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Bh
aW50UmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjc3MTczKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwxOCArMzYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChQYWludFJlbmRlcmluZ0NvbnRl
eHQyRCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQYWludFJlbmRlcmlu
Z0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPFBh
aW50UmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOwogCiAgICAgdmlydHVh
bCB+UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAogICAgIEN1c3RvbVBhaW50Q2FudmFzJiBj
YW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxDdXN0b21QYWludENhbnZhcz4oY2FudmFz
QmFzZSgpKTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgaXNQYWludCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jh
c2UmKTsKKworICAgIGJvb2wgaXNQYWludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19DQU5WQVNSRU5ERVJJTkdDT05URVhUKFdlYkNvcmU6OlBhaW50UmVuZGVyaW5nQ29udGV4dDJE
LCBpc1BhaW50KCkpCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lv
biAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0KTsKIAorVW5pcXVlUmVmPFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dD4gUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
KQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IFBsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dChjYW52YXMpKTsKK30KKwogUGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYgY2FudmFzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCisgICAgOiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0IHsgY2FudmFzIH0KKyAgICAsIG1faW1hZ2VCdWZmZXJQaXBlIHsgSW1hZ2VCdWZm
ZXJQaXBlOjpjcmVhdGUoKSB9CiB7Ci0gICAgbV9pbWFnZUJ1ZmZlclBpcGUgPSBJbWFnZUJ1ZmZl
clBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxlbWVudCogUGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlz
aW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMyArMzcsMTUgQEAgY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0IGZpbmFs
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOwogCiAgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0OwogCiAgICAgY29uc3QgUmVmUHRyPElt
YWdlQnVmZmVyUGlwZT4mIGltYWdlQnVmZmVyUGlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VC
dWZmZXJQaXBlOyB9CiAKIHByaXZhdGU6CisgICAgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0
KENhbnZhc0Jhc2UmKTsKKwogICAgIGJvb2wgaXNQbGFjZWhvbGRlcigpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIHRydWU7IH0KIAogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDg0MSw3ICs0ODQxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QgogICAgICAgICAvLyBzbyBmb3IgV2ViR0wgMS4wIHVwbG9hZHMsIGRl
ZmVyIG1lYXN1cmluZyB0aGVpciByZWN0YW5nbGUgYXMgbG9uZyBhcyBwb3NzaWJsZS4KICAgICAg
ICAgdGV4SW1hZ2VJbXBsKGZ1bmN0aW9uSUQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVy
LmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBmYWxzZSwgaW5wdXRTb3VyY2VJbWFnZVJlY3Qs
IGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCk7CiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgfSwg
WyZdKGNvbnN0IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4mIGNhbnZhcykgLT4gRXhjZXB0aW9u
T3I8dm9pZD4geworICAgIH0sIFsmXShSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBjYW52YXMp
IC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAgICAgYXV0byB2YWxpZGF0aW9uUmVzdWx0ID0g
dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChmdW5jdGlvbk5hbWUsIGNhbnZhcy5nZXQoKSk7CiAg
ICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIHZhbGlkYXRpb25SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAJKHJldmlzaW9uIDI3NzE3
MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogI2lmIEVOQUJMRShXRUJHUFUpCi1zdGF0aWMgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhc0lmQ29udGV4dE1hdGNoZXNEZXZpY2UoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCwgV2ViR1BVRGV2aWNlJiBkZXZpY2UpCitzdGF0aWMgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhc0lmQ29udGV4dE1hdGNoZXNEZXZpY2UoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCwgV2ViR1BVRGV2aWNlJiBkZXZpY2UpCiB7CiAgICAgaWYgKGlz
PEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQpKSB7CiAgICAgICAgIGF1dG8mIGNvbnRleHRHUFUg
PSBkb3duY2FzdDxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0KTsKQEAgLTE5NSw3ICsxOTUsNyBA
QCBXZWJHUFVEZXZpY2UqIEluc3BlY3RvckNhbnZhczo6ZGV2aWNlQ29uCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ2FudmFzOjppc0RldmljZUZvckNhbnZhc0NvbnRl
eHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKK2Jvb2wgSW5zcGVjdG9y
Q2FudmFzOjppc0RldmljZUZvckNhbnZhc0NvbnRleHQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZGV2aWNlID0gZGV2aWNlQ29u
dGV4dCgpKQogICAgICAgICByZXR1cm4gY2FudmFzSWZDb250ZXh0TWF0Y2hlc0RldmljZShjb250
ZXh0LCAqZGV2aWNlKTsKQEAgLTEwNzYsMTYgKzEwNzYsMTYgQEAgU3RyaW5nIEluc3BlY3RvckNh
bnZhczo6Z2V0Q2FudmFzQ29udGVudAogICAgIH0KIAogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBh
dXRvKiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIGF1dG8mIGNvbnRl
eHQgPSBub2RlLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U+KGNvbnRleHQpKQotICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPigqY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKHRy
dWUpOworICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0
KS5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3IodHJ1ZSk7CiAjZW5kaWYKIAogICAg
IEV4Y2VwdGlvbk9yPFVuY2FjaGVkU3RyaW5nPiByZXN1bHQgPSBub2RlLT50b0RhdGFVUkwoImlt
YWdlL3BuZyJfcyk7CiAKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKGlzPFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKQotICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlPigqY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9y
KGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29u
dGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKICNlbmRpZgog
CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgV2ViR1BVRGV2
aWNlKiBkZXZpY2VDb250ZXh0KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RldmljZUZvckNhbnZhc0Nv
bnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpIGNvbnN0OworICAgIGJvb2wgaXNEZXZpY2VG
b3JDYW52YXNDb250ZXh0KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKSBjb25zdDsKICNl
bmRpZgogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw3ICs2OSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudmFzQWdlbnQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCkKK3N0YXRpYyBJbnNwZWN0b3JDYW52YXNB
Z2VudCogZW5hYmxlZENhbnZhc0FnZW50KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNh
bnZhc1JlbmRlcmluZ0NvbnRleHQpCiB7CiAgICAgQVNTRVJUKEluc3BlY3Rvckluc3RydW1lbnRh
dGlvblB1YmxpYzo6aGFzRnJvbnRlbmRzKCkpOwogCkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyBJ
bnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnYKIH0KIAogI2RlZmluZSBQUk9DRVNTX0FS
R1VNRU5UX0RFRklOSVRJT04oQXJndW1lbnRUeXBlKSBcCi1PcHRpb25hbDxJbnNwZWN0b3JDYW52
YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1bWVudCkgXAorT3B0aW9uYWw8SW5zcGVjdG9yQ2Fu
dmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXI6OnByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNS
ZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKIHsgXAogICAgIGlmIChh
dXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRDYW52YXNBZ2VudChjYW52YXNSZW5kZXJpbmdDb250
ZXh0KSkgXAogICAgICAgICByZXR1cm4gY2FudmFzQWdlbnQtPnByb2Nlc3NBcmd1bWVudChjYW52
YXNSZW5kZXJpbmdDb250ZXh0LCBhcmd1bWVudCk7IFwKQEAgLTkzLDcgKzkzLDcgQEAgT3B0aW9u
YWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvYwogICAgIEZPUl9FQUNIX0lOU1BFQ1RP
Ul9DQU5WQVNfQ0FMTF9UUkFDRVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9O
KQogI3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTgogCi12b2lkIEluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52
YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
YW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVudHMpCiB7CiAgICAgaWYgKGF1dG8q
IGNhbnZhc0FnZW50ID0gZW5hYmxlZENhbnZhc0FnZW50KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQp
KQogICAgICAgICBjYW52YXNBZ2VudC0+cmVjb3JkQWN0aW9uKGNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQsIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CkBAIC0xMDEsMTQgKzEwMSwx
MiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjCiAKIE9wdGlvbmFs
PEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29uc3QgSFRNTENhbnZhc0VsZW1lbnQm
IGNhbnZhc0VsZW1lbnQsIHVpbnQzMl90IGFyZ3VtZW50KQogewotICAgIEFTU0VSVChjYW52YXNF
bGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSk7Ci0gICAgcmV0dXJuIHByb2Nlc3NBcmd1bWVudCgq
Y2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIGFyZ3VtZW50KTsKKyAgICByZXR1cm4g
cHJvY2Vzc0FyZ3VtZW50KGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBhcmd1bWVu
dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKGNv
bnN0IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCBTdHJpbmcmJiBuYW1lLCBJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVudHMpCiB7
Ci0gICAgQVNTRVJUKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKTsKLSAgICByZWNv
cmRBY3Rpb24oKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBXVEZNb3ZlKG5hbWUp
LCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIHJlY29yZEFjdGlvbihjYW52YXNFbGVtZW50LnJl
bmRlcmluZ0NvbnRleHQoKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCShyZXZpc2lvbiAyNzcxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTIgKzE5NCwxMiBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
UHJvY2Vzc2VkQXJndW1lbnRzID0gc3RkOjppbml0aWFsaXplcl9saXN0PE9wdGlvbmFsPFByb2Nl
c3NlZEFyZ3VtZW50Pj47CiAKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTihB
cmd1bWVudFR5cGUpIFwKLSAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+IHBy
b2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRUeXBlKTsgXAor
ICAgIHN0YXRpYyBPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNv
bnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBBcmd1bWVudFR5cGUpOyBcCiAvLyBlbmQgb2Yg
UFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTgogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5W
QVNfQ0FMTF9UUkFDRVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTikKICN1
bmRlZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAKLSAgICBzdGF0aWMgdm9pZCByZWNv
cmRBY3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBQcm9jZXNzZWRBcmd1
bWVudHMmJiA9IHsgfSk7CisgICAgc3RhdGljIHZvaWQgcmVjb3JkQWN0aW9uKGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0p
OwogCiAgICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1l
bnQoY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmLCB1aW50MzJfdCk7CiAgICAgc3RhdGljIHZvaWQg
cmVjb3JkQWN0aW9uKGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiwgU3RyaW5nJiYsIFByb2Nlc3Nl
ZEFyZ3VtZW50cyYmID0geyB9KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCShyZXZpc2lvbiAyNzcx
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDEzICs0MTcsNyBAQCB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpmcmFtZU5hdmlnYXRlCiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpCiB7
Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3Rv
ckNhbnZhcygqY29udGV4dCk7CisgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVj
dG9yQ2FudmFzKGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaW5z
cGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJu
OwpAQCAtNDQ3LDcgKzQ0MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0
ZUNhbnYKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNh
bnZhc01lbW9yeShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQordm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KGNvbnN0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gaW5zcGVj
dG9yQ2FudmFzOwogCkBAIC00NzcsMTEgKzQ3MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmRpZENoYW5nZUNhbnYKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzQ2hh
bmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikK
IHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCk7Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluc3BlY3RvckNh
bnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVjdG9y
Q2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQo
KSk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52
YXMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5MSwxMSArNDgxLDcgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FudmFzQ2hhbmdlZAogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpj
YW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSkKIHsKLSAgICBhdXRvKiBjb250
ZXh0ID0gY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0
b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3Bl
Y3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAgQVNTRVJUKGlu
c3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTUwMyw3ICs0ODksNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNE
ZXN0cm95CiAgICAgdW5iaW5kQ2FudmFzKCppbnNwZWN0b3JDYW52YXMpOwogfQogCi12b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGZvcmNlRGlzcGF0Y2gpCit2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjb25zdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGZvcmNlRGlzcGF0Y2gpCiB7CiAgICAg
aWYgKCFjb250ZXh0Lmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTM3LDcgKzUyMyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmRpZEZpbmlzaFJlY28KICAgICBtX3JlY29yZGluZ0NhbnZhc0lkZW50aWZpZXJzLnJlbW92ZShp
bnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBKU0M6OkpTT2JqZWN0KiBvcHRp
b25zKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2Fu
dmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIEpTQzo6SlNHbG9iYWxP
YmplY3QmIGV4ZWMsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMpCiB7CiAgICAgYXV0byBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNvbnRleHQpOwogICAgIEFTU0VSVChpbnNw
ZWN0b3JDYW52YXMpOwpAQCAtNTU5LDcgKzU0NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmNvbnNvbGVTdGFydFIKICAgICBzdGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdURk1vdmUocmVjb3JkaW5n
T3B0aW9ucykpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RvcFJl
Y29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQordm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52
YXNGcmFtZShjb250ZXh0LCB0cnVlKTsKIH0KQEAgLTY4Miw3ICs2NjgsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
IAogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04oQXJndW1lbnRUeXBlKSBcCi1P
cHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKK09wdGlv
bmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1bWVudCkgXAogeyBc
CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQpOyBcCiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7IFwKQEAgLTY5
Miw3ICs2NzgsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jCiAg
ICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNT
X0FSR1VNRU5UX0RFRklOSVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9O
CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcmJiBuYW1lLCBJbnNwZWN0
b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVudHMpCit2b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQogewogICAg
IEFTU0VSVChjYW52YXNSZW5kZXJpbmdDb250ZXh0Lmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0Nh
bGxUcmFjZXIoKSk7CiAKQEAgLTg4Nyw3ICs4NzMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yQ2FudmFz
PiBJbnNwZWN0b3JDYW52YXNBCiAgICAgcmV0dXJuIGluc3BlY3RvckNhbnZhczsKIH0KIAotUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JD
YW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKK1JlZlB0cjxJbnNwZWN0b3JD
YW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKGNvbnN0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZhcy52YWx1ZXMoKSkgewogICAg
ICAgICBpZiAoaW5zcGVjdG9yQ2FudmFzLT5jYW52YXNDb250ZXh0KCkgPT0gJmNvbnRleHQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5
LDEwICs5OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwog
ICAgIHZvaWQgZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoQ2FudmFzQmFzZSYpOwogICAg
IHZvaWQgZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250
ZXh0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDYW52YXNNZW1vcnkoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwotICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9IGZhbHNlKTsKLSAgICB2b2lkIGNv
bnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMpOwotICAgIHZvaWQgY29uc29s
ZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOworICAgIHZvaWQg
ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKKyAg
ICB2b2lkIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKGNvbnN0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmLCBib29sIGZvcmNlRGlzcGF0Y2ggPSBmYWxzZSk7CisgICAgdm9pZCBjb25zb2xl
U3RhcnRSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEpTQzo6
SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKTsKKyAgICB2b2lkIGNvbnNv
bGVTdG9wUmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNp
ZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBkaWRFbmFibGVFeHRlbnNpb24oV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlkQ3JlYXRlV2ViR0xQ
cm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBXZWJHTFByb2dyYW0mKTsKQEAgLTEy
MCwxMSArMTIwLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIEluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXIKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTihBcmd1bWVudFR5cGUpIFwK
LSAgICBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVu
dD4gcHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBBcmd1bWVudFR5cGUp
OyBcCisgICAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJn
dW1lbnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJn
dW1lbnRUeXBlKTsgXAogLy8gZW5kIG9mIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KICAg
ICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1Nf
QVJHVU1FTlRfREVDTEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElP
TgotICAgIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcm
JiwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0p
OworICAgIHZvaWQgcmVjb3JkQWN0aW9uKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBT
dHJpbmcmJiwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYg
PSB7IH0pOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBSZWNvcmRpbmdPcHRpb25zIHsKQEAgLTE0
Niw3ICsxNDYsNyBAQCBwcml2YXRlOgogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAgICAgdm9p
ZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7CiAgICAgUmVmUHRyPEluc3BlY3RvckNh
bnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckNhbnZh
cz4gZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CisgICAgUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYpOwogI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MiwxMCArMjQyLDEwIEBAIHN0YXRpYyBK
U0M6OkpTT2JqZWN0KiBvYmplY3RBcmd1bWVudEF0KFMKIHN0YXRpYyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dGFyZ2V0KQogewogICAgIGlmIChhdXRvKiBjYW52YXMgPSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0
b1dyYXBwZWQodm0sIHRhcmdldCkpCi0gICAgICAgIHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0Nv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICNp
ZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAoYXV0byogY2FudmFzID0gSlNPZmZz
Y3JlZW5DYW52YXM6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKLSAgICAgICAgcmV0dXJuIGNhbnZh
cy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNhbnZhcy0+cmVuZGVyaW5n
Q29udGV4dCgpOwogI2VuZGlmCiAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQogICAgICAgICByZXR1cm4gY29u
dGV4dDsKQEAgLTM0OSwxMCArMzQ5LDggQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVu
c2hvdChKU0M6OgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEhUTUxD
YW52YXNFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgY2Fu
dmFzRWxlbWVudCA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pigqbm9kZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogY2FudmFzUmVuZGVyaW5nQ29udGV4dCA9IGNhbnZh
c0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gc25hcHNob3RDYW52YXMoY2FudmFzRWxlbWVudCwgKmNhbnZh
c1JlbmRlcmluZ0NvbnRleHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
VVJMID0gcmVzdWx0LnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzbmFwc2hvdENhbnZhcyhjYW52YXNF
bGVtZW50LCBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1ZSgpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAkocmV2aXNpb24gMjc3
MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYsNyBAQCBJbWFnZURyYXdSZXN1bHQg
Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0CiAgICAgaWYgKHJlc3VsdC50eXBlKCkgIT0gQ2FsbGJh
Y2tSZXN1bHRUeXBlOjpTdWNjZXNzKQogICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpE
aWROb3RoaW5nOwogCi0gICAgY2FudmFzLT5yZXBsYXlEaXNwbGF5TGlzdCgmZGVzdENvbnRleHQp
OworICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3QoZGVzdENvbnRleHQpOwogCiAgICAgcmV0
dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJhdzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjAsMTAgKzYwLDcgQEAgYm9vbCBSZW5kZXJIVE1MQ2FudmFzOjpyZXF1aXJlc0xheWVy
KCkgYwogICAgIGlmIChSZW5kZXJSZXBsYWNlZDo6cmVxdWlyZXNMYXllcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0g
Y2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzQWNjZWxlcmF0ZWQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2Fu
dmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCk7CiB9CiAKIHZv
aWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAtNzMsNyArNzAsNyBAQCB2b2lkIFJl
bmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpCiAgICAgTGF5b3V0UmVjdCBjb250ZW50
Qm94UmVjdCA9IHRoaXMtPmNvbnRlbnRCb3hSZWN0KCk7CiAKICAgICBpZiAoY29udGV4dC5kZXRl
Y3RpbmdDb250ZW50ZnVsUGFpbnQoKSkgewotICAgICAgICBpZiAoIWNvbnRleHQuY29udGVuZnVs
UGFpbnREZXRlY3RlZCgpICYmIGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkpCisg
ICAgICAgIGlmICghY29udGV4dC5jb250ZW5mdWxQYWludERldGVjdGVkKCkgJiYgIWNhbnZhc0Vs
ZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgICAgICBjb250ZXh0
LnNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwxMiBAQCBDYW52YXND
b21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0CiB7CiAgICAgQVNTRVJUKHJlbmRlcmVy
LmlzQ2FudmFzKCkpOwogICAgIAotICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIubm9kZSgpKTsKLSAgICBhdXRv
KiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0
IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgY29uc3QgYXV0byogY2FudmFzID0g
ZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSk7CisgICAgYXV0byYg
Y29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgIGlmICghY29udGV4dC5p
c0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFjY2VsZXJhdGVkQ2FudmFzOwogICAg
IAotICAgIGlmIChjb250ZXh0LT5pc0dQVUJhc2VkKCkpCisgICAgaWYgKGNvbnRleHQuaXNHUFVC
YXNlZCgpKQogICAgICAgICByZXR1cm4gQ2FudmFzQXNMYXllckNvbnRlbnRzOwogCiAgICAgcmV0
dXJuIENhbnZhc1BhaW50ZWRUb0xheWVyOyAvLyBPbiBNYWMgYW5kIGlPUyB3ZSBwYWludCBhY2Nl
bGVyYXRlZCBjYW52YXNlcyBpbnRvIHRoZWlyIGxheWVycy4KQEAgLTEwNjQsOSArMTA2NCw4IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmEKICNlbmRpZgogI2lmIEVO
QUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMp
CiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZhcygpICYmIGNhbnZhc0NvbXBvc2l0aW5n
U3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXllckNvbnRlbnRzKSB7Ci0gICAgICAg
IGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxl
bWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAgICAgICBpZiAoYXV0byogY29udGV4dCA9
IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQotICAgICAgICAgICAgbV9ncmFwaGljc0xheWVy
LT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjb250ZXh0LT5wbGF0Zm9ybUxheWVyKCksIEdy
YXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQdXJwb3NlOjpDYW52YXMpOworICAgICAgICBjb25z
dCBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5l
bGVtZW50KCkpOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9QbGF0Zm9y
bUxheWVyKGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpLnBsYXRmb3JtTGF5ZXIoKSwgR3JhcGhp
Y3NMYXllcjo6Q29udGVudHNMYXllclB1cnBvc2U6OkNhbnZhcyk7CiAKICAgICAgICAgbGF5ZXJD
b25maWdDaGFuZ2VkID0gdHJ1ZTsKICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="448808"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428012</attachid>
            <date>2021-05-07 11:10:47 -0700</date>
            <delta_ts>2021-05-07 13:34:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507111046.patch</filename>
            <type>text/plain</type>
            <size>118565</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgY2FudmFzIHJlbGF0ZWQgY2xhc3NlcyBhIGJpdCB0byBtYWtlIHRoZW0gYSBiaXQgZWFzaWVy
IHRvIHdvcmsgd2l0aC4KKyAgICAgICAgLSBIVE1MQ2FudmFzRWxlbWVudCwgT2Zmc2NyZWVuQ2Fu
dmFzIGFuZCBDdXN0b21QYWludENhbnZhcyBub3cgYWx3YXlzIGhhdmUgCisgICAgICAgICAgYSB2
YWxpZCwgbm9uLW51bGwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAobm93IHN0b3JlZCBpbiBDYW52
YXNCYXNlIGFzCisgICAgICAgICAgVW5pcXVlUmVmKS4gSW4gcGxhY2Ugb2YgdGhlIG9sZCBudWxs
IHZhbHVlIHN0YXRlIHdlIG5vdyBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUgdHlwZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIG1vdmUgbW9yZSBj
b250ZXh0CisgICAgICAgICAgc3BlY2lmaWMgbG9naWMgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCBhbmQgaXRzIHN1YmNsYXNzZXMgYW5kIG91dCBvZiAKKyAgICAgICAgICBDYW52YXNCYXNlIGFu
ZCBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgLSBDU1NDYW52YXNWYWx1ZSBub3cgc3RvcmVzIGEg
Q2FudmFzQmFzZSByYXRoZXIgdGhhbiBhbiBIVE1MQ2FudmFzRWxlbWVudAorICAgICAgICAgIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IGRvd25jYXN0cy4gVGhlIGNhbGxzIHdlcmUgYWxsIHN1cHBvcnRl
ZCBieSBDYW52YXNCYXNlCisgICAgICAgICAgYWxyZWFkeSwgc28gdGhpcyBqdXN0IHJlbW92ZXMg
c29tZSB1bm5lY2Vzc2FyeSBoZWZ0LgorICAgICAgICAtIE1vdmUgaW1hZ2UgYnVmZmVyIGRlc3Ry
dWN0aW9uIHRvIHRoZSBDYW52YXNCYXNlIGRlc3RydWN0b3IgcmF0aGVyIHRoYW4KKyAgICAgICAg
ICBoYXZpbmcgaXQgZHVwbGljYXRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4gTmV3IGRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpIGhlbHBlcgorICAgICAgICAgIGltcGxlbWVudHMgdGhlIHN0ZXBzIG5lZWRlZCBp
biBhIG1vcmUgb3B0aW1hbCBtYW5uZXIgdGhhbiBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKS4KKyAg
ICAgICAgLSBSZW1vdmUgY29uc3QgZnJvbSBhIGxvdCBvZiBub3QgYWN0dWFsIGNvbnN0IGZ1bmN0
aW9ucyBsaWtlIGNvcGllZEltYWdlKCksCisgICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpIGFu
ZCBzZXRJbWFnZUJ1ZmZlcigpLiAKKyAgICAgICAgLSBGaXh1cCBPZmZzY3JlZW5DYW52YXM6Omdl
dENvbnRleHQgdG8gdXNlIHRoZSBjb250ZXh0IGNyZWF0aW9uIHBhdHRlcm4gYXMgCisgICAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQ6Z2V0Q29udGV4dCwgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHRo
ZSBwYXJhbGxlbHMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVN
ZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6fkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJh
d2luZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRl
c3Ryb3lJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFn
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAq
IGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRXZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlQ29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVk
QnlPZmZzY3JlZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+
T2Zmc2NyZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xl
YXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFz
Ojp0YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05v
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNv
bnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpyZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2Fu
dmFzOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9u
KToKKwogMjAyMS0wNS0wNyAgQ2FybG9zIEdhcm5hY2hvICA8Y2FybG9zZ0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgW0dUSzRdIFJld3JpdGUgR1RLIGdlc3R1cmUgc3VwcG9ydCB0byB3b3JrIGZvciBi
b3RoIDMueCBhbmQgNC54LgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3NzE3MykKKysr
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEz
MjAsNyBAQCBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmNwcAogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9F
WFRDb2xvckJ1ZmZlckZsb2F0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJl
YW1UcmFjay5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFj
azo6U291cgogICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9y
IGJvdGggMmQgYW5kIDNkIGNvbnRleHRzIHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50
LgogICAgIC8vIEFuZCBjYWxsIGNhbnZhcyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4
dCgpKSkgewotICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oKmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBj
b250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRl
cmluZ0NvbnRleHQoKSk7CiAgICAgICAgIGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5n
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5p
bmcsICJUdXJuaW5nIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNh
bnZhcyBiZWluZyBjYXB0dXJlZCJfcyk7CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNl
cnZlRHJhd2luZ0J1ZmZlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
R1BVQ2FudmFzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEdQVUNhbnZhc0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BV
Q2FudmFzQ29udGV4dD4gR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZh
cykKK1VuaXF1ZVJlZjxHUFVDYW52YXNDb250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUo
Q2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0
cjxHUFVDYW52YXNDb250ZXh0PihuZXcgR1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXND
b250ZXh0KGNhbnZhcykpOwogICAgIGNvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BV
Q2FudmFzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L0dQVUNhbnZhc0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHN0cnVjdCBXZWJHUFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BV
Q2FudmFzQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3Jl
YXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25z
dCB7IHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgxLDYgKzE0MjgxLDgg
QEAKIAkJQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93
RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENG
RDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2luZG93RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJF
QTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xs
YmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFy
VGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMDk4
LDggQEAKIAkJCQkzMTQwQzUyMjFGREYzMTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5oICovLAogCQkJCUJDRTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlE
Q0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4
NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAq
LywKKwkJCQlCQzg0RjQzRDI2NDFBQ0MyMDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JBRDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93
U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3Rh
dGUuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5j
cHAgKi8sCkBAIC0zMTQyNiw3ICszMTQzMCw2IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgy
RjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJB
QjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVG
Q0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIyREUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVm
ZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTgg
LyogQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUw
MDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUs
NiArMzI2NDgsNyBAQAogCQkJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGln
aHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyog
SGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUw
MDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0
RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdE
Q0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4ODcsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhG
MTFERSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThB
RUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVT
Y29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4
QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIw
Miw3IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVs
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBT
dHlsZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUg
LyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERG
QzAwMEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0
N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1l
bnREYXRhLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKIAorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIENTU0NhbnZhc1ZhbHVlOjp+Q1NTQ2FudmFzVmFsdWUoKQogewotICAgIGlm
IChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNP
YnNlcnZlcik7CisgICAgaWYgKG1fY2FudmFzKQorICAgICAgICBtX2NhbnZhcy0+cmVtb3ZlT2Jz
ZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CiB9CiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC00MSw1MyArNDIsNTMgQEAgU3RyaW5nIENTU0NhbnZhc1Zh
bHVlOjpjdXN0b21DU1NUZXh0KCkgYwogICAgIHJldHVybiBtYWtlU3RyaW5nKCItd2Via2l0LWNh
bnZhcygiLCBtX25hbWUsICcpJyk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0No
YW5nZWQoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFu
Z2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYs
IGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KQogewogICAgIGlmICghY2hh
bmdlZFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gaW1hZ2VDaGFuZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdC52YWx1ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBjbGllbnRzKCkuYmVnaW4oKSwgZW5kID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5rZXktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1h
Z2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDog
Y2xpZW50cygpLnZhbHVlcygpKQorICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpCit2b2lk
IENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKQogewotICAgIGZvciAo
YXV0byBpdCA9IGNsaWVudHMoKS5iZWdpbigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdy
YXBwZWRJbWFnZVB0cj4odGhpcykpOworICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCku
dmFsdWVzKCkpCisgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBw
ZWRJbWFnZVB0cj4odGhpcykpOwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0
cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmIGVsZW1lbnQpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpj
YW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIEFTU0VSVF9VTlVTRUQo
JmVsZW1lbnQsICZlbGVtZW50ID09IG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0
cjsKKyAgICBBU1NFUlRfVU5VU0VEKCZjYW52YXMsICZjYW52YXMgPT0gbV9jYW52YXMpOworICAg
IG1fY2FudmFzID0gbnVsbHB0cjsKIH0KIAogRmxvYXRTaXplIENTU0NhbnZhc1ZhbHVlOjpmaXhl
ZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKEhUTUxDYW52
YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKGVsdC0+d2lkdGgoKSwgZWx0LT5oZWlnaHQoKSk7CisgICAgaWYgKGF1
dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZhcyhyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLUhUTUxDYW52YXNFbGVtZW50KiBDU1NDYW52YXNWYWx1ZTo6ZWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCitDYW52YXNCYXNlKiBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICAgaWYgKCFtX2VsZW1lbnQpIHsKLSAgICAg
ICAgbV9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOwotICAg
ICAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1fY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOworICAgICAgICBpZiAo
IW1fY2FudmFzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fZWxlbWVu
dC0+YWRkT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CisgICAgICAgIG1fY2FudmFzLT5hZGRP
YnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudDsK
KyAgICByZXR1cm4gbV9jYW52YXM7CiB9CiAKIFJlZlB0cjxJbWFnZT4gQ1NTQ2FudmFzVmFsdWU6
OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIC8qc2l6ZSov
KQogewogICAgIEFTU0VSVChjbGllbnRzKCkuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgSFRN
TENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50
KCkpOwotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+YnVmZmVyKCkpCisgICAgYXV0byog
Y2FudmFzID0gdGhpcy0+Y2FudmFzKHJlbmRlcmVyLmRvY3VtZW50KCkpOworICAgIGlmICghY2Fu
dmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+Y29waWVkSW1hZ2UoKTsKKyAgICByZXR1cm4gY2FudmFzLT5jb3BpZWRJ
bWFnZSgpOwogfQogCiBib29sIENTU0NhbnZhc1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FudmFz
VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgJ
KHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00NSw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRml4ZWRTaXpl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIEZsb2F0U2l6ZSBmaXhlZFNpemUoY29uc3Qg
UmVuZGVyRWxlbWVudCYpOwogCi0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBDYW52YXNCYXNlKiBjYW52YXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbnZhczsgfQogCiAgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYs
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIHsgfQpAQCAtNjgsMTggKzY3LDE1IEBAIHB1
YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpLCBjaGFuZ2VkUmVjdCk7CisgICAg
ICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzQ2hhbmdlZChjYW52YXNCYXNlLCBjaGFuZ2VkUmVj
dCk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmIGNh
bnZhc0Jhc2UpIGZpbmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2Fu
dmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZh
c1Jlc2l6ZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAg
ICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNSZXNpemVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9
CiAgICAgICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOworICAgICAgICAgICAgbV9v
d25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChjYW52YXNCYXNlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIENTU0NhbnZhc1ZhbHVlJiBtX293bmVyVmFsdWU7CkBAIC05MywxOCArODksMTggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNF
bGVtZW50JiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOwotICAgIHZv
aWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIHZvaWQgY2FudmFzRGVz
dHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZh
c0Jhc2UmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7CisgICAgdm9p
ZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKTsKKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChD
YW52YXNCYXNlJik7CiAKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCYp
OworICAgIENhbnZhc0Jhc2UqIGNhbnZhcyhEb2N1bWVudCYpOwogCiAgICAgQ2FudmFzT2JzZXJ2
ZXJQcm94eSBtX2NhbnZhc09ic2VydmVyOwogCiAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNhbnZh
cy4KICAgICBTdHJpbmcgbV9uYW1lOwotICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUg
ZWxlbWVudCBhbmQgb3ducyBpdC4KLSAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50IHsg
bnVsbHB0ciB9OworICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUgY2FudmFzIGFuZCBv
d25zIGl0LgorICAgIENhbnZhc0Jhc2UqIG1fY2FudmFzIHsgbnVsbHB0ciB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw4IEBACiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU05hbWVkSW1h
Z2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhaW50SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNh
bnZhc0Jhc2UuaCIKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFIKICAgICBtX2NsaWVudHMuYWRkKCZyZW5kZXJl
cik7CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVl
Pih0aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAg
IGlmIChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZh
cygpKQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiB9CiAKQEAgLTg2LDggKzg2LDggQEAg
dm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0
aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAgIGlm
IChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZhcygp
KQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52
YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiAKICAgICBpZiAobV9jbGllbnRzLmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5Niw3
ICszODk2LDcgQEAgc3RhdGljIGJvb2wgaXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihEbwogCiAg
ICAgICAgIC8vIFNraXAgYDxjYW52YXM+YCBidXQgb25seSBpZiB0aGV5J3ZlIGJlZW4gZHJhd24g
aW50by4gR3Vlc3MgdGhpcyBieSBzZWVpbmcgaWYgdGhlcmUncyBhbHJlYWR5CiAgICAgICAgIC8v
IGEgYENhbnZhc1JlbmRlcmluZ0NvbnRleHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0ZWQgYnkgSmF2
YVNjcmlwdC4KLSAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAg
ICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFNraXAgM3JkLXBhcnR5IGA8aWZyYW1lPmAgYXMg
dGhlIGNvbnRlbnQgbGlrZWx5IHdvbid0IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBwYWdlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTUxLDcgKzUyLDggQEAgY29uc3QgSW50ZXJwb2xhdGlv
blF1YWxpdHkgZGVmYXVsdEludGVycAogI2VuZGlmCiAKIENhbnZhc0Jhc2U6OkNhbnZhc0Jhc2Uo
SW50U2l6ZSBzaXplKQotICAgIDogbV9zaXplKHNpemUpCisgICAgOiBtX3NpemUgeyBzaXplIH0K
KyAgICAsIG1fY29udGV4dCB7IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoKnRo
aXMpIH0KIHsKIH0KIApAQCAtNTksMTMgKzYxLDEzIEBAIENhbnZhc0Jhc2U6On5DYW52YXNCYXNl
KCkKIHsKICAgICBBU1NFUlQobV9kaWROb3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQpOwog
ICAgIEFTU0VSVChtX29ic2VydmVycy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9pbWFnZUJ1
ZmZlcik7CisKKyAgICBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0
KiBDYW52YXNCYXNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogY29udGV4
dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+aXMy
ZCgpICYmICFjb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCisgICAgaWYgKCFtX2NvbnRleHQtPmlz
MmQoKSAmJiAhbV9jb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIGJ1ZmZlcigpID8gJm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSA6
IG51bGxwdHI7CkBAIC04Miw3ICs4NCw3IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzQmFzZTo6
ZXhpc3RpbmdEcmEKIEltYWdlQnVmZmVyKiBDYW52YXNCYXNlOjpidWZmZXIoKSBjb25zdAogewog
ICAgIGlmICghaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpCi0gICAgICAgIGNyZWF0ZUltYWdlQnVm
ZmVyKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q2FudmFzQmFzZSo+KHRoaXMpLT5jcmVhdGVJbWFn
ZUJ1ZmZlcigpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogCkBAIC05NCw4
ICs5Niw3IEBAIEFmZmluZVRyYW5zZm9ybSBDYW52YXNCYXNlOjpiYXNlVHJhbnNmb3IKIAogdm9p
ZCBDYW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpCiB7Ci0gICAgaWYg
KGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogfQogCiBzaXplX3QgQ2FudmFzQmFzZTo6bWVtb3J5Q29z
dCgpIGNvbnN0CkBAIC0xMDMsNyArMTA0LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6Om1lbW9yeUNv
c3QoKSBjb25zdAogICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50
bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAogICAgIC8vIGFi
b3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LiBXZSBuZWVkIHRvIGhvbGQgYSBs
b2NrIHRvIHByZXZlbnQgbV9pbWFnZUJ1ZmZlcgogICAgIC8vIGZyb20gYmVpbmcgY2hhbmdlZCB3
aGlsZSB3ZSBhY2Nlc3MgaXQuCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVm
ZmVyQXNzaWdubWVudExvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNz
aWdubWVudExvY2sgfTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5tZW1vcnlDb3N0KCk7CkBAIC0xMTQsNyArMTE1
LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5Q29zdCgpIAogICAgIC8vIGV4
dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0Mg
dGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAgLy8gYWJvdXQgd2hhdCBkYXRh
IHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9sZCBhIGxvY2sgdG8gcHJldmVu
dCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFuZ2VkIHdoaWxlIHdlIGFjY2Vz
cyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50
TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9jayB9
OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpAQCAtMTgwLDE1ICsxODEsMTkg
QEAgSGFzaFNldDxFbGVtZW50Kj4gQ2FudmFzQmFzZTo6Y3NzQ2FudmFzQwogCiBib29sIENhbnZh
c0Jhc2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdAogewotICAg
IGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQg
JiYgY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpOworICAgIHJl
dHVybiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKTsKK30K
Kwordm9pZCBDYW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9jb250ZXh0ID0gV1RGTW92ZShj
b250ZXh0KTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVm
ZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVm
ZmVyKQogewogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gcmV0dXJuQnVmZmVyOwogICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sp
OworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2NrIH07
CiAgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm5C
dWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAg
ICAgfQpAQCAtMjAwLDkgKzIwNSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6
c2V0SW1hZ2UKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKICAgICBzX2Fj
dGl2ZVBpeGVsTWVtb3J5ICs9IG1faW1hZ2VCdWZmZXJDb3N0IC0gcHJldmlvdXNNZW1vcnlDb3N0
OwogCi0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29u
dGV4dCAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVm
ZmVyQ29zdCkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52
YXNNZW1vcnkoKmNvbnRleHQpOworICAgIGlmICghbV9jb250ZXh0LT5pc05vbmUoKSAmJiBtX2lt
YWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVmZmVyQ29zdCkKKyAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkobV9j
b250ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CiAgICAgICAgIG1faW1h
Z2VCdWZmZXItPmNvbnRleHQoKS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKQEAg
LTIxNyw2ICsyMjEsMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFn
ZQogICAgIHJldHVybiByZXR1cm5CdWZmZXI7CiB9CiAKK3ZvaWQgQ2FudmFzQmFzZTo6ZGVzdHJv
eUltYWdlQnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG9sZEJ1ZmZlcjsKKwor
ICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9j
ayB9OworICAgICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVsbHB0cjsKKyAgICAgICAgb2xk
QnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBudWxscHRyKTsKKyAgICB9Cisg
ICAgCisgICAgc19hY3RpdmVQaXhlbE1lbW9yeSAtPSBtX2ltYWdlQnVmZmVyQ29zdDsKKyAgICBt
X2ltYWdlQnVmZmVyQ29zdCA9IDA7Cit9CisKIHNpemVfdCBDYW52YXNCYXNlOjphY3RpdmVQaXhl
bE1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIHNfYWN0aXZlUGl4ZWxNZW1vcnkubG9hZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC03MCw3ICs3MSw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBJbWFnZUJ1ZmZlciog
YnVmZmVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNm
b3JtKCkgY29uc3Q7CiAKICAgICB2b2lkIG1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7
CkBAIC04NSw3ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gY2Fu
dmFzQmFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgIH0KIAotICAgIHZpcnR1YWwgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICBjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgcmVuZGVy
aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRP
YnNlcnZlcihDYW52YXNPYnNlcnZlciYpOwogICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoQ2FudmFz
T2JzZXJ2ZXImKTsKQEAgLTEwMCw4ICsxMDEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikgPSAwOwogCi0gICAgdmlydHVh
bCBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
Q29waWVkSW1hZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbWFnZSogY29waWVkSW1hZ2Uo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSA9IDA7CiAKICAgICBi
b29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdDsKIApAQCAtMTEy
LDIwICsxMTMsMjUgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJikgY29uc3Q7CisgICAg
dm9pZCBzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0
PiYmKTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogICAgIHZpcnR1
YWwgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHN0YXRpYyBzaXplX3QgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKIAogICAgIHZvaWQgcmVzZXRH
cmFwaGljc0NvbnRleHRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bWFnZUJ1ZmZlcigpIHsgfQogCi0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKICAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2Nr
OwotICAgIG11dGFibGUgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwotICAgIG11
dGFibGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsgMCB9OwotICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI+IG1fY29udGV4dFN0YXRlU2F2ZXI7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHNpemVfdCBtX2lt
YWdlQnVmZmVyQ29zdCB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcj4gbV9jb250ZXh0U3RhdGVTYXZlcjsKKworICAgIFVuaXF1ZVJlZjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAKICAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0
cnVlIH07CiAjaWYgQVNTRVJUX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNDUgKzQ4LDQy
IEBAIEN1c3RvbVBhaW50Q2FudmFzOjpDdXN0b21QYWludENhbnZhcyhTY3IKIEN1c3RvbVBhaW50
Q2FudmFzOjp+Q3VzdG9tUGFpbnRDYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0Rlc3Ryb3llZCgpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMg
Z29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVs
bHB0cik7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+
IEN1c3RvbVBhaW50Q2FudmFzOjpnZXRDb250ZXh0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQot
ICAgICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25j
YXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgaWYgKCFy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+
KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogCi0gICAgbV9jb250ZXh0ID0gUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7Cisg
ICAgYXV0byBjb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7
CisgICAgY29udGV4dC0+c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVlKTsKKyAgICBzZXRS
ZW5kZXJpbmdDb250ZXh0KFdURk1vdmUoY29udGV4dCkpOwogCi0gICAgcmV0dXJuIHsgUmVmUHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmlu
Z0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9OwogfQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNw
bGF5TGlzdChHcmFwaGljc0NvbnRleHQqIGN0eCkgY29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52
YXM6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgY3R4KQogewogICAgIEFTU0VS
VCghbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFo
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIGFuIGludGVy
bWVkaWF0ZSBidWZmZXIgaXMgbm90IG5lZWRlZCBpZiB0aGVyZSBhcmUgbm8gY29tcG9zaXRlIG9w
ZXJhdGlvbnMuCi0gICAgYXV0byBjbGlwQm91bmRzID0gY3R4LT5jbGlwQm91bmRzKCk7CisgICAg
YXV0byBjbGlwQm91bmRzID0gY3R4LmNsaXBCb3VuZHMoKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91bmRzLnNpemUoKSwgKmN0
eCk7CisgICAgYXV0byBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNsaXBCb3VuZHMuc2l6ZSgpLCBjdHgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSAmaW1hZ2UtPmNvbnRleHQo
KTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLWNsaXBCb3Vu
ZHMubG9jYXRpb24oKSk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGlj
c0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgY3R4LT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBj
bGlwQm91bmRzKTsKKyAgICBjdHguZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5kcyk7
CiB9CiAKLUltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAorSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rl
c3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgp
KQpAQCAtOTcsMTUgKzk0LDE0IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1h
Z2UoKSAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhp
Y3NDb250ZXh0ID0gJm1fY29waWVkQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1fY29udGV4
dCkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwor
ICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwog
ICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCiAgICAgbV9jb3Bp
ZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQo
KTsKIH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0
Cit2b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2Nv
cGllZEltYWdlID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBh
aW50Q2FudmFzLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDE2IEBAIHB1Ymxp
YzoKIAogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGdl
dENvbnRleHQoKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRl
eHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBHcmFwaGlj
c0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBleGlzdGluZ0RyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRp
ZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpIGZpbmFsIHsgfQogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBmaW5hbCB7IEFTU0VSVChtX2Rlc3RpbmF0
aW9uR3JhcGhpY3NDb250ZXh0ICYmIG1fY29waWVkQnVmZmVyKTsgcmV0dXJuIG1fY29waWVkQnVm
ZmVyLT5iYXNlVHJhbnNmb3JtKCk7IH0KLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBm
aW5hbDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFn
ZSogY29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5h
bDsKIAotICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIHVz
aW5nIFJlZkNvdW50ZWQ6OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKQEAgLTc3
LDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmQ2FudmFzQmFzZSgpIGZpbmFsIHsg
ZGVyZWYoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ29udGV4dERlc3RydWN0aW9u
T2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBtdXRhYmxlIEdyYXBo
aWNzQ29udGV4dCogbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAgICAg
bXV0YWJsZSBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fY29waWVkQnVmZmVyOwogICAgIG11dGFibGUg
UmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2
LDYgQEAgSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCgpCiAgICAgLy8gYXZv
aWRlZCBpbiBkZXN0cnVjdG9ycywgYnV0IHdvcmtzIGFzIGxvbmcgYXMgaXQncyBkb25lIGJlZm9y
ZSBIVE1MQ2FudmFzRWxlbWVudCBkZXN0cnVjdHMgY29tcGxldGVseS4KICAgICBub3RpZnlPYnNl
cnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKICAgICBkb2N1bWVudCgpLmNsZWFyQ2FudmFzUHJlcGFy
YXRpb24oKnRoaXMpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMg
Z29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVs
bHB0cik7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDUw
ICsyMzYsNTAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0TWF4UGl4ZWxNZW1vcgogCiBF
eGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gSFRNTENhbnZhc0VsZW1lbnQ6
OmdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIGNvbnN0IFN0cmluZyYgY29u
dGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpCiB7
Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1BsYWNlaG9s
ZGVyKCkpCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAg
aWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1BsYWNlaG9sZGVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgICAgICBpZiAobV9jb250
ZXh0LT5pczJkKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsK
ICAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAg
ICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0
IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXNCaXRt
YXBSZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBS
ZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzQml0bWFwUmVuZGVyZXJUeXBlKGNvbnRl
eHRJZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICAgICAg
ICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dlYkdM
KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKICAgICAg
ICAgICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAgICAgICAgICAgICBhdXRvIHZl
cnNpb24gPSB0b1dlYkdMVmVyc2lvbihjb250ZXh0SWQpOwotICAgICAgICAgICAgaWYgKHZlcnNp
b24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51
bGxvcHQgfTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wx
ICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9
OworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIXJl
bmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsg
V1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lv
bjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxF
KFdFQkdMMikKLSAgICAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pigq
bV9jb250ZXh0KSk7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgQVNTRVJUKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpOworICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNlbmRpZgog
ICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHUFUpCi0gICAgICAgIGlmIChtX2Nv
bnRleHQtPmlzV2ViR1BVKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dl
YkdQVSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR1BVVHlwZShjb250ZXh0SWQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVs
bG9wdCB9OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
UmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KCpt
X2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9
IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZk
b3duY2FzdDxHUFVDYW52YXNDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAg
ICAgICB9CiAjZW5kaWYKIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07CisgICAg
ICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICB9CiAKICAgICBpZiAoaXMyZFR5
cGUoY29udGV4dElkKSkgewpAQCAtMjkyLDggKzI4OSw4IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFs
PFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250
ZXh0MmQoY29udGV4dElkLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6
bnVsbG9wdCB9OwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBS
ZWZQdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7IGNvbnRleHQgfSB9OworICAgICAgICAg
ICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0
cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICAg
ICBpZiAoaXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkgewpAQCAtMzAzLDggKzMwMCw4
IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBh
dXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29udGV4dElkLCBXVEZN
b3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6
Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wp
CkBAIC0zMTUsMTMgKzMxMiwxMyBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0Pj4gCiAKICAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdMKHRvV2Vi
R0xWZXJzaW9uKGNvbnRleHRJZCksIFdURk1vdmUoYXR0cmlidXRlcykpOwogICAgICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4g
eyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0g
fTsKIAogICAgICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpCi0g
ICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpj
b250ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0g
fSB9OwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0PigqY29udGV4dCkpOwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgeyBS
ZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5n
Q29udGV4dD4oKmNvbnRleHQpIH0gfSB9OwogI2VuZGlmCiAgICAgfQogI2VuZGlmCkBAIC0zMzAs
MTIgKzMyNywxMiBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiAg
ICAgaWYgKGlzV2ViR1BVVHlwZShjb250ZXh0SWQpKSB7CiAgICAgICAgIGF1dG8gY29udGV4dCA9
IGNyZWF0ZUNvbnRleHRXZWJHUFUoY29udGV4dElkKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxs
b3B0IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0
cjxHUFVDYW52YXNDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsg
eyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXND
b250ZXh0PiB7IGNvbnRleHQgfSB9IH07CiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4gT3B0
aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTM2Nyw3ICszNjQs
NyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3Qg
U3RyaW5nJiB0eXBlLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdz
KQogewogICAgIEFTU0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUp
LCB0eXBlKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0Nv
bnRleHQoKS5pc05vbmUoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUg
cGl4ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBjYW4gc3VwcG9ydC4KICAgICBzaXplX3QgcmVx
dWVzdGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgoKSAqIGhlaWdodCgpOwpAQCAtMzgwLDI2ICsz
NzcsMjcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncyksIGRvY3VtZW50KCku
aW5RdWlya3NNb2RlKCkpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGluZ3MpLCBkb2N1bWVudCgpLmlu
UXVpcmtzTW9kZSgpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9
CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQyZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdz
JiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMy
ZFR5cGUodHlwZSksIHR5cGUpOwogCi0gICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5p
czJkKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUNvbnRleHQyZCh0eXBlLCBXVEZNb3ZlKHNldHRpbmdzKSk7CisKKyAgICBpZiAo
IXJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0MmQodHlwZSwg
V1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjaWYgRU5B
QkxFKFdFQkdMKQpAQCAtNDQ4LDcgKzQ0Niw3IEBAIEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJz
aW9uIEhUTUxDYW52YXMKIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHTChXZWJHTFZlcnNpb24gdHlwZSwgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NF
UlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIGlmICghc2hvdWxkRW5hYmxl
V2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC00NjUsMjAgKzQ2MywyNCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFz
RWxlCiAKICAgICAvLyBUT0RPKFdFQlhSKTogZW5zdXJlIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQg
aW4gYSBjb21wYXRpYmxlIGdyYXBoaWNzCiAgICAgLy8gYWRhcHRlciB3aGVuIHRoZXJlIGlzIGFu
IGFjdGl2ZSBpbW1lcnNpdmUgZGV2aWNlLgotICAgIG1fY29udGV4dCA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOwotICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgLy8gVGhpcyBuZXcgY29udGV4dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBi
eSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCi0gICAgICAgIC8vIGZvciBpdCB0byBiZSBjb3JyZWN0
bHkgcHJlcGFyZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNvbXBvc2l0ZWQuCi0gICAgICAg
IGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0
KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGNvbnRleHQpKSk7CisK
KyAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9ic2VydmVkIGJ5IHRoZSBEb2N1
bWVudCwgaW4gb3JkZXIKKyAgICAvLyBmb3IgaXQgdG8gYmUgY29ycmVjdGx5IHByZXBhcmVkRm9y
UmVuZGVyaW5nIGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgorICAgIGFkZE9ic2VydmVyKGRvY3Vt
ZW50KCkpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29t
cG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCisgICAgaW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBz
dXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0
aGUgQ2FudmFzLgotICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7
CiAjaWYgRU5BQkxFKFdFQlhSKQotICAgICAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8
fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpLT5p
c1hSQ29tcGF0aWJsZSgpKTsKKyAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpLmlzWFJD
b21wYXRpYmxlKCkpOwogI2VuZGlmCi0gICAgfQogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQog
CiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4
dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMp
CkBAIC00ODYsMjEgKzQ4OCwyMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2Fu
dmFzRWxlCiAgICAgaWYgKCFzaG91bGRFbmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmlzV2ViR0woKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBj
cmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykpOwogCi0gICAgICAgIC8vIFRo
ZSBwaHJhc2luZyBvZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBpbGUtdGltZSBndWFyZHMgZm9y
IFdlYkdMMiBzdXBwb3J0LgotICAgICAgICBpZiAodHlwZSA9PSBXZWJHTFZlcnNpb246OldlYkdM
MSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBpZiAodHlwZSAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiBt
X2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
CisgICAgLy8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBhdm9pZHMgY29tcGlsZS10aW1l
IGd1YXJkcyBmb3IgV2ViR0wyIHN1cHBvcnQuCisgICAgaWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9u
OjpXZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRl
Q29udGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMpKTsKLSAgICByZXR1cm4gJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRleHQpOworICAgIGlmICh0eXBlICE9
IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKQEAgLTUxNSwxOCArNTE2LDE3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6
OmlzV2ViR1BVVHlwZShjb24KIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBBU1NFUlRfVU5V
U0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5cGUodHlwZSkpOwotICAgIEFT
U0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgp
KTsKIAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygpLndlYkdQVUVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvbnRleHQgPSBHUFVDYW52YXNDb250ZXh0
OjpjcmVhdGUoKnRoaXMpOwotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0
ZWQgZm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKLSAgICB9CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChHUFVDYW52YXNDb250ZXh0
OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgorICAg
IGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
JmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIEdQ
VUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR1BVKGNvbnN0
IFN0cmluZyYgdHlwZSkKQEAgLTUzNiwxMiArNTM2LDEzIEBAIEdQVUNhbnZhc0NvbnRleHQqIEhU
TUxDYW52YXNFbGVtZW50OjpnZXQKICAgICBpZiAoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS53ZWJH
UFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fY29udGV4
dCAmJiAhbV9jb250ZXh0LT5pc1dlYkdQVSgpKQorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCku
aXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR1BVKHR5cGUpOworCisg
ICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRl
eHRXZWJHUFUodHlwZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUNhbnZhc0NvbnRleHQq
PihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4
dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkBA
IC01NTQsMjQgKzU1NSwyOSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRl
cmVyCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQo
dHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFwUmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAg
ICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncykpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQo
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGlu
Z3MpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8v
IE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdl
dCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29t
cG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2Fz
dDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAK
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBI
VE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUodHlwZSkpOwotICAgIGlmICgh
bV9jb250ZXh0KQorICAgIAorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIodHlwZSwgV1RGTW92ZShz
ZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIAorICAgIGlmICghcmVuZGVyaW5nQ29udGV4
dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29u
dGV4dCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlkRHJhdyhjb25zdCBPcHRp
b25hbDxGbG9hdFJlY3Q+JiByZWN0KQpAQCAtNjE1LDE0ICs2MjEsMTUgQEAgdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6cmVzZXQoKQogICAgIGludCBoID0gbGltaXRUb09ubHlIVE1MTm9uTmVnYXRp
dmUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihoZWlnaHRBdHRyKSwgZGVmYXVsdEhl
aWdodCk7CiAKICAgICByZXNldEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0gICAgaWYgKGlzPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXNldCgpOworICAgIGlm
IChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KS5yZXNldCgpOwogCiAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIEludFNpemUg
bmV3U2l6ZSh3LCBoKTsKKwogICAgIC8vIElmIHRoZSBzaXplIG9mIGFuIGV4aXN0aW5nIGJ1ZmZl
ciBtYXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBpbnN0ZWFkIG9mIHJlYWxsb2NhdGluZy4K
ICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGRvbmUgZm9yIDJEIGNhbnZhc2VzIGZv
ciBub3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyICYmIG9sZFNpemUgPT0gbmV3
U2l6ZSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkgJiYgYnVmZmVyKCkgJiYgbV9j
b250ZXh0LT5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNvbG9yU3BhY2UoKSAmJiBtX2NvbnRl
eHQtPnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9ybWF0KCkpIHsKKyAgICBpZiAo
bV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBuZXdTaXplICYmIHJlbmRlcmlu
Z0NvbnRleHQoKS5pczJkKCkgJiYgYnVmZmVyKCkgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmNvbG9y
U3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIHJlbmRlcmluZ0NvbnRleHQoKS5w
aXhlbEZvcm1hdCgpID09IGJ1ZmZlcigpLT5waXhlbEZvcm1hdCgpKSB7CiAgICAgICAgIGlmICgh
bV9kaWRDbGVhckltYWdlQnVmZmVyKQogICAgICAgICAgICAgY2xlYXJJbWFnZUJ1ZmZlcigpOwog
ICAgICAgICByZXR1cm47CkBAIC02MzEsNyArNjM4LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cmVzZXQoKQogICAgIHNldFN1cmZhY2VTaXplKG5ld1NpemUpOwogCiAgICAgaWYgKGlzR1BV
QmFzZWQoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRD
YW52YXNSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KS5yZXNoYXBlKHdpZHRoKCksIGhlaWdo
dCgpKTsKKyAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0Pihy
ZW5kZXJpbmdDb250ZXh0KCkpLnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogCiAgICAgYXV0
byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGlzPFJlbmRlckhUTUxDYW52
YXM+KHJlbmRlcmVyKSkgewpAQCAtNjUwLDEzICs2NTcsMTIgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKICNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2NvbnRleHQtPmlzMmQoKSB8fCBt
X2NvbnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgp
LmlzMmQoKSB8fCByZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0
ZWQoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlbmRlckJveCgpICYmIHJlbmRlckJveCgpLT5o
YXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCkBAIC02NjgsNDIgKzY3NCwzNSBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcikK
IHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyQWNjdW11bGF0
ZWREaXJ0eVJlY3QoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkuY2xlYXJBY2N1bXVsYXRlZERp
cnR5UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAg
ICAgICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9jb250ZXh0KSB7
Ci0gICAgICAgICAgICBzaG91bGRQYWludCA9IHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSB8fCBk
b2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1NuYXBzaG90dGluZzsKLSAgICAgICAgICAgIGlm
IChzaG91bGRQYWludCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRp
c3BsYXlXaXRoUGFpbnQoKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAg
ICBib29sIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIHx8IGRvY3VtZW50
KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwogICAgICAgICBpZiAoc2hvdWxkUGFp
bnQpIHsKKyAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wcmVwYXJlRm9yRGlzcGxheVdp
dGhQYWludCgpOworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBi
dWZmZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW1hZ2VCdWZmZXIgPSBidWZmZXIo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBzbmFwcGVkSW50UmVjdChyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aGFzQWN0aXZlSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKSkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqbV9jb250ZXh0KTsKKyAgICBpZiAo
VU5MSUtFTFkocmVuZGVyaW5nQ29udGV4dCgpLmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXIoKSkpCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVj
b3JkaW5nQ2FudmFzRnJhbWUocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogYm9vbCBIVE1MQ2Fu
dmFzRWxlbWVudDo6aXNHUFVCYXNlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzR1BVQmFzZWQoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgp
LmlzR1BVQmFzZWQoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBDYW52YXNCYXNlOjpzZXRTaXplKHNpemUp
OwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7Ci0gICAgc2V0SW1hZ2VCdWZm
ZXIobnVsbHB0cik7CisgICAgZGVzdHJveUltYWdlQnVmZmVyKCk7CiAgICAgY2xlYXJDb3BpZWRJ
bWFnZSgpOwogfQogCkBAIC03OTUsMTEgKzc5NCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1M
Q2FudmFzRWxlbWVudDo6dG9CCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiBFeGNlcHRp
b25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5zZmVyQ29u
dHJvbFRvT2Zmc2NyZWVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
aWYgKG1fY29udGV4dCkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIG1fY29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7Ci0g
ICAgaWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIHNldFJlbmRlcmluZ0NvbnRl
eHQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIGlm
IChyZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICBpbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGUoY29udGV4dCwgKnRoaXMpOwpAQCAtODA5LDEwICs4MDksMTAgQEAgRXhjZXB0aW9u
T3I8UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYQogUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiB7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlm
IChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAg
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsK
ICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGRvY3VtZW50KCkpOwotICAgICAgICByZXR1cm4gZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkucGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkucGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTkyMSw3ICs5MjEsNyBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlM
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSk7CiAKQEAg
LTk1OCwyNiArOTU4LDIwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKICAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdp
bmcgb24gY2FudmFzLgogICAgIGF1dG8gdXNlRGlzcGxheUxpc3QgPSBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5n
RW5hYmxlZCgpKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91bGRVc2VEaXNwbGF5
TGlzdDo6Tm87CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBwaXhlbEZvcm1hdF0gPSBbJl0gewot
ICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1f
Y29udGV4dC0+Y29sb3JTcGFjZSgpLCBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgfTsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpciB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxG
b3JtYXQ6OkJHUkE4IH07Ci0gICAgfSgpOwotCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJp
bmdQdXJwb3NlOjpDYW52YXMsIDEsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBob3N0V2luZG93
KSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRl
cmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEsIHJl
bmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCksIHJlbmRlcmluZ0NvbnRleHQoKS5waXhlbEZv
cm1hdCgpLCBob3N0V2luZG93KSk7CiAKICAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCiAgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzMmQoKSkgeworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgp
KSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBh
Y2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7Cisg
ICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICB9CiAjZW5k
aWYKIAotICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYgYnVmZmVyKCktPnByZWZlcnNQ
cmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKKyAgICBpZiAoIXJlbmRlcmlu
Z0NvbnRleHQoKS5pc05vbmUoKSAmJiBidWZmZXIoKSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBh
cmF0aW9uRm9yRGlzcGxheSgpKQorICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKIH0K
IAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoUmVm
UHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKQEAgLTEwMDMsMzEgKzk5NywzMCBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAgICAgZGlkRHJhdyhGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpj
b3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdl
KCkKIHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVyKCkpIHsKLSAgICAgICAgaWYg
KG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1hZ2UgPSBidWZmZXIoKS0+Y29weUlt
YWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xl
YXJJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsK
ICAgICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7Ci0gICAgQVNTRVJUKG1fY29udGV4
dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpOwogCiAgICAgbV9kaWRD
bGVhckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAvLyBObyBuZWVkIHRvIHVuZG8gdHJh
bnNmb3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoZSBj
b250ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIH0KIH0KIAotdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVs
bHB0cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBmYWxzZTsKQEAgLTEwNDEsOSArMTAz
NCw5IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50OjphY3RpdmVET00KIGJvb2wgSFRN
TENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewogI2lm
IEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9j
b250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihy
ZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0
IG1heSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5nZSAvIGNvbnRleHRyZXN0b3JlZCBl
dmVudHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4gbV9oYXNSZWxldmFudFdlYkdMRXZl
bnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29u
dGV4dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIG1faGFz
UmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3Qo
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcwLDcgQEAgTm9kZTo6SW5zZXJ0ZWRJ
bnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCk7
CiAgICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhhdmUgYmVlbiBpc3N1ZWQgdG8gdGhl
IGNhbnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIHRlbGwgdGhlIGRv
Y3VtZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAgICAgIGlmIChtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKKyAgICAgICAgaWYg
KHJlbmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKICAg
ICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRoaXMsIEZsb2F0UmVjdCB7IH0pOwog
ICAgIH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpy
ZW1vdmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRp
b25Gb3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+bmVl
ZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgp
Lm5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NFUlQobmVlZHNQcmVwYXJhdGlvbkZv
ckRpc3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnBy
ZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29udGV4dCgpLnByZXBhcmVGb3JEaXNw
bGF5KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQ29udHJvbGxlZEJ5T2Zmc2Ny
ZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNQbGFj
ZWhvbGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0KCkuaXNQbGFjZWhvbGRlcigp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShy
ZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJyaWRlOwogCi0gICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRl
eHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHRJZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKLQog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQoY29uc3QgU3RyaW5nJik7CiAK
ICAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJpbmcmKTsKQEAgLTExNiw4ICsxMTQs
OCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFtPj4gY2FwdHVyZVN0
cmVhbShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBmcmFtZVJlcXVlc3RSYXRlKTsKICNl
bmRpZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBj
bGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkg
ZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7CiAgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2MywxMCArMTYxLDkgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcmVzZXQoKTsKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsKLQogICAgIGJvb2wgaGFzQ3Jl
YXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VC
dWZmZXI7IH0KKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgdm9pZCBj
bGVhckltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHNldFN1cmZhY2VTaXplKGNvbnN0IEludFNp
emUmKTsKIApAQCAtMTgzLDE2ICsxODAsMTUgQEAgcHJpdmF0ZToKICAgICBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92
YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBmaW5hbDsKIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0g
ICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlz
IHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZm
ZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KKyAgICBSZWZQdHI8SW1hZ2U+
IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1z
IHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENT
U0NhbnZhc1ZhbHVlKS4KIAogICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OwogCiAg
ICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKICAgICAvLyBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gV2UgZGlkbid0IG5l
Y2Vzc2FyaWx5IGdldCBpdC4KLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIgeyBmYWxzZSB9OwotICAgIG11dGFibGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9kaWRDbGVhckltYWdlQnVmZmVyIHsgZmFsc2UgfTsKICNpZiBFTkFCTEUoV0VCR0wp
CiAgICAgYm9vbCBtX2hhc1JlbGV2YW50V2ViR0xFdmVudExpc3RlbmVyIHsgZmFsc2UgfTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAkocmV2aXNp
b24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIFJlZjxPZmZzY3JlZW5DYW52YXM+IE9mZnNj
cmVlbkNhbnZhczo6Y3IKICAgICBjYWxsT25NYWluVGhyZWFkKFtkZXRhY2hlZENhbnZhcyA9IFdU
Rk1vdmUoZGV0YWNoZWRDYW52YXMpLCBwbGFjZWhvbGRlckRhdGEgPSBtYWtlUmVmKCpjbG9uZS0+
bV9wbGFjZWhvbGRlckRhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgcGxhY2Vob2xkZXJEYXRh
LT5jYW52YXMgPSBkZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CiAgICAg
ICAgIGlmIChwbGFjZWhvbGRlckRhdGEtPmNhbnZhcykgewotICAgICAgICAgICAgYXV0byYgcGxh
Y2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Pigq
cGxhY2Vob2xkZXJEYXRhLT5jYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgICAg
ICBhdXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQ+KHBsYWNlaG9sZGVyRGF0YS0+Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwog
ICAgICAgICAgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0gcGxhY2Vob2xkZXJDb250ZXh0Lmlt
YWdlQnVmZmVyUGlwZSgpOwogICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyUGlwZSkKICAgICAg
ICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZl
clBpcGUtPnNvdXJjZSgpOwpAQCAtMTE1LDkgKzExNSw2IEBAIE9mZnNjcmVlbkNhbnZhczo6T2Zm
c2NyZWVuQ2FudmFzKFNjcmlwdEUKIE9mZnNjcmVlbkNhbnZhczo6fk9mZnNjcmVlbkNhbnZhcygp
CiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2NvbnRl
eHQgPSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1
ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0KIAogdW5zaWduZWQgT2Zmc2Ny
ZWVuQ2FudmFzOjp3aWR0aCgpIGNvbnN0CkBAIC0xNTQsNiArMTUxLDIzIEBAIHZvaWQgT2Zmc2Ny
ZWVuQ2FudmFzOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXNldCgpOwogfQogCitib29sIE9m
ZnNjcmVlbkNhbnZhczo6aXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUp
Cit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpfMmQ7
Cit9CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5
cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250ZXh0VHlwZSksIGNvbnRleHRU
eXBlKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKKworICAgIC8v
IEZJWE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBlbm91Z2ggcGl4ZWwgbWVtb3J5
LiBTZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZC4KKworICAgIHNldFJlbmRl
cmluZ0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRo
aXMpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYgRU5BQkxFKFdFQkdMKQogc3Rh
dGljIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yV2ViR0woKQogewpAQCAt
MTc1LDI4ICsxODksNDIgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlV2ViR0woYm9vbCB3ZWJH
TAogICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKIH0KIAotdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSBj
b250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQorYm9vbCBPZmZzY3Jl
ZW5DYW52YXM6OmlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlKQor
eworICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wg
fHwgY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsMjsKK30KKworV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVDb250ZXh0V2Vi
R0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXMmJiBhdHRycykKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKGlzV2Vi
R0xUeXBlKGNvbnRleHRUeXBlKSk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSk7CiAKICAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29y
a2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xv
YmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHdvcmtlckdsb2JhbFNjb3Bl
LnNldHRpbmdzVmFsdWVzKCkud2ViR0xFbmFibGVkLCB3b3JrZXJHbG9iYWxTY29wZS5zZXR0aW5n
c1ZhbHVlcygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGF1dG8mIHNldHRpbmdz
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zZXR0aW5ncygp
OwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHNldHRpbmdzLndlYkdMRW5hYmxlZCgp
LCBzZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb24gd2ViR0xWZXJzaW9u
ID0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIHdlYkdMVmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4dEdMV2Vi
R0xWZXJzaW9uOjpXZWJHTDE7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICB3ZWJHTFZlcnNpb24g
PSAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsKSA/IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDEgOiBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVy
c2lvbjo6V2ViR0wyOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dFR5cGUpOwogI2Vu
ZGlmCi0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0
aGlzLCBhdHRycywgd2ViR0xWZXJzaW9uKTsKKworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHdlYkdMVmVyc2lvbik7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRl
cmluZ0NvbnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoY29u
dGV4dCkpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKQEAg
LTIwNiw0NCArMjM0LDUzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmlu
Z0MKICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4
dFR5cGU6Ol8yZCkgewotICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAo
IWlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkpCisgICAg
aWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmlu
Z0NvbnRleHQoKS5pczJkKCkpIHsKKyAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dFR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLSAgICAg
ICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAg
ICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCp0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4g
eyB7IFdURjo6bnVsbG9wdCB9IH07Ci0KLSAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OwotICAgIH0KICNpZiBFTkFCTEUo
V0VCR0wpCi0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKHJl
bmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNXZWJHTFR5
cGUoY29udGV4dFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0
IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIGlmIChp
czxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIGlmIChp
czxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25j
YXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07Cisj
ZW5kaWYKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9Owog
ICAgICAgICB9CiAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICB9CisKKyAgICBpZiAoaXMyZFR5cGUoY29udGV4
dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy4KKyAgICAgICAgYXV0byBjb250ZXh0ID0gY3Jl
YXRlT2Zmc2NyZWVuQ29udGV4dDJkKGNvbnRleHRUeXBlKTsKKyAgICAgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1
cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4
dCB9IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYgKGlzV2ViR0xUeXBl
KGNvbnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udmVydDxJRExEaWN0
aW9uYXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwgIWFyZ3VtZW50cy5pc0VtcHR5
KCkgPyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVy
cm9yIH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0VHlwZSwgV1RGTW92
ZShhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBhdXRvIGNv
bnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmlidXRl
cykpOworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6
bnVsbG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICBpZiAoaXM8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCpj
b250ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29u
dGV4dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07
CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg5LDEwIEBAIEV4Y2VwdGlvbk9yPE9wdGlv
bmFsPE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFw
Pj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogewotICAgIGlmICht
X2RldGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0YWNoZWQgfHwgcmVuZGVyaW5n
Q29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0
YXRlRXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51
bGxwdHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNSwxNSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1h
Z2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZlcigpLCB0byBhdm9pZCByZXNl
dHRpbmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFrZSBhIGNvcHkgYW5kCiAgICAg
ICAgIC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRo
ZSBvcmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9IGJ1ZmZlcigpLT5j
b3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJ1ZmZlcigpLT5sb2dpY2Fs
U2l6ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdpbmdDb250ZXh0KCkpOwotICAg
ICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhckNhbnZhcygpOwogICAgICAg
ICBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJDb3B5KSwgb3JpZ2luQ2xlYW4o
KSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxpemF0aW9uU3RhdGUo
KSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1dG8gd2ViR0xDb250ZXh0ID0g
JmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCk7CisgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgeworICAgICAgICBh
dXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1cHBvc2VkIHRvIGNy
ZWF0ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwogICAgICAgICAvLyBzdG9yZSBm
cm9tIHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBmb3Igbm93IHdlJ2xsIGp1c3QK
QEAgLTM1OCwyMCArMzk1LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpkaWREcmF3KGNvbnN0
IE9wdGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwogfQogCi1JbWFn
ZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogT2Zmc2NyZWVu
Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVy
KCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7
CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCi12b2lkIE9mZnNj
cmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZh
czo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9IG51bGxwdHI7CiB9
CkBAIC0zODcsNyArNDIzLDcgQEAgU2VjdXJpdHlPcmlnaW4qIE9mZnNjcmVlbkNhbnZhczo6c2Vj
dXJpdAogCiBib29sIE9mZnNjcmVlbkNhbnZhczo6Y2FuRGV0YWNoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gIW1fZGV0YWNoZWQgJiYgIW1fY29udGV4dDsKKyAgICByZXR1cm4gIW1fZGV0YWNoZWQg
JiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RGV0
YWNoZWRPZmZzY3JlZW5DYW52YXM+IE9mZnNjcmVlbkNhbnZhczo6ZGV0YWNoKCkKQEAgLTQwNSw3
ICs0NDEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+CiAKIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpzZXRQbGFjZWhvbGRlckNhbnZhcyhIVE1MQ2FudmFzRWxlbWVu
dCYgY2FudmFzKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVy
aW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IG1fcGxhY2Vob2xkZXJEYXRhLT5jYW52YXMgPSBtYWtlV2Vha1B0cihjYW52YXMpOwogICAgIGF1
dG8mIHBsYWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dD4oKmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOwpAQCAtNDMxLDggKzQ2Nyw4IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IFRyYW5zZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZwotICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNX
ZWJHTCgpIHx8IG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0
LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250
ZXh0KCkuaXNXZWJHTCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisg
ICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
OwogCiAgICAgaWYgKG1fcGxhY2Vob2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAg
ICAgIGF1dG8gYnVmZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ2OSw3ICs1
MDUsNyBAQCBDU1NWYWx1ZVBvb2wmIE9mZnNjcmVlbkNhbnZhczo6Y3NzVmFsdWVQCiAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRl
SW1hZ2VCdWZmZXIoKQogewogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKIApA
QCAtNDc5LDcgKzUxNSw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZl
cigKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJpdG1hcDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKmNh
bnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCkpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVu
Q2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKQogewogICAgIEFTU0VSVChtX2RldGFjaGVkKTsKIApA
QCAtNDkzLDggKzUyOSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0
YWsKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCiB7CiAgICAgcmVzZXRHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpOwotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAg
ICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkucmVzZXQoKTsKIAogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7
CiAgICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDcgQEAgcHVi
bGljOgogICAgICAgICBkb3VibGUgcXVhbGl0eSA9IDEuMDsKICAgICB9OwogCi0gICAgZW51bSBj
bGFzcyBSZW5kZXJpbmdDb250ZXh0VHlwZSB7Ci0gICAgICAgIF8yZCwKLSAgICAgICAgV2ViZ2ws
Ci0gICAgICAgIFdlYmdsMgotICAgIH07CisgICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250ZXh0
VHlwZSB7IF8yZCwgV2ViZ2wsIFdlYmdsMiB9OwogCiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5D
YW52YXM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCk7CiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jiwgc3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVu
Q2FudmFzPiYmKTsKQEAgLTEyMiwxNiArMTE4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdp
ZHRoKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3Jl
ZW5SZW5kZXJpbmdDb250ZXh0Pj4gZ2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVu
ZGVyaW5nQ29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFy
Z3VtZW50cyk7CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJU
b0ltYWdlQml0bWFwKCk7CiAgICAgdm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9u
cyYmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBP
cHRpb25hbDxGbG9hdFJlY3Q+JikgZmluYWw7CiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAg
ICBJbWFnZSogY29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2Uo
KSBmaW5hbDsKIAogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0KIApAQCAtMTQ4LDcgKzE0Miw2IEBA
IHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKIAogcHJpdmF0ZToKLQogICAg
IE9mZnNjcmVlbkNhbnZhcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCk7CiAKICAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTY1LDEyICsxNTgsMTYgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CiAKKyAgICBzdGF0aWMgYm9v
bCBpczJkVHlwZShSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4
dFR5cGUpOworCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIHZvaWQgY3JlYXRlQ29udGV4dFdlYkdM
KFJlbmRlcmluZ0NvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgPSB7IH0pOwor
ICAgIHN0YXRpYyBib29sIGlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29u
dGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJik7CiAjZW5kaWYKIAotICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IHRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBm
aW5hbDsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAg
dm9pZCByZXNldCgpOwogCkBAIC0xNzgsMTQgKzE3NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
cHVzaEJ1ZmZlclRvUGxhY2Vob2xkZXIoKTsKICAgICB2b2lkIHNjaGVkdWxlQ29tbWl0VG9QbGFj
ZWhvbGRlckNhbnZhcygpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+IG1fY29udGV4dDsKLQogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5z
IHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0
IGl0LgogICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07
CiAKICAgICBib29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwogCi0gICAgbXV0YWJsZSBSZWZQdHI8
SW1hZ2U+IG1fY29waWVkSW1hZ2U7CisgICAgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwog
CiAgICAgYm9vbCBtX2hhc1NjaGVkdWxlZENvbW1pdCB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTEgKzY5
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShD
YW52YXNCYXNlJiBjYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCitVbmlxdWVSZWY8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShD
YW52YXNCYXNlJiBjYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCiB7Ci0gICAgYXV0byBy
ZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3Mp
LCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOworICAgIGF1dG8gcmVuZGVyaW5nQ29u
dGV4dCA9IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFy
c2VNb2RlKSk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZh
c1JlbmRlcmluZ0NvbnRleHQoKnJlbmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250
ZXh0LmdldCgpKTsKIAogICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFRleHRNZXRyaWNzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFs
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZh
c0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1ND
b21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKIAogICAg
IHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShyZXZp
c2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogCiAg
ICAgQ2FudmFzQmFzZSYgY2FudmFzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9CiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzV2ViR0wxKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNXZWJHTDIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNzksNyArODAsNyBAQCBwdWJs
aWM6CiAgICAgLy8gdXNlZCBmb3IgY29tcG9zaXRpbmcgcHVycG9zZXMuCiAgICAgdmlydHVhbCB2
b2lkIHByZXBhcmVGb3JEaXNwbGF5V2l0aFBhaW50KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGxh
dGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAog
ICAgIGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQogICAgIHZvaWQgc2V0
SGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcihib29sIGhhc0FjdGl2ZUluc3BlY3Rv
ckNhbnZhc0NhbGxUcmFjZXIpIHsgbV9oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
ID0gaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSk7CisKK1VuaXF1ZVJl
ZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZG
cm9tUmVmZXJlbmNlKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoY2FudmFzKSk7Cit9
CisKK0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9u
ZShDYW52YXNCYXNlJiBjYW52YXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsgY2Fu
dmFzIH0KK3sKK30KKworQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6On5DYW52YXNSZW5kZXJp
bmdDb250ZXh0Tm9uZSgpID0gZGVmYXVsdDsKKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dE5vbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUg
ZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSk7CitwdWJsaWM6CisgICAgc3Rh
dGljIFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZT4gY3JlYXRlKENhbnZhc0Jh
c2UmKTsKKworICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKCk7CisKK3By
aXZhdGU6CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFzZSYpOworCisg
ICAgYm9vbCBpc05vbmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDExICs0MiwxMSBAQCBzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlCiBzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRp
bmdzJiYgc2V0dGluZ3MpCitVbmlxdWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7Ci0gICAgYXV0
byByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4obmV3IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUo
c2V0dGluZ3MpKSk7CisgICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gbWFrZVVuaXF1ZVJlZkZy
b21SZWZlcmVuY2UoKm5ldyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZN
b3ZlKHNldHRpbmdzKSkpOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVh
dGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KCpyZW5kZXJpbmdDb250ZXh0KTsKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQocmVuZGVy
aW5nQ29udGV4dC5nZXQoKSk7CiAKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0
dGluZ3MmJik7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQ+IGNyZWF0ZShDYW52YXNCYXNlJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGlu
Z3MmJik7CiAKICAgICBlbnVtIGNsYXNzIEJpdG1hcE1vZGUgewogICAgICAgICBWYWxpZCwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3MTczKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKTsKIAorVW5pcXVlUmVmPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4gT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFz
ZSYgY2FudmFzKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3
IE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChjYW52YXMpKTsKK30KKwogT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQoQ2FudmFzQmFzZSYgY2FudmFzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZShjYW52YXMsIGZhbHNlKQogewpAQCAtMTA4LDcgKzExMyw4IEBAIENhbnZhc0RpcmVjdGlv
biBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmcKICAgICByZXR1cm4gRGlyZWN0aW9uOjpMdHI7CiB9
CiAKLWF1dG8gT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAt
PiBjb25zdCBGb250UHJveHkqIHsKK2F1dG8gT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpmb250UHJveHkoKSAtPiBjb25zdCBGb250UHJveHkqCit7CiAgICAgaWYgKCFzdGF0ZSgp
LmZvbnQucmVhbGl6ZWQoKSkKICAgICAgICAgc2V0Rm9udChzdGF0ZSgpLnVucGFyc2VkRm9udCk7
CiAgICAgcmV0dXJuICZzdGF0ZSgpLmZvbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zm
c2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIAogI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCIKLQogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1
YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAg
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0
aWMgVW5pcXVlUmVmPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENh
bnZhc0Jhc2UmKTsKKwogICAgIHZpcnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCgpOwogCiAgICAgT2Zmc2NyZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxPZmZzY3JlZW5DYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KQEAgLTUwLDYgKzUwLDgg
QEAgcHVibGljOgogICAgIFJlZjxUZXh0TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0KTsKIAogcHJpdmF0ZToKKyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQoQ2FudmFzQmFzZSYpOworCiAgICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50
UmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8UGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQ+IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2Fu
dmFzQmFzZSYgY2FudmFzKQorVW5pcXVlUmVmPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihuZXcgUGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9t
UmVmZXJlbmNlKCpuZXcgUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7CiB9CiAKIFBh
aW50UmVuZGVyaW5nQ29udGV4dDJEOjpQYWludFJlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNl
JiBjYW52YXMpCkBAIC00Nyw0ICs0Nyw1IEBAIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpQYWlu
dFJlbmRlcmluZ0MKIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjp+UGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQoKSA9IGRlZmF1bHQ7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5n
Q29udGV4dDJELmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTggKzM2LDIw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEIGZp
bmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52
YXNCYXNlJik7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4g
Y3JlYXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIHZpcnR1YWwgflBhaW50UmVuZGVyaW5nQ29udGV4
dDJEKCk7CiAKICAgICBDdXN0b21QYWludENhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8Q3VzdG9tUGFpbnRDYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogcHJpdmF0ZToK
LSAgICBib29sIGlzUGFpbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KICAg
ICBQYWludFJlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzUGFp
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FOVkFTUkVOREVSSU5HQ09OVEVY
VChXZWJDb3JlOjpQYWludFJlbmRlcmluZ0NvbnRleHQyRCwgaXNQYWludCgpKQorCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vo
b2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiAKK1Vu
aXF1ZVJlZjxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+IFBsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4gbWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoY2Fu
dmFzKSk7Cit9CisKIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6UGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmIGNhbnZhcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQoY2FudmFzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9Cisg
ICAgLCBtX2ltYWdlQnVmZmVyUGlwZSB7IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkgfQogewot
ICAgIG1faW1hZ2VCdWZmZXJQaXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAog
SFRNTENhbnZhc0VsZW1lbnQqIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Bs
YWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTMgKzM3LDE1IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNz
IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFBsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENh
bnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29u
dGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMoKSBjb25zdDsKIAogICAgIGNvbnN0IFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+JiBpbWFnZUJ1
ZmZlclBpcGUoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZTsgfQogCiBwcml2YXRl
OgorICAgIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CisKICAgICBi
b29sIGlzUGxhY2Vob2xkZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDEsNyAr
NDg0MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAg
ICAgLy8gc28gZm9yIFdlYkdMIDEuMCB1cGxvYWRzLCBkZWZlciBtZWFzdXJpbmcgdGhlaXIgcmVj
dGFuZ2xlIGFzIGxvbmcgYXMgcG9zc2libGUuCiAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlv
bklELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9m
ZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZmFsc2UsIGlucHV0U291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VIZWln
aHQpOwogICAgICAgICByZXR1cm4geyB9OwotICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBjYW52YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICB9LCBbJl0o
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7
CiAgICAgICAgIGF1dG8gdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlSFRNTENhbnZhc0VsZW1l
bnQoZnVuY3Rpb25OYW1lLCBjYW52YXMuZ2V0KCkpOwogICAgICAgICBpZiAodmFsaWRhdGlvblJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEw
Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQotc3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNv
bnRleHRNYXRjaGVzRGV2aWNlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQ
VURldmljZSYgZGV2aWNlKQorc3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRl
eHRNYXRjaGVzRGV2aWNlKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdl
YkdQVURldmljZSYgZGV2aWNlKQogewogICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250
ZXh0KSkgewogICAgICAgICBhdXRvJiBjb250ZXh0R1BVID0gZG93bmNhc3Q8R1BVQ2FudmFzQ29u
dGV4dD4oY29udGV4dCk7CkBAIC0xOTUsNyArMTk1LDcgQEAgV2ViR1BVRGV2aWNlKiBJbnNwZWN0
b3JDYW52YXM6OmRldmljZUNvbgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEluc3Bl
Y3RvckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0Citib29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZpY2VGb3JDYW52
YXNDb250ZXh0KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgaWYgKGF1dG8qIGRldmljZSA9IGRldmljZUNvbnRleHQoKSkKICAgICAgICAgcmV0dXJu
IGNhbnZhc0lmQ29udGV4dE1hdGNoZXNEZXZpY2UoY29udGV4dCwgKmRldmljZSk7CkBAIC0xMDc2
LDE2ICsxMDc2LDE2IEBAIFN0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnQK
ICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgYXV0byogY29udGV4dCA9IG5vZGUtPnJl
bmRlcmluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29u
dGV4dCgpOwogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkK
LSAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNl
dFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rvcih0cnVlKTsKKyAgICAgICAgZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFy
Rm9ySW5zcGVjdG9yKHRydWUpOwogI2VuZGlmCiAKICAgICBFeGNlcHRpb25PcjxVbmNhY2hlZFN0
cmluZz4gcmVzdWx0ID0gbm9kZS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MpOwogCiAjaWYgRU5B
QkxFKFdFQkdMKQogICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0
KSkKLSAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQp
LnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3RvcihmYWxzZSk7CisgICAgICAgIGRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJD
bGVhckZvckluc3BlY3RvcihmYWxzZSk7CiAjZW5kaWYKIAogICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52
YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFdlYkdQVURldmljZSogZGV2aWNlQ29udGV4dCgpIGNv
bnN0OwotICAgIGJvb2wgaXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmKSBjb25zdDsKKyAgICBib29sIGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
ci5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCog
ZW5hYmxlZENhbnZhc0FnZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQpCitzdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNBZ2Vu
dChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQog
ewogICAgIEFTU0VSVChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25QdWJsaWM6Omhhc0Zyb250ZW5k
cygpKTsKIApAQCAtODMsNyArODMsNyBAQCBzdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVu
YWJsZWRDYW52CiB9CiAKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFyZ3Vt
ZW50VHlwZSkgXAotT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2Vk
QXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUg
YXJndW1lbnQpIFwKK09wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3Nl
ZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1l
bnRUeXBlIGFyZ3VtZW50KSBcCiB7IFwKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFi
bGVkQ2FudmFzQWdlbnQoY2FudmFzUmVuZGVyaW5nQ29udGV4dCkpIFwKICAgICAgICAgcmV0dXJu
IGNhbnZhc0FnZW50LT5wcm9jZXNzQXJndW1lbnQoY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgYXJn
dW1lbnQpOyBcCkBAIC05Myw3ICs5Myw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXI6OlByb2MKICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FS
R1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNTX0FSR1VN
RU5UX0RFRklOSVRJT04KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRB
Y3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3Ry
aW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRz
JiYgYXJndW1lbnRzKQordm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rp
b24oY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwg
U3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1l
bnRzJiYgYXJndW1lbnRzKQogewogICAgIGlmIChhdXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRD
YW52YXNBZ2VudChjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkKICAgICAgICAgY2FudmFzQWdlbnQt
PnJlY29yZEFjdGlvbihjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOwpAQCAtMTAxLDE0ICsxMDEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNDYWxsVHJhY2VyOjpyZWNvcmRBYwogCiBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vz
c0FyZ3VtZW50KGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCB1aW50MzJf
dCBhcmd1bWVudCkKIHsKLSAgICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0
KCkpOwotICAgIHJldHVybiBwcm9jZXNzQXJndW1lbnQoKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5n
Q29udGV4dCgpLCBhcmd1bWVudCk7CisgICAgcmV0dXJuIHByb2Nlc3NBcmd1bWVudChjYW52YXNF
bGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwgYXJndW1lbnQpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYg
Y2FudmFzRWxlbWVudCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6
UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQogewotICAgIEFTU0VSVChjYW52YXNFbGVt
ZW50LnJlbmRlcmluZ0NvbnRleHQoKSk7Ci0gICAgcmVjb3JkQWN0aW9uKCpjYW52YXNFbGVtZW50
LnJlbmRlcmluZ0NvbnRleHQoKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
KyAgICByZWNvcmRBY3Rpb24oY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIFdURk1v
dmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXIuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0
LDEyICsxOTQsMTIgQEAgcHVibGljOgogICAgIHVzaW5nIFByb2Nlc3NlZEFyZ3VtZW50cyA9IHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4+OwogCiAjZGVm
aW5lIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04oQXJndW1lbnRUeXBlKSBcCi0gICAgc3Rh
dGljIE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKKyAgICBzdGF0aWMgT3B0aW9uYWw8UHJv
Y2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0JiwgQXJndW1lbnRUeXBlKTsgXAogLy8gZW5kIG9mIFBST0NFU1NfQVJHVU1FTlRfREVDTEFS
QVRJT04KICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5U
KFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9E
RUNMQVJBVElPTgogCi0gICAgc3RhdGljIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmLCBTdHJpbmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOworICAgIHN0
YXRpYyB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3Ry
aW5nJiYsIFByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKIAogICAgIHN0YXRpYyBPcHRpb25h
bDxQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhUTUxDYW52YXNFbGVt
ZW50JiwgdWludDMyX3QpOwogICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBIVE1M
Q2FudmFzRWxlbWVudCYsIFN0cmluZyYmLCBQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxNywxMyArNDE3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZp
Z2F0ZQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGll
bnROb2RlcyhDYW52YXNCYXNlJiBjYW52YXNCYXNlKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBj
YW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAg
IGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJl
bmRlcmluZ0NvbnRleHQoKSk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ0Nyw3ICs0NDEsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVhdGVDYW52CiAgICAgfQogfQogCi12b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5n
ZUNhbnZhc01lbW9yeShjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewog
ICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGluc3BlY3RvckNhbnZhczsKIApAQCAtNDc3LDEx
ICs0NzEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52CiAKIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYgY2FudmFz
QmFzZSwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpCiB7Ci0gICAgYXV0byogY29udGV4dCA9
IGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2Fu
dmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JD
YW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0
b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CkBA
IC00OTEsMTEgKzQ4MSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0NoYW5n
ZWQKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jh
c2UmIGNhbnZhc0Jhc2UpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVy
aW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAg
ICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5y
ZW5kZXJpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlm
ICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CkBAIC01MDMsNyArNDg5LDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveQogICAgIHVuYmluZENhbnZh
cygqaW5zcGVjdG9yQ2FudmFzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlk
RmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCwgYm9vbCBmb3JjZURpc3BhdGNoKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmlu
aXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCwgYm9vbCBmb3JjZURpc3BhdGNoKQogewogICAgIGlmICghY29udGV4dC5oYXNBY3RpdmVJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNyw3ICs1
MjMsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvCiAgICAgbV9y
ZWNvcmRpbmdDYW52YXNJZGVudGlmaWVycy5yZW1vdmUoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlm
aWVyKCkpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2Jh
bE9iamVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiBjb250ZXh0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBKU0M6OkpTT2Jq
ZWN0KiBvcHRpb25zKQogewogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3Rv
ckNhbnZhcyhjb250ZXh0KTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKQEAgLTU1OSw3
ICs1NDUsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSCiAgICAg
c3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5p
dGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNv
bGVTdG9wUmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQpCiB7CiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoY29udGV4dCwgdHJ1ZSk7
CiB9CkBAIC02ODIsNyArNjY4LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERl
c3Ryb3lXZQogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKICNkZWZpbmUgUFJPQ0VTU19BUkdV
TUVOVF9ERUZJTklUSU9OKEFyZ3VtZW50VHlwZSkgXAotT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9j
ZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4
dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBcCitPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NB
cmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250
ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKIHsgXAogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNSZW5kZXJpbmdDb250ZXh0KTsgXAogICAg
IEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOyBcCkBAIC02OTIsNyArNjc4LDcgQEAgT3B0aW9uYWw8
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvYwogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9D
QU5WQVNfQ0FMTF9UUkFDRVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKQog
I3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTgogCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVy
aW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJv
Y2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
cmVjb3JkQWN0aW9uKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQsIFN0cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nl
c3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50cykKIHsKICAgICBBU1NFUlQoY2FudmFzUmVuZGVyaW5n
Q29udGV4dC5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpOwogCkBAIC04ODcs
NyArODczLDcgQEAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQQogICAg
IHJldHVybiBpbnNwZWN0b3JDYW52YXM7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmIGNvbnRleHQpCitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
b250ZXh0KQogewogICAgIGZvciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVy
VG9JbnNwZWN0b3JDYW52YXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpID09ICZjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAkocmV2aXNp
b24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
YW52YXNBZ2VudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENoYW5nZUNTU0Nh
bnZhc0NsaWVudE5vZGVzKENhbnZhc0Jhc2UmKTsKICAgICB2b2lkIGRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwotICAgIHZvaWQgZGlkQ2hh
bmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZEZp
bmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBib29sIGZv
cmNlRGlzcGF0Y2ggPSBmYWxzZSk7Ci0gICAgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52
YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpT
T2JqZWN0KiBvcHRpb25zKTsKLSAgICB2b2lkIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKKyAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9yeShj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRp
bmdDYW52YXNGcmFtZShjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURp
c3BhdGNoID0gZmFsc2UpOworICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKGNv
bnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U09iamVjdCogb3B0aW9ucyk7CisgICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZv
aWQgZGlkRW5hYmxlRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIGRpZENyZWF0ZVdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiwgV2ViR0xQcm9ncmFtJik7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBwdWJsaWM6
CiAKICAgICAvLyBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyCiAjZGVmaW5lIFBST0NFU1NfQVJH
VU1FTlRfREVDTEFSQVRJT04oQXJndW1lbnRUeXBlKSBcCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRUeXBlKTsgXAorICAgIE9wdGlvbmFsPEluc3Bl
Y3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQo
Y29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKIC8vIGVuZCBv
ZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NB
TlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OKQog
I3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KLSAgICB2b2lkIHJlY29yZEFjdGlv
bihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKKyAgICB2b2lkIHJlY29yZEFjdGlv
bihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKIAogcHJpdmF0ZToKICAg
ICBzdHJ1Y3QgUmVjb3JkaW5nT3B0aW9ucyB7CkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJpdmF0ZToK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNh
bnZhcyhJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2Fu
dmFzSWQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOworICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZp
bmRJbnNwZWN0b3JDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwogI2lmIEVO
QUJMRShXRUJHUFUpCiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNh
bnZhcyhXZWJHUFVEZXZpY2UmKTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDIsMTAgKzI0MiwxMCBAQCBzdGF0aWMgSlNDOjpKU09iamVjdCogb2JqZWN0QXJn
dW1lbnRBdChTCiBzdGF0aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogY2FudmFzUmVuZGVyaW5n
Q29udGV4dChKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHRhcmdldCkKIHsKICAgICBpZiAoYXV0
byogY2FudmFzID0gSlNIVE1MQ2FudmFzRWxlbWVudDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQot
ICAgICAgICByZXR1cm4gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVy
biAmY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5W
QVMpCiAgICAgaWYgKGF1dG8qIGNhbnZhcyA9IEpTT2Zmc2NyZWVuQ2FudmFzOjp0b1dyYXBwZWQo
dm0sIHRhcmdldCkpCi0gICAgICAgIHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsK
KyAgICAgICAgcmV0dXJuICZjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICNlbmRpZgogICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvV3JhcHBl
ZCh2bSwgdGFyZ2V0KSkKICAgICAgICAgcmV0dXJuIGNvbnRleHQ7CkBAIC0zNDksMTAgKzM0OSw4
IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICNlbmRpZgogICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4oKm5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQgPSBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRl
eHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNu
YXBzaG90Q2FudmFzKGNhbnZhc0VsZW1lbnQsICpjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1ZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1
dG8gcmVzdWx0ID0gc25hcHNob3RDYW52YXMoY2FudmFzRWxlbWVudCwgY2FudmFzRWxlbWVudC5y
ZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwg
PSByZXN1bHQudmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q3VzdG9tUGFpbnRJbWFnZS5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjYsNyArMTY2LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3Vz
dAogICAgIGlmIChyZXN1bHQudHlwZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykK
ICAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKIAotICAgIGNhbnZh
cy0+cmVwbGF5RGlzcGxheUxpc3QoJmRlc3RDb250ZXh0KTsKKyAgICBjYW52YXMtPnJlcGxheURp
c3BsYXlMaXN0KGRlc3RDb250ZXh0KTsKIAogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRp
ZERyYXc7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZh
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxD
YW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw3IEBAIGJv
b2wgUmVuZGVySFRNTENhbnZhczo6cmVxdWlyZXNMYXllcigpIGMKICAgICBpZiAoUmVuZGVyUmVw
bGFjZWQ6OnJlcXVpcmVzTGF5ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9IGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJp
bmdDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCk7Ci0K
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdD
b250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBh
aW50UmVwbGFjZWQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCkKQEAgLTczLDcgKzcwLDcgQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJl
cGxhY2VkKFBhaQogICAgIExheW91dFJlY3QgY29udGVudEJveFJlY3QgPSB0aGlzLT5jb250ZW50
Qm94UmVjdCgpOwogCiAgICAgaWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkp
IHsKLSAgICAgICAgaWYgKCFjb250ZXh0LmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSAmJiBjYW52
YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICBpZiAoIWNvbnRleHQuY29u
dGVuZnVsUGFpbnREZXRlY3RlZCgpICYmICFjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4
dCgpLmlzTm9uZSgpKQogICAgICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSwxMiArOTEsMTIgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52
YXNDb21wb3NpdAogewogICAgIEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAg
ICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KHJlbmRlcmVyLm5vZGUoKSk7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVu
ZGVyaW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNBY2NlbGVy
YXRlZCgpKQorICAgIGNvbnN0IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVt
ZW50PihyZW5kZXJlci5ub2RlKCkpOworICAgIGF1dG8mIGNvbnRleHQgPSBjYW52YXMtPnJlbmRl
cmluZ0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQuaXNBY2NlbGVyYXRlZCgpKQogICAgICAg
ICByZXR1cm4gVW5hY2NlbGVyYXRlZENhbnZhczsKICAgICAKLSAgICBpZiAoY29udGV4dC0+aXNH
UFVCYXNlZCgpKQorICAgIGlmIChjb250ZXh0LmlzR1BVQmFzZWQoKSkKICAgICAgICAgcmV0dXJu
IENhbnZhc0FzTGF5ZXJDb250ZW50czsKIAogICAgIHJldHVybiBDYW52YXNQYWludGVkVG9MYXll
cjsgLy8gT24gTWFjIGFuZCBpT1Mgd2UgcGFpbnQgYWNjZWxlcmF0ZWQgY2FudmFzZXMgaW50byB0
aGVpciBsYXllcnMuCkBAIC0xMDY0LDkgKzEwNjQsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlQ29uZmlndXJhCiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShX
RUJHUFUpIHx8IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVy
KCkuaXNDYW52YXMoKSAmJiBjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09
IENhbnZhc0FzTGF5ZXJDb250ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVu
dCgpKTsKLSAgICAgICAgaWYgKGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRl
eHQoKSkKLSAgICAgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1BsYXRmb3Jt
TGF5ZXIoY29udGV4dC0+cGxhdGZvcm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xh
eWVyUHVycG9zZTo6Q2FudmFzKTsKKyAgICAgICAgY29uc3QgYXV0byogY2FudmFzID0gZG93bmNh
c3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjYW52YXMtPnJlbmRlcmlu
Z0NvbnRleHQoKS5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQ
dXJwb3NlOjpDYW52YXMpOwogCiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAg
ICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428027</attachid>
            <date>2021-05-07 13:34:21 -0700</date>
            <delta_ts>2021-05-07 14:04:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507133420.patch</filename>
            <type>text/plain</type>
            <size>118832</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcxNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgY2FudmFzIHJlbGF0ZWQgY2xhc3NlcyBhIGJpdCB0byBtYWtlIHRoZW0gYSBiaXQgZWFzaWVy
IHRvIHdvcmsgd2l0aC4KKyAgICAgICAgLSBIVE1MQ2FudmFzRWxlbWVudCwgT2Zmc2NyZWVuQ2Fu
dmFzIGFuZCBDdXN0b21QYWludENhbnZhcyBub3cgYWx3YXlzIGhhdmUgCisgICAgICAgICAgYSB2
YWxpZCwgbm9uLW51bGwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAobm93IHN0b3JlZCBpbiBDYW52
YXNCYXNlIGFzCisgICAgICAgICAgVW5pcXVlUmVmKS4gSW4gcGxhY2Ugb2YgdGhlIG9sZCBudWxs
IHZhbHVlIHN0YXRlIHdlIG5vdyBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUgdHlwZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIG1vdmUgbW9yZSBj
b250ZXh0CisgICAgICAgICAgc3BlY2lmaWMgbG9naWMgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCBhbmQgaXRzIHN1YmNsYXNzZXMgYW5kIG91dCBvZiAKKyAgICAgICAgICBDYW52YXNCYXNlIGFu
ZCBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgLSBDU1NDYW52YXNWYWx1ZSBub3cgc3RvcmVzIGEg
Q2FudmFzQmFzZSByYXRoZXIgdGhhbiBhbiBIVE1MQ2FudmFzRWxlbWVudAorICAgICAgICAgIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IGRvd25jYXN0cy4gVGhlIGNhbGxzIHdlcmUgYWxsIHN1cHBvcnRl
ZCBieSBDYW52YXNCYXNlCisgICAgICAgICAgYWxyZWFkeSwgc28gdGhpcyBqdXN0IHJlbW92ZXMg
c29tZSB1bm5lY2Vzc2FyeSBoZWZ0LgorICAgICAgICAtIE1vdmUgaW1hZ2UgYnVmZmVyIGRlc3Ry
dWN0aW9uIHRvIHRoZSBDYW52YXNCYXNlIGRlc3RydWN0b3IgcmF0aGVyIHRoYW4KKyAgICAgICAg
ICBoYXZpbmcgaXQgZHVwbGljYXRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4gTmV3IGRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpIGhlbHBlcgorICAgICAgICAgIGltcGxlbWVudHMgdGhlIHN0ZXBzIG5lZWRlZCBp
biBhIG1vcmUgb3B0aW1hbCBtYW5uZXIgdGhhbiBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKS4KKyAg
ICAgICAgLSBSZW1vdmUgY29uc3QgZnJvbSBhIGxvdCBvZiBub3QgYWN0dWFsIGNvbnN0IGZ1bmN0
aW9ucyBsaWtlIGNvcGllZEltYWdlKCksCisgICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpIGFu
ZCBzZXRJbWFnZUJ1ZmZlcigpLiAKKyAgICAgICAgLSBGaXh1cCBPZmZzY3JlZW5DYW52YXM6Omdl
dENvbnRleHQgdG8gdXNlIHRoZSBjb250ZXh0IGNyZWF0aW9uIHBhdHRlcm4gYXMgCisgICAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQ6Z2V0Q29udGV4dCwgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHRo
ZSBwYXJhbGxlbHMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVN
ZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6fkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJh
d2luZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRl
c3Ryb3lJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFn
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAq
IGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRXZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlQ29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVk
QnlPZmZzY3JlZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+
T2Zmc2NyZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xl
YXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFz
Ojp0YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05v
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNv
bnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpyZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2Fu
dmFzOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9u
KToKKwogMjAyMS0wNS0wNyAgQ2FybG9zIEdhcm5hY2hvICA8Y2FybG9zZ0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgW0dUSzRdIFJld3JpdGUgR1RLIGdlc3R1cmUgc3VwcG9ydCB0byB3b3JrIGZvciBi
b3RoIDMueCBhbmQgNC54LgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3NzE3MykKKysr
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEz
MjAsNyBAQCBodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmNwcAogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9F
WFRDb2xvckJ1ZmZlckZsb2F0LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJl
YW1UcmFjay5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFj
azo6U291cgogICAgIC8vIFdlIHNob3VsZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9y
IGJvdGggMmQgYW5kIDNkIGNvbnRleHRzIHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50
LgogICAgIC8vIEFuZCBjYWxsIGNhbnZhcyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4
dCgpKSkgewotICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oKmNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBj
b250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRl
cmluZ0NvbnRleHQoKSk7CiAgICAgICAgIGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5n
QnVmZmVyKCkpIHsKICAgICAgICAgICAgIGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5p
bmcsICJUdXJuaW5nIGRyYXdpbmcgYnVmZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNh
bnZhcyBiZWluZyBjYXB0dXJlZCJfcyk7CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNl
cnZlRHJhd2luZ0J1ZmZlcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
R1BVQ2FudmFzQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw5ICszNyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEdQVUNhbnZhc0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BV
Q2FudmFzQ29udGV4dD4gR1BVQ2FudmFzQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZh
cykKK1VuaXF1ZVJlZjxHUFVDYW52YXNDb250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUo
Q2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0
cjxHUFVDYW52YXNDb250ZXh0PihuZXcgR1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBh
dXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXND
b250ZXh0KGNhbnZhcykpOwogICAgIGNvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJl
dHVybiBjb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BV
Q2FudmFzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L0dQVUNhbnZhc0NvbnRleHQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw3IEBAIHN0cnVjdCBXZWJHUFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BV
Q2FudmFzQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3Jl
YXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25z
dCB7IHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0MjgxLDYgKzE0MjgxLDgg
QEAKIAkJQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93
RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENG
RDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2luZG93RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJF
QTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xs
YmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFy
VGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk2LDYgKzIwMDk4
LDggQEAKIAkJCQkzMTQwQzUyMjFGREYzMTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5oICovLAogCQkJCUJDRTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlE
Q0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4
NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAq
LywKKwkJCQlCQzg0RjQzRDI2NDFBQ0MyMDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JBRDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93
U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3Rh
dGUuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5j
cHAgKi8sCkBAIC0zMTQyNiw3ICszMTQzMCw2IEBACiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgy
RjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5MTJB
QjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVG
Q0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk0NDlEODY0RjI2NDBDOUM1MDAwMTIyREUgLyogSGlnaGxpZ2h0VmlzaWJpbGl0eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVm
ZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTgg
LyogQW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMUFEMTI2MjM2RDg2RTUw
MDZGRjM3QyAvKiBBbmltYXRpb25FdmVudEJhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2NDUs
NiArMzI2NDgsNyBAQAogCQkJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2RDQwMSAvKiBIaWdobGlnaHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgwMDZGODQ1MCAvKiBIaWdobGln
aHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDMwRDAwRDI1NzVBOEE1MDA0NkQ0MDEgLyog
SGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ0OUQ4NjRGMjY0MEM5QzUw
MDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk0
RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdE
Q0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtMzQ4ODMsNyArMzQ4ODcsNiBAQAogCQkJCUU0NkI0MUY5MUNCMjRFNzAwMDhG
MTFERSAvKiBTY3JpcHREaXNhbGxvd2VkU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5OThB
RUQyMTNGQjIyNEQwMDkwQjFBQSAvKiBTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1MjcyQzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUgLyogU3R5bGVT
Y29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRTRFMkE4MUUzQjE3MTAwMDIzQkI4
QSAvKiBTY3JpcHRFbGVtZW50Q2FjaGVkU2NyaXB0RmV0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTExQzlEOUIwRUIzNjgxMjAwRTQwOURCIC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCBp
biBIZWFkZXJzICovLAogCQkJCTQxMTIyM0JBMjYwMjQ0RkUwMEIwQTBCNiAvKiBTY3JpcHRFeGVj
dXRpb25Db250ZXh0SWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5OSw2ICszNTIw
Miw3IEBACiAJCQkJRTQ5NDZFQUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NEYzN0UyMzY2MTYyNjAwM0FBNUM3IC8qIFN0eWxlUnVs
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NjFENjVGMUJCMEM4MEQwMENCNTY0NSAvKiBT
dHlsZVNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEQ4NkU2RDI2NDAzOTRDMDBCNjI0MjUg
LyogU3R5bGVTY29wZU9yZGluYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBNEY0OEFBMTZCMERG
QzAwMEVEQkIyOSAvKiBTdHlsZVNjb3BlUnVsZVNldHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0
N0E1RTNFMTk1QjhDOEEwMDQ4MzEwMCAvKiBTdHlsZVNjcm9sbFNuYXBQb2ludHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTlENjM4MDEwMUFGMTczMjIwMDMxQTE1QyAvKiBTdHlsZVNlbGZBbGlnbm1l
bnREYXRhLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52
YXNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZh
c1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKIAorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIENTU0NhbnZhc1ZhbHVlOjp+Q1NTQ2FudmFzVmFsdWUoKQogewotICAgIGlm
IChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+cmVtb3ZlT2JzZXJ2ZXIobV9jYW52YXNP
YnNlcnZlcik7CisgICAgaWYgKG1fY2FudmFzKQorICAgICAgICBtX2NhbnZhcy0+cmVtb3ZlT2Jz
ZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CiB9CiAKIFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0CkBAIC00MSw1MyArNDIsNTMgQEAgU3RyaW5nIENTU0NhbnZhc1Zh
bHVlOjpjdXN0b21DU1NUZXh0KCkgYwogICAgIHJldHVybiBtYWtlU3RyaW5nKCItd2Via2l0LWNh
bnZhcygiLCBtX25hbWUsICcpJyk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0No
YW5nZWQoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFu
Z2VkUmVjdCkKK3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYs
IGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KQogewogICAgIGlmICghY2hh
bmdlZFJlY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gaW1hZ2VDaGFuZ2VSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjaGFuZ2VkUmVjdC52YWx1ZSgpKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBjbGllbnRzKCkuYmVnaW4oKSwgZW5kID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT5rZXktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1h
Z2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDog
Y2xpZW50cygpLnZhbHVlcygpKQorICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNf
Y2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpLCAmaW1hZ2VDaGFuZ2VSZWN0KTsKIH0KIAotdm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpCit2b2lk
IENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKQogewotICAgIGZvciAo
YXV0byBpdCA9IGNsaWVudHMoKS5iZWdpbigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdy
YXBwZWRJbWFnZVB0cj4odGhpcykpOworICAgIGZvciAoYXV0byBjbGllbnQgOiBjbGllbnRzKCku
dmFsdWVzKCkpCisgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBw
ZWRJbWFnZVB0cj4odGhpcykpOwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0
cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmIGVsZW1lbnQpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpj
YW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIEFTU0VSVF9VTlVTRUQo
JmVsZW1lbnQsICZlbGVtZW50ID09IG1fZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0
cjsKKyAgICBBU1NFUlRfVU5VU0VEKCZjYW52YXMsICZjYW52YXMgPT0gbV9jYW52YXMpOworICAg
IG1fY2FudmFzID0gbnVsbHB0cjsKIH0KIAogRmxvYXRTaXplIENTU0NhbnZhc1ZhbHVlOjpmaXhl
ZFNpemUoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgaWYgKEhUTUxDYW52
YXNFbGVtZW50KiBlbHQgPSBlbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50KCkpKQotICAgICAgICBy
ZXR1cm4gRmxvYXRTaXplKGVsdC0+d2lkdGgoKSwgZWx0LT5oZWlnaHQoKSk7CisgICAgaWYgKGF1
dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZhcyhyZW5kZXJlci5kb2N1bWVudCgpKSkKKyAgICAgICAg
cmV0dXJuIEZsb2F0U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpOwogICAg
IHJldHVybiB7IH07CiB9CiAKLUhUTUxDYW52YXNFbGVtZW50KiBDU1NDYW52YXNWYWx1ZTo6ZWxl
bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCitDYW52YXNCYXNlKiBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICAgaWYgKCFtX2VsZW1lbnQpIHsKLSAgICAg
ICAgbV9lbGVtZW50ID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOwotICAg
ICAgICBpZiAoIW1fZWxlbWVudCkKKyAgICBpZiAoIW1fY2FudmFzKSB7CisgICAgICAgIG1fY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0Q1NTQ2FudmFzRWxlbWVudChtX25hbWUpOworICAgICAgICBpZiAo
IW1fY2FudmFzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1fZWxlbWVu
dC0+YWRkT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CisgICAgICAgIG1fY2FudmFzLT5hZGRP
YnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudDsK
KyAgICByZXR1cm4gbV9jYW52YXM7CiB9CiAKIFJlZlB0cjxJbWFnZT4gQ1NTQ2FudmFzVmFsdWU6
OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpemUmIC8qc2l6ZSov
KQogewogICAgIEFTU0VSVChjbGllbnRzKCkuY29udGFpbnMoJnJlbmRlcmVyKSk7Ci0gICAgSFRN
TENhbnZhc0VsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KHJlbmRlcmVyLmRvY3VtZW50
KCkpOwotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+YnVmZmVyKCkpCisgICAgYXV0byog
Y2FudmFzID0gdGhpcy0+Y2FudmFzKHJlbmRlcmVyLmRvY3VtZW50KCkpOworICAgIGlmICghY2Fu
dmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gZWxlbWVudC0+Y29waWVkSW1hZ2UoKTsKKyAgICByZXR1cm4gY2FudmFzLT5jb3BpZWRJ
bWFnZSgpOwogfQogCiBib29sIENTU0NhbnZhc1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FudmFz
VmFsdWUmIG90aGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmgJ
KHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJDU1NJbWFnZUdl
bmVyYXRvclZhbHVlLmgiCiAjaW5jbHVkZSAiQ2FudmFzQmFzZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00NSw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRml4ZWRTaXpl
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIEZsb2F0U2l6ZSBmaXhlZFNpemUoY29uc3Qg
UmVuZGVyRWxlbWVudCYpOwogCi0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KKyAgICBDYW52YXNCYXNlKiBjYW52YXMoKSBjb25zdCB7
IHJldHVybiBtX2NhbnZhczsgfQogCiAgICAgYm9vbCBpc1BlbmRpbmcoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZvaWQgbG9hZFN1YmltYWdlcyhDYWNoZWRSZXNvdXJjZUxvYWRlciYs
IGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYpIHsgfQpAQCAtNjgsMTggKzY3LDE1IEBAIHB1
YmxpYzoKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpLCBjaGFuZ2VkUmVjdCk7CisgICAg
ICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzQ2hhbmdlZChjYW52YXNCYXNlLCBjaGFuZ2VkUmVj
dCk7CiAgICAgICAgIH0KICAgICAgICAgdm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmIGNh
bnZhc0Jhc2UpIGZpbmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2Fu
dmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZh
c1Jlc2l6ZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAg
ICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNSZXNpemVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9
CiAgICAgICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpIGZp
bmFsCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxIVE1MQ2FudmFzRWxlbWVudD4o
Y2FudmFzQmFzZSkpOwotICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOworICAgICAgICAgICAgbV9v
d25lclZhbHVlLmNhbnZhc0Rlc3Ryb3llZChjYW52YXNCYXNlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIENTU0NhbnZhc1ZhbHVlJiBtX293bmVyVmFsdWU7CkBAIC05MywxOCArODksMTggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNF
bGVtZW50JiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOwotICAgIHZv
aWQgY2FudmFzUmVzaXplZChIVE1MQ2FudmFzRWxlbWVudCYpOwotICAgIHZvaWQgY2FudmFzRGVz
dHJveWVkKEhUTUxDYW52YXNFbGVtZW50Jik7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZh
c0Jhc2UmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7CisgICAgdm9p
ZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKTsKKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChD
YW52YXNCYXNlJik7CiAKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudChEb2N1bWVudCYp
OworICAgIENhbnZhc0Jhc2UqIGNhbnZhcyhEb2N1bWVudCYpOwogCiAgICAgQ2FudmFzT2JzZXJ2
ZXJQcm94eSBtX2NhbnZhc09ic2VydmVyOwogCiAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNhbnZh
cy4KICAgICBTdHJpbmcgbV9uYW1lOwotICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUg
ZWxlbWVudCBhbmQgb3ducyBpdC4KLSAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9lbGVtZW50IHsg
bnVsbHB0ciB9OworICAgIC8vIFRoZSBkb2N1bWVudCBzdXBwbGllcyB0aGUgY2FudmFzIGFuZCBv
d25zIGl0LgorICAgIENhbnZhc0Jhc2UqIG1fY2FudmFzIHsgbnVsbHB0ciB9OwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICsz
NCw4IEBACiAjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU05hbWVkSW1h
Z2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1BhaW50SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNh
bnZhc0Jhc2UuaCIKICNpbmNsdWRlICJHZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAj
aW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogCkBAIC03NCw4ICs3NCw4IEBAIHZvaWQgQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZTo6YWRkQ2xpZW50KFIKICAgICBtX2NsaWVudHMuYWRkKCZyZW5kZXJl
cik7CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVl
Pih0aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAg
IGlmIChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZh
cygpKQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1ND
YW52YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiB9CiAKQEAgLTg2LDggKzg2LDggQEAg
dm9pZCBDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbgogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoaXM8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpKSB7Ci0gICAgICAgIGlmIChIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0
aGlzKS0+ZWxlbWVudCgpKQotICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcygqY2FudmFzRWxlbWVudCk7CisgICAgICAgIGlm
IChhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmNhbnZhcygp
KQorICAgICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDU1NDYW52
YXNDbGllbnROb2RlcygqY2FudmFzKTsKICAgICB9CiAKICAgICBpZiAobV9jbGllbnRzLmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg5Niw3
ICszODk2LDcgQEAgc3RhdGljIGJvb2wgaXNWYWxpZFBhZ2VTYW1wbGVMb2NhdGlvbihEbwogCiAg
ICAgICAgIC8vIFNraXAgYDxjYW52YXM+YCBidXQgb25seSBpZiB0aGV5J3ZlIGJlZW4gZHJhd24g
aW50by4gR3Vlc3MgdGhpcyBieSBzZWVpbmcgaWYgdGhlcmUncyBhbHJlYWR5CiAgICAgICAgIC8v
IGEgYENhbnZhc1JlbmRlcmluZ0NvbnRleHRgLCB3aGljaCBpcyBvbmx5IGNyZWF0ZWQgYnkgSmF2
YVNjcmlwdC4KLSAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiBkb3du
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAg
ICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4obm9kZSkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgIC8vIFNraXAgM3JkLXBhcnR5IGA8aWZyYW1lPmAgYXMg
dGhlIGNvbnRlbnQgbGlrZWx5IHdvbid0IG1hdGNoIHRoZSByZXN0IG9mIHRoZSBwYWdlLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTUxLDcgKzUyLDggQEAgY29uc3QgSW50ZXJwb2xhdGlv
blF1YWxpdHkgZGVmYXVsdEludGVycAogI2VuZGlmCiAKIENhbnZhc0Jhc2U6OkNhbnZhc0Jhc2Uo
SW50U2l6ZSBzaXplKQotICAgIDogbV9zaXplKHNpemUpCisgICAgOiBtX3NpemUgeyBzaXplIH0K
KyAgICAsIG1fY29udGV4dCB7IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoKnRo
aXMpIH0KIHsKIH0KIApAQCAtNTksMTMgKzYxLDEzIEBAIENhbnZhc0Jhc2U6On5DYW52YXNCYXNl
KCkKIHsKICAgICBBU1NFUlQobV9kaWROb3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQpOwog
ICAgIEFTU0VSVChtX29ic2VydmVycy5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV9pbWFnZUJ1
ZmZlcik7CisKKyAgICBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0
KiBDYW52YXNCYXNlOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgYXV0byogY29udGV4
dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29udGV4dCAmJiAhY29udGV4dC0+aXMy
ZCgpICYmICFjb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCisgICAgaWYgKCFtX2NvbnRleHQtPmlz
MmQoKSAmJiAhbV9jb250ZXh0LT5pc09mZnNjcmVlbjJkKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIGJ1ZmZlcigpID8gJm1faW1hZ2VCdWZmZXItPmNvbnRleHQoKSA6
IG51bGxwdHI7CkBAIC04Miw3ICs4NCw3IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzQmFzZTo6
ZXhpc3RpbmdEcmEKIEltYWdlQnVmZmVyKiBDYW52YXNCYXNlOjpidWZmZXIoKSBjb25zdAogewog
ICAgIGlmICghaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkpCi0gICAgICAgIGNyZWF0ZUltYWdlQnVm
ZmVyKCk7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q2FudmFzQmFzZSo+KHRoaXMpLT5jcmVhdGVJbWFn
ZUJ1ZmZlcigpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogfQogCkBAIC05NCw4
ICs5Niw3IEBAIEFmZmluZVRyYW5zZm9ybSBDYW52YXNCYXNlOjpiYXNlVHJhbnNmb3IKIAogdm9p
ZCBDYW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpCiB7Ci0gICAgaWYg
KGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogfQogCiBzaXplX3QgQ2FudmFzQmFzZTo6bWVtb3J5Q29z
dCgpIGNvbnN0CkBAIC0xMDMsNyArMTA0LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6Om1lbW9yeUNv
c3QoKSBjb25zdAogICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50
bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAogICAgIC8vIGFi
b3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LiBXZSBuZWVkIHRvIGhvbGQgYSBs
b2NrIHRvIHByZXZlbnQgbV9pbWFnZUJ1ZmZlcgogICAgIC8vIGZyb20gYmVpbmcgY2hhbmdlZCB3
aGlsZSB3ZSBhY2Nlc3MgaXQuCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVm
ZmVyQXNzaWdubWVudExvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNz
aWdubWVudExvY2sgfTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiAw
OwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5tZW1vcnlDb3N0KCk7CkBAIC0xMTQsNyArMTE1
LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5Q29zdCgpIAogICAgIC8vIGV4
dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0Mg
dGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAgLy8gYWJvdXQgd2hhdCBkYXRh
IHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9sZCBhIGxvY2sgdG8gcHJldmVu
dCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFuZ2VkIHdoaWxlIHdlIGFjY2Vz
cyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50
TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9jayB9
OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpAQCAtMTgwLDE1ICsxODEsMTkg
QEAgSGFzaFNldDxFbGVtZW50Kj4gQ2FudmFzQmFzZTo6Y3NzQ2FudmFzQwogCiBib29sIENhbnZh
c0Jhc2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdAogewotICAg
IGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQg
JiYgY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpOworICAgIHJl
dHVybiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKTsKK30K
Kwordm9pZCBDYW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9jb250ZXh0ID0gV1RGTW92ZShj
b250ZXh0KTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1
ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVm
ZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVm
ZmVyKQogewogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gcmV0dXJuQnVmZmVyOwogICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sp
OworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2NrIH07
CiAgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm5C
dWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAg
ICAgfQpAQCAtMjAwLDkgKzIwNSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6
c2V0SW1hZ2UKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKICAgICBzX2Fj
dGl2ZVBpeGVsTWVtb3J5ICs9IG1faW1hZ2VCdWZmZXJDb3N0IC0gcHJldmlvdXNNZW1vcnlDb3N0
OwogCi0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29u
dGV4dCAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVm
ZmVyQ29zdCkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52
YXNNZW1vcnkoKmNvbnRleHQpOworICAgIGlmICghbV9jb250ZXh0LT5pc05vbmUoKSAmJiBtX2lt
YWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVmZmVyQ29zdCkKKyAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkobV9j
b250ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CiAgICAgICAgIG1faW1h
Z2VCdWZmZXItPmNvbnRleHQoKS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKQEAg
LTIxNyw2ICsyMjEsMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFn
ZQogICAgIHJldHVybiByZXR1cm5CdWZmZXI7CiB9CiAKK3ZvaWQgQ2FudmFzQmFzZTo6ZGVzdHJv
eUltYWdlQnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG9sZEJ1ZmZlcjsKKwor
ICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9j
ayB9OworICAgICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVsbHB0cjsKKyAgICAgICAgb2xk
QnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBudWxscHRyKTsKKyAgICB9Cisg
ICAgCisgICAgc19hY3RpdmVQaXhlbE1lbW9yeSAtPSBtX2ltYWdlQnVmZmVyQ29zdDsKKyAgICBt
X2ltYWdlQnVmZmVyQ29zdCA9IDA7Cit9CisKIHNpemVfdCBDYW52YXNCYXNlOjphY3RpdmVQaXhl
bE1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIHNfYWN0aXZlUGl4ZWxNZW1vcnkubG9hZCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC03MCw3ICs3MSw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRT
aXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBJbWFnZUJ1ZmZlciog
YnVmZmVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNm
b3JtKCkgY29uc3Q7CiAKICAgICB2b2lkIG1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7
CkBAIC04NSw3ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gY2Fu
dmFzQmFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgIH0KIAotICAgIHZpcnR1YWwgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICBjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgcmVuZGVy
aW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRP
YnNlcnZlcihDYW52YXNPYnNlcnZlciYpOwogICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoQ2FudmFz
T2JzZXJ2ZXImKTsKQEAgLTEwMCw4ICsxMDEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikgPSAwOwogCi0gICAgdmlydHVh
bCBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFy
Q29waWVkSW1hZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbWFnZSogY29waWVkSW1hZ2Uo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSA9IDA7CiAKICAgICBi
b29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdDsKIApAQCAtMTEy
LDIwICsxMTMsMjUgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBSZWZQdHI8SW1hZ2VC
dWZmZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJikgY29uc3Q7CisgICAg
dm9pZCBzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0
PiYmKTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogICAgIHZpcnR1
YWwgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHN0YXRpYyBzaXplX3QgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKIAogICAgIHZvaWQgcmVzZXRH
cmFwaGljc0NvbnRleHRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bWFnZUJ1ZmZlcigpIHsgfQogCi0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKICAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2Nr
OwotICAgIG11dGFibGUgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwotICAgIG11
dGFibGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsgMCB9OwotICAgIG11dGFibGUgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI+IG1fY29udGV4dFN0YXRlU2F2ZXI7
CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHNpemVfdCBtX2lt
YWdlQnVmZmVyQ29zdCB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlcj4gbV9jb250ZXh0U3RhdGVTYXZlcjsKKworICAgIFVuaXF1ZVJlZjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAKICAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0
cnVlIH07CiAjaWYgQVNTRVJUX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNDUgKzQ4LDQy
IEBAIEN1c3RvbVBhaW50Q2FudmFzOjpDdXN0b21QYWludENhbnZhcyhTY3IKIEN1c3RvbVBhaW50
Q2FudmFzOjp+Q3VzdG9tUGFpbnRDYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZh
c0Rlc3Ryb3llZCgpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMg
Z29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVs
bHB0cik7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+
IEN1c3RvbVBhaW50Q2FudmFzOjpnZXRDb250ZXh0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQot
ICAgICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25j
YXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgaWYgKCFy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+
KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogCi0gICAgbV9jb250ZXh0ID0gUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7Cisg
ICAgYXV0byBjb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7
CisgICAgY29udGV4dC0+c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVlKTsKKyAgICBzZXRS
ZW5kZXJpbmdDb250ZXh0KFdURk1vdmUoY29udGV4dCkpOwogCi0gICAgcmV0dXJuIHsgUmVmUHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmlu
Z0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9OwogfQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNw
bGF5TGlzdChHcmFwaGljc0NvbnRleHQqIGN0eCkgY29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52
YXM6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgY3R4KQogewogICAgIEFTU0VS
VCghbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFo
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIGFuIGludGVy
bWVkaWF0ZSBidWZmZXIgaXMgbm90IG5lZWRlZCBpZiB0aGVyZSBhcmUgbm8gY29tcG9zaXRlIG9w
ZXJhdGlvbnMuCi0gICAgYXV0byBjbGlwQm91bmRzID0gY3R4LT5jbGlwQm91bmRzKCk7CisgICAg
YXV0byBjbGlwQm91bmRzID0gY3R4LmNsaXBCb3VuZHMoKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91bmRzLnNpemUoKSwgKmN0
eCk7CisgICAgYXV0byBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNsaXBCb3VuZHMuc2l6ZSgpLCBjdHgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSAmaW1hZ2UtPmNvbnRleHQo
KTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLWNsaXBCb3Vu
ZHMubG9jYXRpb24oKSk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGlj
c0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgY3R4LT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBj
bGlwQm91bmRzKTsKKyAgICBjdHguZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5kcyk7
CiB9CiAKLUltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAorSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rl
c3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgp
KQpAQCAtOTcsMTUgKzk0LDE0IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1h
Z2UoKSAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhp
Y3NDb250ZXh0ID0gJm1fY29waWVkQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1fY29udGV4
dCkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwor
ICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwog
ICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCiAgICAgbV9jb3Bp
ZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQo
KTsKIH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0
Cit2b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2Nv
cGllZEltYWdlID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBh
aW50Q2FudmFzLmgJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDE2IEBAIHB1Ymxp
YzoKIAogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGdl
dENvbnRleHQoKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRl
eHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBHcmFwaGlj
c0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250
ZXh0KiBleGlzdGluZ0RyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRp
ZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpIGZpbmFsIHsgfQogCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBmaW5hbCB7IEFTU0VSVChtX2Rlc3RpbmF0
aW9uR3JhcGhpY3NDb250ZXh0ICYmIG1fY29waWVkQnVmZmVyKTsgcmV0dXJuIG1fY29waWVkQnVm
ZmVyLT5iYXNlVHJhbnNmb3JtKCk7IH0KLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBm
aW5hbDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFn
ZSogY29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5h
bDsKIAotICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIHVz
aW5nIFJlZkNvdW50ZWQ6OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKQEAgLTc3
LDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmQ2FudmFzQmFzZSgpIGZpbmFsIHsg
ZGVyZWYoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ29udGV4dERlc3RydWN0aW9u
T2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBtdXRhYmxlIEdyYXBo
aWNzQ29udGV4dCogbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAgICAg
bXV0YWJsZSBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fY29waWVkQnVmZmVyOwogICAgIG11dGFibGUg
UmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2
LDYgQEAgSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCgpCiAgICAgLy8gYXZv
aWRlZCBpbiBkZXN0cnVjdG9ycywgYnV0IHdvcmtzIGFzIGxvbmcgYXMgaXQncyBkb25lIGJlZm9y
ZSBIVE1MQ2FudmFzRWxlbWVudCBkZXN0cnVjdHMgY29tcGxldGVseS4KICAgICBub3RpZnlPYnNl
cnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKICAgICBkb2N1bWVudCgpLmNsZWFyQ2FudmFzUHJlcGFy
YXRpb24oKnRoaXMpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMg
Z29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVs
bHB0cik7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDUw
ICsyMzYsNTAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0TWF4UGl4ZWxNZW1vcgogCiBF
eGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gSFRNTENhbnZhc0VsZW1lbnQ6
OmdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIGNvbnN0IFN0cmluZyYgY29u
dGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpCiB7
Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1BsYWNlaG9s
ZGVyKCkpCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAg
aWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1BsYWNlaG9sZGVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgICAgICBpZiAobV9jb250
ZXh0LT5pczJkKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsK
ICAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAg
ICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0
IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXNCaXRt
YXBSZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBS
ZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzQml0bWFwUmVuZGVyZXJUeXBlKGNvbnRl
eHRJZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICAgICAg
ICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dlYkdM
KCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKICAgICAg
ICAgICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAgICAgICAgICAgICBhdXRvIHZl
cnNpb24gPSB0b1dlYkdMVmVyc2lvbihjb250ZXh0SWQpOwotICAgICAgICAgICAgaWYgKHZlcnNp
b24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51
bGxvcHQgfTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wx
ICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9
OworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIXJl
bmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsg
V1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lv
bjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxF
KFdFQkdMMikKLSAgICAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pigq
bV9jb250ZXh0KSk7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgQVNTRVJUKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpOworICAgICAgICAgICAg
cmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNlbmRpZgog
ICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHUFUpCi0gICAgICAgIGlmIChtX2Nv
bnRleHQtPmlzV2ViR1BVKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dl
YkdQVSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR1BVVHlwZShjb250ZXh0SWQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVs
bG9wdCB9OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
UmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KCpt
X2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9
IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZk
b3duY2FzdDxHUFVDYW52YXNDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAg
ICAgICB9CiAjZW5kaWYKIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07CisgICAg
ICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICB9CiAKICAgICBpZiAoaXMyZFR5
cGUoY29udGV4dElkKSkgewpAQCAtMjkyLDggKzI4OSw4IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFs
PFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250
ZXh0MmQoY29udGV4dElkLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4
dCkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6
bnVsbG9wdCB9OwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBS
ZWZQdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7IGNvbnRleHQgfSB9OworICAgICAgICAg
ICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0
cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICAg
ICBpZiAoaXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkgewpAQCAtMzAzLDggKzMwMCw4
IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBh
dXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29udGV4dElkLCBXVEZN
b3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICBy
ZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6
Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wp
CkBAIC0zMTUsMTMgKzMxMiwxMyBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0Pj4gCiAKICAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdMKHRvV2Vi
R0xWZXJzaW9uKGNvbnRleHRJZCksIFdURk1vdmUoYXR0cmlidXRlcykpOwogICAgICAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4g
eyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0g
fTsKIAogICAgICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpCi0g
ICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpj
b250ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0g
fSB9OwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJp
bmdDb250ZXh0PigqY29udGV4dCkpOwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgeyBS
ZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5n
Q29udGV4dD4oKmNvbnRleHQpIH0gfSB9OwogI2VuZGlmCiAgICAgfQogI2VuZGlmCkBAIC0zMzAs
MTIgKzMyNywxMiBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiAg
ICAgaWYgKGlzV2ViR1BVVHlwZShjb250ZXh0SWQpKSB7CiAgICAgICAgIGF1dG8gY29udGV4dCA9
IGNyZWF0ZUNvbnRleHRXZWJHUFUoY29udGV4dElkKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxs
b3B0IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0
cjxHUFVDYW52YXNDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsg
eyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXND
b250ZXh0PiB7IGNvbnRleHQgfSB9IH07CiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4gT3B0
aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTM2Nyw3ICszNjQs
NyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3Qg
U3RyaW5nJiB0eXBlLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdz
KQogewogICAgIEFTU0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUp
LCB0eXBlKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0Nv
bnRleHQoKS5pc05vbmUoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUg
cGl4ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBjYW4gc3VwcG9ydC4KICAgICBzaXplX3QgcmVx
dWVzdGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgoKSAqIGhlaWdodCgpOwpAQCAtMzgwLDI2ICsz
NzcsMjcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncyksIGRvY3VtZW50KCku
aW5RdWlya3NNb2RlKCkpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGluZ3MpLCBkb2N1bWVudCgpLmlu
UXVpcmtzTW9kZSgpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9
CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQyZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdz
JiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMy
ZFR5cGUodHlwZSksIHR5cGUpOwogCi0gICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5p
czJkKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUNvbnRleHQyZCh0eXBlLCBXVEZNb3ZlKHNldHRpbmdzKSk7CisKKyAgICBpZiAo
IXJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0MmQodHlwZSwg
V1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjaWYgRU5B
QkxFKFdFQkdMKQpAQCAtNDQ4LDcgKzQ0Niw3IEBAIEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJz
aW9uIEhUTUxDYW52YXMKIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHTChXZWJHTFZlcnNpb24gdHlwZSwgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NF
UlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIGlmICghc2hvdWxkRW5hYmxl
V2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC00NjUsMjAgKzQ2MywyNCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFz
RWxlCiAKICAgICAvLyBUT0RPKFdFQlhSKTogZW5zdXJlIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQg
aW4gYSBjb21wYXRpYmxlIGdyYXBoaWNzCiAgICAgLy8gYWRhcHRlciB3aGVuIHRoZXJlIGlzIGFu
IGFjdGl2ZSBpbW1lcnNpdmUgZGV2aWNlLgotICAgIG1fY29udGV4dCA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOwotICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgLy8gVGhpcyBuZXcgY29udGV4dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBi
eSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCi0gICAgICAgIC8vIGZvciBpdCB0byBiZSBjb3JyZWN0
bHkgcHJlcGFyZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNvbXBvc2l0ZWQuCi0gICAgICAg
IGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0
KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGNvbnRleHQpKSk7CisK
KyAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9ic2VydmVkIGJ5IHRoZSBEb2N1
bWVudCwgaW4gb3JkZXIKKyAgICAvLyBmb3IgaXQgdG8gYmUgY29ycmVjdGx5IHByZXBhcmVkRm9y
UmVuZGVyaW5nIGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgorICAgIGFkZE9ic2VydmVyKGRvY3Vt
ZW50KCkpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29t
cG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCisgICAgaW52YWxpZGF0
ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBz
dXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0
aGUgQ2FudmFzLgotICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7
CiAjaWYgRU5BQkxFKFdFQlhSKQotICAgICAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8
fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpLT5p
c1hSQ29tcGF0aWJsZSgpKTsKKyAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpLmlzWFJD
b21wYXRpYmxlKCkpOwogI2VuZGlmCi0gICAgfQogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQog
CiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4
dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMp
CkBAIC00ODYsMjEgKzQ4OCwyMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2Fu
dmFzRWxlCiAgICAgaWYgKCFzaG91bGRFbmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmlzV2ViR0woKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBj
cmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykpOwogCi0gICAgICAgIC8vIFRo
ZSBwaHJhc2luZyBvZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBpbGUtdGltZSBndWFyZHMgZm9y
IFdlYkdMMiBzdXBwb3J0LgotICAgICAgICBpZiAodHlwZSA9PSBXZWJHTFZlcnNpb246OldlYkdM
MSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgICAgICBpZiAodHlwZSAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiBt
X2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
CisgICAgLy8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBhdm9pZHMgY29tcGlsZS10aW1l
IGd1YXJkcyBmb3IgV2ViR0wyIHN1cHBvcnQuCisgICAgaWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9u
OjpXZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRl
Q29udGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMpKTsKLSAgICByZXR1cm4gJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRleHQpOworICAgIGlmICh0eXBlICE9
IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRShXRUJHTCkKQEAgLTUxNSwxOCArNTE2LDE3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6
OmlzV2ViR1BVVHlwZShjb24KIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBBU1NFUlRfVU5V
U0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5cGUodHlwZSkpOwotICAgIEFT
U0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgp
KTsKIAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygpLndlYkdQVUVuYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvbnRleHQgPSBHUFVDYW52YXNDb250ZXh0
OjpjcmVhdGUoKnRoaXMpOwotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gTmVlZCB0
byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0
ZWQgZm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKLSAgICB9CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChHUFVDYW52YXNDb250ZXh0
OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgorICAg
IGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIAotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
JmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIEdQ
VUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR1BVKGNvbnN0
IFN0cmluZyYgdHlwZSkKQEAgLTUzNiwxMiArNTM2LDEzIEBAIEdQVUNhbnZhc0NvbnRleHQqIEhU
TUxDYW52YXNFbGVtZW50OjpnZXQKICAgICBpZiAoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS53ZWJH
UFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fY29udGV4
dCAmJiAhbV9jb250ZXh0LT5pc1dlYkdQVSgpKQorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCku
aXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR1BVKHR5cGUpOworCisg
ICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRl
eHRXZWJHUFUodHlwZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUNhbnZhc0NvbnRleHQq
PihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4
dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkBA
IC01NTQsMjQgKzU1NSwyOSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRl
cmVyCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQo
dHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFwUmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAg
ICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncykpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQo
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGlu
Z3MpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8v
IE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdl
dCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29t
cG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2Fz
dDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAK
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBI
VE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUodHlwZSkpOwotICAgIGlmICgh
bV9jb250ZXh0KQorICAgIAorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAg
ICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIodHlwZSwgV1RGTW92ZShz
ZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIAorICAgIGlmICghcmVuZGVyaW5nQ29udGV4
dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29u
dGV4dCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlkRHJhdyhjb25zdCBPcHRp
b25hbDxGbG9hdFJlY3Q+JiByZWN0KQpAQCAtNjE1LDE0ICs2MjEsMTUgQEAgdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6cmVzZXQoKQogICAgIGludCBoID0gbGltaXRUb09ubHlIVE1MTm9uTmVnYXRp
dmUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihoZWlnaHRBdHRyKSwgZGVmYXVsdEhl
aWdodCk7CiAKICAgICByZXNldEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0gICAgaWYgKGlzPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXNldCgpOworICAgIGlm
IChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KS5yZXNldCgpOwogCiAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIEludFNpemUg
bmV3U2l6ZSh3LCBoKTsKKwogICAgIC8vIElmIHRoZSBzaXplIG9mIGFuIGV4aXN0aW5nIGJ1ZmZl
ciBtYXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBpbnN0ZWFkIG9mIHJlYWxsb2NhdGluZy4K
ICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGRvbmUgZm9yIDJEIGNhbnZhc2VzIGZv
ciBub3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyICYmIG9sZFNpemUgPT0gbmV3
U2l6ZSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkgJiYgYnVmZmVyKCkgJiYgbV9j
b250ZXh0LT5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNvbG9yU3BhY2UoKSAmJiBtX2NvbnRl
eHQtPnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9ybWF0KCkpIHsKKyAgICBpZiAo
bV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBuZXdTaXplICYmIHJlbmRlcmlu
Z0NvbnRleHQoKS5pczJkKCkgJiYgYnVmZmVyKCkgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmNvbG9y
U3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIHJlbmRlcmluZ0NvbnRleHQoKS5w
aXhlbEZvcm1hdCgpID09IGJ1ZmZlcigpLT5waXhlbEZvcm1hdCgpKSB7CiAgICAgICAgIGlmICgh
bV9kaWRDbGVhckltYWdlQnVmZmVyKQogICAgICAgICAgICAgY2xlYXJJbWFnZUJ1ZmZlcigpOwog
ICAgICAgICByZXR1cm47CkBAIC02MzEsNyArNjM4LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cmVzZXQoKQogICAgIHNldFN1cmZhY2VTaXplKG5ld1NpemUpOwogCiAgICAgaWYgKGlzR1BV
QmFzZWQoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRD
YW52YXNSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KS5yZXNoYXBlKHdpZHRoKCksIGhlaWdo
dCgpKTsKKyAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0Pihy
ZW5kZXJpbmdDb250ZXh0KCkpLnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogCiAgICAgYXV0
byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGlzPFJlbmRlckhUTUxDYW52
YXM+KHJlbmRlcmVyKSkgewpAQCAtNjUwLDEzICs2NTcsMTIgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFz
QnVmZmVyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKICNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2NvbnRleHQtPmlzMmQoKSB8fCBt
X2NvbnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgp
LmlzMmQoKSB8fCByZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0
ZWQoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlbmRlckJveCgpICYmIHJlbmRlckJveCgpLT5o
YXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCkBAIC02NjgsNDIgKzY3NCwzNSBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcikK
IHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyQWNjdW11bGF0
ZWREaXJ0eVJlY3QoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkuY2xlYXJBY2N1bXVsYXRlZERp
cnR5UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAg
ICAgICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9jb250ZXh0KSB7
Ci0gICAgICAgICAgICBzaG91bGRQYWludCA9IHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSB8fCBk
b2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1NuYXBzaG90dGluZzsKLSAgICAgICAgICAgIGlm
IChzaG91bGRQYWludCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRp
c3BsYXlXaXRoUGFpbnQoKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAg
ICBib29sIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIHx8IGRvY3VtZW50
KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwogICAgICAgICBpZiAoc2hvdWxkUGFp
bnQpIHsKKyAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wcmVwYXJlRm9yRGlzcGxheVdp
dGhQYWludCgpOworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBi
dWZmZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW1hZ2VCdWZmZXIgPSBidWZmZXIo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVm
ZmVyLCBzbmFwcGVkSW50UmVjdChyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aGFzQWN0aXZlSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKSkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqbV9jb250ZXh0KTsKKyAgICBpZiAo
VU5MSUtFTFkocmVuZGVyaW5nQ29udGV4dCgpLmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXIoKSkpCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVj
b3JkaW5nQ2FudmFzRnJhbWUocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogYm9vbCBIVE1MQ2Fu
dmFzRWxlbWVudDo6aXNHUFVCYXNlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzR1BVQmFzZWQoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgp
LmlzR1BVQmFzZWQoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBDYW52YXNCYXNlOjpzZXRTaXplKHNpemUp
OwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7Ci0gICAgc2V0SW1hZ2VCdWZm
ZXIobnVsbHB0cik7CisgICAgZGVzdHJveUltYWdlQnVmZmVyKCk7CiAgICAgY2xlYXJDb3BpZWRJ
bWFnZSgpOwogfQogCkBAIC03OTUsMTEgKzc5NCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1M
Q2FudmFzRWxlbWVudDo6dG9CCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiBFeGNlcHRp
b25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5zZmVyQ29u
dHJvbFRvT2Zmc2NyZWVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
aWYgKG1fY29udGV4dCkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIG1fY29u
dGV4dCA9IG1ha2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7Ci0g
ICAgaWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIHNldFJlbmRlcmluZ0NvbnRl
eHQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIGlm
IChyZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICBpbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGUoY29udGV4dCwgKnRoaXMpOwpAQCAtODA5LDEwICs4MDksMTAgQEAgRXhjZXB0aW9u
T3I8UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYQogUmVmUHRyPEltYWdlRGF0YT4gSFRNTENh
bnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiB7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlm
IChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAg
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsK
ICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVy
OjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGRvY3VtZW50KCkpOwotICAgICAgICByZXR1cm4gZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkucGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkucGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9JbWFnZURhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTkyMSw3ICs5MjEsNyBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlM
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSk7CiAKQEAg
LTk1OCwyNiArOTU4LDIwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVm
ZmUKICAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdp
bmcgb24gY2FudmFzLgogICAgIGF1dG8gdXNlRGlzcGxheUxpc3QgPSBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5n
RW5hYmxlZCgpKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91bGRVc2VEaXNwbGF5
TGlzdDo6Tm87CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBwaXhlbEZvcm1hdF0gPSBbJl0gewot
ICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1f
Y29udGV4dC0+Y29sb3JTcGFjZSgpLCBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgfTsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6cGFpciB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxG
b3JtYXQ6OkJHUkE4IH07Ci0gICAgfSgpOwotCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJp
bmdQdXJwb3NlOjpDYW52YXMsIDEsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBob3N0V2luZG93
KSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRl
cmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEsIHJl
bmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCksIHJlbmRlcmluZ0NvbnRleHQoKS5waXhlbEZv
cm1hdCgpLCBob3N0V2luZG93KSk7CiAKICAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCiAgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4dCAm
JiBtX2NvbnRleHQtPmlzMmQoKSkgeworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgp
KSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBh
Y2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7Cisg
ICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICB9CiAjZW5k
aWYKIAotICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYgYnVmZmVyKCktPnByZWZlcnNQ
cmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKKyAgICBpZiAoIXJlbmRlcmlu
Z0NvbnRleHQoKS5pc05vbmUoKSAmJiBidWZmZXIoKSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBh
cmF0aW9uRm9yRGlzcGxheSgpKQorICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKIH0K
IAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoUmVm
UHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKQEAgLTEwMDMsMzEgKzk5NywzMCBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAgICAgZGlkRHJhdyhGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpj
b3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdl
KCkKIHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVyKCkpIHsKLSAgICAgICAgaWYg
KG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1hZ2UgPSBidWZmZXIoKS0+Y29weUlt
YWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xl
YXJJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsK
ICAgICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7Ci0gICAgQVNTRVJUKG1fY29udGV4
dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpOwogCiAgICAgbV9kaWRD
bGVhckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAvLyBObyBuZWVkIHRvIHVuZG8gdHJh
bnNmb3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoZSBj
b250ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIH0KIH0KIAotdm9pZCBI
VE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVs
bHB0cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBmYWxzZTsKQEAgLTEwNDEsOSArMTAz
NCw5IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50OjphY3RpdmVET00KIGJvb2wgSFRN
TENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewogI2lm
IEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9j
b250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihy
ZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0
IG1heSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5nZSAvIGNvbnRleHRyZXN0b3JlZCBl
dmVudHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4gbV9oYXNSZWxldmFudFdlYkdMRXZl
bnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29u
dGV4dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIG1faGFz
UmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3Qo
KTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcwLDcgQEAgTm9kZTo6SW5zZXJ0ZWRJ
bnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCk7
CiAgICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhhdmUgYmVlbiBpc3N1ZWQgdG8gdGhl
IGNhbnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIHRlbGwgdGhlIGRv
Y3VtZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAgICAgIGlmIChtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKKyAgICAgICAgaWYg
KHJlbmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKICAg
ICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRoaXMsIEZsb2F0UmVjdCB7IH0pOwog
ICAgIH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpy
ZW1vdmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRp
b25Gb3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+bmVl
ZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgp
Lm5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NFUlQobmVlZHNQcmVwYXJhdGlvbkZv
ckRpc3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnBy
ZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29udGV4dCgpLnByZXBhcmVGb3JEaXNw
bGF5KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQ29udHJvbGxlZEJ5T2Zmc2Ny
ZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNQbGFj
ZWhvbGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0KCkuaXNQbGFjZWhvbGRlcigp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShy
ZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJyaWRlOwogCi0gICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRl
eHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHRJZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKLQog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQoY29uc3QgU3RyaW5nJik7CiAK
ICAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJpbmcmKTsKQEAgLTExNiw4ICsxMTQs
OCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFtPj4gY2FwdHVyZVN0
cmVhbShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBmcmFtZVJlcXVlc3RSYXRlKTsKICNl
bmRpZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBj
bGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkg
ZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7CiAgICAgUmVmUHRyPElt
YWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlP
cmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2MywxMCArMTYxLDkgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcmVzZXQoKTsKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsKLQogICAgIGJvb2wgaGFzQ3Jl
YXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VC
dWZmZXI7IH0KKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgdm9pZCBj
bGVhckltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHNldFN1cmZhY2VTaXplKGNvbnN0IEludFNp
emUmKTsKIApAQCAtMTgzLDE2ICsxODAsMTUgQEAgcHJpdmF0ZToKICAgICBOb2RlOjpJbnNlcnRl
ZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92
YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBmaW5hbDsKIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0g
ICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlz
IHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZm
ZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KKyAgICBSZWZQdHI8SW1hZ2U+
IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1z
IHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENT
U0NhbnZhc1ZhbHVlKS4KIAogICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OwogCiAg
ICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKICAgICAvLyBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gV2UgZGlkbid0IG5l
Y2Vzc2FyaWx5IGdldCBpdC4KLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIgeyBmYWxzZSB9OwotICAgIG11dGFibGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9kaWRDbGVhckltYWdlQnVmZmVyIHsgZmFsc2UgfTsKICNpZiBFTkFCTEUoV0VCR0wp
CiAgICAgYm9vbCBtX2hhc1JlbGV2YW50V2ViR0xFdmVudExpc3RlbmVyIHsgZmFsc2UgfTsKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAkocmV2aXNp
b24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIFJlZjxPZmZzY3JlZW5DYW52YXM+IE9mZnNj
cmVlbkNhbnZhczo6Y3IKICAgICBjYWxsT25NYWluVGhyZWFkKFtkZXRhY2hlZENhbnZhcyA9IFdU
Rk1vdmUoZGV0YWNoZWRDYW52YXMpLCBwbGFjZWhvbGRlckRhdGEgPSBtYWtlUmVmKCpjbG9uZS0+
bV9wbGFjZWhvbGRlckRhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgcGxhY2Vob2xkZXJEYXRh
LT5jYW52YXMgPSBkZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CiAgICAg
ICAgIGlmIChwbGFjZWhvbGRlckRhdGEtPmNhbnZhcykgewotICAgICAgICAgICAgYXV0byYgcGxh
Y2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Pigq
cGxhY2Vob2xkZXJEYXRhLT5jYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgICAg
ICBhdXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQ+KHBsYWNlaG9sZGVyRGF0YS0+Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwog
ICAgICAgICAgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0gcGxhY2Vob2xkZXJDb250ZXh0Lmlt
YWdlQnVmZmVyUGlwZSgpOwogICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyUGlwZSkKICAgICAg
ICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZl
clBpcGUtPnNvdXJjZSgpOwpAQCAtMTE1LDkgKzExNSw2IEBAIE9mZnNjcmVlbkNhbnZhczo6T2Zm
c2NyZWVuQ2FudmFzKFNjcmlwdEUKIE9mZnNjcmVlbkNhbnZhczo6fk9mZnNjcmVlbkNhbnZhcygp
CiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2NvbnRl
eHQgPSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1
ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0KIAogdW5zaWduZWQgT2Zmc2Ny
ZWVuQ2FudmFzOjp3aWR0aCgpIGNvbnN0CkBAIC0xNTQsNiArMTUxLDIzIEBAIHZvaWQgT2Zmc2Ny
ZWVuQ2FudmFzOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXNldCgpOwogfQogCitib29sIE9m
ZnNjcmVlbkNhbnZhczo6aXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUp
Cit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpfMmQ7
Cit9CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5
cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250ZXh0VHlwZSksIGNvbnRleHRU
eXBlKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKKworICAgIC8v
IEZJWE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBlbm91Z2ggcGl4ZWwgbWVtb3J5
LiBTZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZC4KKworICAgIHNldFJlbmRl
cmluZ0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRo
aXMpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYgRU5BQkxFKFdFQkdMKQogc3Rh
dGljIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yV2ViR0woKQogewpAQCAt
MTc1LDI4ICsxODksNDIgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlV2ViR0woYm9vbCB3ZWJH
TAogICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKIH0KIAotdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSBj
b250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQorYm9vbCBPZmZzY3Jl
ZW5DYW52YXM6OmlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlKQor
eworICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wg
fHwgY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsMjsKK30KKworV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVDb250ZXh0V2Vi
R0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXMmJiBhdHRycykKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKGlzV2Vi
R0xUeXBlKGNvbnRleHRUeXBlKSk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSk7CiAKICAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29y
a2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xv
YmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHdvcmtlckdsb2JhbFNjb3Bl
LnNldHRpbmdzVmFsdWVzKCkud2ViR0xFbmFibGVkLCB3b3JrZXJHbG9iYWxTY29wZS5zZXR0aW5n
c1ZhbHVlcygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGF1dG8mIHNldHRpbmdz
ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zZXR0aW5ncygp
OwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHNldHRpbmdzLndlYkdMRW5hYmxlZCgp
LCBzZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb24gd2ViR0xWZXJzaW9u
ID0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIHdlYkdMVmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4dEdMV2Vi
R0xWZXJzaW9uOjpXZWJHTDE7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICB3ZWJHTFZlcnNpb24g
PSAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsKSA/IEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDEgOiBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVy
c2lvbjo6V2ViR0wyOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dFR5cGUpOwogI2Vu
ZGlmCi0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0
aGlzLCBhdHRycywgd2ViR0xWZXJzaW9uKTsKKworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHdlYkdMVmVyc2lvbik7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRl
cmluZ0NvbnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoY29u
dGV4dCkpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKQEAg
LTIwNiw0NCArMjM0LDUzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmlu
Z0MKICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4
dFR5cGU6Ol8yZCkgewotICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAo
IWlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkpCisgICAg
aWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmlu
Z0NvbnRleHQoKS5pczJkKCkpIHsKKyAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dFR5
cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLSAgICAg
ICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAg
ICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCp0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4g
eyB7IFdURjo6bnVsbG9wdCB9IH07Ci0KLSAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OwotICAgIH0KICNpZiBFTkFCTEUo
V0VCR0wpCi0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKHJl
bmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNXZWJHTFR5
cGUoY29udGV4dFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0
IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIGlmIChp
czxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIGlmIChp
czxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25j
YXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07Cisj
ZW5kaWYKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9Owog
ICAgICAgICB9CiAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICB9CisKKyAgICBpZiAoaXMyZFR5cGUoY29udGV4
dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy4KKyAgICAgICAgYXV0byBjb250ZXh0ID0gY3Jl
YXRlT2Zmc2NyZWVuQ29udGV4dDJkKGNvbnRleHRUeXBlKTsKKyAgICAgICAgaWYgKCFjb250ZXh0
KQorICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1
cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4
dCB9IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYgKGlzV2ViR0xUeXBl
KGNvbnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udmVydDxJRExEaWN0
aW9uYXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwgIWFyZ3VtZW50cy5pc0VtcHR5
KCkgPyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkpOwogICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVy
cm9yIH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0VHlwZSwgV1RGTW92
ZShhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBhdXRvIGNv
bnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmlidXRl
cykpOworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6
bnVsbG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICBpZiAoaXM8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCpj
b250ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29u
dGV4dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07
CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg5LDEwIEBAIEV4Y2VwdGlvbk9yPE9wdGlv
bmFsPE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFw
Pj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogewotICAgIGlmICht
X2RldGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0YWNoZWQgfHwgcmVuZGVyaW5n
Q29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0
YXRlRXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51
bGxwdHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNSwxNSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1h
Z2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZlcigpLCB0byBhdm9pZCByZXNl
dHRpbmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFrZSBhIGNvcHkgYW5kCiAgICAg
ICAgIC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRo
ZSBvcmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9IGJ1ZmZlcigpLT5j
b3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJ1ZmZlcigpLT5sb2dpY2Fs
U2l6ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdpbmdDb250ZXh0KCkpOwotICAg
ICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhckNhbnZhcygpOwogICAgICAg
ICBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJDb3B5KSwgb3JpZ2luQ2xlYW4o
KSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxpemF0aW9uU3RhdGUo
KSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1dG8gd2ViR0xDb250ZXh0ID0g
JmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCk7CisgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgeworICAgICAgICBh
dXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1cHBvc2VkIHRvIGNy
ZWF0ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwogICAgICAgICAvLyBzdG9yZSBm
cm9tIHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBmb3Igbm93IHdlJ2xsIGp1c3QK
QEAgLTM1OCwyMCArMzk1LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpkaWREcmF3KGNvbnN0
IE9wdGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwogfQogCi1JbWFn
ZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogT2Zmc2NyZWVu
Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVy
KCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7
CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCi12b2lkIE9mZnNj
cmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZh
czo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9IG51bGxwdHI7CiB9
CkBAIC0zODcsNyArNDIzLDcgQEAgU2VjdXJpdHlPcmlnaW4qIE9mZnNjcmVlbkNhbnZhczo6c2Vj
dXJpdAogCiBib29sIE9mZnNjcmVlbkNhbnZhczo6Y2FuRGV0YWNoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gIW1fZGV0YWNoZWQgJiYgIW1fY29udGV4dDsKKyAgICByZXR1cm4gIW1fZGV0YWNoZWQg
JiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RGV0
YWNoZWRPZmZzY3JlZW5DYW52YXM+IE9mZnNjcmVlbkNhbnZhczo6ZGV0YWNoKCkKQEAgLTQwNSwx
MCArNDQxLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4KIAog
dm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVt
ZW50JiBjYW52YXMpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIEFTU0VSVChyZW5k
ZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgbV9wbGFjZWhvbGRlckRhdGEtPmNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7Ci0gICAg
YXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0PigqY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgcGxhY2Vob2xk
ZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PihjYW52YXMu
cmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhv
bGRlckNvbnRleHQuaW1hZ2VCdWZmZXJQaXBlKCk7CiAgICAgaWYgKGltYWdlQnVmZmVyUGlwZSkK
ICAgICAgICAgbV9wbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZl
clBpcGUtPnNvdXJjZSgpOwpAQCAtNDMxLDggKzQ2Nyw4IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFz
Ojpjb21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRy
YW5zZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGlu
ZwotICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1fY29udGV4
dC0+aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpIHx8
IHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIHJlbmRlcmluZ0Nv
bnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCiAgICAgaWYgKG1fcGxh
Y2Vob2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAgICAgIGF1dG8gYnVmZmVyQ29w
eSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdC
LCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ2OSw3ICs1MDUsNyBAQCBDU1NWYWx1ZVBv
b2wmIE9mZnNjcmVlbkNhbnZhczo6Y3NzVmFsdWVQCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6
c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZl
cigpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKQogewog
ICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKIApAQCAtNDc5LDcgKzUxNSw3IEBA
IHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigKICAgICBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJpdG1hcDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKmNhbnZhc0Jhc2VTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCksIHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwog
fQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIoKQogewogICAgIEFTU0VSVChtX2RldGFjaGVkKTsKIApAQCAtNDkzLDggKzUyOSw4IEBA
IFJlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWsKIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpyZXNldCgpCiB7CiAgICAgcmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAg
IGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICBkb3duY2FzdDxPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzZXQoKTsK
IAogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAgc2V0SW1hZ2VCdWZm
ZXIobnVsbHB0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJKHJl
dmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDcgQEAgcHVibGljOgogICAgICAgICBkb3Vi
bGUgcXVhbGl0eSA9IDEuMDsKICAgICB9OwogCi0gICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250
ZXh0VHlwZSB7Ci0gICAgICAgIF8yZCwKLSAgICAgICAgV2ViZ2wsCi0gICAgICAgIFdlYmdsMgot
ICAgIH07CisgICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250ZXh0VHlwZSB7IF8yZCwgV2ViZ2ws
IFdlYmdsMiB9OwogCiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAg
ICAgc3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0Jiwgc3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPiYmKTsKQEAgLTEy
MiwxNiArMTE4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpZHRoKHVuc2lnbmVkKTsKICAg
ICB2b2lkIHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0
KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9Ci0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0
Pj4gZ2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVuZGVyaW5nQ29udGV4dFR5cGUs
IFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CiAgICAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAg
ICAgdm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyYmLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmKTsKIAogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+
JikgZmluYWw7CiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2
b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1h
Z2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKIAogICAgIGJv
b2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVh
dGVkSW1hZ2VCdWZmZXI7IH0KIApAQCAtMTQ4LDcgKzE0Miw2IEBAIHB1YmxpYzoKICAgICB1c2lu
ZyBSZWZDb3VudGVkOjpkZXJlZjsKIAogcHJpdmF0ZToKLQogICAgIE9mZnNjcmVlbkNhbnZhcyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7
CiAKICAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQpAQCAtMTY1LDEyICsxNTgsMTYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0U2l6ZShj
b25zdCBJbnRTaXplJikgZmluYWw7CiAKKyAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShSZW5kZXJp
bmdDb250ZXh0VHlwZSk7CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBj
cmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUpOworCiAjaWYgRU5B
QkxFKFdFQkdMKQotICAgIHZvaWQgY3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmluZ0NvbnRleHRU
eXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgPSB7IH0pOworICAgIHN0YXRpYyBib29sIGlz
V2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUsIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMmJik7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
KSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigp
IGNvbnN0OworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBmaW5hbDsKKyAgICBSZWZQdHI8
SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAgdm9pZCByZXNldCgpOwogCkBA
IC0xNzgsMTQgKzE3NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHVzaEJ1ZmZlclRvUGxhY2Vo
b2xkZXIoKTsKICAgICB2b2lkIHNjaGVkdWxlQ29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcygpOwog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
LQogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxv
YyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11dGFibGUg
Ym9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAKICAgICBib29sIG1fZGV0
YWNoZWQgeyBmYWxzZSB9OwogCi0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1h
Z2U7CisgICAgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwogCiAgICAgYm9vbCBtX2hhc1Nj
aGVkdWxlZENvbW1pdCB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24g
Mjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTEgKzY5LDExIEBAIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMs
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NT
U0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCitVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMs
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NT
U0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCiB7Ci0gICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0g
c3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obmV3IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpLCB1c2VzQ1NTQ29tcGF0aWJp
bGl0eVBhcnNlTW9kZSkpOworICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IG1ha2VVbmlxdWVS
ZWZGcm9tUmVmZXJlbmNlKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcywgV1RG
TW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CiAKLSAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQo
KnJlbmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3Jl
YXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250ZXh0LmdldCgpKTsKIAogICAg
IHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDI3
NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFRleHRNZXRyaWNz
OwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VN
b2RlKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3Jl
YXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKIAogICAgIHZpcnR1YWwgfkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogCiAgICAgQ2FudmFzQmFzZSYgY2Fu
dmFzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNOb25lKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViR0wxKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJHTDIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAgLy8gdXNlZCBm
b3IgY29tcG9zaXRpbmcgcHVycG9zZXMuCiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNw
bGF5V2l0aFBhaW50KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKCkgeyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIGJvb2wgaGFzQWN0aXZl
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWN0aXZlSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQogICAgIHZvaWQgc2V0SGFzQWN0aXZlSW5zcGVjdG9y
Q2FudmFzQ2FsbFRyYWNlcihib29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIp
IHsgbV9oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyID0gaGFzQWN0aXZlSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
Tm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChD
YW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSk7CisKK1VuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdD
b250ZXh0Tm9uZT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0ZShDYW52YXNCYXNl
JiBjYW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoY2FudmFzKSk7Cit9CisKK0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHROb25lOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZShDYW52YXNCYXNlJiBjYW52
YXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsgY2FudmFzIH0KK3sKK30KKworQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6On5DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSgpID0g
ZGVmYXVsdDsKKworfQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUgZmluYWwgOiBwdWJsaWMgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZSk7CitwdWJsaWM6CisgICAgc3RhdGljIFVuaXF1ZVJlZjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZT4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKworICAgIHZpcnR1
YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKCk7CisKK3ByaXZhdGU6CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFzZSYpOworCisgICAgYm9vbCBpc05vbmUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDExICs0
MiwxMSBAQCBzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlCiBzdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKICNlbmRpZgogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBj
YW52YXMsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCitV
bmlxdWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7Ci0gICAgYXV0byByZW5kZXJpbmdDb250ZXh0
ID0gc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4obmV3IEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpKSk7CisgICAg
YXV0byByZW5kZXJpbmdDb250ZXh0ID0gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOwog
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdD
b250ZXh0KCpyZW5kZXJpbmdDb250ZXh0KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQocmVuZGVyaW5nQ29udGV4dC5nZXQoKSk7
CiAKICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5o
CShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBj
bGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCBmaW5h
bCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52
YXNCYXNlJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJik7CisgICAgc3Rh
dGljIFVuaXF1ZVJlZjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52YXNC
YXNlJiwgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJik7CiAKICAgICBlbnVt
IGNsYXNzIEJpdG1hcE1vZGUgewogICAgICAgICBWYWxpZCwKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIAor
VW5pcXVlUmVmPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQoreworICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3IE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRChjYW52YXMpKTsKK30KKwogT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYg
Y2FudmFzKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZShjYW52YXMsIGZhbHNl
KQogewpAQCAtMTA4LDcgKzExMyw4IEBAIENhbnZhc0RpcmVjdGlvbiBPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmcKICAgICByZXR1cm4gRGlyZWN0aW9uOjpMdHI7CiB9CiAKLWF1dG8gT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAtPiBjb25zdCBGb250UHJveHkq
IHsKK2F1dG8gT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAt
PiBjb25zdCBGb250UHJveHkqCit7CiAgICAgaWYgKCFzdGF0ZSgpLmZvbnQucmVhbGl6ZWQoKSkK
ICAgICAgICAgc2V0Rm9udChzdGF0ZSgpLnVucGFyc2VkRm9udCk7CiAgICAgcmV0dXJuICZzdGF0
ZSgpLmZvbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjc3
MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpZiBFTkFC
TEUoT0ZGU0NSRUVOX0NBTlZBUykKIAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaCIKLQogI2luY2x1ZGUgIk9mZnNjcmVlbkNhbnZhcy5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNiw3ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPE9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKwogICAg
IHZpcnR1YWwgfk9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAgICAgT2Zm
c2NyZWVuQ2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxPZmZzY3JlZW5D
YW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIFJl
ZjxUZXh0TWV0cmljcz4gbWVhc3VyZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKIAogcHJpdmF0
ZToKKyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOwor
CiAgICAgYm9vbCBpc09mZnNjcmVlbjJkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGNvbnN0IEZvbnRQcm94eSogZm9udFByb3h5KCkgZmluYWw7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDkgKzM0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ+IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQor
VW5pcXVlUmVmPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBQYWludFJlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPihuZXcgUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQo
Y2FudmFzKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7CiB9CiAKIFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEOjpQYWludFJlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJiBjYW52YXMpCkBAIC00Nyw0
ICs0Nyw1IEBAIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEOjpQYWludFJlbmRlcmluZ0MKIFBhaW50
UmVuZGVyaW5nQ29udGV4dDJEOjp+UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoKSA9IGRlZmF1bHQ7
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlz
aW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5n
Q29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTggKzM2LDIwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFBhaW50UmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CisgICAgc3Rh
dGljIFVuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2Um
KTsKIAogICAgIHZpcnR1YWwgflBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKICAgICBDdXN0
b21QYWludENhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8Q3VzdG9tUGFp
bnRDYW52YXM+KGNhbnZhc0Jhc2UoKSk7IH0KIAogcHJpdmF0ZToKLSAgICBib29sIGlzUGFpbnQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBQYWludFJlbmRlcmluZ0Nv
bnRleHQyRChDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzUGFpbnQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ0FOVkFTUkVOREVSSU5HQ09OVEVYVChXZWJDb3JlOjpQYWludFJl
bmRlcmluZ0NvbnRleHQyRCwgaXNQYWludCgpKQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0LmNwcAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAg
KzM3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiAKK1VuaXF1ZVJlZjxQbGFjZWhvbGRl
clJlbmRlcmluZ0NvbnRleHQ+IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENh
bnZhc0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVu
Y2UoKm5ldyBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoY2FudmFzKSk7Cit9CisKIFBsYWNl
aG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZh
c0Jhc2UmIGNhbnZhcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQoY2FudmFzKQorICAg
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9CisgICAgLCBtX2ltYWdlQnVmZmVy
UGlwZSB7IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCkgfQogewotICAgIG1faW1hZ2VCdWZmZXJQ
aXBlID0gSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKTsKIH0KIAogSFRNTENhbnZhc0VsZW1lbnQq
IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5oCShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTMg
KzM3LDE1IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFBsYWNlaG9sZGVyUmVuZGVy
aW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk7CiBwdWJs
aWM6Ci0gICAgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmKTsKKyAgICBz
dGF0aWMgVW5pcXVlUmVmPFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENhbnZh
c0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMoKSBjb25zdDsKIAogICAg
IGNvbnN0IFJlZlB0cjxJbWFnZUJ1ZmZlclBpcGU+JiBpbWFnZUJ1ZmZlclBpcGUoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlQnVmZmVyUGlwZTsgfQogCiBwcml2YXRlOgorICAgIFBsYWNlaG9sZGVy
UmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CisKICAgICBib29sIGlzUGxhY2Vob2xkZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24g
Mjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NDEsNyArNDg0MSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgLy8gc28gZm9yIFdlYkdM
IDEuMCB1cGxvYWRzLCBkZWZlciBtZWFzdXJpbmcgdGhlaXIgcmVjdGFuZ2xlIGFzIGxvbmcgYXMg
cG9zc2libGUuCiAgICAgICAgIHRleEltYWdlSW1wbChmdW5jdGlvbklELCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgZm9ybWF0LCB0eXBl
LCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZmFsc2UsIGlucHV0
U291cmNlSW1hZ2VSZWN0LCBkZXB0aCwgdW5wYWNrSW1hZ2VIZWlnaHQpOwogICAgICAgICByZXR1
cm4geyB9OwotICAgIH0sIFsmXShjb25zdCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+JiBjYW52
YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKKyAgICB9LCBbJl0oUmVmUHRyPEhUTUxDYW52YXNF
bGVtZW50PiYgY2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CiAgICAgICAgIGF1dG8gdmFs
aWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoZnVuY3Rpb25OYW1lLCBj
YW52YXMuZ2V0KCkpOwogICAgICAgICBpZiAodmFsaWRhdGlvblJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKICAgICAgICAgICAgIHJldHVybiB2YWxpZGF0aW9uUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3Bw
CShyZXZpc2lvbiAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKICNpZiBFTkFCTEUoV0VCR1BV
KQotc3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNl
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2aWNlKQor
c3RhdGljIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKGNv
bnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIFdlYkdQVURldmljZSYgZGV2aWNl
KQogewogICAgIGlmIChpczxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0KSkgewogICAgICAgICBh
dXRvJiBjb250ZXh0R1BVID0gZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCk7CkBA
IC0xOTUsNyArMTk1LDcgQEAgV2ViR1BVRGV2aWNlKiBJbnNwZWN0b3JDYW52YXM6OmRldmljZUNv
bgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZp
Y2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
Citib29sIEluc3BlY3RvckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KGNvbnN0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRl
dmljZSA9IGRldmljZUNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIGNhbnZhc0lmQ29udGV4dE1h
dGNoZXNEZXZpY2UoY29udGV4dCwgKmRldmljZSk7CkBAIC0xMDc2LDE2ICsxMDc2LDE2IEBAIFN0
cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnQKICAgICB9CiAKICNpZiBFTkFC
TEUoV0VCR0wpCi0gICAgYXV0byogY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQoKTsK
KyAgICBhdXRvJiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29udGV4dCgpOwogICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVh
ckZvckluc3BlY3Rvcih0cnVlKTsKKyAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZT4oY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVjdG9yKHRydWUp
OwogI2VuZGlmCiAKICAgICBFeGNlcHRpb25PcjxVbmNhY2hlZFN0cmluZz4gcmVzdWx0ID0gbm9k
ZS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MpOwogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlm
IChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkKLSAgICAgICAgZG93bmNh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJD
bGVhckZvckluc3BlY3RvcihmYWxzZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rvcihm
YWxzZSk7CiAjZW5kaWYKIAogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHJldmlzaW9uIDI3
NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogICAgIFdlYkdQVURldmljZSogZGV2aWNlQ29udGV4dCgpIGNvbnN0OwotICAgIGJvb2wgaXNE
ZXZpY2VGb3JDYW52YXNDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKSBjb25zdDsKKyAg
ICBib29sIGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0JikgY29uc3Q7CiAjZW5kaWYKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDI3
NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnZhc0FnZW50
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpCitzdGF0aWMg
SW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNBZ2VudChjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQogewogICAgIEFTU0VSVChJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb25QdWJsaWM6Omhhc0Zyb250ZW5kcygpKTsKIApAQCAtODMsNyAr
ODMsNyBAQCBzdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52CiB9CiAKICNk
ZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFyZ3VtZW50VHlwZSkgXAotT3B0aW9u
YWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IEluc3BlY3Rv
ckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1lbnQpIFwKK09wdGlv
bmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0
b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBc
CiB7IFwKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQoY2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCkpIFwKICAgICAgICAgcmV0dXJuIGNhbnZhc0FnZW50LT5wcm9j
ZXNzQXJndW1lbnQoY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgYXJndW1lbnQpOyBcCkBAIC05Myw3
ICs5Myw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2MKICAgICBG
T1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJH
VU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04KIAot
dm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQordm9p
ZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5nJiYgbmFtZSwgSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYgYXJndW1lbnRzKQog
ewogICAgIGlmIChhdXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRDYW52YXNBZ2VudChjYW52YXNS
ZW5kZXJpbmdDb250ZXh0KSkKICAgICAgICAgY2FudmFzQWdlbnQtPnJlY29yZEFjdGlvbihjYW52
YXNSZW5kZXJpbmdDb250ZXh0LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOwpA
QCAtMTAxLDE0ICsxMDEsMTIgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpyZWNv
cmRBYwogCiBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1
bWVudD4gSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhU
TUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50LCB1aW50MzJfdCBhcmd1bWVudCkKIHsKLSAg
ICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpOwotICAgIHJldHVybiBw
cm9jZXNzQXJndW1lbnQoKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBhcmd1bWVu
dCk7CisgICAgcmV0dXJuIHByb2Nlc3NBcmd1bWVudChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0Nv
bnRleHQoKSwgYXJndW1lbnQpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6
OnJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgU3Ry
aW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRz
JiYgYXJndW1lbnRzKQogewotICAgIEFTU0VSVChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRl
eHQoKSk7Ci0gICAgcmVjb3JkQWN0aW9uKCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQo
KSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsKKyAgICByZWNvcmRBY3Rpb24o
Y2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
YXJndW1lbnRzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaAko
cmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDEyICsxOTQsMTIgQEAgcHVi
bGljOgogICAgIHVzaW5nIFByb2Nlc3NlZEFyZ3VtZW50cyA9IHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVudD4+OwogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1F
TlRfREVDTEFSQVRJT04oQXJndW1lbnRUeXBlKSBcCi0gICAgc3RhdGljIE9wdGlvbmFsPFByb2Nl
c3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFy
Z3VtZW50VHlwZSk7IFwKKyAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+IHBy
b2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRUeXBl
KTsgXAogLy8gZW5kIG9mIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KICAgICBGT1JfRUFD
SF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRf
REVDTEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTgogCi0gICAg
c3RhdGljIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcm
JiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOworICAgIHN0YXRpYyB2b2lkIHJlY29yZEFj
dGlvbihjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIFByb2Nlc3NlZEFy
Z3VtZW50cyYmID0geyB9KTsKIAogICAgIHN0YXRpYyBPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVu
dD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiwgdWludDMyX3QpOwog
ICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYsIFN0
cmluZyYmLCBQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNw
cAkocmV2aXNpb24gMjc3MTczKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNywxMyArNDE3LDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZnJhbWVOYXZpZ2F0ZQogCiB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcyhDYW52YXNCYXNl
JiBjYW52YXNCYXNlKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRlcmlu
Z0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGluc3BlY3RvckNhbnZh
cyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKSk7
CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMp
CiAgICAgICAgIHJldHVybjsKQEAgLTQ0Nyw3ICs0NDEsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVDYW52CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGluc3BlY3RvckNhbnZhczsKIApAQCAtNDc3LDExICs0NzEsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFzZSwgY29uc3QgT3B0aW9u
YWw8RmxvYXRSZWN0PiYpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVy
aW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAg
ICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5y
ZW5kZXJpbmdDb250ZXh0KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlm
ICghaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICByZXR1cm47CkBAIC00OTEsMTEgKzQ4MSw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0NoYW5nZWQKIAogdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UpCiB7
Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgpOwotICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBpbnNwZWN0b3JDYW52
YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3RvckNh
bnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCkp
OwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFz
KQogICAgICAgICByZXR1cm47CkBAIC01MDMsNyArNDg5LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6Y2FudmFzRGVzdHJveQogICAgIHVuYmluZENhbnZhcygqaW5zcGVjdG9yQ2FudmFz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2Fu
dmFzRnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURpc3Bh
dGNoKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFz
RnJhbWUoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgYm9vbCBmb3JjZURp
c3BhdGNoKQogewogICAgIGlmICghY29udGV4dC5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUzNyw3ICs1MjMsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvCiAgICAgbV9yZWNvcmRpbmdDYW52YXNJZGVu
dGlmaWVycy5yZW1vdmUoaW5zcGVjdG9yQ2FudmFzLT5pZGVudGlmaWVyKCkpOwogfQogCi12b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlND
OjpKU09iamVjdCogb3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVjLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKQogewog
ICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjb250ZXh0KTsK
ICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKQEAgLTU1OSw3ICs1NDUsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSCiAgICAgc3RhcnRSZWNvcmRpbmcoKmlu
c3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpDb25zb2xlLCBX
VEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2Fu
dmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgZGlkRmlu
aXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoY29udGV4dCwgdHJ1ZSk7CiB9CkBAIC02ODIsNyArNjY4
LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lXZQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCiAKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKEFy
Z3VtZW50VHlwZSkgXAotT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vz
c2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFy
Z3VtZW50KSBcCitPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRB
cmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUg
YXJndW1lbnQpIFwKIHsgXAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3Rv
ckNhbnZhcyhjYW52YXNSZW5kZXJpbmdDb250ZXh0KTsgXAogICAgIEFTU0VSVChpbnNwZWN0b3JD
YW52YXMpOyBcCkBAIC02OTIsNyArNjc4LDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlcjo6UHJvYwogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFDRVJf
QVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJH
VU1FTlRfREVGSU5JVElPTgogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRBY3Rp
b24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3RyaW5n
JiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRzJiYg
YXJndW1lbnRzKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3JkQWN0aW9uKGNvbnN0
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYm
IG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFy
Z3VtZW50cykKIHsKICAgICBBU1NFUlQoY2FudmFzUmVuZGVyaW5nQ29udGV4dC5oYXNBY3RpdmVJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpOwogCkBAIC04ODcsNyArODczLDcgQEAgUmVmUHRy
PEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQQogICAgIHJldHVybiBpbnNwZWN0b3JD
YW52YXM7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50
OjpmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCitS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZmluZEluc3BlY3Rv
ckNhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGZv
ciAoYXV0byYgaW5zcGVjdG9yQ2FudmFzIDogbV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMu
dmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGluc3BlY3RvckNhbnZhcy0+Y2FudmFzQ29udGV4dCgp
ID09ICZjb250ZXh0KQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDYW52YXNBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAkocmV2aXNpb24gMjc3MTczKQorKysgU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OSwxMCArOTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVOYXZp
Z2F0ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKENh
bnZhc0Jhc2UmKTsKICAgICB2b2lkIGRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZh
c0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBib29sIGZvcmNlRGlzcGF0Y2ggPSBmYWxz
ZSk7Ci0gICAgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKTsK
LSAgICB2b2lkIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmKTsKKyAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9yeShjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0Jik7CisgICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNoID0gZmFsc2UpOwor
ICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0aW9ucyk7
CisgICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIHZvaWQgZGlkRW5hYmxlRXh0ZW5z
aW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IGRpZENyZWF0ZVdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgV2ViR0xQ
cm9ncmFtJik7CkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBwdWJsaWM6CiAKICAgICAvLyBJbnNwZWN0
b3JDYW52YXNDYWxsVHJhY2VyCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04o
QXJndW1lbnRUeXBlKSBcCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6
UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiwgQXJndW1lbnRUeXBlKTsgXAorICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VNRU5U
X0RFQ0xBUkFUSU9OCiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9B
UkdVTUVOVChQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJH
VU1FTlRfREVDTEFSQVRJT04KLSAgICB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdD
b250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFy
Z3VtZW50cyYmID0geyB9KTsKKyAgICB2b2lkIHJlY29yZEFjdGlvbihjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0JiwgU3RyaW5nJiYsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nl
c3NlZEFyZ3VtZW50cyYmID0geyB9KTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUmVjb3JkaW5n
T3B0aW9ucyB7CkBAIC0xNDYsNyArMTQ2LDcgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBFTkFCTEUo
V0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3RvckNhbnZhcyYpOwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZhcyhJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOworICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMo
Y29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAg
UmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhXZWJHUFVEZXZpY2Um
KTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsMTAgKzI0
MiwxMCBAQCBzdGF0aWMgSlNDOjpKU09iamVjdCogb2JqZWN0QXJndW1lbnRBdChTCiBzdGF0aWMg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCogY2FudmFzUmVuZGVyaW5nQ29udGV4dChKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHRhcmdldCkKIHsKICAgICBpZiAoYXV0byogY2FudmFzID0gSlNIVE1M
Q2FudmFzRWxlbWVudDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQotICAgICAgICByZXR1cm4gY2Fu
dmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiAmY2FudmFzLT5yZW5kZXJp
bmdDb250ZXh0KCk7CiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgaWYgKGF1dG8q
IGNhbnZhcyA9IEpTT2Zmc2NyZWVuQ2FudmFzOjp0b1dyYXBwZWQodm0sIHRhcmdldCkpCi0gICAg
ICAgIHJldHVybiBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZj
YW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKICNlbmRpZgogICAgIGlmIChhdXRvKiBjb250ZXh0
ID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKICAg
ICAgICAgcmV0dXJuIGNvbnRleHQ7CkBAIC0zNDksMTAgKzM0OSw4IEBAIHZvaWQgUGFnZUNvbnNv
bGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjoKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8mIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4o
Km5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQgPSBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNuYXBzaG90Q2FudmFzKGNhbnZh
c0VsZW1lbnQsICpjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc25hcHNo
b3RDYW52YXMoY2FudmFzRWxlbWVudCwgY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5j
cHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0N1c3RvbVBhaW50SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNyArMTY2LDcgQEAg
SW1hZ2VEcmF3UmVzdWx0IEN1c3RvbVBhaW50SW1hZ2U6OmRvQ3VzdAogICAgIGlmIChyZXN1bHQu
dHlwZSgpICE9IENhbGxiYWNrUmVzdWx0VHlwZTo6U3VjY2VzcykKICAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKIAotICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxp
c3QoJmRlc3RDb250ZXh0KTsKKyAgICBjYW52YXMtPnJlcGxheURpc3BsYXlMaXN0KGRlc3RDb250
ZXh0KTsKIAogICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZERyYXc7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lv
biAyNzcxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCw3IEBAIGJvb2wgUmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllcigpIGMKICAgICBpZiAoUmVuZGVyUmVwbGFjZWQ6OnJlcXVpcmVzTGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCA9IGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAg
ICAgIHJldHVybiBjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVy
YXRlZCgpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTczLDcg
KzcwLDcgQEAgdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaQogICAgIExh
eW91dFJlY3QgY29udGVudEJveFJlY3QgPSB0aGlzLT5jb250ZW50Qm94UmVjdCgpOwogCiAgICAg
aWYgKGNvbnRleHQuZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkpIHsKLSAgICAgICAgaWYgKCFj
b250ZXh0LmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSAmJiBjYW52YXNFbGVtZW50KCkucmVuZGVy
aW5nQ29udGV4dCgpKQorICAgICAgICBpZiAoIWNvbnRleHQuY29udGVuZnVsUGFpbnREZXRlY3Rl
ZCgpICYmICFjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAg
ICAgICAgICAgY29udGV4dC5zZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDI3NzE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiAr
OTEsMTIgQEAgQ2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneSBjYW52YXNDb21wb3NpdAogewogICAg
IEFTU0VSVChyZW5kZXJlci5pc0NhbnZhcygpKTsKICAgICAKLSAgICBjb25zdCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyLm5v
ZGUoKSk7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOwot
ICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIGNvbnN0
IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5ub2Rl
KCkpOworICAgIGF1dG8mIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAg
ICBpZiAoIWNvbnRleHQuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICByZXR1cm4gVW5hY2NlbGVy
YXRlZENhbnZhczsKICAgICAKLSAgICBpZiAoY29udGV4dC0+aXNHUFVCYXNlZCgpKQorICAgIGlm
IChjb250ZXh0LmlzR1BVQmFzZWQoKSkKICAgICAgICAgcmV0dXJuIENhbnZhc0FzTGF5ZXJDb250
ZW50czsKIAogICAgIHJldHVybiBDYW52YXNQYWludGVkVG9MYXllcjsgLy8gT24gTWFjIGFuZCBp
T1Mgd2UgcGFpbnQgYWNjZWxlcmF0ZWQgY2FudmFzZXMgaW50byB0aGVpciBsYXllcnMuCkBAIC0x
MDY0LDkgKzEwNjQsOCBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJh
CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpIHx8IEVOQUJMRShP
RkZTQ1JFRU5fQ0FOVkFTKQogICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuaXNDYW52YXMoKSAmJiBj
YW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KHJlbmRlcmVyKCkpID09IENhbnZhc0FzTGF5ZXJDb250
ZW50cykgewotICAgICAgICBjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gZG93bmNh
c3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKLSAgICAgICAgaWYg
KGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY29udGV4dC0+cGxh
dGZvcm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2FudmFz
KTsKKyAgICAgICAgY29uc3QgYXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KHJlbmRlcmVyKCkuZWxlbWVudCgpKTsKKyAgICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRD
b250ZW50c1RvUGxhdGZvcm1MYXllcihjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKS5wbGF0Zm9y
bUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQdXJwb3NlOjpDYW52YXMpOwog
CiAgICAgICAgIGxheWVyQ29uZmlnQ2hhbmdlZCA9IHRydWU7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428031</attachid>
            <date>2021-05-07 14:04:49 -0700</date>
            <delta_ts>2021-05-07 16:39:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507140448.patch</filename>
            <type>text/plain</type>
            <size>116842</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcxOTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgY2FudmFzIHJlbGF0ZWQgY2xhc3NlcyBhIGJpdCB0byBtYWtlIHRoZW0gYSBiaXQgZWFzaWVy
IHRvIHdvcmsgd2l0aC4KKyAgICAgICAgLSBIVE1MQ2FudmFzRWxlbWVudCwgT2Zmc2NyZWVuQ2Fu
dmFzIGFuZCBDdXN0b21QYWludENhbnZhcyBub3cgYWx3YXlzIGhhdmUgCisgICAgICAgICAgYSB2
YWxpZCwgbm9uLW51bGwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAobm93IHN0b3JlZCBpbiBDYW52
YXNCYXNlIGFzCisgICAgICAgICAgVW5pcXVlUmVmKS4gSW4gcGxhY2Ugb2YgdGhlIG9sZCBudWxs
IHZhbHVlIHN0YXRlIHdlIG5vdyBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUgdHlwZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIG1vdmUgbW9yZSBj
b250ZXh0CisgICAgICAgICAgc3BlY2lmaWMgbG9naWMgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCBhbmQgaXRzIHN1YmNsYXNzZXMgYW5kIG91dCBvZiAKKyAgICAgICAgICBDYW52YXNCYXNlIGFu
ZCBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgLSBDU1NDYW52YXNWYWx1ZSBub3cgc3RvcmVzIGEg
Q2FudmFzQmFzZSByYXRoZXIgdGhhbiBhbiBIVE1MQ2FudmFzRWxlbWVudAorICAgICAgICAgIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IGRvd25jYXN0cy4gVGhlIGNhbGxzIHdlcmUgYWxsIHN1cHBvcnRl
ZCBieSBDYW52YXNCYXNlCisgICAgICAgICAgYWxyZWFkeSwgc28gdGhpcyBqdXN0IHJlbW92ZXMg
c29tZSB1bm5lY2Vzc2FyeSBoZWZ0LgorICAgICAgICAtIE1vdmUgaW1hZ2UgYnVmZmVyIGRlc3Ry
dWN0aW9uIHRvIHRoZSBDYW52YXNCYXNlIGRlc3RydWN0b3IgcmF0aGVyIHRoYW4KKyAgICAgICAg
ICBoYXZpbmcgaXQgZHVwbGljYXRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4gTmV3IGRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpIGhlbHBlcgorICAgICAgICAgIGltcGxlbWVudHMgdGhlIHN0ZXBzIG5lZWRlZCBp
biBhIG1vcmUgb3B0aW1hbCBtYW5uZXIgdGhhbiBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKS4KKyAg
ICAgICAgLSBSZW1vdmUgY29uc3QgZnJvbSBhIGxvdCBvZiBub3QgYWN0dWFsIGNvbnN0IGZ1bmN0
aW9ucyBsaWtlIGNvcGllZEltYWdlKCksCisgICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpIGFu
ZCBzZXRJbWFnZUJ1ZmZlcigpLiAKKyAgICAgICAgLSBGaXh1cCBPZmZzY3JlZW5DYW52YXM6Omdl
dENvbnRleHQgdG8gdXNlIHRoZSBjb250ZXh0IGNyZWF0aW9uIHBhdHRlcm4gYXMgCisgICAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQ6Z2V0Q29udGV4dCwgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHRo
ZSBwYXJhbGxlbHMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVN
ZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6fkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJh
d2luZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRl
c3Ryb3lJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFn
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAq
IGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRXZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlQ29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVk
QnlPZmZzY3JlZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+
T2Zmc2NyZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xl
YXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFz
Ojp0YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05v
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNv
bnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpyZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2Fu
dmFzOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9u
KToKKwogMjAyMS0wNS0wNyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4K
IAogICAgICAgICBbbWFjT1NdIFNldCB0aGUgLWlzU291cmNlRWRpdGFibGUgcHJvcGVydHkgd2hl
biBwcmVzZW50aW5nIHdlYnBhZ2UgdHJhbnNsYXRpb24gcG9wdXAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyMCw2ICsxMzIwLDcgQEAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5j
cHAKIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCiBodG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAoraHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUu
Y3BwCiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKIGh0bWwvY2FudmFzL0VYVEJsZW5kTWlu
TWF4LmNwcAogaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJGbG9hdC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Q2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVh
bVRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgQ2FudmFz
Q2FwdHVyZU1lZGlhU3RyZWFtVHJhY2s6OlNvdXIKICAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCBh
ZGQgYW4gYW5jaG9yIHBvaW50IGZvciBib3RoIDJkIGFuZCAzZCBjb250ZXh0cyB3aGVyZSBjYW52
YXMgd2lsbCBhY3R1YWxseSBwYWludC4KICAgICAvLyBBbmQgY2FsbCBjYW52YXMgb2JzZXJ2ZXJz
IGZyb20gdGhhdCBwb2ludC4KICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4o
Y2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSkpIHsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGRv
d25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjYW52YXMucmVuZGVyaW5nQ29udGV4
dCgpKTsKKyAgICAgICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAgICAgICBpZiAoIWNvbnRl
eHQuaXNQcmVzZXJ2aW5nRHJhd2luZ0J1ZmZlcigpKSB7CiAgICAgICAgICAgICBjYW52YXMuc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiVHVybmluZyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2
YXRpb24gZm9yIHRoZSBXZWJHTCBjYW52YXMgYmVpbmcgY2FwdHVyZWQiX3MpOwogICAgICAgICAg
ICAgY29udGV4dC5lbmFibGVQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCShyZXZp
c2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChHUFVDYW52YXNDb250ZXh0KTsK
IAotc3RkOjp1bmlxdWVfcHRyPEdQVUNhbnZhc0NvbnRleHQ+IEdQVUNhbnZhc0NvbnRleHQ6OmNy
ZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCitVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gR1BV
Q2FudmFzQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICBhdXRvIGNv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8R1BVQ2FudmFzQ29udGV4dD4obmV3IEdQVUNhbnZhc0Nv
bnRleHQoY2FudmFzKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZVJlZkZyb21SZWZl
cmVuY2UoKiBuZXcgR1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKICAgICBjb250ZXh0LT5zdXNw
ZW5kSWZOZWVkZWQoKTsKICAgICByZXR1cm4gY29udGV4dDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250ZXh0LmgJKHJldmlzaW9uIDI3
NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBzdHJ1Y3QgV2ViR1BVU3dhcENoYWlu
RGVzY3JpcHRvcjsKIGNsYXNzIEdQVUNhbnZhc0NvbnRleHQgZmluYWwgOiBwdWJsaWMgR1BVQmFz
ZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEdQ
VUNhbnZhc0NvbnRleHQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8R1BV
Q2FudmFzQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVm
PEdQVUNhbnZhc0NvbnRleHQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CiAKICAgICBIVE1MQ2FudmFz
RWxlbWVudCYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KGNhbnZhc0Jhc2UoKSk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDI4Miw2ICsxNDI4Miw4IEBACiAJCUJDODI0MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBK
U1NRTFRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FM
VHJhbnNhY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjQzRTYwRDBD
RkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdpbmRvd0ZlYXR1cmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkM4MjQzRTcwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd0ZlYXR1cmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDNEMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0Tm9uZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzg0RjQzRTI2NDFBQ0My
MDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQzhBRTM0QzEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYg
LyogU2Nyb2xsYWJsZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
b2xsYWJsZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4Qjg1M0MwRTdD
N0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcm9sbGJhclRoZW1lTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yMDA5OCw2ICsyMDEwMCw4IEBACiAJCQkJMzE0MEM1MjIxRkRGMzE4NjAwRDJBODcz
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCAqLywKIAkJCQlCQ0UwNDkwQzI2M0Ey
RjFDMDA5RENCQjggLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MuaCAqLywKIAkJ
CQlCQ0UwNDkwRTI2M0EyRjFDMDA5RENCQjggLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0
dGluZ3MuaWRsICovLAorCQkJCUJDODRGNDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8sCisJCQkJQkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFDIC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmggKi8sCiAJCQkJN0MxOTNCQUQxRjVFMEVCMzAw
ODhGM0U2IC8qIENhbnZhc1NoYWRvd1N0eWxlcy5pZGwgKi8sCiAJCQkJN0MxOTNCQjIxRjVFMEVC
NjAwODhGM0U2IC8qIENhbnZhc1N0YXRlLmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzU3R5bGUuY3BwICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbnZhc1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fu
dmFzVmFsdWUuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
Q2FudmFzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTUgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogCisjaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogQ1NTQ2FudmFzVmFsdWU6On5DU1NDYW52YXNWYWx1ZSgpCiB7Ci0g
ICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVPYnNlcnZlcihtX2Nh
bnZhc09ic2VydmVyKTsKKyAgICBpZiAobV9jYW52YXMpCisgICAgICAgIG1fY2FudmFzLT5yZW1v
dmVPYnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKIH0KIAogU3RyaW5nIENTU0NhbnZhc1ZhbHVl
OjpjdXN0b21DU1NUZXh0KCkgY29uc3QKQEAgLTQxLDUzICs0Miw1MyBAQCBTdHJpbmcgQ1NTQ2Fu
dmFzVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIi13ZWJr
aXQtY2FudmFzKCIsIG1fbmFtZSwgJyknKTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4m
IGNoYW5nZWRSZWN0KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZChDYW52YXNC
YXNlJiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpCiB7CiAgICAgaWYg
KCFjaGFuZ2VkUmVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBpbWFnZUNoYW5nZVJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNoYW5nZWRSZWN0LnZhbHVlKCkpOwotICAgIGZvciAoYXV0
byBpdCA9IGNsaWVudHMoKS5iZWdpbigpLCBlbmQgPSBjbGllbnRzKCkuZW5kKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPmtleS0+aW1hZ2VDaGFuZ2VkKHN0YXRpY19jYXN0PFdyYXBw
ZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOworICAgIGZvciAoYXV0byBjbGll
bnQgOiBjbGllbnRzKCkudmFsdWVzKCkpCisgICAgICAgIGNsaWVudC0+aW1hZ2VDaGFuZ2VkKHN0
YXRpY19jYXN0PFdyYXBwZWRJbWFnZVB0cj4odGhpcyksICZpbWFnZUNoYW5nZVJlY3QpOwogfQog
Ci12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKEhUTUxDYW52YXNFbGVtZW50JikK
K3ZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpCiB7Ci0gICAg
Zm9yIChhdXRvIGl0ID0gY2xpZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nh
c3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CisgICAgZm9yIChhdXRvIGNsaWVudCA6IGNsaWVu
dHMoKS52YWx1ZXMoKSkKKyAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8
V3JhcHBlZEltYWdlUHRyPih0aGlzKSk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZh
c0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgQ1NTQ2FudmFzVmFs
dWU6OmNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXMpCiB7Ci0gICAgQVNTRVJUX1VO
VVNFRCgmZWxlbWVudCwgJmVsZW1lbnQgPT0gbV9lbGVtZW50KTsKLSAgICBtX2VsZW1lbnQgPSBu
dWxscHRyOworICAgIEFTU0VSVF9VTlVTRUQoJmNhbnZhcywgJmNhbnZhcyA9PSBtX2NhbnZhcyk7
CisgICAgbV9jYW52YXMgPSBudWxscHRyOwogfQogCiBGbG9hdFNpemUgQ1NTQ2FudmFzVmFsdWU6
OmZpeGVkU2l6ZShjb25zdCBSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKLSAgICBpZiAoSFRN
TENhbnZhc0VsZW1lbnQqIGVsdCA9IGVsZW1lbnQocmVuZGVyZXIuZG9jdW1lbnQoKSkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoZWx0LT53aWR0aCgpLCBlbHQtPmhlaWdodCgpKTsKKyAgICBp
ZiAoYXV0byogY2FudmFzID0gdGhpcy0+Y2FudmFzKHJlbmRlcmVyLmRvY3VtZW50KCkpKQorICAg
ICAgICByZXR1cm4gRmxvYXRTaXplKGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSk7
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotSFRNTENhbnZhc0VsZW1lbnQqIENTU0NhbnZhc1ZhbHVl
OjplbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKK0NhbnZhc0Jhc2UqIENTU0NhbnZhc1ZhbHVl
OjpjYW52YXMoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgICBpZiAoIW1fZWxlbWVudCkgewot
ICAgICAgICBtX2VsZW1lbnQgPSBkb2N1bWVudC5nZXRDU1NDYW52YXNFbGVtZW50KG1fbmFtZSk7
Ci0gICAgICAgIGlmICghbV9lbGVtZW50KQorICAgIGlmICghbV9jYW52YXMpIHsKKyAgICAgICAg
bV9jYW52YXMgPSBkb2N1bWVudC5nZXRDU1NDYW52YXNFbGVtZW50KG1fbmFtZSk7CisgICAgICAg
IGlmICghbV9jYW52YXMpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbV9l
bGVtZW50LT5hZGRPYnNlcnZlcihtX2NhbnZhc09ic2VydmVyKTsKKyAgICAgICAgbV9jYW52YXMt
PmFkZE9ic2VydmVyKG1fY2FudmFzT2JzZXJ2ZXIpOwogICAgIH0KLSAgICByZXR1cm4gbV9lbGVt
ZW50OworICAgIHJldHVybiBtX2NhbnZhczsKIH0KIAogUmVmUHRyPEltYWdlPiBDU1NDYW52YXNW
YWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6ZSYgLypz
aXplKi8pCiB7CiAgICAgQVNTRVJUKGNsaWVudHMoKS5jb250YWlucygmcmVuZGVyZXIpKTsKLSAg
ICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQocmVuZGVyZXIuZG9j
dW1lbnQoKSk7Ci0gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5idWZmZXIoKSkKKyAgICBh
dXRvKiBjYW52YXMgPSB0aGlzLT5jYW52YXMocmVuZGVyZXIuZG9jdW1lbnQoKSk7CisgICAgaWYg
KCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBlbGVtZW50LT5jb3BpZWRJbWFnZSgpOworICAgIHJldHVybiBjYW52YXMtPmNv
cGllZEltYWdlKCk7CiB9CiAKIGJvb2wgQ1NTQ2FudmFzVmFsdWU6OmVxdWFscyhjb25zdCBDU1ND
YW52YXNWYWx1ZSYgb3RoZXIpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fu
dmFzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFs
dWUuaAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkNTU0lt
YWdlR2VuZXJhdG9yVmFsdWUuaCIKICNpbmNsdWRlICJDYW52YXNCYXNlLmgiCi0jaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGaXhl
ZFNpemUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgRmxvYXRTaXplIGZpeGVkU2l6ZShj
b25zdCBSZW5kZXJFbGVtZW50Jik7CiAKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogZWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudDsgfQorICAgIENhbnZhc0Jhc2UqIGNhbnZhcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FudmFzOyB9CiAKICAgICBib29sIGlzUGVuZGluZygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBsb2FkU3ViaW1hZ2VzKENhY2hlZFJlc291cmNlTG9h
ZGVyJiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJikgeyB9CkBAIC02OCwxOCArNjcsMTUg
QEAgcHVibGljOgogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52
YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVj
dCkgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxDYW52YXNFbGVt
ZW50PihjYW52YXNCYXNlKSk7Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzQ2hhbmdl
ZChkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSksIGNoYW5nZWRSZWN0KTsK
KyAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNDaGFuZ2VkKGNhbnZhc0Jhc2UsIGNoYW5n
ZWRSZWN0KTsKICAgICAgICAgfQogICAgICAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSkgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzPEhU
TUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUu
Y2FudmFzUmVzaXplZChkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSkpOwor
ICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc1Jlc2l6ZWQoY2FudmFzQmFzZSk7CiAgICAg
ICAgIH0KICAgICAgICAgdm9pZCBjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFz
ZSkgZmluYWwKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzPEhUTUxDYW52YXNFbGVt
ZW50PihjYW52YXNCYXNlKSk7Ci0gICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzRGVzdHJv
eWVkKGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7CisgICAgICAgICAg
ICBtX293bmVyVmFsdWUuY2FudmFzRGVzdHJveWVkKGNhbnZhc0Jhc2UpOwogICAgICAgICB9CiAK
ICAgICAgICAgQ1NTQ2FudmFzVmFsdWUmIG1fb3duZXJWYWx1ZTsKQEAgLTkzLDE4ICs4OSwxOCBA
QCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGNhbnZhc0NoYW5nZWQoSFRNTENh
bnZhc0VsZW1lbnQmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCk7Ci0g
ICAgdm9pZCBjYW52YXNSZXNpemVkKEhUTUxDYW52YXNFbGVtZW50Jik7Ci0gICAgdm9pZCBjYW52
YXNEZXN0cm95ZWQoSFRNTENhbnZhc0VsZW1lbnQmKTsKKyAgICB2b2lkIGNhbnZhc0NoYW5nZWQo
Q2FudmFzQmFzZSYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KTsKKyAg
ICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpOworICAgIHZvaWQgY2FudmFzRGVzdHJv
eWVkKENhbnZhc0Jhc2UmKTsKIAotICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KERvY3Vt
ZW50Jik7CisgICAgQ2FudmFzQmFzZSogY2FudmFzKERvY3VtZW50Jik7CiAKICAgICBDYW52YXNP
YnNlcnZlclByb3h5IG1fY2FudmFzT2JzZXJ2ZXI7CiAKICAgICAvLyBUaGUgbmFtZSBvZiB0aGUg
Y2FudmFzLgogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgLy8gVGhlIGRvY3VtZW50IHN1cHBsaWVz
IHRoZSBlbGVtZW50IGFuZCBvd25zIGl0LgotICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2VsZW1l
bnQgeyBudWxscHRyIH07CisgICAgLy8gVGhlIGRvY3VtZW50IHN1cHBsaWVzIHRoZSBjYW52YXMg
YW5kIG93bnMgaXQuCisgICAgQ2FudmFzQmFzZSogbV9jYW52YXMgeyBudWxscHRyIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltYWdlR2VuZXJhdG9yVmFsdWUuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDggQEAKICNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTTmFt
ZWRJbWFnZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFpbnRJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ2FudmFzQmFzZS5oIgogI2luY2x1ZGUgIkdlbmVyYXRlZEltYWdlLmgiCi0jaW5jbHVkZSAi
SFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCiAKQEAgLTc0LDggKzc0LDggQEAgdm9pZCBD
U1NJbWFnZUdlbmVyYXRvclZhbHVlOjphZGRDbGllbnQoUgogICAgIG1fY2xpZW50cy5hZGQoJnJl
bmRlcmVyKTsKIAogICAgIGlmIChpczxDU1NDYW52YXNWYWx1ZT4odGhpcykpIHsKLSAgICAgICAg
aWYgKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8Q1NTQ2FudmFz
VmFsdWU+KHRoaXMpLT5lbGVtZW50KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKCpjYW52YXNFbGVtZW50KTsKKyAg
ICAgICAgaWYgKGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+
Y2FudmFzKCkpCisgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5n
ZUNTU0NhbnZhc0NsaWVudE5vZGVzKCpjYW52YXMpOwogICAgIH0KIH0KIApAQCAtODYsOCArODYs
OCBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OnJlbW92ZUNsaWVuCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChpczxDU1NDYW52YXNWYWx1ZT4odGhpcykpIHsKLSAgICAgICAgaWYg
KEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFs
dWU+KHRoaXMpLT5lbGVtZW50KCkpCi0gICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKCpjYW52YXNFbGVtZW50KTsKKyAgICAg
ICAgaWYgKGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PENTU0NhbnZhc1ZhbHVlPih0aGlzKS0+Y2Fu
dmFzKCkpCisgICAgICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNT
U0NhbnZhc0NsaWVudE5vZGVzKCpjYW52YXMpOwogICAgIH0KIAogICAgIGlmIChtX2NsaWVudHMu
aXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyNzcxOTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODk2LDcgKzM4OTYsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkUGFnZVNhbXBsZUxvY2F0aW9uKERv
CiAKICAgICAgICAgLy8gU2tpcCBgPGNhbnZhcz5gIGJ1dCBvbmx5IGlmIHRoZXkndmUgYmVlbiBk
cmF3biBpbnRvLiBHdWVzcyB0aGlzIGJ5IHNlZWluZyBpZiB0aGVyZSdzIGFscmVhZHkKICAgICAg
ICAgLy8gYSBgQ2FudmFzUmVuZGVyaW5nQ29udGV4dGAsIHdoaWNoIGlzIG9ubHkgY3JlYXRlZCBi
eSBKYXZhU2NyaXB0LgotICAgICAgICBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpICYm
IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdDb250ZXh0KCkpCisg
ICAgICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEhUTUxD
YW52YXNFbGVtZW50Pihub2RlKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gU2tpcCAzcmQtcGFydHkgYDxpZnJhbWU+
YCBhcyB0aGUgY29udGVudCBsaWtlbHkgd29uJ3QgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHBhZ2Uu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAJKHJldmlzaW9uIDI3NzE5NikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtNTEsNyArNTIsOCBAQCBjb25zdCBJbnRlcnBv
bGF0aW9uUXVhbGl0eSBkZWZhdWx0SW50ZXJwCiAjZW5kaWYKIAogQ2FudmFzQmFzZTo6Q2FudmFz
QmFzZShJbnRTaXplIHNpemUpCi0gICAgOiBtX3NpemUoc2l6ZSkKKyAgICA6IG1fc2l6ZSB7IHNp
emUgfQorICAgICwgbV9jb250ZXh0IHsgQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OmNyZWF0
ZSgqdGhpcykgfQogewogfQogCkBAIC01OSwxMyArNjEsMTMgQEAgQ2FudmFzQmFzZTo6fkNhbnZh
c0Jhc2UoKQogewogICAgIEFTU0VSVChtX2RpZE5vdGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3ll
ZCk7CiAgICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX2lt
YWdlQnVmZmVyKTsKKworICAgIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQqIENhbnZhc0Jhc2U6OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBj
b250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0
LT5pczJkKCkgJiYgIWNvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKKyAgICBpZiAoIW1fY29udGV4
dC0+aXMyZCgpICYmICFtX2NvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICByZXR1cm4gYnVmZmVyKCkgPyAmbV9pbWFnZUJ1ZmZlci0+Y29udGV4
dCgpIDogbnVsbHB0cjsKQEAgLTgyLDcgKzg0LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBDYW52YXNC
YXNlOjpleGlzdGluZ0RyYQogSW1hZ2VCdWZmZXIqIENhbnZhc0Jhc2U6OmJ1ZmZlcigpIGNvbnN0
CiB7CiAgICAgaWYgKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkKLSAgICAgICAgY3JlYXRlSW1h
Z2VCdWZmZXIoKTsKKyAgICAgICAgY29uc3RfY2FzdDxDYW52YXNCYXNlKj4odGhpcyktPmNyZWF0
ZUltYWdlQnVmZmVyKCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKQEAg
LTk0LDggKzk2LDcgQEAgQWZmaW5lVHJhbnNmb3JtIENhbnZhc0Jhc2U6OmJhc2VUcmFuc2Zvcgog
CiB2b2lkIENhbnZhc0Jhc2U6Om1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCkKIHsKLSAg
ICBpZiAoYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKSkKLSAgICAgICAgY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiB9CiAKIHNpemVfdCBDYW52YXNCYXNlOjptZW1v
cnlDb3N0KCkgY29uc3QKQEAgLTEwMyw3ICsxMDQsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6bWVt
b3J5Q29zdCgpIGNvbnN0CiAgICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFu
Z2VkIHdoaWxlIHdlIGFjY2VzcyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1h
Z2VCdWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZm
ZXJBc3NpZ25tZW50TG9jayB9OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPm1lbW9yeUNvc3QoKTsKQEAgLTExNCw3
ICsxMTUsNyBAQCBzaXplX3QgQ2FudmFzQmFzZTo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgCiAgICAg
Ly8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20g
YSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwKICAgICAvLyBhYm91dCB3aGF0
IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4gV2UgbmVlZCB0byBob2xkIGEgbG9jayB0byBw
cmV2ZW50IG1faW1hZ2VCdWZmZXIKICAgICAvLyBmcm9tIGJlaW5nIGNoYW5nZWQgd2hpbGUgd2Ug
YWNjZXNzIGl0LgotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9pbWFnZUJ1ZmZlckFzc2ln
bm1lbnRMb2NrKTsKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRM
b2NrIH07CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gMDsKICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlci0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7CkBAIC0xODAsMTUgKzE4
MSwxOSBAQCBIYXNoU2V0PEVsZW1lbnQqPiBDYW52YXNCYXNlOjpjc3NDYW52YXNDCiAKIGJvb2wg
Q2FudmFzQmFzZTo6aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0CiB7
Ci0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29u
dGV4dCAmJiBjb250ZXh0LT5oYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCk7Cisg
ICAgcmV0dXJuIG1fY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigp
OworfQorCit2b2lkIENhbnZhc0Jhc2U6OnNldFJlbmRlcmluZ0NvbnRleHQoVW5pcXVlUmVmPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ+JiYgY29udGV4dCkKK3sKKyAgICBtX2NvbnRleHQgPSBXVEZN
b3ZlKGNvbnRleHQpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldElt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJiBidWZmZXIpIGNvbnN0CitSZWZQdHI8SW1h
Z2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4m
JiBidWZmZXIpCiB7CiAgICAgUmVmUHRyPEltYWdlQnVmZmVyPiByZXR1cm5CdWZmZXI7CiAgICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50
TG9jayk7CisgICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExv
Y2sgfTsKICAgICAgICAgbV9jb250ZXh0U3RhdGVTYXZlciA9IG51bGxwdHI7CiAgICAgICAgIHJl
dHVybkJ1ZmZlciA9IHN0ZDo6ZXhjaGFuZ2UobV9pbWFnZUJ1ZmZlciwgV1RGTW92ZShidWZmZXIp
KTsKICAgICB9CkBAIC0yMDAsOSArMjA1LDggQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNC
YXNlOjpzZXRJbWFnZQogICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gbWVtb3J5Q29zdCgpOwogICAg
IHNfYWN0aXZlUGl4ZWxNZW1vcnkgKz0gbV9pbWFnZUJ1ZmZlckNvc3QgLSBwcmV2aW91c01lbW9y
eUNvc3Q7CiAKLSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlm
IChjb250ZXh0ICYmIG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1h
Z2VCdWZmZXJDb3N0KQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5n
ZUNhbnZhc01lbW9yeSgqY29udGV4dCk7CisgICAgaWYgKCFtX2NvbnRleHQtPmlzTm9uZSgpICYm
IG1faW1hZ2VCdWZmZXIgJiYgcHJldmlvdXNNZW1vcnlDb3N0ICE9IG1faW1hZ2VCdWZmZXJDb3N0
KQorICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENoYW5nZUNhbnZhc01lbW9y
eShtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpIHsKICAgICAgICAg
bV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHRydWUp
OwpAQCAtMjE3LDYgKzIyMSwyMCBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNl
dEltYWdlCiAgICAgcmV0dXJuIHJldHVybkJ1ZmZlcjsKIH0KIAordm9pZCBDYW52YXNCYXNlOjpk
ZXN0cm95SW1hZ2VCdWZmZXIoKQoreworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gb2xkQnVmZmVy
OworCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1l
bnRMb2NrIH07CisgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOworICAgICAg
ICBvbGRCdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIG51bGxwdHIpOworICAg
IH0KKyAgICAKKyAgICBzX2FjdGl2ZVBpeGVsTWVtb3J5IC09IG1faW1hZ2VCdWZmZXJDb3N0Owor
ICAgIG1faW1hZ2VCdWZmZXJDb3N0ID0gMDsKK30KKwogc2l6ZV90IENhbnZhc0Jhc2U6OmFjdGl2
ZVBpeGVsTWVtb3J5KCkKIHsKICAgICByZXR1cm4gc19hY3RpdmVQaXhlbE1lbW9yeS5sb2FkKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuaAkocmV2aXNpb24gMjc3MTk2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNp
bmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcwLDcgKzcxLDYgQEAgcHVibGljOgogICAgIGNvbnN0
IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIEltYWdlQnVm
ZmVyKiBidWZmZXIoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIHZvaWQgbWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFi
bGUoKTsKQEAgLTg1LDcgKzg1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgU2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBjYW52YXNCYXNlU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyAgfQogCi0gICAgdmlydHVhbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgPSAwOworICAg
IGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBy
ZW5kZXJpbmdDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAKICAgICB2b2lk
IGFkZE9ic2VydmVyKENhbnZhc09ic2VydmVyJik7CiAgICAgdm9pZCByZW1vdmVPYnNlcnZlcihD
YW52YXNPYnNlcnZlciYpOwpAQCAtMTAwLDggKzEwMSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgdm9pZCBkaWREcmF3KGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mKSA9IDA7CiAKLSAgICB2
aXJ0dWFsIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEltYWdlKiBjb3BpZWRJ
bWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpID0gMDsKIAog
ICAgIGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpIGNvbnN0OwogCkBA
IC0xMTIsMjAgKzExMywyNSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KIAotICAgIFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiYmKSBjb25zdDsK
KyAgICB2b2lkIHNldFJlbmRlcmluZ0NvbnRleHQoVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+JiYpOworCisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBzZXRJbWFnZUJ1ZmZlcihSZWZQ
dHI8SW1hZ2VCdWZmZXI+JiYpOworICAgIHZvaWQgZGVzdHJveUltYWdlQnVmZmVyKCk7CiAgICAg
dmlydHVhbCBib29sIGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgc3RhdGljIHNpemVfdCBhY3RpdmVQaXhlbE1lbW9yeSgpOwogCiAgICAgdm9pZCBy
ZXNldEdyYXBoaWNzQ29udGV4dFN0YXRlKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QgeyB9CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQnVmZmVyKCkgeyB9CiAKLSAgICBtdXRhYmxlIEludFNpemUgbV9zaXplOworICAg
IEludFNpemUgbV9zaXplOwogICAgIG11dGFibGUgTG9jayBtX2ltYWdlQnVmZmVyQXNzaWdubWVu
dExvY2s7Ci0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7Ci0g
ICAgbXV0YWJsZSBzaXplX3QgbV9pbWFnZUJ1ZmZlckNvc3QgeyAwIH07Ci0gICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcj4gbV9jb250ZXh0U3RhdGVT
YXZlcjsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1faW1hZ2VCdWZmZXI7CisgICAgc2l6ZV90
IG1faW1hZ2VCdWZmZXJDb3N0IHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyPiBtX2NvbnRleHRTdGF0ZVNhdmVyOworCisgICAgVW5pcXVlUmVmPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKIAogICAgIGJvb2wgbV9vcmlnaW5DbGVh
biB7IHRydWUgfTsKICNpZiBBU1NFUlRfRU5BQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5jcHAJKHJldmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw0NSAr
NDgsNDIgQEAgQ3VzdG9tUGFpbnRDYW52YXM6OkN1c3RvbVBhaW50Q2FudmFzKFNjcgogQ3VzdG9t
UGFpbnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcygpCiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJz
Q2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUg
dGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEPj4gQ3VzdG9tUGFpbnRDYW52YXM6OmdldENvbnRleHQoKQogewotICAgIGlmIChtX2NvbnRl
eHQpCi0gICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4geyAm
ZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICBp
ZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIHsgUmVmUHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRl
eHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH07CiAKLSAgICBtX2NvbnRleHQgPSBQYWludFJl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzKTsKLSAgICBkb3duY2FzdDxQYWludFJlbmRl
cmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVl
KTsKKyAgICBhdXRvIGNvbnRleHQgPSBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0
aGlzKTsKKyAgICBjb250ZXh0LT5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKHRydWUpOworICAg
IHNldFJlbmRlcmluZ0NvbnRleHQoV1RGTW92ZShjb250ZXh0KSk7CiAKLSAgICByZXR1cm4geyBS
ZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgcmV0dXJuIHsgUmVmUHRyPFBhaW50UmVu
ZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4ocmVu
ZGVyaW5nQ29udGV4dCgpKSB9IH07CiB9CiAKLXZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OnJlcGxh
eURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCogY3R4KSBjb25zdAordm9pZCBDdXN0b21QYWlu
dENhbnZhczo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBjdHgpCiB7CiAgICAg
QVNTRVJUKCFtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkg
fHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVXNpbmcgYW4g
aW50ZXJtZWRpYXRlIGJ1ZmZlciBpcyBub3QgbmVlZGVkIGlmIHRoZXJlIGFyZSBubyBjb21wb3Np
dGUgb3BlcmF0aW9ucy4KLSAgICBhdXRvIGNsaXBCb3VuZHMgPSBjdHgtPmNsaXBCb3VuZHMoKTsK
KyAgICBhdXRvIGNsaXBCb3VuZHMgPSBjdHguY2xpcEJvdW5kcygpOwogCi0gICAgYXV0byBpbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNsaXBCb3VuZHMuc2l6ZSgp
LCAqY3R4KTsKKyAgICBhdXRvIGltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY2xpcEJvdW5kcy5zaXplKCksIGN0eCk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9ICZpbWFnZS0+Y29u
dGV4dCgpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtY2xp
cEJvdW5kcy5sb2NhdGlvbigpKTsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBjdHgtPmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2UsIGNsaXBCb3VuZHMpOworICAgIGN0eC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBjbGlwQm91
bmRzKTsKIH0KIAotSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0
CitJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkKIHsKICAgICBBU1NFUlQo
IW1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQpOwogICAgIGlmICghd2lkdGgoKSB8fCAhaGVp
Z2h0KCkpCkBAIC05NywxNSArOTQsMTQgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3Bp
ZWRJbWFnZSgpIAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIG1fZGVzdGluYXRpb25H
cmFwaGljc0NvbnRleHQgPSAmbV9jb3BpZWRCdWZmZXItPmNvbnRleHQoKTsKLSAgICBpZiAobV9j
b250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CisgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKICAgICBt
X2NvcGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIHJldHVybiBtX2NvcGllZEltYWdl
LmdldCgpOwogfQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkg
Y29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAg
IG1fY29waWVkSW1hZ2UgPSBudWxscHRyOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuaAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9DdXN0b21QYWludENhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNyArNTUsMTYgQEAg
cHVibGljOgogCiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJE
Pj4gZ2V0Q29udGV4dCgpOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5n
Q29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEdy
YXBoaWNzQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBjb25zdCBmaW5hbDsKICAgICBHcmFwaGlj
c0NvbnRleHQqIGV4aXN0aW5nRHJhd2luZ0NvbnRleHQoKSBjb25zdCBmaW5hbDsKIAogICAgIHZv
aWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikgZmluYWwgeyB9CiAKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IGZpbmFsIHsgQVNTRVJUKG1fZGVz
dGluYXRpb25HcmFwaGljc0NvbnRleHQgJiYgbV9jb3BpZWRCdWZmZXIpOyByZXR1cm4gbV9jb3Bp
ZWRCdWZmZXItPmJhc2VUcmFuc2Zvcm0oKTsgfQotICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNv
bnN0IGZpbmFsOwotICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOworICAg
IEltYWdlKiBjb3BpZWRJbWFnZSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgp
IGZpbmFsOwogCi0gICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQqKSBj
b25zdDsKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiAg
ICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwpA
QCAtNzcsNyArNzYsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVyZWZDYW52YXNCYXNlKCkgZmlu
YWwgeyBkZXJlZigpOyB9CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY2FudmFzQmFzZVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDb250ZXh0RGVzdHJ1
Y3Rpb25PYnNlcnZlcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwogICAgIG11dGFibGUg
R3JhcGhpY3NDb250ZXh0KiBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsK
ICAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gbV9jb3BpZWRCdWZmZXI7CiAgICAgbXV0
YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw5
ICsxNTYsNiBAQCBIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52YXNFbGVtZW50KCkKICAgICAv
LyBhdm9pZGVkIGluIGRlc3RydWN0b3JzLCBidXQgd29ya3MgYXMgbG9uZyBhcyBpdCdzIGRvbmUg
YmVmb3JlIEhUTUxDYW52YXNFbGVtZW50IGRlc3RydWN0cyBjb21wbGV0ZWx5LgogICAgIG5vdGlm
eU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwogICAgIGRvY3VtZW50KCkuY2xlYXJDYW52YXNQ
cmVwYXJhdGlvbigqdGhpcyk7Ci0KLSAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUg
dGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZl
cihudWxscHRyKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUpCkBAIC0y
MzksNTAgKzIzNiw1MCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRNYXhQaXhlbE1lbW9y
CiAKIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgY29uc3QgU3RyaW5n
JiBjb250ZXh0SWQsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50
cykKIHsKLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmlzUGxh
Y2Vob2xkZXIoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkgeworICAg
ICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzUGxhY2Vob2xkZXIoKSkKICAgICAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAgICAgIGlmICht
X2NvbnRleHQtPmlzMmQoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQo
KSkgewogICAgICAgICAgICAgaWYgKCFpczJkVHlwZShjb250ZXh0SWQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9Owot
ICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51
bGxvcHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPiB7ICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkgfSB9IH07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9jb250ZXh0LT5p
c0JpdG1hcFJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc0Jp
dG1hcFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIGlmICghaXNCaXRtYXBSZW5kZXJlclR5cGUo
Y29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRv
d25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIHJl
dHVybiB7IHsgUmVmUHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9Owog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgIGlmIChtX2NvbnRleHQtPmlz
V2ViR0woKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0woKSkgewog
ICAgICAgICAgICAgaWYgKCFpc1dlYkdMVHlwZShjb250ZXh0SWQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAg
ICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICAgICAgICAgIGF1
dG8gdmVyc2lvbiA9IHRvV2ViR0xWZXJzaW9uKGNvbnRleHRJZCk7Ci0gICAgICAgICAgICBpZiAo
dmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdU
Rjo6bnVsbG9wdCB9OwotICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xWZXJzaW9uOjpX
ZWJHTDEgJiYgbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBP
cHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICAgICAg
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPFdlYkdMUmVuZGVy
aW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0
KSB9IH07CisgICAgICAgICAgICBpZiAodmVyc2lvbiA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAm
JiAhcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKHZlcnNpb24gIT0gV2ViR0xW
ZXJzaW9uOjpXZWJHTDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKGlz
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNpZiBF
TkFCTEUoV0VCR0wyKQotICAgICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ+KCptX2NvbnRleHQpKTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdD
b250ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH07CisgICAgICAgICAgICBBU1NFUlQo
aXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSk7CisgICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogI2Vu
ZGlmCiAgICAgICAgIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQkdQVSkKLSAgICAgICAgaWYg
KG1fY29udGV4dC0+aXNXZWJHUFUoKSkgeworICAgICAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgp
LmlzV2ViR1BVKCkpIHsKICAgICAgICAgICAgIGlmICghaXNXZWJHUFVUeXBlKGNvbnRleHRJZCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RG
OjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4
dD4geyBSZWZQdHI8R1BVQ2FudmFzQ29udGV4dD4geyAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4
dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxs
b3B0IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+
IHsgJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07
CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsK
KyAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwogICAgIH0KIAogICAgIGlmIChp
czJkVHlwZShjb250ZXh0SWQpKSB7CkBAIC0yOTIsOCArMjg5LDggQEAgRXhjZXB0aW9uT3I8T3B0
aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IAogCiAgICAgICAgIGF1dG8gY29udGV4dCA9IGNyZWF0
ZUNvbnRleHQyZChjb250ZXh0SWQsIFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICAgICAgaWYgKCFj
b250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
V1RGOjpudWxsb3B0IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9IH07CisgICAg
ICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsg
UmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyBjb250ZXh0IH0gfSB9OwogICAgIH0K
IAogICAgIGlmIChpc0JpdG1hcFJlbmRlcmVyVHlwZShjb250ZXh0SWQpKSB7CkBAIC0zMDMsOCAr
MzAwLDggQEAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4+IAogCiAgICAg
ICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcihjb250ZXh0SWQs
IFdURk1vdmUoc2V0dGluZ3MpKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQotICAgICAgICAgICAg
cmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAg
ICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQ+IHsgY29udGV4dCB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dD4geyBjb250ZXh0IH0gfSB9OwogICAgIH0KIAogI2lmIEVOQUJMRShX
RUJHTCkKQEAgLTMxNSwxMyArMzEyLDEzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmlu
Z0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0wo
dG9XZWJHTFZlcnNpb24oY29udGV4dElkKSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7CiAgICAgICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250
ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxv
cHQgfSB9OwogCiAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0
KSkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4oKmNvbnRleHQpIH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4
dCkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgQVNTRVJUKGlzPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSk7Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9OworICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07CiAjZW5kaWYKICAgICB9CiAjZW5kaWYKQEAg
LTMzMCwxMiArMzI3LDEyIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
PiAKICAgICBpZiAoaXNXZWJHUFVUeXBlKGNvbnRleHRJZCkpIHsKICAgICAgICAgYXV0byBjb250
ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdQVShjb250ZXh0SWQpOwogICAgICAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6
Om51bGxvcHQgfTsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
UmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgY29udGV4dCB9IH07CisgICAgICAgICAgICByZXR1
cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPEdQVUNh
bnZhc0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OworICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRN
TENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtMzY3LDcg
KzM2NCw3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKGNvbnN0IFMKIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChj
b25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUo
dHlwZSksIHR5cGUpOwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVy
aW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCB1c2Ug
bW9yZSBwaXhlbCBtZW1vcnkgdGhhbiB0aGUgc3lzdGVtIGNhbiBzdXBwb3J0LgogICAgIHNpemVf
dCByZXF1ZXN0ZWRQaXhlbE1lbW9yeSA9IDQgKiB3aWR0aCgpICogaGVpZ2h0KCk7CkBAIC0zODAs
MjYgKzM3NywyNyBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIG1fY29udGV4dCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSwgZG9jdW1l
bnQoKS5pblF1aXJrc01vZGUoKSk7CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncyksIGRvY3VtZW50
KCkuaW5RdWlya3NNb2RlKCkpKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1
cm4gJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgp
KTsKIH0KIAogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0
dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKEhUTUxDYW52YXNFbGVtZW50
OjppczJkVHlwZSh0eXBlKSwgdHlwZSk7CiAKLSAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRl
eHQtPmlzMmQoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQorICAgICAg
ICByZXR1cm4gY3JlYXRlQ29udGV4dDJkKHR5cGUsIFdURk1vdmUoc2V0dGluZ3MpKTsKKworICAg
IGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQyZCh0
eXBlLCBXVEZNb3ZlKHNldHRpbmdzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCkBAIC00NDgsNyArNDQ2LDcgQEAgR3JhcGhpY3NDb250ZXh0R0xXZWJH
TFZlcnNpb24gSFRNTENhbnZhcwogCiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAg
IEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogCiAgICAgaWYgKCFzaG91bGRF
bmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTQ2NSwyMCArNDYzLDI0IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxD
YW52YXNFbGUKIAogICAgIC8vIFRPRE8oV0VCWFIpOiBlbnN1cmUgdGhlIGNvbnRleHQgaXMgY3Jl
YXRlZCBpbiBhIGNvbXBhdGlibGUgZ3JhcGhpY3MKICAgICAvLyBhZGFwdGVyIHdoZW4gdGhlcmUg
aXMgYW4gYWN0aXZlIGltbWVyc2l2ZSBkZXZpY2UuCi0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgdHlwZSk7Ci0gICAgaWYgKG1f
Y29udGV4dCkgewotICAgICAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9ic2Vy
dmVkIGJ5IHRoZSBEb2N1bWVudCwgaW4gb3JkZXIKLSAgICAgICAgLy8gZm9yIGl0IHRvIGJlIGNv
cnJlY3RseSBwcmVwYXJlZEZvclJlbmRlcmluZyBiZWZvcmUgaXQgaXMgY29tcG9zaXRlZC4KLSAg
ICAgICAgYWRkT2JzZXJ2ZXIoZG9jdW1lbnQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgdHlwZSk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRlcmluZ0Nv
bnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoY29udGV4dCkp
KTsKKworICAgIC8vIFRoaXMgbmV3IGNvbnRleHQgbmVlZHMgdG8gYmUgb2JzZXJ2ZWQgYnkgdGhl
IERvY3VtZW50LCBpbiBvcmRlcgorICAgIC8vIGZvciBpdCB0byBiZSBjb3JyZWN0bHkgcHJlcGFy
ZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNvbXBvc2l0ZWQuCisgICAgYWRkT2JzZXJ2ZXIo
ZG9jdW1lbnQoKSk7CisKKyAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFu
ZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KKyAgICBpbnZh
bGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKLSAgICAgICAgLy8gTmVlZCB0byBt
YWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQg
Zm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKICNpZiBFTkFCTEUoV0VCWFIpCi0gICAgICAgIEFTU0VSVCghYXR0cnMueHJDb21wYXRp
YmxlIHx8IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQo
KSktPmlzWFJDb21wYXRpYmxlKCkpOworICAgIEFTU0VSVCghYXR0cnMueHJDb21wYXRpYmxlIHx8
IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSku
aXNYUkNvbXBhdGlibGUoKSk7CiAjZW5kaWYKLSAgICB9CiAKLSAgICByZXR1cm4gZG93bmNhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4g
JmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSk7
CiB9CiAKIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0V2ViR0woV2ViR0xWZXJzaW9uIHR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBh
dHRycykKQEAgLTQ4NiwyMSArNDg4LDIwIEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIEhU
TUxDYW52YXNFbGUKICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKGRvY3VtZW50KCkuc2V0dGlu
Z3MoKSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fY29udGV4dCkgewot
ICAgICAgICBpZiAoIW1fY29udGV4dC0+aXNXZWJHTCgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0
dXJuIGNyZWF0ZUNvbnRleHRXZWJHTCh0eXBlLCBXVEZNb3ZlKGF0dHJzKSk7CiAKLSAgICAgICAg
Ly8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBhdm9pZHMgY29tcGlsZS10aW1lIGd1YXJk
cyBmb3IgV2ViR0wyIHN1cHBvcnQuCi0gICAgICAgIGlmICh0eXBlID09IFdlYkdMVmVyc2lvbjo6
V2ViR0wxICYmICFtX2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgICAgIGlmICh0eXBlICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wx
ICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KKyAgICAvLyBUaGUgcGhyYXNpbmcgb2YgdGhlc2UgY2hlY2tzIGF2b2lkcyBjb21waWxl
LXRpbWUgZ3VhcmRzIGZvciBXZWJHTDIgc3VwcG9ydC4KKyAgICBpZiAodHlwZSA9PSBXZWJHTFZl
cnNpb246OldlYkdMMSAmJiAhcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wxKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBj
cmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykpOwotICAgIHJldHVybiAmZG93
bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCk7CisgICAgaWYgKHR5
cGUgIT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0wx
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuICZkb3duY2FzdDxXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpAQCAtNTE1LDE4ICs1MTYsMTcgQEAgYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6aXNXZWJHUFVUeXBlKGNvbgogR1BVQ2FudmFzQ29udGV4dCogSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUNvbnRleHRXZWJHUFUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIEFTU0VS
VF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzV2ViR1BVVHlwZSh0eXBlKSk7Ci0g
ICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNO
b25lKCkpOwogCiAgICAgaWYgKCFkb2N1bWVudCgpLnNldHRpbmdzKCkud2ViR1BVRW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29udGV4dCA9IEdQVUNhbnZhc0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KLSAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwotICAgIH0KKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KEdQVUNhbnZhc0Nv
bnRleHQ6OmNyZWF0ZSgqdGhpcykpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5k
ZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMu
CisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdQVUNhbnZhc0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJl
dHVybiAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0K
IAogR1BVQ2FudmFzQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJHUFUo
Y29uc3QgU3RyaW5nJiB0eXBlKQpAQCAtNTM2LDEyICs1MzYsMTMgQEAgR1BVQ2FudmFzQ29udGV4
dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygp
LndlYkdQVUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAobV9j
b250ZXh0ICYmICFtX2NvbnRleHQtPmlzV2ViR1BVKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRl
eHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHUFUodHlwZSk7
CisKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdQVSgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRl
Q29udGV4dFdlYkdQVSh0eXBlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BVQ2FudmFzQ29u
dGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxHUFVDYW52YXND
b250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQ
VSkKQEAgLTU1NCwyNCArNTU1LDI5IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFw
UmVuZGVyZXIKIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VO
VVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUodHlwZSkp
OwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgp
LmlzTm9uZSgpKTsKIAotICAgIG1fY29udGV4dCA9IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHNldHRpbmdzKSk7CisgICAgc2V0UmVuZGVyaW5nQ29u
dGV4dChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShz
ZXR0aW5ncykpKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAg
ICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5
ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5
ZXJDb21wb3NpdGlvbigpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gJmRv
d25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsK
IH0KIAogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dEJpdG1hcFJlbmRlcmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKICAgICBBU1NFUlRfVU5VU0VEKHR5
cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRlcmVyVHlwZSh0eXBlKSk7Ci0gICAg
aWYgKCFtX2NvbnRleHQpCisgICAgCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUo
KSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRCaXRtYXBSZW5kZXJlcih0eXBlLCBXVEZN
b3ZlKHNldHRpbmdzKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgCisgICAgaWYgKCFyZW5kZXJpbmdD
b250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiAmZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJp
bmdDb250ZXh0KCkpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpkaWREcmF3KGNvbnN0
IE9wdGlvbmFsPEZsb2F0UmVjdD4mIHJlY3QpCkBAIC02MTUsMTQgKzYyMSwxNSBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAgICAgaW50IGggPSBsaW1pdFRvT25seUhUTUxOb25O
ZWdhdGl2ZShhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGhlaWdodEF0dHIpLCBkZWZh
dWx0SGVpZ2h0KTsKIAogICAgIHJlc2V0R3JhcGhpY3NDb250ZXh0U3RhdGUoKTsKLSAgICBpZiAo
aXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlc2V0KCk7Cisg
ICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkK
KyAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpLnJlc2V0KCk7CiAKICAgICBJbnRTaXplIG9sZFNpemUgPSBzaXplKCk7CiAgICAgSW50
U2l6ZSBuZXdTaXplKHcsIGgpOworCiAgICAgLy8gSWYgdGhlIHNpemUgb2YgYW4gZXhpc3Rpbmcg
YnVmZmVyIG1hdGNoZXMsIHdlIGNhbiBqdXN0IGNsZWFyIGl0IGluc3RlYWQgb2YgcmVhbGxvY2F0
aW5nLgogICAgIC8vIFRoaXMgb3B0aW1pemF0aW9uIGlzIG9ubHkgZG9uZSBmb3IgMkQgY2FudmFz
ZXMgZm9yIG5vdy4KLSAgICBpZiAobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9
PSBuZXdTaXplICYmIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSAmJiBidWZmZXIoKSAm
JiBtX2NvbnRleHQtPmNvbG9yU3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIG1f
Y29udGV4dC0+cGl4ZWxGb3JtYXQoKSA9PSBidWZmZXIoKS0+cGl4ZWxGb3JtYXQoKSkgeworICAg
IGlmIChtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciAmJiBvbGRTaXplID09IG5ld1NpemUgJiYgcmVu
ZGVyaW5nQ29udGV4dCgpLmlzMmQoKSAmJiBidWZmZXIoKSAmJiByZW5kZXJpbmdDb250ZXh0KCku
Y29sb3JTcGFjZSgpID09IGJ1ZmZlcigpLT5jb2xvclNwYWNlKCkgJiYgcmVuZGVyaW5nQ29udGV4
dCgpLnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9ybWF0KCkpIHsKICAgICAgICAg
aWYgKCFtX2RpZENsZWFySW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBjbGVhckltYWdlQnVmZmVy
KCk7CiAgICAgICAgIHJldHVybjsKQEAgLTYzMSw3ICs2MzgsNyBAQCB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpyZXNldCgpCiAgICAgc2V0U3VyZmFjZVNpemUobmV3U2l6ZSk7CiAKICAgICBpZiAo
aXNHUFVCYXNlZCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICBkb3duY2FzdDxHUFVC
YXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpLnJlc2hhcGUod2lkdGgoKSwg
aGVpZ2h0KCkpOworICAgICAgICBkb3duY2FzdDxHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAKICAg
ICBhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKTsKICAgICBpZiAoaXM8UmVuZGVySFRN
TENhbnZhcz4ocmVuZGVyZXIpKSB7CkBAIC02NTAsMTMgKzY1NywxMiBAQCB2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpyZXNldCgpCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSBjb25zdAogewotICAgIEFTU0VSVChtX2NvbnRleHQpOwogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4dC0+aXMyZCgp
IHx8IG1fY29udGV4dC0+aXNCaXRtYXBSZW5kZXJlcigpKQorICAgIGlmIChyZW5kZXJpbmdDb250
ZXh0KCkuaXMyZCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0JpdG1hcFJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKLSAgICBpZiAoIW1fY29udGV4dC0+aXNBY2Nl
bGVyYXRlZCgpKQorICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxlcmF0ZWQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAocmVuZGVyQm94KCkgJiYgcmVuZGVyQm94
KCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKQEAgLTY2OCw0MiArNjc0LDM1IEBAIGJv
b2wgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50c0ludG9DYW52YXMKIAogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXlvdXRSZWN0
JiByKQogewotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJBY2N1
bXVsYXRlZERpcnR5UmVjdCgpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5jbGVhckFjY3VtdWxh
dGVkRGlydHlSZWN0KCk7CiAKICAgICBpZiAoIWNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKSB7
Ci0gICAgICAgIGJvb2wgc2hvdWxkUGFpbnQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgICAgIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigp
IHx8IGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwotICAgICAgICAg
ICAgaWYgKHNob3VsZFBhaW50KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5wcmVwYXJl
Rm9yRGlzcGxheVdpdGhQYWludCgpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCisg
ICAgICAgIGJvb2wgc2hvdWxkUGFpbnQgPSBwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgfHwgZG9j
dW1lbnQoKS5wcmludGluZygpIHx8IG1faXNTbmFwc2hvdHRpbmc7CiAgICAgICAgIGlmIChzaG91
bGRQYWludCkgeworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnByZXBhcmVGb3JEaXNw
bGF5V2l0aFBhaW50KCk7CisgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKwogICAgICAgICAgICAgaWYgKGhhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIGlmIChhdXRvKiBpbWFnZUJ1ZmZlciA9IGJ1
ZmZlcigpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2VCdWZmZXIsIHNuYXBwZWRJbnRSZWN0KHIpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChVTkxJS0VMWShtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5oYXNBY3Rp
dmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkpKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKCptX2NvbnRleHQpOworICAg
IGlmIChVTkxJS0VMWShyZW5kZXJpbmdDb250ZXh0KCkuaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlcigpKSkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5p
c2hSZWNvcmRpbmdDYW52YXNGcmFtZShyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBib29sIEhU
TUxDYW52YXNFbGVtZW50Ojppc0dQVUJhc2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250
ZXh0ICYmIG1fY29udGV4dC0+aXNHUFVCYXNlZCgpOworICAgIHJldHVybiByZW5kZXJpbmdDb250
ZXh0KCkuaXNHUFVCYXNlZCgpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRTdXJm
YWNlU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIENhbnZhc0Jhc2U6OnNldFNpemUo
c2l6ZSk7CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKLSAgICBzZXRJbWFn
ZUJ1ZmZlcihudWxscHRyKTsKKyAgICBkZXN0cm95SW1hZ2VCdWZmZXIoKTsKICAgICBjbGVhckNv
cGllZEltYWdlKCk7CiB9CiAKQEAgLTc5NSwxMSArNzk0LDEyIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEhUTUxDYW52YXNFbGVtZW50Ojp0b0IKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKIEV4
Y2VwdGlvbk9yPFJlZjxPZmZzY3JlZW5DYW52YXM+PiBIVE1MQ2FudmFzRWxlbWVudDo6dHJhbnNm
ZXJDb250cm9sVG9PZmZzY3JlZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHsK
LSAgICBpZiAobV9jb250ZXh0KQorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogCi0gICAg
bV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KCp0aGlz
KTsKLSAgICBpZiAobV9jb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAgc2V0UmVuZGVyaW5n
Q29udGV4dChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgqdGhpcykpOworCisg
ICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIGludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIAogICAgIHJldHVybiBPZmZzY3JlZW5D
YW52YXM6OmNyZWF0ZShjb250ZXh0LCAqdGhpcyk7CkBAIC04MDksMTAgKzgwOSwxMCBAQCBFeGNl
cHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhCiBSZWZQdHI8SW1hZ2VEYXRhPiBI
VE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKCkKIHsKICNpZiBFTkFCTEUoV0VCR0wpCi0g
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSkpIHsK
KyAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgp
KSkgewogICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBUElTdGF0aXN0aWNzRW5hYmxlZCgpKQogICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2Jz
ZXJ2ZXI6OnNoYXJlZCgpLmxvZ0NhbnZhc1JlYWQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIHJldHVy
biBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigqbV9jb250ZXh0KS5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKS5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwogICAgIH0KICNlbmRpZgogICAgIHJldHVybiBudWxscHRy
OwpAQCAtOTIxLDcgKzkyMSw3IEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlz
cGxheUwKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUltYWdlQnVmZmVyKCkKIHsKICAgICBBU1NFUlQoIWhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpKTsK
IApAQCAtOTU4LDI2ICs5NTgsMjAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1h
Z2VCdWZmZQogICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3Qg
ZHJhd2luZyBvbiBjYW52YXMuCiAgICAgYXV0byB1c2VEaXNwbGF5TGlzdCA9IG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERy
YXdpbmdFbmFibGVkKCkpID8gU2hvdWxkVXNlRGlzcGxheUxpc3Q6OlllcyA6IFNob3VsZFVzZURp
c3BsYXlMaXN0OjpObzsKIAotICAgIGF1dG8gW2NvbG9yU3BhY2UsIHBpeGVsRm9ybWF0XSA9IFsm
XSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpwYWly
IHsgbV9jb250ZXh0LT5jb2xvclNwYWNlKCksIG1fY29udGV4dC0+cGl4ZWxGb3JtYXQoKSB9Owot
ICAgICAgICByZXR1cm4gc3RkOjpwYWlyIHsgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBQ
aXhlbEZvcm1hdDo6QkdSQTggfTsKLSAgICB9KCk7Ci0KLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJl
bmRlcmluZ1B1cnBvc2U6OkNhbnZhcywgMSwgY29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RX
aW5kb3cpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
cmVuZGVyaW5nTW9kZSwgdXNlRGlzcGxheUxpc3QsIFJlbmRlcmluZ1B1cnBvc2U6OkNhbnZhcywg
MSwgcmVuZGVyaW5nQ29udGV4dCgpLmNvbG9yU3BhY2UoKSwgcmVuZGVyaW5nQ29udGV4dCgpLnBp
eGVsRm9ybWF0KCksIGhvc3RXaW5kb3cpKTsKIAogICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKSkKICAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkt
PnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9jb250
ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5p
czJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRz
IGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgotICAgICAgICBjb25zdF9jYXN0PEhUTUxD
YW52YXNFbGVtZW50Kj4odGhpcyktPmludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKKyAgICAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogICAgIH0K
ICNlbmRpZgogCi0gICAgaWYgKG1fY29udGV4dCAmJiBidWZmZXIoKSAmJiBidWZmZXIoKS0+cHJl
ZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpKQotICAgICAgICBjb25zdF9jYXN0PEhUTUxDYW52
YXNFbGVtZW50Kj4odGhpcyktPmFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGlmICghcmVu
ZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpICYmIGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5wcmVmZXJz
UHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkpCisgICAgICAgIGFkZE9ic2VydmVyKGRvY3VtZW50KCkp
OwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuZE1hcmtEaXJ0
eShSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQpAQCAtMTAwMywzMSArOTk3LDMwIEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldEltYWdlQnVmZmVyQW4KICAgICBkaWREcmF3KEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogfQogCi1JbWFnZSogSFRNTENhbnZhc0VsZW1l
bnQ6OmNvcGllZEltYWdlKCkgY29uc3QKK0ltYWdlKiBIVE1MQ2FudmFzRWxlbWVudDo6Y29waWVk
SW1hZ2UoKQogewogICAgIGlmICghbV9jb3BpZWRJbWFnZSAmJiBidWZmZXIoKSkgewotICAgICAg
ICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOworICAgICAgICByZW5kZXJpbmdDb250ZXh0KCkucGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5j
b3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAg
IH0KICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIAotdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpjbGVhckltYWdlQnVmZmVyKCkKIHsKICAgICBBU1NFUlQobV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIpOwogICAgIEFTU0VSVCghbV9kaWRDbGVhckltYWdlQnVmZmVyKTsKLSAgICBBU1NFUlQobV9j
b250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSk7CiAKICAgICBt
X2RpZENsZWFySW1hZ2VCdWZmZXIgPSB0cnVlOwogCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkpIHsKKyAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIE5vIG5lZWQgdG8gdW5k
byB0cmFuc2Zvcm1zL2NsaXAvZXRjLiBiZWNhdXNlIHdlIGFyZSBjYWxsZWQgcmlnaHQgYWZ0ZXIg
dGhlIGNvbnRleHQgaXMgcmVzZXQuCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkuY2xlYXJSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKTsK
KyAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250
ZXh0KCkpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgfQogfQogCi12
b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkgY29uc3QKK3ZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmNsZWFyQ29waWVkSW1hZ2UoKQogewogICAgIG1fY29waWVkSW1hZ2Ug
PSBudWxscHRyOwogICAgIG1fZGlkQ2xlYXJJbWFnZUJ1ZmZlciA9IGZhbHNlOwpAQCAtMTA0MSw5
ICsxMDM0LDkgQEAgY29uc3QgY2hhciogSFRNTENhbnZhc0VsZW1lbnQ6OmFjdGl2ZURPTQogYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
PihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsKICAgICAgICAgLy8gV2ViR0wgcmVuZGVyaW5nIGNv
bnRleHQgbWF5IGZpcmUgY29udGV4dGxvc3QgLyBjb250ZXh0Y2hhbmdlIC8gY29udGV4dHJlc3Rv
cmVkIGV2ZW50cyBhdCBhbnkgcG9pbnQuCi0gICAgICAgIHJldHVybiBtX2hhc1JlbGV2YW50V2Vi
R0xFdmVudExpc3RlbmVyICYmICFkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigq
bV9jb250ZXh0KS5pc0NvbnRleHRVbnJlY292ZXJhYmx5TG9zdCgpOworICAgICAgICByZXR1cm4g
bV9oYXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKS5pc0NvbnRleHRVbnJlY292ZXJhYmx5
TG9zdCgpOwogICAgIH0KICNlbmRpZgogCkBAIC0xMDc3LDcgKzEwNzAsNyBAQCBOb2RlOjpJbnNl
cnRlZEludG9BbmNlc3RvclJlc3VsdCBIVE1MQ2FuCiAgICAgICAgIGFkZE9ic2VydmVyKGRvY3Vt
ZW50KTsKICAgICAgICAgLy8gRHJhd2luZyBjb21tYW5kcyBtYXkgaGF2ZSBiZWVuIGlzc3VlZCB0
byB0aGUgY2FudmFzIGJlZm9yZSBub3csIHNvIHdlIG5lZWQgdG8KICAgICAgICAgLy8gdGVsbCB0
aGUgZG9jdW1lbnQgaWYgd2UgbmVlZCBwcmVwYXJhdGlvbi4KLSAgICAgICAgaWYgKG1fY29udGV4
dCAmJiBtX2NvbnRleHQtPmNvbXBvc2l0aW5nUmVzdWx0c05lZWRVcGRhdGluZygpKQorICAgICAg
ICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmNvbXBvc2l0aW5nUmVzdWx0c05lZWRVcGRhdGluZygp
KQogICAgICAgICAgICAgZG9jdW1lbnQuY2FudmFzQ2hhbmdlZCgqdGhpcywgRmxvYXRSZWN0IHsg
fSk7CiAgICAgfQogCkBAIC0xMDk2LDIwICsxMDg5LDE5IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnJlbW92ZWRGcm9tQW5jZXMKIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6bmVlZHNQcmVw
YXJhdGlvbkZvckRpc3BsYXkoKQogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0
LT5uZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpOworICAgIHJldHVybiByZW5kZXJpbmdDb250
ZXh0KCkubmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6cHJlcGFyZUZvckRpc3BsYXkoKQogewogICAgIEFTU0VSVChuZWVkc1ByZXBhcmF0
aW9uRm9yRGlzcGxheSgpKTsKIAotICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgIG1fY29udGV4
dC0+cHJlcGFyZUZvckRpc3BsYXkoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkucHJlcGFyZUZv
ckRpc3BsYXkoKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVkQnlP
ZmZzY3JlZW4oKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5p
c1BsYWNlaG9sZGVyKCk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQoKS5pc1BsYWNlaG9s
ZGVyKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgJKHJldmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkgb3ZlcnJpZGU7CiAKLSAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4+IGdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYsIGNvbnN0IFN0cmluZyYg
Y29udGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMp
OwotCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogZ2V0Q29udGV4dChjb25zdCBTdHJpbmcm
KTsKIAogICAgIHN0YXRpYyBib29sIGlzMmRUeXBlKGNvbnN0IFN0cmluZyYpOwpAQCAtMTE2LDgg
KzExNCw4IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8TWVkaWFTdHJlYW0+PiBjYXB0
dXJlU3RyZWFtKERvY3VtZW50JiwgT3B0aW9uYWw8ZG91YmxlPiYmIGZyYW1lUmVxdWVzdFJhdGUp
OwogI2VuZGlmCiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2
b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1h
Z2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKICAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoKTsKIAogICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eU9yaWdpbigpIGNvbnN0IGZpbmFsOwpAQCAtMTYzLDEwICsxNjEsOSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0
IGZpbmFsOwotICAgIHZvaWQgY2xlYXJJbWFnZUJ1ZmZlcigpIGNvbnN0OwotCiAgICAgYm9vbCBo
YXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hhc0NyZWF0ZWRJ
bWFnZUJ1ZmZlcjsgfQorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBmaW5hbDsKKyAgICB2
b2lkIGNsZWFySW1hZ2VCdWZmZXIoKTsKIAogICAgIHZvaWQgc2V0U3VyZmFjZVNpemUoY29uc3Qg
SW50U2l6ZSYpOwogCkBAIC0xODMsMTYgKzE4MCwxNSBAQCBwcml2YXRlOgogICAgIE5vZGU6Oklu
c2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGluc2VydGVkSW50b0FuY2VzdG9yKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tQW5jZXN0b3Io
UmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcmVudE9mUmVtb3ZlZFRyZWUpIGZpbmFs
OwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4
dDsKLSAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRo
aXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0Zm9ybXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdl
IGJ1ZmZlciB0byByZW5kZXIgKGFuZCBmb3IgQ1NTQ2FudmFzVmFsdWUpLgorICAgIFJlZlB0cjxJ
bWFnZT4gbV9jb3BpZWRJbWFnZTsgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGZvciBwbGF0
Zm9ybXMgdGhhdCBoYXZlIHRvIGNvcHkgdGhlIGltYWdlIGJ1ZmZlciB0byByZW5kZXIgKGFuZCBm
b3IgQ1NTQ2FudmFzVmFsdWUpLgogCiAgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07
CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogICAgIC8vIG1faGFzQ3JlYXRl
ZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRu
J3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgotICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFn
ZUJ1ZmZlciB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBib29sIG1fZGlkQ2xlYXJJbWFnZUJ1ZmZl
ciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShX
RUJHTCkKICAgICBib29sIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgeyBmYWxzZSB9
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCShy
ZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgUmVmPE9mZnNjcmVlbkNhbnZhcz4g
T2Zmc2NyZWVuQ2FudmFzOjpjcgogICAgIGNhbGxPbk1haW5UaHJlYWQoW2RldGFjaGVkQ2FudmFz
ID0gV1RGTW92ZShkZXRhY2hlZENhbnZhcyksIHBsYWNlaG9sZGVyRGF0YSA9IG1ha2VSZWYoKmNs
b25lLT5tX3BsYWNlaG9sZGVyRGF0YSldICgpIG11dGFibGUgewogICAgICAgICBwbGFjZWhvbGRl
ckRhdGEtPmNhbnZhcyA9IGRldGFjaGVkQ2FudmFzLT50YWtlUGxhY2Vob2xkZXJDYW52YXMoKTsK
ICAgICAgICAgaWYgKHBsYWNlaG9sZGVyRGF0YS0+Y2FudmFzKSB7Ci0gICAgICAgICAgICBhdXRv
JiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRl
eHQ+KCpwbGFjZWhvbGRlckRhdGEtPmNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAg
ICAgICAgIGF1dG8mIHBsYWNlaG9sZGVyQ29udGV4dCA9IGRvd25jYXN0PFBsYWNlaG9sZGVyUmVu
ZGVyaW5nQ29udGV4dD4ocGxhY2Vob2xkZXJEYXRhLT5jYW52YXMtPnJlbmRlcmluZ0NvbnRleHQo
KSk7CiAgICAgICAgICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhvbGRlckNvbnRl
eHQuaW1hZ2VCdWZmZXJQaXBlKCk7CiAgICAgICAgICAgICBpZiAoaW1hZ2VCdWZmZXJQaXBlKQog
ICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyRGF0YS0+YnVmZmVyUGlwZVNvdXJjZSA9IGltYWdl
QnVmZmVyUGlwZS0+c291cmNlKCk7CkBAIC0xMTUsOSArMTE1LDYgQEAgT2Zmc2NyZWVuQ2FudmFz
OjpPZmZzY3JlZW5DYW52YXMoU2NyaXB0RQogT2Zmc2NyZWVuQ2FudmFzOjp+T2Zmc2NyZWVuQ2Fu
dmFzKCkKIHsKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKLQotICAgIG1f
Y29udGV4dCA9IG51bGxwdHI7IC8vIEVuc3VyZSB0aGlzIGdvZXMgYXdheSBiZWZvcmUgdGhlIElt
YWdlQnVmZmVyLgotICAgIHNldEltYWdlQnVmZmVyKG51bGxwdHIpOwogfQogCiB1bnNpZ25lZCBP
ZmZzY3JlZW5DYW52YXM6OndpZHRoKCkgY29uc3QKQEAgLTE1NCw2ICsxNTEsMjMgQEAgdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OnNldFNpemUoY29uc3QgSW50UwogICAgIHJlc2V0KCk7CiB9CiAKK2Jv
b2wgT2Zmc2NyZWVuQ2FudmFzOjppczJkVHlwZShSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0
VHlwZSkKK3sKKyAgICByZXR1cm4gY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6
Ol8yZDsKK30KKworT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBPZmZzY3JlZW5D
YW52YXM6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQyZChSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250
ZXh0VHlwZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGlzMmRUeXBlKGNvbnRleHRUeXBlKSwgY29u
dGV4dFR5cGUpOworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOworCisg
ICAgLy8gRklYTUU6IEFkZCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIGVub3VnaCBwaXhlbCBt
ZW1vcnkuIFNlZSBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkLgorCisgICAgc2V0
UmVuZGVyaW5nQ29udGV4dChPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZSgqdGhpcykpOworCisgICAgcmV0dXJuICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7Cit9CisKICNpZiBFTkFCTEUoV0VCR0wp
CiBzdGF0aWMgYm9vbCByZXF1aXJlc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdGb3JXZWJHTCgpCiB7
CkBAIC0xNzUsMjggKzE4OSw0MiBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbmFibGVXZWJHTChib29s
IHdlYkdMCiAgICAgcmV0dXJuIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkOwogfQogCi12
b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmluZ0NvbnRleHRU
eXBlIGNvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCitib29sIE9m
ZnNjcmVlbkNhbnZhczo6aXNXZWJHTFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5
cGUpCit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpX
ZWJnbCB8fCBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wyOworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRl
eHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQo
aXNXZWJHTFR5cGUoY29udGV4dFR5cGUpKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgp
LmlzTm9uZSgpKTsKIAogICAgIGF1dG8gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IHRoaXMtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
aXNXb3JrZXJHbG9iYWxTY29wZSgpKSB7CiAgICAgICAgIFdvcmtlckdsb2JhbFNjb3BlJiB3b3Jr
ZXJHbG9iYWxTY29wZSA9IGRvd25jYXN0PFdvcmtlckdsb2JhbFNjb3BlPigqc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk7CiAgICAgICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0wod29ya2VyR2xvYmFs
U2NvcGUuc2V0dGluZ3NWYWx1ZXMoKS53ZWJHTEVuYWJsZWQsIHdvcmtlckdsb2JhbFNjb3BlLnNl
dHRpbmdzVmFsdWVzKCkuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlIGlmIChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgYXV0byYgc2V0
dGluZ3MgPSBkb3duY2FzdDxEb2N1bWVudD4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpLnNldHRp
bmdzKCk7CiAgICAgICAgIGlmICghc2hvdWxkRW5hYmxlV2ViR0woc2V0dGluZ3Mud2ViR0xFbmFi
bGVkKCksIHNldHRpbmdzLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKCkpKQotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbiB3ZWJHTFZl
cnNpb24gPSBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wxOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gd2ViR0xWZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0
R0xXZWJHTFZlcnNpb246OldlYkdMMTsKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgIHdlYkdMVmVy
c2lvbiA9IChjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wpID8gR3Jh
cGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMSA6IEdyYXBoaWNzQ29udGV4dEdMV2Vi
R0xWZXJzaW9uOjpXZWJHTDI7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0VHlwZSk7
CiAjZW5kaWYKLSAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVh
dGUoKnRoaXMsIGF0dHJzLCB3ZWJHTFZlcnNpb24pOworCisgICAgYXV0byBjb250ZXh0ID0gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgd2ViR0xWZXJzaW9u
KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgc2V0
UmVuZGVyaW5nQ29udGV4dChtYWtlVW5pcXVlUmVmRnJvbU5vbk51bGxVbmlxdWVQdHIoV1RGTW92
ZShjb250ZXh0KSkpOworCisgICAgcmV0dXJuICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpAQCAtMjA2LDQ0ICsyMzQsNTMgQEAgRXhjZXB0aW9uT3I8T3B0aW9uYWw8T2Zmc2NyZWVuUmVu
ZGVyaW5nQwogICAgIGlmIChtX2RldGFjaGVkKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIGlmIChjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6XzJkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAg
IGlmICghaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSkK
KyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkgeworICAgICAgICBpZiAocmVu
ZGVyaW5nQ29udGV4dCgpLmlzMmQoKSkgeworICAgICAgICAgICAgaWYgKCFpczJkVHlwZShjb250
ZXh0VHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9Owot
ICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpIH0gfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CiAgICAgICAgIH0KIAot
ICAgICAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKnRoaXMpOwotICAgICAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgICAgIHJl
dHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLQotICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9IH07Ci0gICAgfQogI2lmIEVO
QUJMRShXRUJHTCkKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkgewotICAgICAg
ICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICBp
ZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzV2ViR0woKSkgeworICAgICAgICAgICAgaWYgKCFpc1dl
YkdMVHlwZShjb250ZXh0VHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51
bGxvcHQgfSB9OworICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVu
ZGVyaW5nQ29udGV4dCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVu
ZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICAgICAg
aWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICAgICAg
aWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAm
ZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0g
fTsKKyNlbmRpZgogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9
IH07CiAgICAgICAgIH0KIAorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgIH0KKworICAgIGlmIChpczJkVHlwZShj
b250ZXh0VHlwZSkpIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwYXNzaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzLgorICAgICAgICBhdXRvIGNvbnRleHQg
PSBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoY29udGV4dFR5cGUpOworICAgICAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAg
IHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyBj
b250ZXh0IH0gfSB9OworICAgIH0KKworI2lmIEVOQUJMRShXRUJHTCkKKyAgICBpZiAoaXNXZWJH
TFR5cGUoY29udGV4dFR5cGUpKSB7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHN0YXRlLnZtKCkpOwogICAgICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBjb252ZXJ0PElE
TERpY3Rpb25hcnk8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4+KHN0YXRlLCAhYXJndW1lbnRzLmlz
RW1wdHkoKSA/IGFyZ3VtZW50c1swXS5nZXQoKSA6IEpTQzo6anNVbmRlZmluZWQoKSk7CiAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7IEV4aXN0aW5nRXhjZXB0
aW9uRXJyb3IgfSk7CiAKLSAgICAgICAgY3JlYXRlQ29udGV4dFdlYkdMKGNvbnRleHRUeXBlLCBX
VEZNb3ZlKGF0dHJpYnV0ZXMpKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCisgICAgICAgIGF1
dG8gY29udGV4dCA9IGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0VHlwZSwgV1RGTW92ZShhdHRy
aWJ1dGVzKSk7CisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiB7IHsg
V1RGOjpudWxsb3B0IH0gfTsKIAogI2lmIEVOQUJMRShXRUJHTDIpCi0gICAgICAgIGlmIChpczxX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAgICAgIHJldHVybiB7
IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfSB9OworICAgICAgICBpZiAoaXM8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8
V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4oKmNvbnRleHQpIH0gfSB9OwogI2VuZGlmCi0gICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pigq
bV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSB9
IH0gfTsKICAgICB9CiAjZW5kaWYKIApAQCAtMjUyLDEwICsyODksMTAgQEAgRXhjZXB0aW9uT3I8
T3B0aW9uYWw8T2Zmc2NyZWVuUmVuZGVyaW5nQwogCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiB7Ci0gICAg
aWYgKG1fZGV0YWNoZWQgfHwgIW1fY29udGV4dCkKKyAgICBpZiAobV9kZXRhY2hlZCB8fCByZW5k
ZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkU3RhdGVFcnJvciB9OwogCi0gICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkpIHsKKyAgICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIGlmICghd2lkdGgo
KSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+
IHsgbnVsbHB0ciB9IH07CiAKQEAgLTI2OCwxNSArMzA1LDE1IEBAIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmUKICAgICAgICAgLy8gYnkgYnVmZmVyKCksIHRvIGF2b2lk
IHJlc2V0dGluZyB0aGUgY29udGV4dCBzdGF0ZSwgd2UgaGF2ZSB0byBtYWtlIGEgY29weSBhbmQK
ICAgICAgICAgLy8gY2xlYXIgdGhlIG9yaWdpbmFsIGJ1ZmZlciByYXRoZXIgdGhhbiByZXR1cm5p
bmcgdGhlIG9yaWdpbmFsIGJ1ZmZlci4KICAgICAgICAgYXV0byBidWZmZXJDb3B5ID0gYnVmZmVy
KCktPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYnVmZmVyKCktPmxv
Z2ljYWxTaXplKCkpLCBidWZmZXIoKS0+Y29sb3JTcGFjZSgpLCAqZHJhd2luZ0NvbnRleHQoKSk7
Ci0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkuY2xlYXJDYW52YXMoKTsKKyAgICAgICAgZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpLmNsZWFyQ2FudmFzKCk7CiAg
ICAgICAgIGNsZWFyQ29waWVkSW1hZ2UoKTsKIAogICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1h
cDo6Y3JlYXRlKEltYWdlQml0bWFwQmFja2luZyhXVEZNb3ZlKGJ1ZmZlckNvcHkpLCBvcmlnaW5D
bGVhbigpID8gU2VyaWFsaXphdGlvblN0YXRlOjpPcmlnaW5DbGVhbiA6IFNlcmlhbGl6YXRpb25T
dGF0ZSgpKSkgfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKGlzPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpIHsKLSAgICAgICAgYXV0byB3ZWJHTENvbnRl
eHQgPSAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KTsKKyAgICBp
ZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CisgICAg
ICAgIGF1dG8gd2ViR0xDb250ZXh0ID0gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKIAogICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQg
dG8gY3JlYXRlIGFuIEltYWdlQml0bWFwIHVzaW5nIHRoZSBiYWNraW5nCiAgICAgICAgIC8vIHN0
b3JlIGZyb20gdGhpcyBjYW52YXMgKG9yIGl0cyBjb250ZXh0KSwgYnV0IGZvciBub3cgd2UnbGwg
anVzdApAQCAtMzU4LDIwICszOTUsMTkgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmRpZERyYXco
Y29uc3QgT3B0aQogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0NoYW5nZWQocmVjdCk7CiB9CiAK
LUltYWdlKiBPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKK0ltYWdlKiBPZmZz
Y3JlZW5DYW52YXM6OmNvcGllZEltYWdlKCkKIHsKICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVyKCkp
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1hZ2UgPSBi
dWZmZXIoKS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKLXZvaWQg
T2Zmc2NyZWVuQ2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkgY29uc3QKK3ZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVsbHB0
cjsKIH0KQEAgLTM4Nyw3ICs0MjMsNyBAQCBTZWN1cml0eU9yaWdpbiogT2Zmc2NyZWVuQ2FudmFz
OjpzZWN1cml0CiAKIGJvb2wgT2Zmc2NyZWVuQ2FudmFzOjpjYW5EZXRhY2goKSBjb25zdAogewot
ICAgIHJldHVybiAhbV9kZXRhY2hlZCAmJiAhbV9jb250ZXh0OworICAgIHJldHVybiAhbV9kZXRh
Y2hlZCAmJiByZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0
cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4gT2Zmc2NyZWVuQ2FudmFzOjpkZXRhY2goKQpAQCAt
NDA1LDEwICs0NDEsMTAgQEAgc3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFz
PgogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6c2V0UGxhY2Vob2xkZXJDYW52YXMoSFRNTENhbnZh
c0VsZW1lbnQmIGNhbnZhcykKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJU
KHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKICAgICBtX3BsYWNlaG9sZGVyRGF0YS0+Y2FudmFzID0gbWFrZVdlYWtQdHIoY2FudmFzKTsK
LSAgICBhdXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQ+KCpjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICBhdXRvJiBwbGFj
ZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KGNh
bnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAgIGF1dG8mIGltYWdlQnVmZmVyUGlwZSA9IHBs
YWNlaG9sZGVyQ29udGV4dC5pbWFnZUJ1ZmZlclBpcGUoKTsKICAgICBpZiAoaW1hZ2VCdWZmZXJQ
aXBlKQogICAgICAgICBtX3BsYWNlaG9sZGVyRGF0YS0+YnVmZmVyUGlwZVNvdXJjZSA9IGltYWdl
QnVmZmVyUGlwZS0+c291cmNlKCk7CkBAIC00MzEsOCArNDY3LDggQEAgdm9pZCBPZmZzY3JlZW5D
YW52YXM6OmNvbW1pdFRvUGxhY2Vob2xkZQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhN
RTogVHJhbnNmZXIgdGV4dHVyZSBvdmVyIGlmIHdlJ3JlIHVzaW5nIGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nCi0gICAgaWYgKG1fY29udGV4dCAmJiAobV9jb250ZXh0LT5pc1dlYkdMKCkgfHwgbV9j
b250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpKQotICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdM
KCkgfHwgcmVuZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxlcmF0ZWQoKSkKKyAgICAgICAgcmVuZGVy
aW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAKICAgICBpZiAo
bV9wbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UpIHsKICAgICAgICAgYXV0byBidWZm
ZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6
OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwpAQCAtNDY5LDcgKzUwNSw3IEBAIENTU1Zh
bHVlUG9vbCYgT2Zmc2NyZWVuQ2FudmFzOjpjc3NWYWx1ZVAKICAgICByZXR1cm4gQ1NTVmFsdWVQ
b29sOjpzaW5nbGV0b24oKTsKIH0KIAotdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdl
QnVmZmVyKCkgY29uc3QKK3ZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigp
CiB7CiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSB0cnVlOwogCkBAIC00NzksNyArNTE1
LDcgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyKAogICAgIHNldElt
YWdlQnVmZmVyKEltYWdlQml0bWFwOjpjcmVhdGVJbWFnZUJ1ZmZlcigqY2FudmFzQmFzZVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KSk7CiB9CiAKLVJlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIoKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1fZGV0YWNoZWQpOwogCkBAIC00OTMsOCArNTI5
LDggQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRhawogdm9pZCBPZmZz
Y3JlZW5DYW52YXM6OnJlc2V0KCkKIHsKICAgICByZXNldEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7
Ci0gICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0
LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5yZXNldCgpOworICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgIGRvd25jYXN0PE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5yZXNl
dCgpOwogCiAgICAgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgPSBmYWxzZTsKICAgICBzZXRJbWFn
ZUJ1ZmZlcihudWxscHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
aAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52
YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IGRvdWJsZSBxdWFsaXR5ID0gMS4wOwogICAgIH07CiAKLSAgICBlbnVtIGNsYXNzIFJlbmRlcmlu
Z0NvbnRleHRUeXBlIHsKLSAgICAgICAgXzJkLAotICAgICAgICBXZWJnbCwKLSAgICAgICAgV2Vi
Z2wyCi0gICAgfTsKKyAgICBlbnVtIGNsYXNzIFJlbmRlcmluZ0NvbnRleHRUeXBlIHsgXzJkLCBX
ZWJnbCwgV2ViZ2wyIH07CiAKICAgICBzdGF0aWMgUmVmPE9mZnNjcmVlbkNhbnZhcz4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KTsKICAgICBzdGF0aWMgUmVmPE9mZnNjcmVlbkNhbnZhcz4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+JiYpOwpA
QCAtMTIyLDE2ICsxMTgsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgodW5zaWduZWQp
OwogICAgIHZvaWQgc2V0SGVpZ2h0KHVuc2lnbmVkKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KLQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmluZ0Nv
bnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBSZW5kZXJpbmdDb250ZXh0
VHlwZSwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKICAg
ICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiB0cmFuc2ZlclRvSW1hZ2VCaXRtYXAo
KTsKICAgICB2b2lkIGNvbnZlcnRUb0Jsb2IoSW1hZ2VFbmNvZGVPcHRpb25zJiYsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYpOwogCiAgICAgdm9pZCBkaWREcmF3KGNvbnN0IE9wdGlvbmFsPEZsb2F0
UmVjdD4mKSBmaW5hbDsKIAotICAgIEltYWdlKiBjb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOwot
ICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0IGZpbmFsOworICAgIEltYWdlKiBjb3Bp
ZWRJbWFnZSgpIGZpbmFsOworICAgIHZvaWQgY2xlYXJDb3BpZWRJbWFnZSgpIGZpbmFsOwogCiAg
ICAgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2hh
c0NyZWF0ZWRJbWFnZUJ1ZmZlcjsgfQogCkBAIC0xNDgsNyArMTQyLDYgQEAgcHVibGljOgogICAg
IHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwogCiBwcml2YXRlOgotCiAgICAgT2Zmc2NyZWVuQ2Fu
dmFzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KTsKIAogICAgIGJvb2wgaXNPZmZzY3JlZW5DYW52YXMoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CkBAIC0xNjUsMTIgKzE1OCwxNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmKSBmaW5hbDsKIAorICAgIHN0YXRpYyBib29sIGlzMmRUeXBlKFJl
bmRlcmluZ0NvbnRleHRUeXBlKTsKKyAgICBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQqIGNyZWF0ZU9mZnNjcmVlbkNvbnRleHQyZChSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisKICNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgdm9pZCBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29u
dGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJiA9IHsgfSk7CisgICAgc3RhdGljIGJv
b2wgaXNXZWJHTFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUpOworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSwgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyYmKTsKICNlbmRpZgogCi0gICAgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlcigpIGNvbnN0IGZpbmFsOwotICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdlQnVm
ZmVyKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGZpbmFsOworICAgIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gdGFrZUltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHJlc2V0KCk7
CiAKQEAgLTE3OCwxNCArMTc1LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoQnVmZmVyVG9Q
bGFjZWhvbGRlcigpOwogICAgIHZvaWQgc2NoZWR1bGVDb21taXRUb1BsYWNlaG9sZGVyQ2FudmFz
KCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250
ZXh0OwotCiAgICAgLy8gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgbWVhbnMgd2UgdHJpZWQgdG8g
bWFsbG9jIHRoZSBidWZmZXIuIFdlIGRpZG4ndCBuZWNlc3NhcmlseSBnZXQgaXQuCiAgICAgbXV0
YWJsZSBib29sIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIHsgZmFsc2UgfTsKIAogICAgIGJvb2wg
bV9kZXRhY2hlZCB7IGZhbHNlIH07CiAKLSAgICBtdXRhYmxlIFJlZlB0cjxJbWFnZT4gbV9jb3Bp
ZWRJbWFnZTsKKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7CiAKICAgICBib29sIG1f
aGFzU2NoZWR1bGVkQ29tbWl0IHsgZmFsc2UgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxMSArNjksMTEgQEAgdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNh
bnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1
c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKK1VuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNh
bnZhcywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU2V0dGluZ3MmJiBzZXR0aW5ncywgYm9vbCB1
c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkKIHsKLSAgICBhdXRvIHJlbmRlcmluZ0NvbnRl
eHQgPSBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihuZXcgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21w
YXRpYmlsaXR5UGFyc2VNb2RlKSk7CisgICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gbWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFz
LCBXVEZNb3ZlKHNldHRpbmdzKSwgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKIAot
ICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCgqcmVuZGVyaW5nQ29udGV4dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpk
aWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQuZ2V0KCkpOwog
CiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNp
b24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgVGV4dE1l
dHJpY3M7CiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYsIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQ
YXJzZU1vZGUpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PiBjcmVhdGUoQ2FudmFzQmFzZSYsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYs
IGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpOwogCiAgICAgdmlydHVhbCB+Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3NzE5NikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBwdWJsaWM6CiAKICAgICBDYW52YXNCYXNl
JiBjYW52YXNCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0KIAorICAgIHZpcnR1YWwg
Ym9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
czJkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNXZWJHTDEo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC03OSw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICAvLyB1
c2VkIGZvciBjb21wb3NpdGluZyBwdXJwb3Nlcy4KICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckRpc3BsYXlXaXRoUGFpbnQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKSB7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgYm9vbCBoYXNB
Y3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY3Rp
dmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOyB9CiAgICAgdm9pZCBzZXRIYXNBY3RpdmVJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyKGJvb2wgaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRy
YWNlcikgeyBtX2hhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIgPSBoYXNBY3RpdmVJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKTsKKworVW5pcXVlUmVmPENhbnZhc1JlbmRl
cmluZ0NvbnRleHROb25lPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Y3JlYXRlKENhbnZh
c0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2Uo
Km5ldyBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZShjYW52YXMpKTsKK30KKworQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKENhbnZhc0Jhc2Um
IGNhbnZhcykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeyBjYW52YXMgfQoreworfQor
CitDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25l
KCkgPSBkZWZhdWx0OworCit9CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSBmaW5hbCA6IHB1Ymxp
YyBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKENh
bnZhc1JlbmRlcmluZ0NvbnRleHROb25lKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgVW5pcXVlUmVm
PENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lPiBjcmVhdGUoQ2FudmFzQmFzZSYpOworCisgICAg
dmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoKTsKKworcHJpdmF0ZToKKyAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZShDYW52YXNCYXNlJik7CisKKyAgICBib29sIGlzTm9u
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KK307CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTEgKzQyLDExIEBAIHN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUKIHN0
YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jh
c2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5n
cykKK1VuaXF1ZVJlZjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKIHsKLSAgICBhdXRvIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PihuZXcg
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncykpKTsK
KyAgICBhdXRvIHJlbmRlcmluZ0NvbnRleHQgPSBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgq
bmV3IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3Mp
KSk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRl
cmluZ0NvbnRleHQoKnJlbmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250ZXh0Lmdl
dCgpKTsKIAogICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmgJKHJldmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3
IEBAIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRl
KENhbnZhc0Jhc2UmLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmKTsKKyAg
ICBzdGF0aWMgVW5pcXVlUmVmPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKENh
bnZhc0Jhc2UmLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmKTsKIAogICAg
IGVudW0gY2xhc3MgQml0bWFwTW9kZSB7CiAgICAgICAgIFZhbGlkLApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw2ICs0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQp
OwogCitVbmlxdWVSZWY8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCit7
CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcykpOworfQorCiBPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6Ok9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNC
YXNlJiBjYW52YXMpCiAgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlKGNhbnZhcywg
ZmFsc2UpCiB7CkBAIC0xMDgsNyArMTEzLDggQEAgQ2FudmFzRGlyZWN0aW9uIE9mZnNjcmVlbkNh
bnZhc1JlbmRlcmluZwogICAgIHJldHVybiBEaXJlY3Rpb246Okx0cjsKIH0KIAotYXV0byBPZmZz
Y3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnRQcm94eSgpIC0+IGNvbnN0IEZvbnRQ
cm94eSogeworYXV0byBPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnRQcm94
eSgpIC0+IGNvbnN0IEZvbnRQcm94eSoKK3sKICAgICBpZiAoIXN0YXRlKCkuZm9udC5yZWFsaXpl
ZCgpKQogICAgICAgICBzZXRGb250KHN0YXRlKCkudW5wYXJzZWRGb250KTsKICAgICByZXR1cm4g
JnN0YXRlKCkuZm9udDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lv
biAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2lm
IEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5oIgotCiAjaW5jbHVkZSAiT2Zmc2NyZWVuQ2FudmFzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM2LDcgKzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8
T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOwor
CiAgICAgdmlydHVhbCB+T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKICAg
ICBPZmZzY3JlZW5DYW52YXMmIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PE9mZnNj
cmVlbkNhbnZhcz4oY2FudmFzQmFzZSgpKTsgfQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAg
ICAgUmVmPFRleHRNZXRyaWNzPiBtZWFzdXJlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwogCiBw
cml2YXRlOgorICAgIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNl
Jik7CisKICAgICBib29sIGlzT2Zmc2NyZWVuMmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CiAgICAgY29uc3QgRm9udFByb3h5KiBmb250UHJveHkoKSBmaW5hbDsKIH07CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsOSArMzQsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChQYWlu
dFJlbmRlcmluZ0NvbnRleHQyRCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxQYWludFJlbmRlcmluZ0Nv
bnRleHQyRD4gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52
YXMpCitVbmlxdWVSZWY8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IFBhaW50UmVuZGVyaW5nQ29u
dGV4dDJEOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQogewotICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KG5ldyBQYWludFJlbmRlcmluZ0NvbnRl
eHQyRChjYW52YXMpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5l
dyBQYWludFJlbmRlcmluZ0NvbnRleHQyRChjYW52YXMpKTsKIH0KIAogUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ6OlBhaW50UmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZhcykKQEAg
LTQ3LDQgKzQ3LDUgQEAgUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OlBhaW50UmVuZGVyaW5nQwog
UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6On5QYWludFJlbmRlcmluZ0NvbnRleHQyRCgpID0gZGVm
YXVsdDsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAko
cmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxOCArMzYsMjAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChQYWludFJlbmRlcmluZ0NvbnRleHQyRCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKKyAg
ICBzdGF0aWMgVW5pcXVlUmVmPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFz
QmFzZSYpOwogCiAgICAgdmlydHVhbCB+UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAogICAg
IEN1c3RvbVBhaW50Q2FudmFzJiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxDdXN0
b21QYWludENhbnZhcz4oY2FudmFzQmFzZSgpKTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgaXNQ
YWludCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQogICAgIFBhaW50UmVuZGVy
aW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKKworICAgIGJvb2wgaXNQYWludCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwog
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQU5WQVNSRU5ERVJJTkdDT05URVhUKFdlYkNvcmU6OlBh
aW50UmVuZGVyaW5nQ29udGV4dDJELCBpc1BhaW50KCkpCisKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMCArMzcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsKIAorVW5pcXVlUmVmPFBsYWNl
aG9sZGVyUmVuZGVyaW5nQ29udGV4dD4gUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGUoQ2FudmFzQmFzZSYgY2FudmFzKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJl
ZmVyZW5jZSgqbmV3IFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChjYW52YXMpKTsKK30KKwog
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQo
Q2FudmFzQmFzZSYgY2FudmFzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMp
CisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsgY2FudmFzIH0KKyAgICAsIG1faW1hZ2VC
dWZmZXJQaXBlIHsgSW1hZ2VCdWZmZXJQaXBlOjpjcmVhdGUoKSB9CiB7Ci0gICAgbV9pbWFnZUJ1
ZmZlclBpcGUgPSBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpOwogfQogCiBIVE1MQ2FudmFzRWxl
bWVudCogUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5k
ZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMyArMzcsMTUgQEAgY2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgUGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewog
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KTsK
IHB1YmxpYzoKLSAgICBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOwor
ICAgIHN0YXRpYyBVbmlxdWVSZWY8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYpOwogCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0Owog
CiAgICAgY29uc3QgUmVmUHRyPEltYWdlQnVmZmVyUGlwZT4mIGltYWdlQnVmZmVyUGlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJQaXBlOyB9CiAKIHByaXZhdGU6CisgICAgUGxhY2Vo
b2xkZXJSZW5kZXJpbmdDb250ZXh0KENhbnZhc0Jhc2UmKTsKKwogICAgIGJvb2wgaXNQbGFjZWhv
bGRlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCShyZXZp
c2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0MSw3ICs0ODQxLDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICAvLyBzbyBmb3Ig
V2ViR0wgMS4wIHVwbG9hZHMsIGRlZmVyIG1lYXN1cmluZyB0aGVpciByZWN0YW5nbGUgYXMgbG9u
ZyBhcyBwb3NzaWJsZS4KICAgICAgICAgdGV4SW1hZ2VJbXBsKGZ1bmN0aW9uSUQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBmYWxzZSwg
aW5wdXRTb3VyY2VJbWFnZVJlY3QsIGRlcHRoLCB1bnBhY2tJbWFnZUhlaWdodCk7CiAgICAgICAg
IHJldHVybiB7IH07Ci0gICAgfSwgWyZdKGNvbnN0IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4m
IGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4geworICAgIH0sIFsmXShSZWZQdHI8SFRNTENh
bnZhc0VsZW1lbnQ+JiBjYW52YXMpIC0+IEV4Y2VwdGlvbk9yPHZvaWQ+IHsKICAgICAgICAgYXV0
byB2YWxpZGF0aW9uUmVzdWx0ID0gdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChmdW5jdGlvbk5h
bWUsIGNhbnZhcy5nZXQoKSk7CiAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQucmVsZWFzZUV4Y2Vw
dGlvbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
cy5jcHAJKHJldmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogI2lmIEVOQUJMRShX
RUJHUFUpCi1zdGF0aWMgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0lmQ29udGV4dE1hdGNoZXNE
ZXZpY2UoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgV2ViR1BVRGV2aWNlJiBkZXZp
Y2UpCitzdGF0aWMgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0lmQ29udGV4dE1hdGNoZXNEZXZp
Y2UoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCwgV2ViR1BVRGV2aWNlJiBk
ZXZpY2UpCiB7CiAgICAgaWYgKGlzPEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQpKSB7CiAgICAg
ICAgIGF1dG8mIGNvbnRleHRHUFUgPSBkb3duY2FzdDxHUFVDYW52YXNDb250ZXh0Pihjb250ZXh0
KTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBXZWJHUFVEZXZpY2UqIEluc3BlY3RvckNhbnZhczo6ZGV2
aWNlQ29uCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgSW5zcGVjdG9yQ2FudmFzOjpp
c0RldmljZUZvckNhbnZhc0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKK2Jvb2wgSW5zcGVjdG9yQ2FudmFzOjppc0RldmljZUZvckNhbnZhc0NvbnRleHQoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKICAgICBpZiAoYXV0
byogZGV2aWNlID0gZGV2aWNlQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gY2FudmFzSWZDb250
ZXh0TWF0Y2hlc0RldmljZShjb250ZXh0LCAqZGV2aWNlKTsKQEAgLTEwNzYsMTYgKzEwNzYsMTYg
QEAgU3RyaW5nIEluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudAogICAgIH0KIAogI2lm
IEVOQUJMRShXRUJHTCkKLSAgICBhdXRvKiBjb250ZXh0ID0gbm9kZS0+cmVuZGVyaW5nQ29udGV4
dCgpOworICAgIGF1dG8mIGNvbnRleHQgPSBub2RlLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAgICAg
aWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKQotICAgICAgICBkb3du
Y2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigqY29udGV4dCkuc2V0UHJldmVudEJ1ZmZl
ckNsZWFyRm9ySW5zcGVjdG9yKHRydWUpOworICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlPihjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3Io
dHJ1ZSk7CiAjZW5kaWYKIAogICAgIEV4Y2VwdGlvbk9yPFVuY2FjaGVkU3RyaW5nPiByZXN1bHQg
PSBub2RlLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcyk7CiAKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKQotICAgICAgICBk
b3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPigqY29udGV4dCkuc2V0UHJldmVudEJ1
ZmZlckNsZWFyRm9ySW5zcGVjdG9yKGZhbHNlKTsKKyAgICAgICAgZG93bmNhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkuc2V0UHJldmVudEJ1ZmZlckNsZWFyRm9ySW5zcGVj
dG9yKGZhbHNlKTsKICNlbmRpZgogCiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAkocmV2aXNp
b24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShX
RUJHUFUpCiAgICAgV2ViR1BVRGV2aWNlKiBkZXZpY2VDb250ZXh0KCkgY29uc3Q7Ci0gICAgYm9v
bCBpc0RldmljZUZvckNhbnZhc0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpIGNvbnN0
OworICAgIGJvb2wgaXNEZXZpY2VGb3JDYW52YXNDb250ZXh0KGNvbnN0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmKSBjb25zdDsKICNlbmRpZgogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcAkocmV2aXNp
b24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0Nh
bGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudmFz
QWdlbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCkKK3N0
YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnZhc0FnZW50KGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpCiB7CiAgICAgQVNTRVJU
KEluc3BlY3Rvckluc3RydW1lbnRhdGlvblB1YmxpYzo6aGFzRnJvbnRlbmRzKCkpOwogCkBAIC04
Myw3ICs4Myw3IEBAIHN0YXRpYyBJbnNwZWN0b3JDYW52YXNBZ2VudCogZW5hYmxlZENhbnYKIH0K
IAogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04oQXJndW1lbnRUeXBlKSBcCi1P
cHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1bWVudCkgXAor
T3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IElu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5cGUgYXJndW1l
bnQpIFwKIHsgXAogICAgIGlmIChhdXRvKiBjYW52YXNBZ2VudCA9IGVuYWJsZWRDYW52YXNBZ2Vu
dChjYW52YXNSZW5kZXJpbmdDb250ZXh0KSkgXAogICAgICAgICByZXR1cm4gY2FudmFzQWdlbnQt
PnByb2Nlc3NBcmd1bWVudChjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBhcmd1bWVudCk7IFwKQEAg
LTkzLDcgKzkzLDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvYwog
ICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFDRVJfQVJHVU1FTlQoUFJPQ0VT
U19BUkdVTUVOVF9ERUZJTklUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElP
TgogCi12b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbihDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcmJiBuYW1lLCBJ
bnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVudHMp
Cit2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbihjb25zdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcmJiBuYW1l
LCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBhcmd1bWVu
dHMpCiB7CiAgICAgaWYgKGF1dG8qIGNhbnZhc0FnZW50ID0gZW5hYmxlZENhbnZhc0FnZW50KGNh
bnZhc1JlbmRlcmluZ0NvbnRleHQpKQogICAgICAgICBjYW52YXNBZ2VudC0+cmVjb3JkQWN0aW9u
KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRz
KSk7CkBAIC0xMDEsMTQgKzEwMSwxMiBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6
OnJlY29yZEFjCiAKIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3Nl
ZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoY29u
c3QgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQsIHVpbnQzMl90IGFyZ3VtZW50KQog
ewotICAgIEFTU0VSVChjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSk7Ci0gICAgcmV0
dXJuIHByb2Nlc3NBcmd1bWVudCgqY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCksIGFy
Z3VtZW50KTsKKyAgICByZXR1cm4gcHJvY2Vzc0FyZ3VtZW50KGNhbnZhc0VsZW1lbnQucmVuZGVy
aW5nQ29udGV4dCgpLCBhcmd1bWVudCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRy
YWNlcjo6cmVjb3JkQWN0aW9uKGNvbnN0IEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXNFbGVtZW50
LCBTdHJpbmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1
bWVudHMmJiBhcmd1bWVudHMpCiB7Ci0gICAgQVNTRVJUKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5n
Q29udGV4dCgpKTsKLSAgICByZWNvcmRBY3Rpb24oKmNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29u
dGV4dCgpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKGFyZ3VtZW50cykpOworICAgIHJlY29yZEFj
dGlvbihjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZShhcmd1bWVudHMpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
ci5oCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsMTIgKzE5NCwxMiBA
QCBwdWJsaWM6CiAgICAgdXNpbmcgUHJvY2Vzc2VkQXJndW1lbnRzID0gc3RkOjppbml0aWFsaXpl
cl9saXN0PE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3VtZW50Pj47CiAKICNkZWZpbmUgUFJPQ0VTU19B
UkdVTUVOVF9ERUNMQVJBVElPTihBcmd1bWVudFR5cGUpIFwKLSAgICBzdGF0aWMgT3B0aW9uYWw8
UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiwgQXJndW1lbnRUeXBlKTsgXAorICAgIHN0YXRpYyBPcHRpb25hbDxQcm9jZXNzZWRBcmd1bWVu
dD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBBcmd1bWVu
dFR5cGUpOyBcCiAvLyBlbmQgb2YgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTgogICAgIEZP
Ul9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFDRVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdV
TUVOVF9ERUNMQVJBVElPTikKICN1bmRlZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAK
LSAgICBzdGF0aWMgdm9pZCByZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0
cmluZyYmLCBQcm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CisgICAgc3RhdGljIHZvaWQgcmVj
b3JkQWN0aW9uKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcmJiwgUHJvY2Vz
c2VkQXJndW1lbnRzJiYgPSB7IH0pOwogCiAgICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3NlZEFy
Z3VtZW50PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmLCB1aW50MzJf
dCk7CiAgICAgc3RhdGljIHZvaWQgcmVjb3JkQWN0aW9uKGNvbnN0IEhUTUxDYW52YXNFbGVtZW50
JiwgU3RyaW5nJiYsIFByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdl
bnQuY3BwCShyZXZpc2lvbiAyNzcxOTYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3LDEzICs0
MTcsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpmcmFtZU5hdmlnYXRlCiAKIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNTU0NhbnZhc0NsaWVudE5vZGVzKENhbnZh
c0Jhc2UmIGNhbnZhc0Jhc2UpCiB7Ci0gICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UucmVu
ZGVyaW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gaW5zcGVjdG9y
Q2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7CisgICAgYXV0byBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4
dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNDQ3LDcgKzQ0MSw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnYKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmRpZENoYW5nZUNhbnZhc01lbW9yeShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
b250ZXh0KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5
KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPElu
c3BlY3RvckNhbnZhcz4gaW5zcGVjdG9yQ2FudmFzOwogCkBAIC00NzcsMTEgKzQ3MSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5nZUNhbnYKIAogdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiBjYW52YXNCYXNlLCBjb25zdCBP
cHRpb25hbDxGbG9hdFJlY3Q+JikKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5y
ZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQp
OworICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNC
YXNlLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCiAgICAgICAgIHJldHVybjsKQEAgLTQ5MSwxMSArNDgx
LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y2FudmFzQ2hhbmdlZAogCiB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYgY2FudmFzQmFz
ZSkKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGluc3BlY3Rv
ckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoKmNvbnRleHQpOworICAgIGF1dG8gaW5zcGVj
dG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcyhjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRl
eHQoKSk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CiAgICAgaWYgKCFpbnNwZWN0b3JD
YW52YXMpCiAgICAgICAgIHJldHVybjsKQEAgLTUwMyw3ICs0ODksNyBAQCB2b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95CiAgICAgdW5iaW5kQ2FudmFzKCppbnNwZWN0b3JD
YW52YXMpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvcmRp
bmdDYW52YXNGcmFtZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGZvcmNl
RGlzcGF0Y2gpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRGaW5pc2hSZWNvcmRpbmdD
YW52YXNGcmFtZShjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBib29sIGZv
cmNlRGlzcGF0Y2gpCiB7CiAgICAgaWYgKCFjb250ZXh0Lmhhc0FjdGl2ZUluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTM3LDcgKzUyMyw3IEBAIHZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY28KICAgICBtX3JlY29yZGluZ0NhbnZh
c0lkZW50aWZpZXJzLnJlbW92ZShpbnNwZWN0b3JDYW52YXMtPmlkZW50aWZpZXIoKSk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBKU0M6OkpTR2xvYmFsT2JqZWN0JiBleGVj
LCBKU0M6OkpTT2JqZWN0KiBvcHRpb25zKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29u
c29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGV4ZWMsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMp
CiB7CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNvbnRl
eHQpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwpAQCAtNTU5LDcgKzU0NSw3IEBAIHZv
aWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdGFydFIKICAgICBzdGFydFJlY29yZGlu
ZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNv
bGUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50Ojpjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0KQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRp
bmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBk
aWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZShjb250ZXh0LCB0cnVlKTsKIH0KQEAgLTY4Miw3
ICs2NjgsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkdQVSkKIAogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJ
T04oQXJndW1lbnRUeXBlKSBcCi1PcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQ
cm9jZXNzZWRBcmd1bWVudD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnByb2Nlc3NBcmd1bWVudChD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBBcmd1bWVudFR5
cGUgYXJndW1lbnQpIFwKK09wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nl
c3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50
VHlwZSBhcmd1bWVudCkgXAogeyBcCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5z
cGVjdG9yQ2FudmFzKGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOyBcCiAgICAgQVNTRVJUKGluc3Bl
Y3RvckNhbnZhcyk7IFwKQEAgLTY5Miw3ICs2NzgsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3JDYW52
YXNDYWxsVHJhY2VyOjpQcm9jCiAgICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RS
QUNFUl9BUkdVTUVOVChQUk9DRVNTX0FSR1VNRU5UX0RFRklOSVRJT04pCiAjdW5kZWYgUFJPQ0VT
U19BUkdVTUVOVF9ERUZJTklUSU9OCiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29y
ZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBT
dHJpbmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVu
dHMmJiBhcmd1bWVudHMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZWNvcmRBY3Rpb24o
Y29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgU3Ry
aW5nJiYgbmFtZSwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnRz
JiYgYXJndW1lbnRzKQogewogICAgIEFTU0VSVChjYW52YXNSZW5kZXJpbmdDb250ZXh0Lmhhc0Fj
dGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSk7CiAKQEAgLTg4Nyw3ICs4NzMsNyBAQCBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBCiAgICAgcmV0dXJuIGluc3Bl
Y3RvckNhbnZhczsKIH0KIAotUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5z
cGVjdG9yQ2FudmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCiB7CiAg
ICAgZm9yIChhdXRvJiBpbnNwZWN0b3JDYW52YXMgOiBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNh
bnZhcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yQ2FudmFzLT5jYW52YXNDb250
ZXh0KCkgPT0gJmNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNhbnZhc0FnZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCShyZXZpc2lvbiAyNzcxOTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDEwICs5OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFt
ZU5hdmlnYXRlZChGcmFtZSYpOwogICAgIHZvaWQgZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9k
ZXMoQ2FudmFzQmFzZSYpOwogICAgIHZvaWQgZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4
dChDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDYW52YXNNZW1v
cnkoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwotICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5n
Q2FudmFzRnJhbWUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9
IGZhbHNlKTsKLSAgICB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5k
ZXJpbmdDb250ZXh0JiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9wdGlv
bnMpOwotICAgIHZvaWQgY29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYpOworICAgIHZvaWQgZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KGNvbnN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKKyAgICB2b2lkIGRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1l
KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBib29sIGZvcmNlRGlzcGF0Y2ggPSBmYWxz
ZSk7CisgICAgdm9pZCBjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIEpTQzo6SlNHbG9iYWxPYmplY3QmLCBKU0M6OkpTT2JqZWN0KiBvcHRp
b25zKTsKKyAgICB2b2lkIGNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKGNvbnN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgdm9pZCBkaWRFbmFibGVF
eHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgZGlkQ3JlYXRlV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmLCBX
ZWJHTFByb2dyYW0mKTsKQEAgLTEyMCwxMSArMTIwLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIElu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXIKICNkZWZpbmUgUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJB
VElPTihBcmd1bWVudFR5cGUpIFwKLSAgICBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmLCBBcmd1bWVudFR5cGUpOyBcCisgICAgT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlcjo6UHJvY2Vzc2VkQXJndW1lbnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0JiwgQXJndW1lbnRUeXBlKTsgXAogLy8gZW5kIG9mIFBST0NFU1NfQVJH
VU1FTlRfREVDTEFSQVRJT04KICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJB
Q0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04pCiAjdW5kZWYgUFJPQ0VT
U19BUkdVTUVOVF9ERUNMQVJBVElPTgotICAgIHZvaWQgcmVjb3JkQWN0aW9uKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmLCBTdHJpbmcmJiwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vz
c2VkQXJndW1lbnRzJiYgPSB7IH0pOworICAgIHZvaWQgcmVjb3JkQWN0aW9uKGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmLCBTdHJpbmcmJiwgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6
UHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBSZWNv
cmRpbmdPcHRpb25zIHsKQEAgLTE0Niw3ICsxNDYsNyBAQCBwcml2YXRlOgogI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7CiAg
ICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7Ci0gICAg
UmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJp
bmdDb250ZXh0Jik7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNh
bnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURl
dmljZSYpOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Miwx
MCArMjQyLDEwIEBAIHN0YXRpYyBKU0M6OkpTT2JqZWN0KiBvYmplY3RBcmd1bWVudEF0KFMKIHN0
YXRpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdGFyZ2V0KQogewogICAgIGlmIChhdXRvKiBjYW52YXMgPSBK
U0hUTUxDYW52YXNFbGVtZW50Ojp0b1dyYXBwZWQodm0sIHRhcmdldCkpCi0gICAgICAgIHJldHVy
biBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjYW52YXMtPnJl
bmRlcmluZ0NvbnRleHQoKTsKICNpZiBFTkFCTEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBpZiAo
YXV0byogY2FudmFzID0gSlNPZmZzY3JlZW5DYW52YXM6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkK
LSAgICAgICAgcmV0dXJuIGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgICAgICByZXR1
cm4gJmNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOwogI2VuZGlmCiAgICAgaWYgKGF1dG8qIGNv
bnRleHQgPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dG9XcmFwcGVkKHZtLCB0YXJnZXQp
KQogICAgICAgICByZXR1cm4gY29udGV4dDsKQEAgLTM0OSwxMCArMzQ5LDggQEAgdm9pZCBQYWdl
Q29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OgogI2VuZGlmCiAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byYgY2FudmFzRWxlbWVudCA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVt
ZW50Pigqbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogY2FudmFzUmVu
ZGVyaW5nQ29udGV4dCA9IGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gc25hcHNob3RDYW52YXMo
Y2FudmFzRWxlbWVudCwgKmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhVVJMID0gcmVzdWx0LnZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBz
bmFwc2hvdENhbnZhcyhjYW52YXNFbGVtZW50LCBjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRl
eHQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IHJlc3VsdC52YWx1
ZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludEltYWdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWludElt
YWdlLmNwcAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw3ICsxNjYs
NyBAQCBJbWFnZURyYXdSZXN1bHQgQ3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0CiAgICAgaWYgKHJl
c3VsdC50eXBlKCkgIT0gQ2FsbGJhY2tSZXN1bHRUeXBlOjpTdWNjZXNzKQogICAgICAgICByZXR1
cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwogCi0gICAgY2FudmFzLT5yZXBsYXlEaXNw
bGF5TGlzdCgmZGVzdENvbnRleHQpOworICAgIGNhbnZhcy0+cmVwbGF5RGlzcGxheUxpc3QoZGVz
dENvbnRleHQpOwogCiAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkRHJhdzsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJl
dmlzaW9uIDI3NzE5NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2Fu
dmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDcgQEAgYm9vbCBSZW5kZXJIVE1M
Q2FudmFzOjpyZXF1aXJlc0xheWVyKCkgYwogICAgIGlmIChSZW5kZXJSZXBsYWNlZDo6cmVxdWly
ZXNMYXllcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChDYW52YXNSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0ID0gY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKSkK
LSAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKTsKLQotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkKCk7CiB9CiAKIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQpAQCAt
NzMsNyArNzAsNyBAQCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50UmVwbGFjZWQoUGFpCiAg
ICAgTGF5b3V0UmVjdCBjb250ZW50Qm94UmVjdCA9IHRoaXMtPmNvbnRlbnRCb3hSZWN0KCk7CiAK
ICAgICBpZiAoY29udGV4dC5kZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSkgewotICAgICAgICBp
ZiAoIWNvbnRleHQuY29udGVuZnVsUGFpbnREZXRlY3RlZCgpICYmIGNhbnZhc0VsZW1lbnQoKS5y
ZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIGlmICghY29udGV4dC5jb250ZW5mdWxQYWludERl
dGVjdGVkKCkgJiYgIWNhbnZhc0VsZW1lbnQoKS5yZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkp
CiAgICAgICAgICAgICBjb250ZXh0LnNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjc3MTk2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkx
LDEyICs5MSwxMiBAQCBDYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5IGNhbnZhc0NvbXBvc2l0CiB7
CiAgICAgQVNTRVJUKHJlbmRlcmVyLmlzQ2FudmFzKCkpOwogICAgIAotICAgIGNvbnN0IEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVy
ZXIubm9kZSgpKTsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0
KCk7Ci0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5pc0FjY2VsZXJhdGVkKCkpCisgICAg
Y29uc3QgYXV0byogY2FudmFzID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KHJlbmRlcmVy
Lm5vZGUoKSk7CisgICAgYXV0byYgY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dC5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiBVbmFj
Y2VsZXJhdGVkQ2FudmFzOwogICAgIAotICAgIGlmIChjb250ZXh0LT5pc0dQVUJhc2VkKCkpCisg
ICAgaWYgKGNvbnRleHQuaXNHUFVCYXNlZCgpKQogICAgICAgICByZXR1cm4gQ2FudmFzQXNMYXll
ckNvbnRlbnRzOwogCiAgICAgcmV0dXJuIENhbnZhc1BhaW50ZWRUb0xheWVyOyAvLyBPbiBNYWMg
YW5kIGlPUyB3ZSBwYWludCBhY2NlbGVyYXRlZCBjYW52YXNlcyBpbnRvIHRoZWlyIGxheWVycy4K
QEAgLTEwNjQsOSArMTA2NCw4IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25m
aWd1cmEKICNlbmRpZgogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkgfHwgRU5B
QkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5pc0NhbnZhcygp
ICYmIGNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kocmVuZGVyZXIoKSkgPT0gQ2FudmFzQXNMYXll
ckNvbnRlbnRzKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBk
b3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOwotICAgICAg
ICBpZiAoYXV0byogY29udGV4dCA9IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKQotICAgICAg
ICAgICAgbV9ncmFwaGljc0xheWVyLT5zZXRDb250ZW50c1RvUGxhdGZvcm1MYXllcihjb250ZXh0
LT5wbGF0Zm9ybUxheWVyKCksIEdyYXBoaWNzTGF5ZXI6OkNvbnRlbnRzTGF5ZXJQdXJwb3NlOjpD
YW52YXMpOworICAgICAgICBjb25zdCBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFz
RWxlbWVudD4ocmVuZGVyZXIoKS5lbGVtZW50KCkpOworICAgICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpLnBs
YXRmb3JtTGF5ZXIoKSwgR3JhcGhpY3NMYXllcjo6Q29udGVudHNMYXllclB1cnBvc2U6OkNhbnZh
cyk7CiAKICAgICAgICAgbGF5ZXJDb25maWdDaGFuZ2VkID0gdHJ1ZTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428060</attachid>
            <date>2021-05-07 16:39:28 -0700</date>
            <delta_ts>2021-05-07 17:45:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507163927.patch</filename>
            <type>text/plain</type>
            <size>117753</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL1VuaXF1ZVJlZi5oOgorICAgICAgICAoV1RGOjptYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSk6CisgICAgICAgIEFkZCBuZXcgaGVscGVyIHRvIGFsbG93IG1h
a2luZyBVbmlxdWVSZWZzIGluIGEgc2xpZ2h0IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMgZnJp
ZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3RlbSBm
dW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAgVW5p
cXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorVW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKFQmIHJlZmVy
ZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBUOjp3ZWJr
aXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsKKyAgICBy
ZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgpA
QCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNsYXNzIFUs
IGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldpdGhvdXRG
YXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBmcmllbmQg
VW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6OnVuaXF1
ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFr
ZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVu
ZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBAIC05NSwzICsx
MDMsNCBAQCB1c2luZyBXVEY6OlVuaXF1ZVJlZjsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVu
aXF1ZVJlZkZyb21SZWZlcmVuY2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcyMDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAg
QEAKKzIwMjEtMDUtMDYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0
b3IgY2FudmFzIHJlbGF0ZWQgY2xhc3NlcyBhIGJpdCB0byBtYWtlIHRoZW0gYSBiaXQgZWFzaWVy
IHRvIHdvcmsgd2l0aC4KKyAgICAgICAgLSBIVE1MQ2FudmFzRWxlbWVudCwgT2Zmc2NyZWVuQ2Fu
dmFzIGFuZCBDdXN0b21QYWludENhbnZhcyBub3cgYWx3YXlzIGhhdmUgCisgICAgICAgICAgYSB2
YWxpZCwgbm9uLW51bGwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCAobm93IHN0b3JlZCBpbiBDYW52
YXNCYXNlIGFzCisgICAgICAgICAgVW5pcXVlUmVmKS4gSW4gcGxhY2Ugb2YgdGhlIG9sZCBudWxs
IHZhbHVlIHN0YXRlIHdlIG5vdyBoYXZlIGFuIGV4cGxpY2l0CisgICAgICAgICAgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUgdHlwZS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIG1vdmUgbW9yZSBj
b250ZXh0CisgICAgICAgICAgc3BlY2lmaWMgbG9naWMgdG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCBhbmQgaXRzIHN1YmNsYXNzZXMgYW5kIG91dCBvZiAKKyAgICAgICAgICBDYW52YXNCYXNlIGFu
ZCBpdHMgc3ViY2xhc3Nlcy4KKyAgICAgICAgLSBDU1NDYW52YXNWYWx1ZSBub3cgc3RvcmVzIGEg
Q2FudmFzQmFzZSByYXRoZXIgdGhhbiBhbiBIVE1MQ2FudmFzRWxlbWVudAorICAgICAgICAgIHRv
IGF2b2lkIHVubmVjZXNzYXJ5IGRvd25jYXN0cy4gVGhlIGNhbGxzIHdlcmUgYWxsIHN1cHBvcnRl
ZCBieSBDYW52YXNCYXNlCisgICAgICAgICAgYWxyZWFkeSwgc28gdGhpcyBqdXN0IHJlbW92ZXMg
c29tZSB1bm5lY2Vzc2FyeSBoZWZ0LgorICAgICAgICAtIE1vdmUgaW1hZ2UgYnVmZmVyIGRlc3Ry
dWN0aW9uIHRvIHRoZSBDYW52YXNCYXNlIGRlc3RydWN0b3IgcmF0aGVyIHRoYW4KKyAgICAgICAg
ICBoYXZpbmcgaXQgZHVwbGljYXRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4gTmV3IGRlc3Ryb3lJbWFn
ZUJ1ZmZlcigpIGhlbHBlcgorICAgICAgICAgIGltcGxlbWVudHMgdGhlIHN0ZXBzIG5lZWRlZCBp
biBhIG1vcmUgb3B0aW1hbCBtYW5uZXIgdGhhbiBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKS4KKyAg
ICAgICAgLSBSZW1vdmUgY29uc3QgZnJvbSBhIGxvdCBvZiBub3QgYWN0dWFsIGNvbnN0IGZ1bmN0
aW9ucyBsaWtlIGNvcGllZEltYWdlKCksCisgICAgICAgICAgY2xlYXJDb3BpZWRJbWFnZSgpIGFu
ZCBzZXRJbWFnZUJ1ZmZlcigpLiAKKyAgICAgICAgLSBGaXh1cCBPZmZzY3JlZW5DYW52YXM6Omdl
dENvbnRleHQgdG8gdXNlIHRoZSBjb250ZXh0IGNyZWF0aW9uIHBhdHRlcm4gYXMgCisgICAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQ6Z2V0Q29udGV4dCwgbWFraW5nIGl0IGVhc3kgdG8gc2VlIHRo
ZSBwYXJhbGxlbHMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0NhcHR1cmVN
ZWRpYVN0cmVhbVRyYWNrOjpTb3VyY2U6OmNhbnZhc0NoYW5nZWQpOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXND
b250ZXh0Lmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNSZXNpemVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbnZhc1ZhbHVlOjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FudmFzVmFsdWU6OmZpeGVkU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNW
YWx1ZTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjppbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6ZWxlbWVudCk6IERlbGV0ZWQuCisg
ICAgICAgICogY3NzL0NTU0NhbnZhc1ZhbHVlLmg6CisgICAgICAgICogY3NzL0NTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZTo6YWRkQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6
OnJlbW92ZUNsaWVudCk6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc0Jhc2U6OkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzQmFzZTo6fkNhbnZhc0Jhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZHJh
d2luZ0NvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6bWFrZVJl
bmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6aGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c0Jhc2U6OnNldEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRl
c3Ryb3lJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFn
ZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpyZW5kZXJpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAq
IGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFp
bnRDYW52YXM6On5DdXN0b21QYWludENhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21Q
YWludENhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENh
bnZhczo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpjbGVhckNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFz
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR0wpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHRXZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlQ29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Z2V0Q29udGV4dFdlYkdQVSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
Y3JlYXRlQ29udGV4dEJpdG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpnZXRDb250ZXh0Qml0bWFwUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0U3VyZmFjZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6dmlydHVhbEhhc1BlbmRpbmdBY3Rpdml0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwcmVwYXJlRm9yRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXNDb250cm9sbGVk
QnlPZmZzY3JlZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpjbGVhckltYWdlQnVmZmVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp+
T2Zmc2NyZWVuQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzMmRUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzV2ViR0xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVl
bkNhbnZhczo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6
OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNvcGllZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xl
YXJDb3BpZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1p
dFRvUGxhY2Vob2xkZXJDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFz
Ojp0YWtlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvcGllZEltYWdlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9P
ZmZzY3JlZW5DYW52YXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojppc05v
bmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6cGxh
dGZvcm1MYXllciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9Q
YWludFJlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9s
ZGVyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZVNvdXJjZUhlbHBlcik6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YW52YXNJZkNvbnRleHRNYXRjaGVzRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNhbnZhczo6aXNEZXZpY2VGb3JDYW52YXNDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZWRDYW52
YXNBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpy
ZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cHJvY2Vzc0FyZ3VtZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNl
cjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNh
bnZhc0FnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpk
aWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNv
cmRpbmdDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNv
bnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNh
bnZhc0FnZW50OjpyZWNvcmRBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmZpbmRJbnNwZWN0b3JDYW52YXMpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc1JlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tUGFpbnRJbWFnZTo6ZG9DdXN0b21QYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZh
czo6cmVxdWlyZXNMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2Fu
dmFzOjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVDb25maWd1cmF0aW9u
KToKKwogMjAyMS0wNS0wNyAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gZml4IGluY29uc2lzdGVuY3kgYXJvdW5kIHRoZSBtZWFuaW5nIG9mIGByYXRl
YCBhbmQgYGRlZmF1bHRQbGF5YmFja1JhdGVgIGJldHdlZW4gV2ViS2l0IGFuZCBBVktpdApJbmRl
eDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIwLDYgKzEzMjAsNyBAQCBodG1sL2NhbnZhcy9D
YW52YXNQYXR0ZXJuLmNwcAogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAK
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCitodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0Tm9uZS5jcHAKIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAogaHRtbC9jYW52
YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmNw
cApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJl
TWVkaWFTdHJlYW1UcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHAJKHJldmlzaW9u
IDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2Fw
dHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDcg
QEAgdm9pZCBDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjazo6U291cgogICAgIC8vIFdlIHNo
b3VsZCBpbnN0ZWFkIGFkZCBhbiBhbmNob3IgcG9pbnQgZm9yIGJvdGggMmQgYW5kIDNkIGNvbnRl
eHRzIHdoZXJlIGNhbnZhcyB3aWxsIGFjdHVhbGx5IHBhaW50LgogICAgIC8vIEFuZCBjYWxsIGNh
bnZhcyBvYnNlcnZlcnMgZnJvbSB0aGF0IHBvaW50LgogICAgIGlmIChpczxXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlPihjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKSkgewotICAgICAgICBhdXRv
JiBjb250ZXh0ID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKmNhbnZhcy5y
ZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBhdXRvJiBjb250ZXh0ID0gZG93bmNhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAg
ICAgIGlmICghY29udGV4dC5pc1ByZXNlcnZpbmdEcmF3aW5nQnVmZmVyKCkpIHsKICAgICAgICAg
ICAgIGNhbnZhcy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJUdXJuaW5nIGRyYXdpbmcg
YnVmZmVyIHByZXNlcnZhdGlvbiBmb3IgdGhlIFdlYkdMIGNhbnZhcyBiZWluZyBjYXB0dXJlZCJf
cyk7CiAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZVByZXNlcnZlRHJhd2luZ0J1ZmZlcigpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEdQVUNh
bnZhc0NvbnRleHQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8R1BVQ2FudmFzQ29udGV4dD4gR1BVQ2Fu
dmFzQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK1VuaXF1ZVJlZjxHUFVDYW52
YXNDb250ZXh0PiBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQog
ewotICAgIGF1dG8gY29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0Pihu
ZXcgR1BVQ2FudmFzQ29udGV4dChjYW52YXMpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5p
cXVlUmVmRnJvbVJlZmVyZW5jZSgqIG5ldyBHUFVDYW52YXNDb250ZXh0KGNhbnZhcykpOwogICAg
IGNvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiBjb250ZXh0OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQu
aAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BV
Q2FudmFzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBX
ZWJHUFVTd2FwQ2hhaW5EZXNjcmlwdG9yOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dCBmaW5hbCA6
IHB1YmxpYyBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoR1BVQ2FudmFzQ29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxHUFVDYW52YXNDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAgIHN0
YXRpYyBVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKIAog
ICAgIEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxI
VE1MQ2FudmFzRWxlbWVudD4oY2FudmFzQmFzZSgpKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcy
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MjgyLDYgKzE0MjgyLDggQEAKIAkJQkM4MjQzMjYwRDBDRThB
MjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93RmVhdHVyZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93RmVhdHVy
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkM4NEY0M0QyNjQxQUNDMjAwRjU3
QzFDIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZh
c1JlbmRlcmluZ0NvbnRleHROb25lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
ODRGNDNFMjY0MUFDQzIwMEY1N0MxQyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3Jv
bGxhYmxlQXJlYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3Jv
bGxhYmxlQXJlYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJF
QTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDk4LDYgKzIwMTAwLDggQEAKIAkJCQkzMTQwQzUyMjFG
REYzMTg2MDBEMkE4NzMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oICovLAogCQkJ
CUJDRTA0OTBDMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0
aW5ncy5oICovLAogCQkJCUJDRTA0OTBFMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRTZXR0aW5ncy5pZGwgKi8sCisJCQkJQkM4NEY0M0UyNjQxQUNDMjAwRjU3QzFD
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcCAqLywKKwkJCQlCQzg0RjQzRDI2NDFB
Q0MyMDBGNTdDMUMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCAqLywKIAkJCQk3QzE5
M0JBRDFGNUUwRUIzMDA4OEYzRTYgLyogQ2FudmFzU2hhZG93U3R5bGVzLmlkbCAqLywKIAkJCQk3
QzE5M0JCMjFGNUUwRUI2MDA4OEYzRTYgLyogQ2FudmFzU3RhdGUuaWRsICovLAogCQkJCTQ5NDg0
RkJGMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsy
NiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgi
CiAKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZh
c1ZhbHVlKCkKIHsKLSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPnJlbW92
ZU9ic2VydmVyKG1fY2FudmFzT2JzZXJ2ZXIpOworICAgIGlmIChtX2NhbnZhcykKKyAgICAgICAg
bV9jYW52YXMtPnJlbW92ZU9ic2VydmVyKG1fY2FudmFzT2JzZXJ2ZXIpOwogfQogCiBTdHJpbmcg
Q1NTQ2FudmFzVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBjb25zdApAQCAtNDEsNTMgKzQyLDUzIEBA
IFN0cmluZyBDU1NDYW52YXNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGMKICAgICByZXR1cm4gbWFr
ZVN0cmluZygiLXdlYmtpdC1jYW52YXMoIiwgbV9uYW1lLCAnKScpOwogfQogCi12b2lkIENTU0Nh
bnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgT3B0aW9u
YWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXND
aGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVj
dCkKIHsKICAgICBpZiAoIWNoYW5nZWRSZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IGltYWdlQ2hhbmdlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2hhbmdlZFJlY3QudmFsdWUoKSk7
Ci0gICAgZm9yIChhdXRvIGl0ID0gY2xpZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5l
bmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3Rh
dGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CisgICAg
Zm9yIChhdXRvIGNsaWVudCA6IGNsaWVudHMoKS52YWx1ZXMoKSkKKyAgICAgICAgY2xpZW50LT5p
bWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hh
bmdlUmVjdCk7CiB9CiAKLXZvaWQgQ1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENh
bnZhc0VsZW1lbnQmKQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChDYW52YXNC
YXNlJikKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBjbGllbnRzKCkuYmVnaW4oKSwgZW5kID0gY2xp
ZW50cygpLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5rZXktPmltYWdlQ2hh
bmdlZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKKyAgICBmb3IgKGF1dG8g
Y2xpZW50IDogY2xpZW50cygpLnZhbHVlcygpKQorICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdl
ZChzdGF0aWNfY2FzdDxXcmFwcGVkSW1hZ2VQdHI+KHRoaXMpKTsKIH0KIAotdm9pZCBDU1NDYW52
YXNWYWx1ZTo6Y2FudmFzRGVzdHJveWVkKEhUTUxDYW52YXNFbGVtZW50JiBlbGVtZW50KQordm9p
ZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsK
LSAgICBBU1NFUlRfVU5VU0VEKCZlbGVtZW50LCAmZWxlbWVudCA9PSBtX2VsZW1lbnQpOwotICAg
IG1fZWxlbWVudCA9IG51bGxwdHI7CisgICAgQVNTRVJUX1VOVVNFRCgmY2FudmFzLCAmY2FudmFz
ID09IG1fY2FudmFzKTsKKyAgICBtX2NhbnZhcyA9IG51bGxwdHI7CiB9CiAKIEZsb2F0U2l6ZSBD
U1NDYW52YXNWYWx1ZTo6Zml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQog
ewotICAgIGlmIChIVE1MQ2FudmFzRWxlbWVudCogZWx0ID0gZWxlbWVudChyZW5kZXJlci5kb2N1
bWVudCgpKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZShlbHQtPndpZHRoKCksIGVsdC0+aGVp
Z2h0KCkpOworICAgIGlmIChhdXRvKiBjYW52YXMgPSB0aGlzLT5jYW52YXMocmVuZGVyZXIuZG9j
dW1lbnQoKSkpCisgICAgICAgIHJldHVybiBGbG9hdFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpKTsKICAgICByZXR1cm4geyB9OwogfQogCi1IVE1MQ2FudmFzRWxlbWVudCog
Q1NTQ2FudmFzVmFsdWU6OmVsZW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQorQ2FudmFzQmFzZSog
Q1NTQ2FudmFzVmFsdWU6OmNhbnZhcyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgIGlmICgh
bV9lbGVtZW50KSB7Ci0gICAgICAgIG1fZWxlbWVudCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0Vs
ZW1lbnQobV9uYW1lKTsKLSAgICAgICAgaWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFtX2NhbnZh
cykgeworICAgICAgICBtX2NhbnZhcyA9IGRvY3VtZW50LmdldENTU0NhbnZhc0VsZW1lbnQobV9u
YW1lKTsKKyAgICAgICAgaWYgKCFtX2NhbnZhcykKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBtX2VsZW1lbnQtPmFkZE9ic2VydmVyKG1fY2FudmFzT2JzZXJ2ZXIpOworICAg
ICAgICBtX2NhbnZhcy0+YWRkT2JzZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CiAgICAgfQotICAg
IHJldHVybiBtX2VsZW1lbnQ7CisgICAgcmV0dXJuIG1fY2FudmFzOwogfQogCiBSZWZQdHI8SW1h
Z2U+IENTU0NhbnZhc1ZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
RmxvYXRTaXplJiAvKnNpemUqLykKIHsKICAgICBBU1NFUlQoY2xpZW50cygpLmNvbnRhaW5zKCZy
ZW5kZXJlcikpOwotICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVu
dChyZW5kZXJlci5kb2N1bWVudCgpKTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmJ1
ZmZlcigpKQorICAgIGF1dG8qIGNhbnZhcyA9IHRoaXMtPmNhbnZhcyhyZW5kZXJlci5kb2N1bWVu
dCgpKTsKKyAgICBpZiAoIWNhbnZhcyB8fCAhY2FudmFzLT5idWZmZXIoKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmNvcGllZEltYWdlKCk7CisgICAgcmV0
dXJuIGNhbnZhcy0+Y29waWVkSW1hZ2UoKTsKIH0KIAogYm9vbCBDU1NDYW52YXNWYWx1ZTo6ZXF1
YWxzKGNvbnN0IENTU0NhbnZhc1ZhbHVlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDYW52YXNWYWx1ZS5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FudmFzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAj
aW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbnZhc0Jhc2Uu
aCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1l
bnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyArNDQsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBpc0ZpeGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBGbG9hdFNp
emUgZml4ZWRTaXplKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKIAotICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgQ2FudmFzQmFz
ZSogY2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogICAgIGJvb2wgaXNQZW5k
aW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KQEAg
LTY4LDE4ICs2NywxNSBAQCBwdWJsaWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBjYW52
YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVj
dD4mIGNoYW5nZWRSZWN0KSBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1
ZS5jYW52YXNDaGFuZ2VkKGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSwg
Y2hhbmdlZFJlY3QpOworICAgICAgICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoY2Fu
dmFzQmFzZSwgY2hhbmdlZFJlY3QpOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgY2FudmFzUmVz
aXplZChDYW52YXNCYXNlJiBjYW52YXNCYXNlKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAgICAg
IG1fb3duZXJWYWx1ZS5jYW52YXNSZXNpemVkKGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50Pihj
YW52YXNCYXNlKSk7CisgICAgICAgICAgICBtX293bmVyVmFsdWUuY2FudmFzUmVzaXplZChjYW52
YXNCYXNlKTsKICAgICAgICAgfQogICAgICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNC
YXNlJiBjYW52YXNCYXNlKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1
ZS5jYW52YXNEZXN0cm95ZWQoZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2Up
KTsKKyAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNEZXN0cm95ZWQoY2FudmFzQmFzZSk7
CiAgICAgICAgIH0KIAogICAgICAgICBDU1NDYW52YXNWYWx1ZSYgbV9vd25lclZhbHVlOwpAQCAt
OTMsMTggKzg5LDE4IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgY2FudmFz
Q2hhbmdlZChIVE1MQ2FudmFzRWxlbWVudCYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNo
YW5nZWRSZWN0KTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQmKTsK
LSAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChIVE1MQ2FudmFzRWxlbWVudCYpOworICAgIHZvaWQg
Y2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hh
bmdlZFJlY3QpOworICAgIHZvaWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJik7CisgICAgdm9p
ZCBjYW52YXNEZXN0cm95ZWQoQ2FudmFzQmFzZSYpOwogCi0gICAgSFRNTENhbnZhc0VsZW1lbnQq
IGVsZW1lbnQoRG9jdW1lbnQmKTsKKyAgICBDYW52YXNCYXNlKiBjYW52YXMoRG9jdW1lbnQmKTsK
IAogICAgIENhbnZhc09ic2VydmVyUHJveHkgbV9jYW52YXNPYnNlcnZlcjsKIAogICAgIC8vIFRo
ZSBuYW1lIG9mIHRoZSBjYW52YXMuCiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAvLyBUaGUgZG9j
dW1lbnQgc3VwcGxpZXMgdGhlIGVsZW1lbnQgYW5kIG93bnMgaXQuCi0gICAgSFRNTENhbnZhc0Vs
ZW1lbnQqIG1fZWxlbWVudCB7IG51bGxwdHIgfTsKKyAgICAvLyBUaGUgZG9jdW1lbnQgc3VwcGxp
ZXMgdGhlIGNhbnZhcyBhbmQgb3ducyBpdC4KKyAgICBDYW52YXNCYXNlKiBtX2NhbnZhcyB7IG51
bGxwdHIgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOCArMzQsOCBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NOYW1lZEltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYWludEltYWdlVmFs
dWUuaCIKKyNpbmNsdWRlICJDYW52YXNCYXNlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKIApAQCAtNzQsOCAr
NzQsOCBAQCB2b2lkIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSCiAgICAgbV9j
bGllbnRzLmFkZCgmcmVuZGVyZXIpOwogCiAgICAgaWYgKGlzPENTU0NhbnZhc1ZhbHVlPih0aGlz
KSkgewotICAgICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQgPSBkb3du
Y2FzdDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZh
c0VsZW1lbnQpOworICAgICAgICBpZiAoYXV0byogY2FudmFzID0gZG93bmNhc3Q8Q1NTQ2FudmFz
VmFsdWU+KHRoaXMpLT5jYW52YXMoKSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhcyk7CiAgICAgfQogfQog
CkBAIC04Niw4ICs4Niw4IEBAIHZvaWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xp
ZW4KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzPENTU0NhbnZhc1ZhbHVlPih0aGlzKSkg
ewotICAgICAgICBpZiAoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQgPSBkb3duY2Fz
dDxDU1NDYW52YXNWYWx1ZT4odGhpcyktPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhc0Vs
ZW1lbnQpOworICAgICAgICBpZiAoYXV0byogY2FudmFzID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFs
dWU+KHRoaXMpLT5jYW52YXMoKSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhcyk7CiAgICAgfQogCiAgICAg
aWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4OTYsNyArMzg5Niw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRQYWdlU2Ft
cGxlTG9jYXRpb24oRG8KIAogICAgICAgICAvLyBTa2lwIGA8Y2FudmFzPmAgYnV0IG9ubHkgaWYg
dGhleSd2ZSBiZWVuIGRyYXduIGludG8uIEd1ZXNzIHRoaXMgYnkgc2VlaW5nIGlmIHRoZXJlJ3Mg
YWxyZWFkeQogICAgICAgICAvLyBhIGBDYW52YXNSZW5kZXJpbmdDb250ZXh0YCwgd2hpY2ggaXMg
b25seSBjcmVhdGVkIGJ5IEphdmFTY3JpcHQuCi0gICAgICAgIGlmIChpczxIVE1MQ2FudmFzRWxl
bWVudD4obm9kZSkgJiYgZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpLnJlbmRlcmlu
Z0NvbnRleHQoKSkKKyAgICAgICAgaWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiAh
ZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpLnJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAvLyBTa2lwIDNyZC1w
YXJ0eSBgPGlmcmFtZT5gIGFzIHRoZSBjb250ZW50IGxpa2VseSB3b24ndCBtYXRjaCB0aGUgcmVz
dCBvZiB0aGUgcGFnZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIK
ICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dE5vbmUuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC01MSw3ICs1Miw4IEBA
IGNvbnN0IEludGVycG9sYXRpb25RdWFsaXR5IGRlZmF1bHRJbnRlcnAKICNlbmRpZgogCiBDYW52
YXNCYXNlOjpDYW52YXNCYXNlKEludFNpemUgc2l6ZSkKLSAgICA6IG1fc2l6ZShzaXplKQorICAg
IDogbV9zaXplIHsgc2l6ZSB9CisgICAgLCBtX2NvbnRleHQgeyBDYW52YXNSZW5kZXJpbmdDb250
ZXh0Tm9uZTo6Y3JlYXRlKCp0aGlzKSB9CiB7CiB9CiAKQEAgLTU5LDEzICs2MSwxNyBAQCBDYW52
YXNCYXNlOjp+Q2FudmFzQmFzZSgpCiB7CiAgICAgQVNTRVJUKG1fZGlkTm90aWZ5T2JzZXJ2ZXJz
Q2FudmFzRGVzdHJveWVkKTsKICAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQoIW1faW1hZ2VCdWZmZXIpOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2Nv
bnRleHQtPnJlc2V0KCk7CisjZW5kaWYKKworICAgIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogfQog
CiBHcmFwaGljc0NvbnRleHQqIENhbnZhc0Jhc2U6OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsK
LSAgICBhdXRvKiBjb250ZXh0ID0gcmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0
ICYmICFjb250ZXh0LT5pczJkKCkgJiYgIWNvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKKyAgICBp
ZiAoIW1fY29udGV4dC0+aXMyZCgpICYmICFtX2NvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gYnVmZmVyKCkgPyAmbV9pbWFnZUJ1
ZmZlci0+Y29udGV4dCgpIDogbnVsbHB0cjsKQEAgLTgyLDcgKzg4LDcgQEAgR3JhcGhpY3NDb250
ZXh0KiBDYW52YXNCYXNlOjpleGlzdGluZ0RyYQogSW1hZ2VCdWZmZXIqIENhbnZhc0Jhc2U6OmJ1
ZmZlcigpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkKLSAgICAg
ICAgY3JlYXRlSW1hZ2VCdWZmZXIoKTsKKyAgICAgICAgY29uc3RfY2FzdDxDYW52YXNCYXNlKj4o
dGhpcyktPmNyZWF0ZUltYWdlQnVmZmVyKCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0
KCk7CiB9CiAKQEAgLTk0LDggKzEwMCw3IEBAIEFmZmluZVRyYW5zZm9ybSBDYW52YXNCYXNlOjpi
YXNlVHJhbnNmb3IKIAogdm9pZCBDYW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWls
YWJsZSgpCiB7Ci0gICAgaWYgKGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCkpCi0g
ICAgICAgIGNvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgbV9j
b250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogfQogCiBzaXplX3QgQ2Fu
dmFzQmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CkBAIC0xMDMsNyArMTA4LDcgQEAgc2l6ZV90IENh
bnZhc0Jhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAogICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUg
aW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUg
Y2FyZWZ1bAogICAgIC8vIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LiBX
ZSBuZWVkIHRvIGhvbGQgYSBsb2NrIHRvIHByZXZlbnQgbV9pbWFnZUJ1ZmZlcgogICAgIC8vIGZy
b20gYmVpbmcgY2hhbmdlZCB3aGlsZSB3ZSBhY2Nlc3MgaXQuCi0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2spOworICAgIExvY2tlciBsb2NrZXIg
eyBtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2sgfTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5tZW1vcnlDb3N0
KCk7CkBAIC0xMTQsNyArMTE5LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIAogICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1
cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAg
Ly8gYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9s
ZCBhIGxvY2sgdG8gcHJldmVudCBtX2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFu
Z2VkIHdoaWxlIHdlIGFjY2VzcyBpdC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1h
Z2VCdWZmZXJBc3NpZ25tZW50TG9jayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZm
ZXJBc3NpZ25tZW50TG9jayB9OwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpA
QCAtMTgwLDE1ICsxODUsMTkgQEAgSGFzaFNldDxFbGVtZW50Kj4gQ2FudmFzQmFzZTo6Y3NzQ2Fu
dmFzQwogCiBib29sIENhbnZhc0Jhc2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXIoKSBjb25zdAogewotICAgIGF1dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0g
ICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlcigpOworICAgIHJldHVybiBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIoKTsKK30KKwordm9pZCBDYW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0
KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9j
b250ZXh0ID0gV1RGTW92ZShjb250ZXh0KTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52
YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKSBjb25z
dAorUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8
SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gcmV0dXJu
QnVmZmVyOwogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVm
ZmVyQXNzaWdubWVudExvY2spOworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZl
ckFzc2lnbm1lbnRMb2NrIH07CiAgICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRy
OwogICAgICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgfQpAQCAtMjAwLDkgKzIwOSw4IEBAIFJlZlB0cjxJbWFnZUJ1
ZmZlcj4gQ2FudmFzQmFzZTo6c2V0SW1hZ2UKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9y
eUNvc3QoKTsKICAgICBzX2FjdGl2ZVBpeGVsTWVtb3J5ICs9IG1faW1hZ2VCdWZmZXJDb3N0IC0g
cHJldmlvdXNNZW1vcnlDb3N0OwogCi0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRl
eHQoKTsKLSAgICBpZiAoY29udGV4dCAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5
Q29zdCAhPSBtX2ltYWdlQnVmZmVyQ29zdCkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoKmNvbnRleHQpOworICAgIGlmICghbV9jb250ZXh0
LT5pc05vbmUoKSAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2lt
YWdlQnVmZmVyQ29zdCkKKyAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFu
Z2VDYW52YXNNZW1vcnkobV9jb250ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX2ltYWdlQnVmZmVy
KSB7CiAgICAgICAgIG1faW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zZXRTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtcyh0cnVlKTsKQEAgLTIxNyw2ICsyMjUsMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBD
YW52YXNCYXNlOjpzZXRJbWFnZQogICAgIHJldHVybiByZXR1cm5CdWZmZXI7CiB9CiAKK3ZvaWQg
Q2FudmFzQmFzZTo6ZGVzdHJveUltYWdlQnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IG9sZEJ1ZmZlcjsKKworICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VC
dWZmZXJBc3NpZ25tZW50TG9jayB9OworICAgICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVs
bHB0cjsKKyAgICAgICAgb2xkQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBu
dWxscHRyKTsKKyAgICB9CisgICAgCisgICAgc19hY3RpdmVQaXhlbE1lbW9yeSAtPSBtX2ltYWdl
QnVmZmVyQ29zdDsKKyAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IDA7Cit9CisKIHNpemVfdCBDYW52
YXNCYXNlOjphY3RpdmVQaXhlbE1lbW9yeSgpCiB7CiAgICAgcmV0dXJuIHNfYWN0aXZlUGl4ZWxN
ZW1vcnkubG9hZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHJldmlzaW9uIDI3
NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MCw3ICs3MSw2IEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAK
ICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Q7CiAKICAgICB2b2lkIG1ha2VSZW5kZXJpbmdS
ZXN1bHRzQXZhaWxhYmxlKCk7CkBAIC04NSw3ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gY2FudmFzQmFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgIH0KIAot
ICAgIHZpcnR1YWwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNv
bnN0ID0gMDsKKyAgICBjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiByZW5kZXJpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYgcmVuZGVyaW5nQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsg
fQogCiAgICAgdm9pZCBhZGRPYnNlcnZlcihDYW52YXNPYnNlcnZlciYpOwogICAgIHZvaWQgcmVt
b3ZlT2JzZXJ2ZXIoQ2FudmFzT2JzZXJ2ZXImKTsKQEAgLTEwMCw4ICsxMDEsOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+Jikg
PSAwOwogCi0gICAgdmlydHVhbCBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJ
bWFnZSogY29waWVkSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1h
Z2UoKSA9IDA7CiAKICAgICBib29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIo
KSBjb25zdDsKIApAQCAtMTEyLDIwICsxMTMsMjUgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVh
bCB2b2lkIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAK
LSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4mJikgY29uc3Q7CisgICAgdm9pZCBzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52
YXNSZW5kZXJpbmdDb250ZXh0PiYmKTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZUJ1
ZmZlcigpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHN0YXRpYyBzaXplX3QgYWN0aXZlUGl4ZWxNZW1vcnkoKTsK
IAogICAgIHZvaWQgcmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRl
OgotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgfQorICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcigpIHsgfQogCi0gICAgbXV0YWJsZSBJbnRTaXpl
IG1fc2l6ZTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKICAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1
ZmZlckFzc2lnbm1lbnRMb2NrOwotICAgIG11dGFibGUgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2lt
YWdlQnVmZmVyOwotICAgIG11dGFibGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsgMCB9Owot
ICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI+IG1f
Y29udGV4dFN0YXRlU2F2ZXI7CisgICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVy
OworICAgIHNpemVfdCBtX2ltYWdlQnVmZmVyQ29zdCB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlcj4gbV9jb250ZXh0U3RhdGVTYXZlcjsKKworICAg
IFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAKICAgICBib29s
IG1fb3JpZ2luQ2xlYW4geyB0cnVlIH07CiAjaWYgQVNTRVJUX0VOQUJMRUQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNDUgKzQ4LDQyIEBAIEN1c3RvbVBhaW50Q2FudmFzOjpDdXN0b21QYWludENhbnZh
cyhTY3IKIEN1c3RvbVBhaW50Q2FudmFzOjp+Q3VzdG9tUGFpbnRDYW52YXMoKQogewogICAgIG5v
dGlmeU9ic2VydmVyc0NhbnZhc0Rlc3Ryb3llZCgpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0
cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAg
c2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJl
bmRlcmluZ0NvbnRleHQyRD4+IEN1c3RvbVBhaW50Q2FudmFzOjpnZXRDb250ZXh0KCkKIHsKLSAg
ICBpZiAobV9jb250ZXh0KQotICAgICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ+IHsgJmRvd25jYXN0PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0
KSB9IH07CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJl
dHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRS
ZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogCi0gICAgbV9jb250
ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgZG93bmNh
c3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlz
dERyYXdpbmcodHJ1ZSk7CisgICAgYXV0byBjb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0
MkQ6OmNyZWF0ZSgqdGhpcyk7CisgICAgY29udGV4dC0+c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zyh0cnVlKTsKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KFdURk1vdmUoY29udGV4dCkpOwogCi0g
ICAgcmV0dXJuIHsgUmVmUHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQ
YWludFJlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgIHJldHVybiB7IFJl
ZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9OwogfQogCi12b2lkIEN1c3RvbVBhaW50
Q2FudmFzOjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQqIGN0eCkgY29uc3QKK3Zv
aWQgQ3VzdG9tUGFpbnRDYW52YXM6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYg
Y3R4KQogewogICAgIEFTU0VSVCghbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCk7CiAgICAg
aWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IFVzaW5nIGFuIGludGVybWVkaWF0ZSBidWZmZXIgaXMgbm90IG5lZWRlZCBpZiB0aGVyZSBh
cmUgbm8gY29tcG9zaXRlIG9wZXJhdGlvbnMuCi0gICAgYXV0byBjbGlwQm91bmRzID0gY3R4LT5j
bGlwQm91bmRzKCk7CisgICAgYXV0byBjbGlwQm91bmRzID0gY3R4LmNsaXBCb3VuZHMoKTsKIAot
ICAgIGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlw
Qm91bmRzLnNpemUoKSwgKmN0eCk7CisgICAgYXV0byBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNsaXBCb3VuZHMuc2l6ZSgpLCBjdHgpOwogICAgIGlmICghaW1h
Z2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQg
PSAmaW1hZ2UtPmNvbnRleHQoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0LT50
cmFuc2xhdGUoLWNsaXBCb3VuZHMubG9jYXRpb24oKSk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAg
ICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHJl
bmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1f
ZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgY3R4LT5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlLCBjbGlwQm91bmRzKTsKKyAgICBjdHguZHJhd0ltYWdlQnVmZmVyKCpp
bWFnZSwgY2xpcEJvdW5kcyk7CiB9CiAKLUltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVk
SW1hZ2UoKSBjb25zdAorSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7
CiAgICAgQVNTRVJUKCFtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdp
ZHRoKCkgfHwgIWhlaWdodCgpKQpAQCAtOTcsMTUgKzk0LDE0IEBAIEltYWdlKiBDdXN0b21QYWlu
dENhbnZhczo6Y29waWVkSW1hZ2UoKSAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBt
X2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gJm1fY29waWVkQnVmZmVyLT5jb250ZXh0KCk7
Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxs
cHRyOwogCiAgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4g
bV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6Y2xlYXJD
b3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZElt
YWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MTcgKzU1LDE2IEBAIHB1YmxpYzoKIAogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRl
cmluZ0NvbnRleHQyRD4+IGdldENvbnRleHQoKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQuZ2V0
KCk7IH0KICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBleGlzdGluZ0RyYXdpbmdDb250ZXh0KCkgY29uc3QgZmlu
YWw7CiAKICAgICB2b2lkIGRpZERyYXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpIGZpbmFs
IHsgfQogCiAgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBmaW5hbCB7
IEFTU0VSVChtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ICYmIG1fY29waWVkQnVmZmVyKTsg
cmV0dXJuIG1fY29waWVkQnVmZmVyLT5iYXNlVHJhbnNmb3JtKCk7IH0KLSAgICBJbWFnZSogY29w
aWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25z
dCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFy
Q29waWVkSW1hZ2UoKSBmaW5hbDsKIAotICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhp
Y3NDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0Nv
bnRleHQmKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OnJlZjsKICAgICB1c2luZyBSZWZDb3Vu
dGVkOjpkZXJlZjsKQEAgLTc3LDcgKzc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmQ2Fu
dmFzQmFzZSgpIGZpbmFsIHsgZGVyZWYoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Q29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQog
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
ICAgICBtdXRhYmxlIEdyYXBoaWNzQ29udGV4dCogbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4
dCA9IG51bGxwdHI7CiAgICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fY29waWVkQnVm
ZmVyOwogICAgIG11dGFibGUgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzIwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTYsOSArMTU2LDYgQEAgSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxl
bWVudCgpCiAgICAgLy8gYXZvaWRlZCBpbiBkZXN0cnVjdG9ycywgYnV0IHdvcmtzIGFzIGxvbmcg
YXMgaXQncyBkb25lIGJlZm9yZSBIVE1MQ2FudmFzRWxlbWVudCBkZXN0cnVjdHMgY29tcGxldGVs
eS4KICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNEZXN0cm95ZWQoKTsKICAgICBkb2N1bWVudCgp
LmNsZWFyQ2FudmFzUHJlcGFyYXRpb24oKnRoaXMpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0
cjsgLy8gRW5zdXJlIHRoaXMgZ29lcyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAg
c2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcm
IHZhbHVlKQpAQCAtMjM5LDUwICsyMzYsNTAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0
TWF4UGl4ZWxNZW1vcgogCiBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4g
SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUs
IGNvbnN0IFN0cmluZyYgY29udGV4dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
Pj4mJiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBpZiAobV9j
b250ZXh0LT5pc1BsYWNlaG9sZGVyKCkpCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNO
b25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1BsYWNlaG9sZGVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAot
ICAgICAgICBpZiAobV9jb250ZXh0LT5pczJkKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0Nv
bnRleHQoKS5pczJkKCkpIHsKICAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dElkKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6
Om51bGxvcHQgfTsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
PiB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KG1fY29udGV4dC0+aXNCaXRtYXBSZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdD
b250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzQml0bWFw
UmVuZGVyZXJUeXBlKGNvbnRleHRJZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFs
PFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4g
T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0PiB7ICZkb3duY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRl
eHQpIH0gfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07Cisg
ICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+
IHsgJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4
dCgpKSB9IH0gfTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAo
bV9jb250ZXh0LT5pc1dlYkdMKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5p
c1dlYkdMKCkpIHsKICAgICAgICAgICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51
bGxvcHQgfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAg
ICAgICAgICAgICBhdXRvIHZlcnNpb24gPSB0b1dlYkdMVmVyc2lvbihjb250ZXh0SWQpOwotICAg
ICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4
dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5n
Q29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdl
YkdMVmVyc2lvbjo6V2ViR0wxICYmIG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsK
LSAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJz
aW9uOjpXZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmICh2ZXJz
aW9uICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdM
MSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAg
ICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkg
fSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIEFTU0VSVChpczxXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSk7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9u
YWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAm
ZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAgICAg
ICAgICAgQVNTRVJUKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQo
KSkpOworICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgp
KSB9IH0gfTsKICNlbmRpZgogICAgICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHUFUp
Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmlzV2ViR1BVKCkpIHsKKyAgICAgICAgaWYgKHJlbmRl
cmluZ0NvbnRleHQoKS5pc1dlYkdQVSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR1BVVHlw
ZShjb250ZXh0SWQpKQotICAgICAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdD
b250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJl
bmRlcmluZ0NvbnRleHQ+IHsgUmVmUHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgJmRvd25jYXN0PEdQ
VUNhbnZhc0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVD
YW52YXNDb250ZXh0PiB7ICZkb3duY2FzdDxHUFVDYW52YXNDb250ZXh0PihyZW5kZXJpbmdDb250
ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RG
OjpudWxsb3B0IH07CisgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICB9
CiAKICAgICBpZiAoaXMyZFR5cGUoY29udGV4dElkKSkgewpAQCAtMjkyLDggKzI4OSw4IEBAIEV4
Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNv
bnRleHQgPSBjcmVhdGVDb250ZXh0MmQoY29udGV4dElkLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAg
ICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJp
bmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVu
ZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7IGNvbnRl
eHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAg
ICByZXR1cm4geyB7IFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9
IH0gfTsKICAgICB9CiAKICAgICBpZiAoaXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkg
ewpAQCAtMzAzLDggKzMwMCw4IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRl
eHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVy
ZXIoY29udGV4dElkLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVs
bG9wdCB9OwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQ
dHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAg
ICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0
cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCkBAIC0zMTUsMTMgKzMxMiwxMyBAQCBFeGNlcHRpb25PcjxPcHRp
b25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiAKICAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRl
Q29udGV4dFdlYkdMKHRvV2ViR0xWZXJzaW9uKGNvbnRleHRJZCksIFdURk1vdmUoYXR0cmlidXRl
cykpOwogICAgICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8
UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAgICAgIHJldHVybiB7
IHsgV1RGOjpudWxsb3B0IH0gfTsKIAogICAgICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0PigqY29udGV4dCkpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJl
ZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4oKmNvbnRleHQpIH0gfSB9OwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIEFTU0VS
VChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpOwotICAgICAgICByZXR1cm4g
T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNh
c3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfSB9OwogI2VuZGlmCiAgICAg
fQogI2VuZGlmCkBAIC0zMzAsMTIgKzMyNywxMiBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5k
ZXJpbmdDb250ZXh0Pj4gCiAgICAgaWYgKGlzV2ViR1BVVHlwZShjb250ZXh0SWQpKSB7CiAgICAg
ICAgIGF1dG8gY29udGV4dCA9IGNyZWF0ZUNvbnRleHRXZWJHUFUoY29udGV4dElkKTsKICAgICAg
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0Nv
bnRleHQ+IHsgV1RGOjpudWxsb3B0IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJp
bmdDb250ZXh0PiB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAg
ICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7
IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7IGNvbnRleHQgfSB9IH07CiAgICAgfQogI2VuZGlm
CiAKLSAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQg
fTsKKyAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiB9CiAKIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlw
ZSkKQEAgLTM2Nyw3ICszNjQsNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZShj
b25zdCBTCiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRT
ZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1l
bnQ6OmlzMmRUeXBlKHR5cGUpLCB0eXBlKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAg
QVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUg
d2UgZG9uJ3QgdXNlIG1vcmUgcGl4ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBjYW4gc3VwcG9y
dC4KICAgICBzaXplX3QgcmVxdWVzdGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgoKSAqIGhlaWdo
dCgpOwpAQCAtMzgwLDI2ICszNzcsMjcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1M
Q2FudmFzRWxlbQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2NvbnRl
eHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0
aW5ncyksIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOworICAgIHNldFJlbmRlcmluZ0NvbnRl
eHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGlu
Z3MpLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAg
IGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQo
KSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRl
cmluZ0NvbnRleHQoKSk7CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZh
c0VsZW1lbnQ6OmdldENvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1M
Q2FudmFzRWxlbWVudDo6aXMyZFR5cGUodHlwZSksIHR5cGUpOwogCi0gICAgaWYgKG1fY29udGV4
dCAmJiAhbV9jb250ZXh0LT5pczJkKCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05v
bmUoKSkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQyZCh0eXBlLCBXVEZNb3ZlKHNldHRp
bmdzKSk7CisKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBjcmVh
dGVDb250ZXh0MmQodHlwZSwgV1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJl
dHVybiAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0
KCkpOwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQpAQCAtNDQ4LDcgKzQ0Niw3IEBAIEdyYXBoaWNz
Q29udGV4dEdMV2ViR0xWZXJzaW9uIEhUTUxDYW52YXMKIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHTChXZWJHTFZlcnNpb24g
dHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VSVCghbV9j
b250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAg
IGlmICghc2hvdWxkRW5hYmxlV2ViR0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC00NjUsMjAgKzQ2MywyNCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBIVE1MQ2FudmFzRWxlCiAKICAgICAvLyBUT0RPKFdFQlhSKTogZW5zdXJlIHRoZSBj
b250ZXh0IGlzIGNyZWF0ZWQgaW4gYSBjb21wYXRpYmxlIGdyYXBoaWNzCiAgICAgLy8gYWRhcHRl
ciB3aGVuIHRoZXJlIGlzIGFuIGFjdGl2ZSBpbW1lcnNpdmUgZGV2aWNlLgotICAgIG1fY29udGV4
dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUp
OwotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gVGhpcyBuZXcgY29udGV4dCBuZWVk
cyB0byBiZSBvYnNlcnZlZCBieSB0aGUgRG9jdW1lbnQsIGluIG9yZGVyCi0gICAgICAgIC8vIGZv
ciBpdCB0byBiZSBjb3JyZWN0bHkgcHJlcGFyZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNv
bXBvc2l0ZWQuCi0gICAgICAgIGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGF1dG8gY29u
dGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5
cGUpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBz
ZXRSZW5kZXJpbmdDb250ZXh0KG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZN
b3ZlKGNvbnRleHQpKSk7CisKKyAgICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9i
c2VydmVkIGJ5IHRoZSBEb2N1bWVudCwgaW4gb3JkZXIKKyAgICAvLyBmb3IgaXQgdG8gYmUgY29y
cmVjdGx5IHByZXBhcmVkRm9yUmVuZGVyaW5nIGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgorICAg
IGFkZE9ic2VydmVyKGRvY3VtZW50KCkpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBS
ZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52
YXMuCisgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0gICAgICAg
IC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVy
IGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgotICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRM
YXllckNvbXBvc2l0aW9uKCk7CiAjaWYgRU5BQkxFKFdFQlhSKQotICAgICAgICBBU1NFUlQoIWF0
dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiht
X2NvbnRleHQuZ2V0KCkpLT5pc1hSQ29tcGF0aWJsZSgpKTsKKyAgICBBU1NFUlQoIWF0dHJzLnhy
Q29tcGF0aWJsZSB8fCBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJp
bmdDb250ZXh0KCkpLmlzWFJDb21wYXRpYmxlKCkpOwogI2VuZGlmCi0gICAgfQogCi0gICAgcmV0
dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSk7
CisgICAgcmV0dXJuICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJp
bmdDb250ZXh0KCkpOwogfQogCiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFz
RWxlbWVudDo6Z2V0Q29udGV4dFdlYkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzJiYgYXR0cnMpCkBAIC00ODYsMjEgKzQ4OCwyMCBAQCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlCiAgICAgaWYgKCFzaG91bGRFbmFibGVXZWJHTChkb2N1
bWVudCgpLnNldHRpbmdzKCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICht
X2NvbnRleHQpIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmlzV2ViR0woKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkp
CisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykp
OwogCi0gICAgICAgIC8vIFRoZSBwaHJhc2luZyBvZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBp
bGUtdGltZSBndWFyZHMgZm9yIFdlYkdMMiBzdXBwb3J0LgotICAgICAgICBpZiAodHlwZSA9PSBX
ZWJHTFZlcnNpb246OldlYkdMMSAmJiAhbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpZiAodHlwZSAhPSBXZWJHTFZl
cnNpb246OldlYkdMMSAmJiBtX2NvbnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9CisgICAgLy8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBh
dm9pZHMgY29tcGlsZS10aW1lIGd1YXJkcyBmb3IgV2ViR0wyIHN1cHBvcnQuCisgICAgaWYgKHR5
cGUgPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdM
MSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAg
ICAgICByZXR1cm4gY3JlYXRlQ29udGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMpKTsKLSAg
ICByZXR1cm4gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRleHQp
OworICAgIGlmICh0eXBlICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRl
eHQoKS5pc1dlYkdMMSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAm
ZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsK
IH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKQEAgLTUxNSwxOCArNTE2LDE3IEBAIGJvb2wg
SFRNTENhbnZhc0VsZW1lbnQ6OmlzV2ViR1BVVHlwZShjb24KIEdQVUNhbnZhc0NvbnRleHQqIEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkK
IHsKICAgICBBU1NFUlRfVU5VU0VEKHR5cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5
cGUodHlwZSkpOwotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5n
Q29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygpLndl
YkdQVUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvbnRleHQg
PSBHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoKnRoaXMpOwotICAgIGlmIChtX2NvbnRleHQpIHsK
LSAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRp
bmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVT
dHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKLSAgICB9CisgICAgc2V0UmVuZGVyaW5nQ29udGV4
dChHUFVDYW52YXNDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIC8vIE5lZWQgdG8gbWFr
ZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZv
ciB0aGUgQ2FudmFzLgorICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsK
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0Lmdl
dCgpKTsKKyAgICByZXR1cm4gJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSk7CiB9CiAKIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTUzNiwxMiArNTM2LDEzIEBAIEdQ
VUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXQKICAgICBpZiAoIWRvY3VtZW50
KCkuc2V0dGluZ3MoKS53ZWJHUFVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pc1dlYkdQVSgpKQorICAgIGlmIChy
ZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0
V2ViR1BVKHR5cGUpOworCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZUNvbnRleHRXZWJHUFUodHlwZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdQVUNhbnZhc0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNh
c3Q8R1BVQ2FudmFzQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHUFUpCkBAIC01NTQsMjQgKzU1NSwyOSBAQCBib29sIEhUTUxDYW52YXNFbGVt
ZW50Ojppc0JpdG1hcFJlbmRlcmVyCiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB0
eXBlLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewog
ICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFwUmVuZGVy
ZXJUeXBlKHR5cGUpKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRl
cmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKLSAgICBtX2NvbnRleHQgPSBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncykpOworICAgIHNl
dFJlbmRlcmluZ0NvbnRleHQoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRo
aXMsIFdURk1vdmUoc2V0dGluZ3MpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNv
bXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7Cisg
ICAgcmV0dXJuICZkb3duY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSk7CiB9CiAKIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZh
c0VsZW1lbnQ6OmdldENvbnRleHRCaXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNT
RVJUX1VOVVNFRCh0eXBlLCBIVE1MQ2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUo
dHlwZSkpOwotICAgIGlmICghbV9jb250ZXh0KQorICAgIAorICAgIGlmIChyZW5kZXJpbmdDb250
ZXh0KCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVy
ZXIodHlwZSwgV1RGTW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIAorICAgIGlm
ICghcmVuZGVyaW5nQ29udGV4dCgpLmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
ZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiByZWN0KQpAQCAtNjE1LDE0ICs2MjEs
MTUgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgIGludCBoID0gbGltaXRU
b09ubHlIVE1MTm9uTmVnYXRpdmUoYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihoZWln
aHRBdHRyKSwgZGVmYXVsdEhlaWdodCk7CiAKICAgICByZXNldEdyYXBoaWNzQ29udGV4dFN0YXRl
KCk7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgp
KSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0
KS5yZXNldCgpOworICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSkpCisgICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
cmVuZGVyaW5nQ29udGV4dCgpKS5yZXNldCgpOwogCiAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6
ZSgpOwogICAgIEludFNpemUgbmV3U2l6ZSh3LCBoKTsKKwogICAgIC8vIElmIHRoZSBzaXplIG9m
IGFuIGV4aXN0aW5nIGJ1ZmZlciBtYXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBpbnN0ZWFk
IG9mIHJlYWxsb2NhdGluZy4KICAgICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGRvbmUg
Zm9yIDJEIGNhbnZhc2VzIGZvciBub3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
ICYmIG9sZFNpemUgPT0gbmV3U2l6ZSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkg
JiYgYnVmZmVyKCkgJiYgbV9jb250ZXh0LT5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNvbG9y
U3BhY2UoKSAmJiBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9y
bWF0KCkpIHsKKyAgICBpZiAobV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBu
ZXdTaXplICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkgJiYgYnVmZmVyKCkgJiYgcmVuZGVy
aW5nQ29udGV4dCgpLmNvbG9yU3BhY2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIHJl
bmRlcmluZ0NvbnRleHQoKS5waXhlbEZvcm1hdCgpID09IGJ1ZmZlcigpLT5waXhlbEZvcm1hdCgp
KSB7CiAgICAgICAgIGlmICghbV9kaWRDbGVhckltYWdlQnVmZmVyKQogICAgICAgICAgICAgY2xl
YXJJbWFnZUJ1ZmZlcigpOwogICAgICAgICByZXR1cm47CkBAIC02MzEsNyArNjM4LDcgQEAgdm9p
ZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogICAgIHNldFN1cmZhY2VTaXplKG5ld1NpemUp
OwogCiAgICAgaWYgKGlzR1BVQmFzZWQoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAg
ZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KS5yZXNo
YXBlKHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpLnJlc2hhcGUod2lkdGgoKSwgaGVp
Z2h0KCkpOwogCiAgICAgYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYg
KGlzPFJlbmRlckhUTUxDYW52YXM+KHJlbmRlcmVyKSkgewpAQCAtNjUwLDEzICs2NTcsMTIgQEAg
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVzZXQoKQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50
OjpwYWludHNJbnRvQ2FudmFzQnVmZmVyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0
KTsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2Nv
bnRleHQtPmlzMmQoKSB8fCBtX2NvbnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICBpZiAo
cmVuZGVyaW5nQ29udGV4dCgpLmlzMmQoKSB8fCByZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBS
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2Nv
bnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlbmRlckJveCgp
ICYmIHJlbmRlckJveCgpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCkBAIC02NjgsNDIg
KzY3NCwzNSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzCiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgTGF5b3V0UmVjdCYgcikKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQWNjdW11bGF0ZWREaXJ0eVJlY3QoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCku
Y2xlYXJBY2N1bXVsYXRlZERpcnR5UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5n
RGlzYWJsZWQoKSkgewotICAgICAgICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKLQotICAgICAg
ICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBzaG91bGRQYWludCA9IHBhaW50c0ludG9D
YW52YXNCdWZmZXIoKSB8fCBkb2N1bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1NuYXBzaG90dGlu
ZzsKLSAgICAgICAgICAgIGlmIChzaG91bGRQYWludCkgewotICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+cHJlcGFyZUZvckRpc3BsYXlXaXRoUGFpbnQoKTsKLSAgICAgICAgICAgICAgICBtX2Nv
bnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQorICAgICAgICBib29sIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1
ZmZlcigpIHx8IGRvY3VtZW50KCkucHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwogICAg
ICAgICBpZiAoc2hvdWxkUGFpbnQpIHsKKyAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5w
cmVwYXJlRm9yRGlzcGxheVdpdGhQYWludCgpOworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgICAgIGlmICho
YXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW1h
Z2VCdWZmZXIgPSBidWZmZXIoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2VCdWZmZXIoKmltYWdlQnVmZmVyLCBzbmFwcGVkSW50UmVjdChyKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0ICYmIG1fY29u
dGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKSkKLSAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqbV9j
b250ZXh0KTsKKyAgICBpZiAoVU5MSUtFTFkocmVuZGVyaW5nQ29udGV4dCgpLmhhc0FjdGl2ZUlu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSkpCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUocmVuZGVyaW5nQ29udGV4dCgpKTsK
IH0KIAogYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXNHUFVCYXNlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzR1BVQmFzZWQoKTsKKyAgICByZXR1cm4g
cmVuZGVyaW5nQ29udGV4dCgpLmlzR1BVQmFzZWQoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6c2V0U3VyZmFjZVNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBDYW52YXNC
YXNlOjpzZXRTaXplKHNpemUpOwogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7
Ci0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CisgICAgZGVzdHJveUltYWdlQnVmZmVyKCk7
CiAgICAgY2xlYXJDb3BpZWRJbWFnZSgpOwogfQogCkBAIC03OTUsMTEgKzc5NCwxMiBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBIVE1MQ2FudmFzRWxlbWVudDo6dG9CCiAjaWYgRU5BQkxFKE9GRlNDUkVF
Tl9DQU5WQVMpCiBFeGNlcHRpb25PcjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0Vs
ZW1lbnQ6OnRyYW5zZmVyQ29udHJvbFRvT2Zmc2NyZWVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCiB7Ci0gICAgaWYgKG1fY29udGV4dCkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4
dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IgfTsKIAotICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdD
b250ZXh0PigqdGhpcyk7Ci0gICAgaWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAg
IHNldFJlbmRlcmluZ0NvbnRleHQoUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
KnRoaXMpKTsKKworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQog
ICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKICAgICByZXR1
cm4gT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGUoY29udGV4dCwgKnRoaXMpOwpAQCAtODA5LDEwICs4
MDksMTAgQEAgRXhjZXB0aW9uT3I8UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYQogUmVmUHRy
PEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiB7CiAjaWYgRU5B
QkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRl
eHQuZ2V0KCkpKSB7CisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRl
cmluZ0NvbnRleHQoKSkpIHsKICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQVBJU3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAgICAgICAgIFJl
c291cmNlTG9hZE9ic2VydmVyOjpzaGFyZWQoKS5sb2dDYW52YXNSZWFkKGRvY3VtZW50KCkpOwot
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29u
dGV4dCkucGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJu
IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSku
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTkyMSw3ICs5MjEsNyBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1l
bnQ6OnJlcGxheURpc3BsYXlMCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKCFoYXNDcmVhdGVkSW1h
Z2VCdWZmZXIoKSk7CiAKQEAgLTk1OCwyNiArOTU4LDIwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUltYWdlQnVmZmUKICAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9y
IERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgogICAgIGF1dG8gdXNlRGlzcGxheUxpc3Qg
PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCku
ZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMg
OiBTaG91bGRVc2VEaXNwbGF5TGlzdDo6Tm87CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBwaXhl
bEZvcm1hdF0gPSBbJl0gewotICAgICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6cGFpciB7IG1fY29udGV4dC0+Y29sb3JTcGFjZSgpLCBtX2NvbnRleHQtPnBpeGVs
Rm9ybWF0KCkgfTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IERlc3RpbmF0aW9uQ29sb3JT
cGFjZTo6U1JHQiwgUGl4ZWxGb3JtYXQ6OkJHUkE4IH07Ci0gICAgfSgpOwotCi0gICAgc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURp
c3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEsIGNvbG9yU3BhY2UsIHBpeGVs
Rm9ybWF0LCBob3N0V2luZG93KSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJw
b3NlOjpDYW52YXMsIDEsIHJlbmRlcmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCksIHJlbmRlcmlu
Z0NvbnRleHQoKS5waXhlbEZvcm1hdCgpLCBob3N0V2luZG93KSk7CiAKICAgICBpZiAoYnVmZmVy
KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCiAgICAgICAgIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgeworICAgIGlmIChyZW5kZXJp
bmdDb250ZXh0KCkuaXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5n
IHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICAgICAgY29u
c3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXll
ckNvbXBvc2l0aW9uKCk7CisgICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYg
YnVmZmVyKCktPnByZWZlcnNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSkKLSAgICAgICAgY29uc3Rf
Y2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsK
KyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSAmJiBidWZmZXIoKSAmJiBidWZm
ZXIoKS0+cHJlZmVyc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpKQorICAgICAgICBhZGRPYnNlcnZl
cihkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0SW1hZ2VCdWZm
ZXJBbmRNYXJrRGlydHkoUmVmUHRyPEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKQEAgLTEwMDMsMzEg
Kzk5NywzMCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAgICAg
ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2UqIEhU
TUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNvcGllZEltYWdlKCkKIHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVy
KCkpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgp
LnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1hZ2Ug
PSBidWZmZXIoKS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKTsKICAgICB9CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKLXZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFzQ3Jl
YXRlZEltYWdlQnVmZmVyKTsKICAgICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7Ci0g
ICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pczJk
KCkpOwogCiAgICAgbV9kaWRDbGVhckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAvLyBO
byBuZWVkIHRvIHVuZG8gdHJhbnNmb3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2FsbGVk
IHJpZ2h0IGFmdGVyIHRoZSBjb250ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgp
LCBoZWlnaHQoKSk7CisgICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
cmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwog
ICAgIH0KIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNv
bnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBt
X2NvcGllZEltYWdlID0gbnVsbHB0cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBmYWxz
ZTsKQEAgLTEwNDEsOSArMTAzNCw5IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50Ojph
Y3RpdmVET00KIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdAogewogI2lmIEVOQUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4obV9jb250ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdlYkdM
IHJlbmRlcmluZyBjb250ZXh0IG1heSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5nZSAv
IGNvbnRleHRyZXN0b3JlZCBldmVudHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4gbV9o
YXNSZWxldmFudFdlYkdMRXZlbnRMaXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZT4oKm1fY29udGV4dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKKyAg
ICAgICAgcmV0dXJuIG1faGFzUmVsZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250ZXh0
VW5yZWNvdmVyYWJseUxvc3QoKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcwLDcg
QEAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBhZGRP
YnNlcnZlcihkb2N1bWVudCk7CiAgICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhhdmUg
YmVlbiBpc3N1ZWQgdG8gdGhlIGNhbnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAgICAg
ICAgIC8vIHRlbGwgdGhlIGRvY3VtZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAgICAg
IGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRp
bmcoKSkKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3VsdHNO
ZWVkVXBkYXRpbmcoKSkKICAgICAgICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRoaXMs
IEZsb2F0UmVjdCB7IH0pOwogICAgIH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1l
bnQ6Om5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0
ICYmIG1fY29udGV4dC0+bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1cm4g
cmVuZGVyaW5nQ29udGV4dCgpLm5lZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAKIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNQcmVwYXJhdGlvbkZvckRpc3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQotICAg
ICAgICBtX2NvbnRleHQtPnByZXBhcmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29udGV4
dCgpLnByZXBhcmVGb3JEaXNwbGF5KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Omlz
Q29udHJvbGxlZEJ5T2Zmc2NyZWVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aXNQbGFjZWhvbGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
KCkuaXNQbGFjZWhvbGRlcigpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRTaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJyaWRl
OwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9wdGlv
bmFsPFJlbmRlcmluZ0NvbnRleHQ+PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBj
b25zdCBTdHJpbmcmIGNvbnRleHRJZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+
JiYgYXJndW1lbnRzKTsKLQogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQo
Y29uc3QgU3RyaW5nJik7CiAKICAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJpbmcm
KTsKQEAgLTExNiw4ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1lZGlh
U3RyZWFtPj4gY2FwdHVyZVN0cmVhbShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBmcmFt
ZVJlcXVlc3RSYXRlKTsKICNlbmRpZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3Qg
ZmluYWw7Ci0gICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1h
Z2UqIGNvcGllZEltYWdlKCkgZmluYWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmlu
YWw7CiAgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2MywxMCArMTYxLDkg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VC
dWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsK
LQogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0KKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkg
ZmluYWw7CisgICAgdm9pZCBjbGVhckltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHNldFN1cmZh
Y2VTaXplKGNvbnN0IEludFNpemUmKTsKIApAQCAtMTgzLDE2ICsxODAsMTUgQEAgcHJpdmF0ZToK
ICAgICBOb2RlOjpJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVk
RnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92
ZWRUcmVlKSBmaW5hbDsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBtX2NvbnRleHQ7Ci0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7
IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBj
b3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4K
KyAgICBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBv
cmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8g
cmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KIAogICAgIE9wdGlvbmFsPGJvb2w+IG1f
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkgeyBmYWxzZSB9OwogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKICAgICAv
LyBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1
ZmZlci4gV2UgZGlkbid0IG5lY2Vzc2FyaWx5IGdldCBpdC4KLSAgICBtdXRhYmxlIGJvb2wgbV9o
YXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OwotICAgIG11dGFibGUgYm9vbCBtX2RpZENs
ZWFySW1hZ2VCdWZmZXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kaWRDbGVhckltYWdlQnVmZmVyIHsgZmFsc2UgfTsK
ICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgYm9vbCBtX2hhc1JlbGV2YW50V2ViR0xFdmVudExpc3Rl
bmVyIHsgZmFsc2UgfTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVu
Q2FudmFzLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIFJlZjxPZmZz
Y3JlZW5DYW52YXM+IE9mZnNjcmVlbkNhbnZhczo6Y3IKICAgICBjYWxsT25NYWluVGhyZWFkKFtk
ZXRhY2hlZENhbnZhcyA9IFdURk1vdmUoZGV0YWNoZWRDYW52YXMpLCBwbGFjZWhvbGRlckRhdGEg
PSBtYWtlUmVmKCpjbG9uZS0+bV9wbGFjZWhvbGRlckRhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAg
ICAgcGxhY2Vob2xkZXJEYXRhLT5jYW52YXMgPSBkZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9s
ZGVyQ2FudmFzKCk7CiAgICAgICAgIGlmIChwbGFjZWhvbGRlckRhdGEtPmNhbnZhcykgewotICAg
ICAgICAgICAgYXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0PigqcGxhY2Vob2xkZXJEYXRhLT5jYW52YXMtPnJlbmRlcmluZ0NvbnRl
eHQoKSk7CisgICAgICAgICAgICBhdXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQ
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+KHBsYWNlaG9sZGVyRGF0YS0+Y2FudmFzLT5yZW5k
ZXJpbmdDb250ZXh0KCkpOwogICAgICAgICAgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0gcGxh
Y2Vob2xkZXJDb250ZXh0LmltYWdlQnVmZmVyUGlwZSgpOwogICAgICAgICAgICAgaWYgKGltYWdl
QnVmZmVyUGlwZSkKICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVT
b3VyY2UgPSBpbWFnZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOwpAQCAtMTE1LDkgKzExNSw2IEBAIE9m
ZnNjcmVlbkNhbnZhczo6T2Zmc2NyZWVuQ2FudmFzKFNjcmlwdEUKIE9mZnNjcmVlbkNhbnZhczo6
fk9mZnNjcmVlbkNhbnZhcygpCiB7CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVk
KCk7Ci0KLSAgICBtX2NvbnRleHQgPSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkg
YmVmb3JlIHRoZSBJbWFnZUJ1ZmZlci4KLSAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0K
IAogdW5zaWduZWQgT2Zmc2NyZWVuQ2FudmFzOjp3aWR0aCgpIGNvbnN0CkBAIC0xNTQsNiArMTUx
LDIzIEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXNl
dCgpOwogfQogCitib29sIE9mZnNjcmVlbkNhbnZhczo6aXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4
dFR5cGUgY29udGV4dFR5cGUpCit7CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpfMmQ7Cit9CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29u
dGV4dFR5cGUgY29udGV4dFR5cGUpCit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250
ZXh0VHlwZSksIGNvbnRleHRUeXBlKTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlz
Tm9uZSgpKTsKKworICAgIC8vIEZJWE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBl
bm91Z2ggcGl4ZWwgbWVtb3J5LiBTZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQy
ZC4KKworICAgIHNldFJlbmRlcmluZ0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpjcmVhdGUoKnRoaXMpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYg
RU5BQkxFKFdFQkdMKQogc3RhdGljIGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Rm9yV2ViR0woKQogewpAQCAtMTc1LDI4ICsxODksNDIgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5h
YmxlV2ViR0woYm9vbCB3ZWJHTAogICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZDsKIH0KIAotdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5k
ZXJpbmdDb250ZXh0VHlwZSBjb250ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0
dHJzKQorYm9vbCBPZmZzY3JlZW5DYW52YXM6OmlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRU
eXBlIGNvbnRleHRUeXBlKQoreworICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6V2ViZ2wgfHwgY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6
OldlYmdsMjsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXMmJiBhdHRycykKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7
CisgICAgQVNTRVJUKGlzV2ViR0xUeXBlKGNvbnRleHRUeXBlKSk7CisgICAgQVNTRVJUKHJlbmRl
cmluZ0NvbnRleHQoKS5pc05vbmUoKSk7CiAKICAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQgPSB0aGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2NvcGUoKSkgewogICAgICAgICBXb3JrZXJHbG9i
YWxTY29wZSYgd29ya2VyR2xvYmFsU2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4o
KnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdM
KHdvcmtlckdsb2JhbFNjb3BlLnNldHRpbmdzVmFsdWVzKCkud2ViR0xFbmFibGVkLCB3b3JrZXJH
bG9iYWxTY29wZS5zZXR0aW5nc1ZhbHVlcygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVk
KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0gZWxzZSBpZiAoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAg
ICAgIGF1dG8mIHNldHRpbmdzID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25D
b250ZXh0KS5zZXR0aW5ncygpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHNldHRp
bmdzLndlYkdMRW5hYmxlZCgpLCBzZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0gZWxzZQotICAgICAgICByZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZl
cnNpb24gd2ViR0xWZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdM
MTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHdlYkdMVmVyc2lvbiA9IEdy
YXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDE7CiAjaWYgRU5BQkxFKFdFQkdMMikK
ICAgICB3ZWJHTFZlcnNpb24gPSAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6
OldlYmdsKSA/IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDEgOiBHcmFwaGlj
c0NvbnRleHRHTFdlYkdMVmVyc2lvbjo6V2ViR0wyOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
Y29udGV4dFR5cGUpOwogI2VuZGlmCi0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Y3JlYXRlKCp0aGlzLCBhdHRycywgd2ViR0xWZXJzaW9uKTsKKworICAgIGF1dG8g
Y29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMs
IHdlYkdMVmVyc2lvbik7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHNldFJlbmRlcmluZ0NvbnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5p
cXVlUHRyKFdURk1vdmUoY29udGV4dCkpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkKQEAgLTIwNiw0NCArMjM0LDUzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFs
PE9mZnNjcmVlblJlbmRlcmluZ0MKICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBpZiAoY29udGV4dFR5cGUg
PT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6Ol8yZCkgewotICAgICAgICBpZiAobV9jb250ZXh0KSB7
Ci0gICAgICAgICAgICBpZiAoIWlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkpCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAg
ICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsKKyAgICAgICAgICAgIGlmICgh
aXMyZFR5cGUoY29udGV4dFR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpu
dWxsb3B0IH0gfTsKLSAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVm
UHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9Owog
ICAgICAgICB9CiAKLSAgICAgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCp0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0g
ICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07Ci0KLSAgICAgICAgcmV0dXJu
IHsgeyBSZWZQdHI8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2Fz
dDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9Owot
ICAgIH0KICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQpIHsKLSAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRl
eHQpKQotICAgICAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0g
fTsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVy
biB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
eyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikK
LSAgICAgICAgICAgIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0
PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsK
KyAgICAgICAgICAgIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250
ZXh0KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkgfSB9IH07CisjZW5kaWYKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHsgeyBX
VEY6Om51bGxvcHQgfSB9OwogICAgICAgICB9CiAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICB9CisKKyAgICBp
ZiAoaXMyZFR5cGUoY29udGV4dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgcGFzc2luZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy4KKyAgICAgICAg
YXV0byBjb250ZXh0ID0gY3JlYXRlT2Zmc2NyZWVuQ29udGV4dDJkKGNvbnRleHRUeXBlKTsKKyAg
ICAgICAgaWYgKCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQg
fSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+IHsgY29udGV4dCB9IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisg
ICAgaWYgKGlzV2ViR0xUeXBlKGNvbnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVz
ID0gY29udmVydDxJRExEaWN0aW9uYXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwg
IWFyZ3VtZW50cy5pc0VtcHR5KCkgPyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZp
bmVkKCkpOwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBF
eGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChj
b250ZXh0VHlwZSwgV1RGTW92ZShhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0
KQorICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUs
IFdURk1vdmUoYXR0cmlidXRlcykpOworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAg
ICAgICBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAg
ICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2Fz
dDxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYg
KGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVy
biB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+KCpjb250ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRy
PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PigqY29udGV4dCkgfSB9IH07CiAgICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg5LDEwIEBA
IEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRt
YXAoKQogewotICAgIGlmIChtX2RldGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0
YWNoZWQgfHwgcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAg
ICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRy
PEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNSwxNSBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZl
cigpLCB0byBhdm9pZCByZXNldHRpbmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFr
ZSBhIGNvcHkgYW5kCiAgICAgICAgIC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVy
IHRoYW4gcmV0dXJuaW5nIHRoZSBvcmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVy
Q29weSA9IGJ1ZmZlcigpLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGJ1ZmZlcigpLT5sb2dpY2FsU2l6ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdp
bmdDb250ZXh0KCkpOwotICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9m
ZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVh
ckNhbnZhcygpOwogICAgICAgICBjbGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJu
IHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJD
b3B5KSwgb3JpZ2luQ2xlYW4oKSA/IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBT
ZXJpYWxpemF0aW9uU3RhdGUoKSkpIH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1
dG8gd2ViR0xDb250ZXh0ID0gJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29u
dGV4dCk7CisgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4
dCgpKSkgeworICAgICAgICBhdXRvIHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdl
J3JlIHN1cHBvc2VkIHRvIGNyZWF0ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwog
ICAgICAgICAvLyBzdG9yZSBmcm9tIHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBm
b3Igbm93IHdlJ2xsIGp1c3QKQEAgLTM1OCwyMCArMzk1LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpkaWREcmF3KGNvbnN0IE9wdGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2Vk
KHJlY3QpOwogfQogCi1JbWFnZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0
CitJbWFnZSogT2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0
YWNoZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdl
ICYmIGJ1ZmZlcigpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmlu
Z0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2Nv
cGllZEltYWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb246Olllcyk7CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgp
OwogfQogCi12b2lkIE9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2
b2lkIE9mZnNjcmVlbkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJ
bWFnZSA9IG51bGxwdHI7CiB9CkBAIC0zODcsNyArNDIzLDcgQEAgU2VjdXJpdHlPcmlnaW4qIE9m
ZnNjcmVlbkNhbnZhczo6c2VjdXJpdAogCiBib29sIE9mZnNjcmVlbkNhbnZhczo6Y2FuRGV0YWNo
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fZGV0YWNoZWQgJiYgIW1fY29udGV4dDsKKyAgICBy
ZXR1cm4gIW1fZGV0YWNoZWQgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8RGV0YWNoZWRPZmZzY3JlZW5DYW52YXM+IE9mZnNjcmVlbkNhbnZhczo6
ZGV0YWNoKCkKQEAgLTQwNSwxMCArNDQxLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9m
ZnNjcmVlbkNhbnZhcz4KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnNldFBsYWNlaG9sZGVyQ2Fu
dmFzKEhUTUxDYW52YXNFbGVtZW50JiBjYW52YXMpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQp
OworICAgIEFTU0VSVChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpOwogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgbV9wbGFjZWhvbGRlckRhdGEtPmNhbnZhcyA9IG1ha2VXZWFr
UHRyKGNhbnZhcyk7Ci0gICAgYXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxh
Y2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7Cisg
ICAgYXV0byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJp
bmdDb250ZXh0PihjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBhdXRvJiBpbWFnZUJ1
ZmZlclBpcGUgPSBwbGFjZWhvbGRlckNvbnRleHQuaW1hZ2VCdWZmZXJQaXBlKCk7CiAgICAgaWYg
KGltYWdlQnVmZmVyUGlwZSkKICAgICAgICAgbV9wbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVT
b3VyY2UgPSBpbWFnZUJ1ZmZlclBpcGUtPnNvdXJjZSgpOwpAQCAtNDMxLDggKzQ2Nyw4IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRklYTUU6IFRyYW5zZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2Nl
bGVyYXRlZCBjb21wb3NpdGluZwotICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNX
ZWJHTCgpIHx8IG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0
LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250
ZXh0KCkuaXNXZWJHTCgpIHx8IHJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisg
ICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
OwogCiAgICAgaWYgKG1fcGxhY2Vob2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAg
ICAgIGF1dG8gYnVmZmVyQ29weSA9IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRp
b25Db2xvclNwYWNlOjpTUkdCLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ2OSw3ICs1
MDUsNyBAQCBDU1NWYWx1ZVBvb2wmIE9mZnNjcmVlbkNhbnZhczo6Y3NzVmFsdWVQCiAgICAgcmV0
dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCk7CiB9CiAKLXZvaWQgT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRl
SW1hZ2VCdWZmZXIoKQogewogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKIApA
QCAtNDc5LDcgKzUxNSw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZl
cigKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJpdG1hcDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKmNh
bnZhc0Jhc2VTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCkpOwogfQogCi1SZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVu
Q2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKQogewogICAgIEFTU0VSVChtX2RldGFjaGVkKTsKIApA
QCAtNDkzLDggKzUyOSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0
YWsKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCiB7CiAgICAgcmVzZXRHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpOwotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8T2Zmc2Ny
ZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAg
ICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkucmVzZXQoKTsKIAogICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7
CiAgICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDcgQEAgcHVi
bGljOgogICAgICAgICBkb3VibGUgcXVhbGl0eSA9IDEuMDsKICAgICB9OwogCi0gICAgZW51bSBj
bGFzcyBSZW5kZXJpbmdDb250ZXh0VHlwZSB7Ci0gICAgICAgIF8yZCwKLSAgICAgICAgV2ViZ2ws
Ci0gICAgICAgIFdlYmdsMgotICAgIH07CisgICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250ZXh0
VHlwZSB7IF8yZCwgV2ViZ2wsIFdlYmdsMiB9OwogCiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5D
YW52YXM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCk7CiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Jiwgc3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVu
Q2FudmFzPiYmKTsKQEAgLTEyMiwxNiArMTE4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdp
ZHRoKHVuc2lnbmVkKTsKICAgICB2b2lkIHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3Jl
ZW5SZW5kZXJpbmdDb250ZXh0Pj4gZ2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVu
ZGVyaW5nQ29udGV4dFR5cGUsIFZlY3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFy
Z3VtZW50cyk7CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJU
b0ltYWdlQml0bWFwKCk7CiAgICAgdm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9u
cyYmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBP
cHRpb25hbDxGbG9hdFJlY3Q+JikgZmluYWw7CiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAg
ICBJbWFnZSogY29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2Uo
KSBmaW5hbDsKIAogICAgIGJvb2wgaGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXI7IH0KIApAQCAtMTQ4LDcgKzE0Miw2IEBA
IHB1YmxpYzoKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKIAogcHJpdmF0ZToKLQogICAg
IE9mZnNjcmVlbkNhbnZhcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCk7CiAKICAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTY1LDEyICsxNTgsMTYgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgZmluYWw7CiAKKyAgICBzdGF0aWMgYm9v
bCBpczJkVHlwZShSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEKiBjcmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4
dFR5cGUpOworCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIHZvaWQgY3JlYXRlQ29udGV4dFdlYkdM
KFJlbmRlcmluZ0NvbnRleHRUeXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgPSB7IH0pOwor
ICAgIHN0YXRpYyBib29sIGlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKKyAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29u
dGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMmJik7CiAjZW5kaWYKIAotICAgIHZvaWQg
Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+
IHRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0OworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBm
aW5hbDsKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAg
dm9pZCByZXNldCgpOwogCkBAIC0xNzgsMTQgKzE3NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQg
cHVzaEJ1ZmZlclRvUGxhY2Vob2xkZXIoKTsKICAgICB2b2lkIHNjaGVkdWxlQ29tbWl0VG9QbGFj
ZWhvbGRlckNhbnZhcygpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ+IG1fY29udGV4dDsKLQogICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5z
IHdlIHRyaWVkIHRvIG1hbGxvYyB0aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0
IGl0LgogICAgIG11dGFibGUgYm9vbCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07
CiAKICAgICBib29sIG1fZGV0YWNoZWQgeyBmYWxzZSB9OwogCi0gICAgbXV0YWJsZSBSZWZQdHI8
SW1hZ2U+IG1fY29waWVkSW1hZ2U7CisgICAgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwog
CiAgICAgYm9vbCBtX2hhc1NjaGVkdWxlZENvbW1pdCB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTEgKzY5
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShD
YW52YXNCYXNlJiBjYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCitVbmlxdWVSZWY8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShD
YW52YXNCYXNlJiBjYW52YXMsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0
dGluZ3MsIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpCiB7Ci0gICAgYXV0byBy
ZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3Mp
LCB1c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSkpOworICAgIGF1dG8gcmVuZGVyaW5nQ29u
dGV4dCA9IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFy
c2VNb2RlKSk7CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZh
c1JlbmRlcmluZ0NvbnRleHQoKnJlbmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250
ZXh0LmdldCgpKTsKIAogICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFRleHRNZXRyaWNzOwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFs
IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZh
c0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1ND
b21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKIAogICAg
IHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw3ICsx
OTYsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHdlYmtpdEJhY2tp
bmdTdG9yZVBpeGVsUmF0aW8oKSB7IHJldHVybiAxOyB9CiAKLSAgICB2b2lkIHJlc2V0KCk7Cisg
ICAgdm9pZCByZXNldCgpIGZpbmFsOwogCiAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmltYWdlU21vb3RoaW5nRW5hYmxlZDsgfQogICAgIHZv
aWQgc2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24g
Mjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIENh
bnZhc0Jhc2UmIGNhbnZhc0Jhc2UoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQogCisgICAg
dmlydHVhbCBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzMmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1dlYkdMMSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2Vi
R0wyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgog
ICAgIC8vIHVzZWQgZm9yIGNvbXBvc2l0aW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlRm9yRGlzcGxheVdpdGhQYWludCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBi
b29sIGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KICAgICB2b2lkIHNldEhhc0Fj
dGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JDYW52
YXNDYWxsVHJhY2VyKSB7IG1faGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciA9IGhh
c0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI7IH0KQEAgLTg4LDYgKzg5LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkg
eyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSB7IH0KKwogICAgIHZpcnR1YWwgUGl4ZWxG
b3JtYXQgcGl4ZWxGb3JtYXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIERlc3RpbmF0aW9uQ29sb3JT
cGFjZSBjb2xvclNwYWNlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dE5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5v
bmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworCitVbmlxdWVSZWY8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dE5vbmU+IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoQ2FudmFz
QmFzZSYgY2FudmFzKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgq
bmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lKGNhbnZhcykpOworfQorCitDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Tm9uZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFzZSYg
Y2FudmFzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9Cit7Cit9CisK
K0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUo
KSA9IGRlZmF1bHQ7CisKK30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lIGZpbmFsIDogcHVibGlj
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dE5vbmUpOworcHVibGljOgorICAgIHN0YXRpYyBVbmlxdWVSZWY8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU+IGNyZWF0ZShDYW52YXNCYXNlJik7CisKKyAgICB2
aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZSgpOworCitwcml2YXRlOgorICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHROb25lKENhbnZhc0Jhc2UmKTsKKworICAgIGJvb2wgaXNOb25l
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miwx
MSArNDIsMTEgQEAgc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZQogc3Rh
dGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFz
ZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdz
KQorVW5pcXVlUmVmPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewotICAgIGF1dG8gcmVuZGVyaW5nQ29u
dGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KG5ldyBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOwor
ICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IG1ha2VVbmlxdWVSZWZGcm9tUmVmZXJlbmNlKCpu
ZXcgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncykp
KTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCgqcmVuZGVyaW5nQ29udGV4dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQuZ2V0
KCkpOwogCiAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuaAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAgY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQg
ZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUo
Q2FudmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOworICAg
IHN0YXRpYyBVbmlxdWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2Fu
dmFzQmFzZSYsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwogCiAgICAg
ZW51bSBjbGFzcyBCaXRtYXBNb2RlIHsKICAgICAgICAgVmFsaWQsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7
CiAKK1VuaXF1ZVJlZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IE9mZnNjcmVl
bkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK3sK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZkZyb21SZWZlcmVuY2UoKm5ldyBPZmZzY3JlZW5DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQoY2FudmFzKSk7Cit9CisKIE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jh
c2UmIGNhbnZhcykKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoY2FudmFzLCBm
YWxzZSkKIHsKQEAgLTEwOCw3ICsxMTMsOCBAQCBDYW52YXNEaXJlY3Rpb24gT2Zmc2NyZWVuQ2Fu
dmFzUmVuZGVyaW5nCiAgICAgcmV0dXJuIERpcmVjdGlvbjo6THRyOwogfQogCi1hdXRvIE9mZnNj
cmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9udFBy
b3h5KiB7CithdXRvIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5
KCkgLT4gY29uc3QgRm9udFByb3h5KgorewogICAgIGlmICghc3RhdGUoKS5mb250LnJlYWxpemVk
KCkpCiAgICAgICAgIHNldEZvbnQoc3RhdGUoKS51bnBhcnNlZEZvbnQpOwogICAgIHJldHVybiAm
c3RhdGUoKS5mb250OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9u
IDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYg
RU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmgiCi0KICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzYsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZzY3Jl
ZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRChDYW52YXNCYXNlJik7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxP
ZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CisK
ICAgICB2aXJ0dWFsIH5PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAogICAg
IE9mZnNjcmVlbkNhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8T2Zmc2Ny
ZWVuQ2FudmFzPihjYW52YXNCYXNlKCkpOyB9CkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAg
ICBSZWY8VGV4dE1ldHJpY3M+IG1lYXN1cmVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHBy
aXZhdGU6CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2Um
KTsKKwogICAgIGJvb2wgaXNPZmZzY3JlZW4yZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7
IH0KICAgICBjb25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIGZpbmFsOwogfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFBhaW50
UmVuZGVyaW5nQ29udGV4dDJEKTsKIAotc3RkOjp1bmlxdWVfcHRyPFBhaW50UmVuZGVyaW5nQ29u
dGV4dDJEPiBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZh
cykKK1VuaXF1ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4obmV3IFBhaW50UmVuZGVyaW5nQ29udGV4
dDJEKGNhbnZhcykpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmRnJvbVJlZmVyZW5jZSgqbmV3
IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcykpOwogfQogCiBQYWludFJlbmRlcmluZ0Nv
bnRleHQyRDo6UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYgY2FudmFzKQpAQCAt
NDcsNCArNDcsNSBAQCBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6UGFpbnRSZW5kZXJpbmdDCiBQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6flBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCkgPSBkZWZh
dWx0OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5oCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRl
cmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDE4ICszNiwyMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBQYWludFJlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAg
IHN0YXRpYyBVbmlxdWVSZWY8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNC
YXNlJik7CiAKICAgICB2aXJ0dWFsIH5QYWludFJlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAgICAg
Q3VzdG9tUGFpbnRDYW52YXMmIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEN1c3Rv
bVBhaW50Q2FudmFzPihjYW52YXNCYXNlKCkpOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc1Bh
aW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgUGFpbnRSZW5kZXJp
bmdDb250ZXh0MkQoQ2FudmFzQmFzZSYpOworCisgICAgYm9vbCBpc1BhaW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTlZBU1JFTkRFUklOR0NPTlRFWFQoV2ViQ29yZTo6UGFp
bnRSZW5kZXJpbmdDb250ZXh0MkQsIGlzUGFpbnQoKSkKKwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEwICszNywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogCitVbmlxdWVSZWY8UGxhY2Vo
b2xkZXJSZW5kZXJpbmdDb250ZXh0PiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZShDYW52YXNCYXNlJiBjYW52YXMpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWZGcm9tUmVm
ZXJlbmNlKCpuZXcgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykpOworfQorCiBQ
bGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChD
YW52YXNCYXNlJiBjYW52YXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykK
KyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeyBjYW52YXMgfQorICAgICwgbV9pbWFnZUJ1
ZmZlclBpcGUgeyBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpIH0KIHsKLSAgICBtX2ltYWdlQnVm
ZmVyUGlwZSA9IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCk7CiB9CiAKIEhUTUxDYW52YXNFbGVt
ZW50KiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDEzICszNywxNSBAQCBjbGFzcyBPZmZzY3JlZW5DYW52YXM7CiBjbGFzcyBQbGFjZWhvbGRlclJl
bmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwog
cHVibGljOgotICAgIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7Cisg
ICAgc3RhdGljIFVuaXF1ZVJlZjxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShD
YW52YXNCYXNlJik7CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAK
ICAgICBjb25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KIAogcHJpdmF0ZToKKyAgICBQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOworCiAgICAgYm9vbCBpc1BsYWNlaG9s
ZGVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlz
aW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQxLDcgKzQ4NDEsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAgICAgICAgIC8vIHNvIGZvciBX
ZWJHTCAxLjAgdXBsb2FkcywgZGVmZXIgbWVhc3VyaW5nIHRoZWlyIHJlY3RhbmdsZSBhcyBsb25n
IGFzIHBvc3NpYmxlLgogICAgICAgICB0ZXhJbWFnZUltcGwoZnVuY3Rpb25JRCwgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6
OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGZhbHNlLCBp
bnB1dFNvdXJjZUltYWdlUmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0KTsKICAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYg
Y2FudmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAgfSwgWyZdKFJlZlB0cjxIVE1MQ2Fu
dmFzRWxlbWVudD4mIGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBhdXRv
IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGZ1bmN0aW9uTmFt
ZSwgY2FudmFzLmdldCgpKTsKICAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFz
LmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKLXN0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hlc0Rl
dmljZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2UmIGRldmlj
ZSkKK3N0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hlc0Rldmlj
ZShjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2UmIGRl
dmljZSkKIHsKICAgICBpZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCkpIHsKICAgICAg
ICAgYXV0byYgY29udGV4dEdQVSA9IGRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQp
OwpAQCAtMTk1LDcgKzE5NSw3IEBAIFdlYkdQVURldmljZSogSW5zcGVjdG9yQ2FudmFzOjpkZXZp
Y2VDb24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBJbnNwZWN0b3JDYW52YXM6Omlz
RGV2aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KSBj
b25zdAorYm9vbCBJbnNwZWN0b3JDYW52YXM6OmlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChhdXRv
KiBkZXZpY2UgPSBkZXZpY2VDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBjYW52YXNJZkNvbnRl
eHRNYXRjaGVzRGV2aWNlKGNvbnRleHQsICpkZXZpY2UpOwpAQCAtMTA3NiwxNiArMTA3NiwxNiBA
QCBTdHJpbmcgSW5zcGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50CiAgICAgfQogCiAjaWYg
RU5BQkxFKFdFQkdMKQotICAgIGF1dG8qIGNvbnRleHQgPSBub2RlLT5yZW5kZXJpbmdDb250ZXh0
KCk7CisgICAgYXV0byYgY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBp
ZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAgIGRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVy
Q2xlYXJGb3JJbnNwZWN0b3IodHJ1ZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rvcih0
cnVlKTsKICNlbmRpZgogCiAgICAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IHJlc3VsdCA9
IG5vZGUtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zKTsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAgIGRv
d25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50QnVm
ZmVyQ2xlYXJGb3JJbnNwZWN0b3IoZmFsc2UpOworICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0
b3IoZmFsc2UpOwogI2VuZGlmCiAKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZpc2lv
biAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKICAgICBXZWJHUFVEZXZpY2UqIGRldmljZUNvbnRleHQoKSBjb25zdDsKLSAgICBib29s
IGlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JikgY29uc3Q7
CisgICAgYm9vbCBpc0RldmljZUZvckNhbnZhc0NvbnRleHQoY29uc3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYpIGNvbnN0OwogI2VuZGlmCiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCShyZXZpc2lv
biAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNB
Z2VudChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQorc3Rh
dGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudmFzQWdlbnQoY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCkKIHsKICAgICBBU1NFUlQo
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGljOjpoYXNGcm9udGVuZHMoKSk7CiAKQEAgLTgz
LDcgKzgzLDcgQEAgc3RhdGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudgogfQog
CiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTihBcmd1bWVudFR5cGUpIFwKLU9w
dGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNw
ZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBcCitP
cHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1bWVu
dCkgXAogeyBcCiAgICAgaWYgKGF1dG8qIGNhbnZhc0FnZW50ID0gZW5hYmxlZENhbnZhc0FnZW50
KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQpKSBcCiAgICAgICAgIHJldHVybiBjYW52YXNBZ2VudC0+
cHJvY2Vzc0FyZ3VtZW50KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIGFyZ3VtZW50KTsgXApAQCAt
OTMsNyArOTMsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jCiAg
ICAgRk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNT
X0FSR1VNRU5UX0RFRklOSVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9O
CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5hbWUsIElu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50cykK
K3ZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKGNvbnN0IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5hbWUs
IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50
cykKIHsKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQoY2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCkpCiAgICAgICAgIGNhbnZhc0FnZW50LT5yZWNvcmRBY3Rpb24o
Y2FudmFzUmVuZGVyaW5nQ29udGV4dCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMp
KTsKQEAgLTEwMSwxNCArMTAxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6
cmVjb3JkQWMKIAogT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2Vk
QXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChjb25z
dCBIVE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgdWludDMyX3QgYXJndW1lbnQpCiB7
Ci0gICAgQVNTRVJUKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKTsKLSAgICByZXR1
cm4gcHJvY2Vzc0FyZ3VtZW50KCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwgYXJn
dW1lbnQpOworICAgIHJldHVybiBwcm9jZXNzQXJndW1lbnQoY2FudmFzRWxlbWVudC5yZW5kZXJp
bmdDb250ZXh0KCksIGFyZ3VtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOjpyZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQs
IFN0cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3Vt
ZW50cyYmIGFyZ3VtZW50cykKIHsKLSAgICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdD
b250ZXh0KCkpOwotICAgIHJlY29yZEFjdGlvbigqY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250
ZXh0KCksIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgcmVjb3JkQWN0
aW9uKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKGFyZ3VtZW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
LmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXNDYWxsVHJhY2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDEyIEBA
IHB1YmxpYzoKICAgICB1c2luZyBQcm9jZXNzZWRBcmd1bWVudHMgPSBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8T3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+PjsKIAogI2RlZmluZSBQUk9DRVNTX0FS
R1VNRU5UX0RFQ0xBUkFUSU9OKEFyZ3VtZW50VHlwZSkgXAotICAgIHN0YXRpYyBPcHRpb25hbDxQ
cm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQm
LCBBcmd1bWVudFR5cGUpOyBcCisgICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3VtZW50
PiBwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFyZ3VtZW50
VHlwZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAgICAgRk9S
X0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNTX0FSR1VN
RU5UX0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KIAot
ICAgIHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3Ry
aW5nJiYsIFByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKKyAgICBzdGF0aWMgdm9pZCByZWNv
cmRBY3Rpb24oY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBQcm9jZXNz
ZWRBcmd1bWVudHMmJiA9IHsgfSk7CiAKICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJn
dW1lbnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYsIHVpbnQzMl90
KTsKICAgICBzdGF0aWMgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQm
LCBTdHJpbmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2Vu
dC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsMTMgKzQx
Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGUKIAogdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoQ2FudmFz
QmFzZSYgY2FudmFzQmFzZSkKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5yZW5k
ZXJpbmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBpbnNwZWN0b3JD
YW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3Rv
ckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0
KCkpOwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2Fu
dmFzKQogICAgICAgICByZXR1cm47CkBAIC00NDcsNyArNDQxLDcgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnko
Y29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8SW5z
cGVjdG9yQ2FudmFzPiBpbnNwZWN0b3JDYW52YXM7CiAKQEAgLTQ3NywxMSArNDcxLDcgQEAgdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudgogCiB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIGNvbnN0IE9w
dGlvbmFsPEZsb2F0UmVjdD4mKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJl
bmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7
CisgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jh
c2UucmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAg
ICBpZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNDkxLDExICs0ODEs
NyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkCiAKIHZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXNCYXNl
KQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKTsK
LSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaW5zcGVjdG9y
Q2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7CisgICAgYXV0byBpbnNwZWN0
b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4
dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzLDcgKzQ4OSw3IEBAIHZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3kKICAgICB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNh
bnZhcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGlu
Z0NhbnZhc0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9yY2VE
aXNwYXRjaCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0Nh
bnZhc0ZyYW1lKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9y
Y2VEaXNwYXRjaCkKIHsKICAgICBpZiAoIWNvbnRleHQuaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFz
Q2FsbFRyYWNlcigpKQogICAgICAgICByZXR1cm47CkBAIC01MzcsNyArNTIzLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjbwogICAgIG1fcmVjb3JkaW5nQ2FudmFz
SWRlbnRpZmllcnMucmVtb3ZlKGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmllcigpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGV4ZWMs
IEpTQzo6SlNPYmplY3QqIG9wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25z
b2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykK
IHsKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY29udGV4
dCk7CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CkBAIC01NTksNyArNTQ1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UgogICAgIHN0YXJ0UmVjb3JkaW5n
KCppbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29s
ZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RvcFJlY29yZGlu
Z0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGRp
ZEZpbmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKGNvbnRleHQsIHRydWUpOwogfQpAQCAtNjgyLDcg
KzY2OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2UKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR1BVKQogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElP
TihBcmd1bWVudFR5cGUpIFwKLU9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlBy
b2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvY2Vzc0FyZ3VtZW50KENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlw
ZSBhcmd1bWVudCkgXAorT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vz
c2VkQXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoY29uc3Qg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRU
eXBlIGFyZ3VtZW50KSBcCiB7IFwKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNw
ZWN0b3JDYW52YXMoY2FudmFzUmVuZGVyaW5nQ29udGV4dCk7IFwKICAgICBBU1NFUlQoaW5zcGVj
dG9yQ2FudmFzKTsgXApAQCAtNjkyLDcgKzY3OCw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXI6OlByb2MKICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJB
Q0VSX0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNT
X0FSR1VNRU5UX0RFRklOSVRJT04KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3Jk
QWN0aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0
cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50
cyYmIGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZEFjdGlvbihj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJp
bmcmJiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMm
JiBhcmd1bWVudHMpCiB7CiAgICAgQVNTRVJUKGNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaGFzQWN0
aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKTsKIApAQCAtODg3LDcgKzg3Myw3IEBAIFJl
ZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0EKICAgICByZXR1cm4gaW5zcGVj
dG9yQ2FudmFzOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
KQorUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNw
ZWN0b3JDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBmb3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2Fu
dmFzLnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRl
eHQoKSA9PSAmY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHJldmlzaW9uIDI3NzIwOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1l
TmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2Rl
cyhDYW52YXNCYXNlJik7CiAgICAgdm9pZCBkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9y
eShDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRpbmdD
YW52YXNGcmFtZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNoID0g
ZmFsc2UpOwotICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0aW9u
cyk7Ci0gICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VDYW52YXNNZW1vcnkoY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYpOworICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUo
Y29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9IGZhbHNl
KTsKKyAgICB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0JiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9wdGlv
bnMpOworICAgIHZvaWQgY29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIGRpZEVuYWJsZUV4
dGVuc2lvbihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBkaWRDcmVhdGVXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFdl
YkdMUHJvZ3JhbSYpOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgcHVibGljOgogCiAgICAgLy8gSW5z
cGVjdG9yQ2FudmFzQ2FsbFRyYWNlcgogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFU
SU9OKEFyZ3VtZW50VHlwZSkgXAotICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYsIEFyZ3VtZW50VHlwZSk7IFwKKyAgICBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxs
VHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmLCBBcmd1bWVudFR5cGUpOyBcCiAvLyBlbmQgb2YgUFJPQ0VTU19BUkdV
TUVOVF9ERUNMQVJBVElPTgogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFD
RVJfQVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTikKICN1bmRlZiBQUk9DRVNT
X0FSR1VNRU5UX0RFQ0xBUkFUSU9OCi0gICAgdm9pZCByZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNz
ZWRBcmd1bWVudHMmJiA9IHsgfSk7CisgICAgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQ
cm9jZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFJlY29y
ZGluZ09wdGlvbnMgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2Fu
dmFzKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQog
ICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2
aWNlJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDEw
ICsyNDIsMTAgQEAgc3RhdGljIEpTQzo6SlNPYmplY3QqIG9iamVjdEFyZ3VtZW50QXQoUwogc3Rh
dGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB0YXJnZXQpCiB7CiAgICAgaWYgKGF1dG8qIGNhbnZhcyA9IEpT
SFRNTENhbnZhc0VsZW1lbnQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKLSAgICAgICAgcmV0dXJu
IGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNhbnZhcy0+cmVu
ZGVyaW5nQ29udGV4dCgpOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmIChh
dXRvKiBjYW52YXMgPSBKU09mZnNjcmVlbkNhbnZhczo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQot
ICAgICAgICByZXR1cm4gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVy
biAmY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICBpZiAoYXV0byogY29u
dGV4dCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1dyYXBwZWQodm0sIHRhcmdldCkp
CiAgICAgICAgIHJldHVybiBjb250ZXh0OwpAQCAtMzQ5LDEwICszNDksOCBAQCB2b2lkIFBhZ2VD
b25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1l
bnQ+KCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBjYW52YXNSZW5k
ZXJpbmdDb250ZXh0ID0gY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzbmFwc2hvdENhbnZhcyhj
YW52YXNFbGVtZW50LCAqY2FudmFzUmVuZGVyaW5nQ29udGV4dCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNu
YXBzaG90Q2FudmFzKGNhbnZhc0VsZW1lbnQsIGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gcmVzdWx0LnZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1h
Z2UuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9DdXN0b21QYWludEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3
IEBAIEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1c3QKICAgICBpZiAocmVz
dWx0LnR5cGUoKSAhPSBDYWxsYmFja1Jlc3VsdFR5cGU6OlN1Y2Nlc3MpCiAgICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CiAKLSAgICBjYW52YXMtPnJlcGxheURpc3Bs
YXlMaXN0KCZkZXN0Q29udGV4dCk7CisgICAgY2FudmFzLT5yZXBsYXlEaXNwbGF5TGlzdChkZXN0
Q29udGV4dCk7CiAKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWREcmF3OwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2
aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52
YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNyBAQCBib29sIFJlbmRlckhUTUxD
YW52YXM6OnJlcXVpcmVzTGF5ZXIoKSBjCiAgICAgaWYgKFJlbmRlclJlcGxhY2VkOjpyZXF1aXJl
c0xheWVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKQot
ICAgICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOwotCi0gICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC03
Myw3ICs3MCw3IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWkKICAg
ICBMYXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gdGhpcy0+Y29udGVudEJveFJlY3QoKTsKIAog
ICAgIGlmIChjb250ZXh0LmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpKSB7Ci0gICAgICAgIGlm
ICghY29udGV4dC5jb250ZW5mdWxQYWludERldGVjdGVkKCkgJiYgY2FudmFzRWxlbWVudCgpLnJl
bmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgaWYgKCFjb250ZXh0LmNvbnRlbmZ1bFBhaW50RGV0
ZWN0ZWQoKSAmJiAhY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkK
ICAgICAgICAgICAgIGNvbnRleHQuc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTIgKzkxLDEyIEBAIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY2FudmFzQ29tcG9zaXQKIHsK
ICAgICBBU1NFUlQocmVuZGVyZXIuaXNDYW52YXMoKSk7CiAgICAgCi0gICAgY29uc3QgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJl
ci5ub2RlKCkpOwotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQo
KTsKLSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKKyAgICBj
b25zdCBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIu
bm9kZSgpKTsKKyAgICBhdXRvJiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7
CisgICAgaWYgKCFjb250ZXh0LmlzQWNjZWxlcmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIFVuYWNj
ZWxlcmF0ZWRDYW52YXM7CiAgICAgCi0gICAgaWYgKGNvbnRleHQtPmlzR1BVQmFzZWQoKSkKKyAg
ICBpZiAoY29udGV4dC5pc0dQVUJhc2VkKCkpCiAgICAgICAgIHJldHVybiBDYW52YXNBc0xheWVy
Q29udGVudHM7CiAKICAgICByZXR1cm4gQ2FudmFzUGFpbnRlZFRvTGF5ZXI7IC8vIE9uIE1hYyBh
bmQgaU9TIHdlIHBhaW50IGFjY2VsZXJhdGVkIGNhbnZhc2VzIGludG8gdGhlaXIgbGF5ZXJzLgpA
QCAtMTA2NCw5ICsxMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZp
Z3VyYQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSB8fCBFTkFC
TEUoT0ZGU0NSRUVOX0NBTlZBUykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzQ2FudmFzKCkg
JiYgY2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVy
Q29udGVudHMpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRv
d25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgICAg
IGlmIChhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAg
ICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGNvbnRleHQt
PnBsYXRmb3JtTGF5ZXIoKSwgR3JhcGhpY3NMYXllcjo6Q29udGVudHNMYXllclB1cnBvc2U6OkNh
bnZhcyk7CisgICAgICAgIGNvbnN0IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNF
bGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+
c2V0Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkucGxh
dGZvcm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2FudmFz
KTsKIAogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428067</attachid>
            <date>2021-05-07 17:46:02 -0700</date>
            <delta_ts>2021-05-07 22:14:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225497-20210507174601.patch</filename>
            <type>text/plain</type>
            <size>117864</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDIxLTA1LTA2ICBTYW0gV2VpbmlnICA8d2Vpbmln
QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYWx3YXlz
IG5vbi1udWxsIGluIENhbnZhc0Jhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nv
bi4KKworICAgICAgICAqIHd0Zi9VbmlxdWVSZWYuaDoKKyAgICAgICAgKFdURjo6YWRvcHRSZWZl
cmVuY2VNYWtpbmdVbmlxdWVSZWYpOgorICAgICAgICBBZGQgbmV3IGhlbHBlciB0byBhbGxvdyBt
YWtpbmcgVW5pcXVlUmVmcyBpbiBhIHNsaWdodGx5IGVhc2llciBtYW5uZXIgdGhhbiBhbHdheXMg
ZnJpZW5kaW5nLgorCiAyMDIxLTA1LTA3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBXYXJuaW5ncyBhYm91dCB1bnVzZWQgZmlsZXN5c3Rl
bSBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTMgQEAg
VW5pcXVlUmVmPFQ+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaQogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorVW5pcXVlUmVmPFQ+IGFkb3B0UmVmZXJlbmNlTWFraW5nVW5pcXVlUmVmKFQm
IHJlZmVyZW5jZSkKK3sKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBU
Ojp3ZWJraXRGYXN0TWFsbG9jZWQsIGludD46OnZhbHVlLCAiVCBpcyBGYXN0TWFsbG9jZWQiKTsK
KyAgICByZXR1cm4gVW5pcXVlUmVmPFQ+KHJlZmVyZW5jZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBjbGFzcyBVbmlxdWVSZWYgewogcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPgpAQCAtNzgsNiArODUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPGNs
YXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gbWFrZVVuaXF1ZVJlZldp
dGhvdXRGYXN0TWFsbG9jQ2hlY2soQXJncyYmLi4uKTsKICAgICB0ZW1wbGF0ZTxjbGFzcyBVPiBm
cmllbmQgVW5pcXVlUmVmPFU+IG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihzdGQ6
OnVuaXF1ZV9wdHI8VT4pOworICAgIHRlbXBsYXRlPGNsYXNzIFU+IGZyaWVuZCBVbmlxdWVSZWY8
VT4gYWRvcHRSZWZlcmVuY2VNYWtpbmdVbmlxdWVSZWYoVSYpOwogICAgIHRlbXBsYXRlPGNsYXNz
IFU+IGZyaWVuZCBjbGFzcyBVbmlxdWVSZWY7CiAKICAgICBVbmlxdWVSZWYoVCYgb3RoZXIpCkBA
IC05Miw2ICsxMDAsNyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdU
Rjo6VW5pcXVlUmVmOwordXNpbmcgV1RGOjphZG9wdFJlZmVyZW5jZU1ha2luZ1VuaXF1ZVJlZjsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZjsKLXVzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhv
dXRGYXN0TWFsbG9jQ2hlY2s7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVu
aXF1ZVB0cjsKK3VzaW5nIFdURjo6bWFrZVVuaXF1ZVJlZldpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxODAgQEAKKzIwMjEtMDUtMDYgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCBhbHdheXMgbm9uLW51bGwgaW4gQ2FudmFzQmFzZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NDk3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgRGVhbiBKYWNrc29uLgorCisgICAgICAgIFJlZmFjdG9yIGNhbnZhcyByZWxhdGVkIGNsYXNz
ZXMgYSBiaXQgdG8gbWFrZSB0aGVtIGEgYml0IGVhc2llciB0byB3b3JrIHdpdGguCisgICAgICAg
IC0gSFRNTENhbnZhc0VsZW1lbnQsIE9mZnNjcmVlbkNhbnZhcyBhbmQgQ3VzdG9tUGFpbnRDYW52
YXMgbm93IGFsd2F5cyBoYXZlIAorICAgICAgICAgIGEgdmFsaWQsIG5vbi1udWxsIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQgKG5vdyBzdG9yZWQgaW4gQ2FudmFzQmFzZSBhcworICAgICAgICAgIFVu
aXF1ZVJlZikuIEluIHBsYWNlIG9mIHRoZSBvbGQgbnVsbCB2YWx1ZSBzdGF0ZSB3ZSBub3cgaGF2
ZSBhbiBleHBsaWNpdAorICAgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lIHR5cGUu
IFRoaXMgd2lsbCBhbGxvdyB1cyB0byBtb3ZlIG1vcmUgY29udGV4dAorICAgICAgICAgIHNwZWNp
ZmljIGxvZ2ljIHRvIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgYW5kIGl0cyBzdWJjbGFzc2VzIGFu
ZCBvdXQgb2YgCisgICAgICAgICAgQ2FudmFzQmFzZSBhbmQgaXRzIHN1YmNsYXNzZXMuCisgICAg
ICAgIC0gQ1NTQ2FudmFzVmFsdWUgbm93IHN0b3JlcyBhIENhbnZhc0Jhc2UgcmF0aGVyIHRoYW4g
YW4gSFRNTENhbnZhc0VsZW1lbnQKKyAgICAgICAgICB0byBhdm9pZCB1bm5lY2Vzc2FyeSBkb3du
Y2FzdHMuIFRoZSBjYWxscyB3ZXJlIGFsbCBzdXBwb3J0ZWQgYnkgQ2FudmFzQmFzZQorICAgICAg
ICAgIGFscmVhZHksIHNvIHRoaXMganVzdCByZW1vdmVzIHNvbWUgdW5uZWNlc3NhcnkgaGVmdC4K
KyAgICAgICAgLSBNb3ZlIGltYWdlIGJ1ZmZlciBkZXN0cnVjdGlvbiB0byB0aGUgQ2FudmFzQmFz
ZSBkZXN0cnVjdG9yIHJhdGhlciB0aGFuCisgICAgICAgICAgaGF2aW5nIGl0IGR1cGxpY2F0ZWQg
aW4gdGhlIHN1YmNsYXNzZXMuIE5ldyBkZXN0cm95SW1hZ2VCdWZmZXIoKSBoZWxwZXIKKyAgICAg
ICAgICBpbXBsZW1lbnRzIHRoZSBzdGVwcyBuZWVkZWQgaW4gYSBtb3JlIG9wdGltYWwgbWFubmVy
IHRoYW4gc2V0SW1hZ2VCdWZmZXIobnVsbHB0cikuCisgICAgICAgIC0gUmVtb3ZlIGNvbnN0IGZy
b20gYSBsb3Qgb2Ygbm90IGFjdHVhbCBjb25zdCBmdW5jdGlvbnMgbGlrZSBjb3BpZWRJbWFnZSgp
LAorICAgICAgICAgIGNsZWFyQ29waWVkSW1hZ2UoKSBhbmQgc2V0SW1hZ2VCdWZmZXIoKS4gCisg
ICAgICAgIC0gRml4dXAgT2Zmc2NyZWVuQ2FudmFzOjpnZXRDb250ZXh0IHRvIHVzZSB0aGUgY29u
dGV4dCBjcmVhdGlvbiBwYXR0ZXJuIGFzIAorICAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50Omdl
dENvbnRleHQsIG1ha2luZyBpdCBlYXN5IHRvIHNlZSB0aGUgcGFyYWxsZWxzLgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9DYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjazo6U291cmNl
OjpjYW52YXNDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNhbnZhc0NvbnRleHQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FudmFzVmFsdWU6On5DU1NDYW52YXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52
YXNWYWx1ZTo6Y2FudmFzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1
ZTo6Y2FudmFzUmVzaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbnZhc1ZhbHVlOjpmaXhlZFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FudmFzVmFsdWU6OmNhbnZhcyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYW52YXNWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FudmFzVmFsdWU6OmVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9DU1NDYW52YXNW
YWx1ZS5oOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0ltYWdlR2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NJbWFnZUdlbmVyYXRvclZhbHVlOjpyZW1vdmVDbGllbnQpOgorICAgICAg
ICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpD
YW52YXNCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6On5DYW52YXNCYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OmRyYXdpbmdDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6Om1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6Om1lbW9yeUNvc3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxU
cmFjZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6c2V0UmVuZGVyaW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpkZXN0cm95SW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
QmFzZTo6cmVuZGVyaW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNC
YXNlOjpyZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjp+Q3VzdG9tUGFpbnRD
YW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmdldENvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OnJlcGxheURpc3BsYXlMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXN0b21QYWludENhbnZhczo6cmVwbGF5RGlzcGxheUxpc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGll
ZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2Fu
dmFzOjpjbGVhckNvcGllZEltYWdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0N1
c3RvbVBhaW50Q2FudmFzLmg6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6fkhUTUxDYW52YXNFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQyZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dFdlYkdMKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR0wpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRXZWJHUFUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRXZWJHUFUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHRCaXRtYXBSZW5k
ZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dEJp
dG1hcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnRzSW50b0NhbnZh
c0J1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmlzR1BVQmFzZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFN1cmZhY2VTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp0cmFuc2ZlckNvbnRyb2xU
b09mZnNjcmVlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y29w
aWVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFySW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNsZWFyQ29w
aWVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnZpcnR1YWxI
YXNQZW5kaW5nQWN0aXZpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6Omluc2VydGVkSW50b0FuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6cHJlcGFyZUZvckRpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmlzQ29udHJvbGxlZEJ5T2Zmc2NyZWVuIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJJbWFnZUJ1
ZmZlciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y2xlYXJDb3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6fk9mZnNjcmVlbkNhbnZhcyk6CisgICAg
ICAgIChXZWJDb3JlOjppczJkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52
YXM6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjppc1dlYkdM
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRX
ZWJHTCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmdldENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjb21taXRUb1BsYWNlaG9sZGVyQ2FudmFzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6cmVzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6T2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNsZWFyQ29waWVkSW1hZ2UgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDo6aXNOb25lIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSk6CisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHRO
b25lKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6
OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpQbGFjZWhv
bGRlclJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1BsYWNlaG9sZGVy
UmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4SW1hZ2VTb3VyY2VIZWxwZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FudmFzSWZDb250ZXh0TWF0Y2hlc0Rl
dmljZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6OmlzRGV2aWNlRm9yQ2Fu
dmFzQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXM6Omdl
dENhbnZhc0NvbnRlbnRBc0RhdGFVUkwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjplbmFibGVkQ2FudmFzQWdlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnJlY29yZEFjdGlvbik6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50
Tm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENoYW5n
ZUNhbnZhc01lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y2FudmFzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6
Y2FudmFzRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50
OjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZh
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3JkQWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNhbnZhc0FnZW50OjpmaW5kSW5zcGVjdG9y
Q2FudmFzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
Lmg6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYW52YXNSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25z
b2xlQ2xpZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9DdXN0
b21QYWludEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50SW1hZ2U6OmRv
Q3VzdG9tUGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnJlcXVpcmVzTGF5ZXIgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjYW52YXNDb21wb3NpdGluZ1N0cmF0ZWd5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dXBkYXRlQ29uZmlndXJhdGlvbik6CisKIDIwMjEtMDUtMDcgIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIGZpeCBpbmNvbnNp
c3RlbmN5IGFyb3VuZCB0aGUgbWVhbmluZyBvZiBgcmF0ZWAgYW5kIGBkZWZhdWx0UGxheWJhY2tS
YXRlYCBiZXR3ZWVuIFdlYktpdCBhbmQgQVZLaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lv
biAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTMyMCw2ICsxMzIwLDcgQEAgaHRtbC9jYW52YXMvQ2FudmFzUGF0dGVybi5jcHAKIGh0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwCiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAoraHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCiBodG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAog
aHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJGbG9hdC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vQ2FudmFzQ2Fw
dHVyZU1lZGlhU3RyZWFtVHJhY2suY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL0NhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZvaWQgQ2FudmFzQ2FwdHVyZU1l
ZGlhU3RyZWFtVHJhY2s6OlNvdXIKICAgICAvLyBXZSBzaG91bGQgaW5zdGVhZCBhZGQgYW4gYW5j
aG9yIHBvaW50IGZvciBib3RoIDJkIGFuZCAzZCBjb250ZXh0cyB3aGVyZSBjYW52YXMgd2lsbCBh
Y3R1YWxseSBwYWludC4KICAgICAvLyBBbmQgY2FsbCBjYW52YXMgb2JzZXJ2ZXJzIGZyb20gdGhh
dCBwb2ludC4KICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY2FudmFzLnJl
bmRlcmluZ0NvbnRleHQoKSkpIHsKLSAgICAgICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjYW52YXMucmVuZGVyaW5nQ29udGV4dCgpKTsKKyAg
ICAgICAgYXV0byYgY29udGV4dCA9IGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+
KGNhbnZhcy5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAgICAgICBpZiAoIWNvbnRleHQuaXNQcmVz
ZXJ2aW5nRHJhd2luZ0J1ZmZlcigpKSB7CiAgICAgICAgICAgICBjYW52YXMuc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpXYXJuaW5nLCAiVHVybmluZyBkcmF3aW5nIGJ1ZmZlciBwcmVzZXJ2YXRpb24gZm9y
IHRoZSBXZWJHTCBjYW52YXMgYmVpbmcgY2FwdHVyZWQiX3MpOwogICAgICAgICAgICAgY29udGV4
dC5lbmFibGVQcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyNzcy
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9HUFVDYW52YXNDb250ZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChHUFVDYW52YXNDb250ZXh0KTsKIAotc3RkOjp1
bmlxdWVfcHRyPEdQVUNhbnZhc0NvbnRleHQ+IEdQVUNhbnZhc0NvbnRleHQ6OmNyZWF0ZShDYW52
YXNCYXNlJiBjYW52YXMpCitVbmlxdWVSZWY8R1BVQ2FudmFzQ29udGV4dD4gR1BVQ2FudmFzQ29u
dGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICBhdXRvIGNvbnRleHQgPSBz
dGQ6OnVuaXF1ZV9wdHI8R1BVQ2FudmFzQ29udGV4dD4obmV3IEdQVUNhbnZhc0NvbnRleHQoY2Fu
dmFzKSk7CisgICAgYXV0byBjb250ZXh0ID0gYWRvcHRSZWZlcmVuY2VNYWtpbmdVbmlxdWVSZWYo
Km5ldyBHUFVDYW52YXNDb250ZXh0KGNhbnZhcykpOwogICAgIGNvbnRleHQtPnN1c3BlbmRJZk5l
ZWRlZCgpOwogICAgIHJldHVybiBjb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuaAkocmV2aXNpb24gMjc3MjA5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHN0cnVjdCBXZWJHUFVTd2FwQ2hhaW5EZXNjcmlw
dG9yOwogY2xhc3MgR1BVQ2FudmFzQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoR1BVQ2FudmFz
Q29udGV4dCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxHUFVDYW52YXND
b250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAgIHN0YXRpYyBVbmlxdWVSZWY8R1BVQ2Fu
dmFzQ29udGV4dD4gY3JlYXRlKENhbnZhc0Jhc2UmKTsKIAogICAgIEhUTUxDYW52YXNFbGVtZW50
JiBjYW52YXMoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4oY2Fu
dmFzQmFzZSgpKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0
MjgyLDYgKzE0MjgyLDggQEAKIAkJQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJh
bnNhY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFuc2Fj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNjBEMENGRDc1MDA0
NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2luZG93RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzgyNDNFNzBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkM4NEY0M0QyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHROb25lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25l
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDODRGNDNFMjY0MUFDQzIwMEY1N0Mx
QyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDOEFFMzRDMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JvbGxhYmxlQXJlYS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3Jv
bGxhYmxlQXJlYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxhYmxl
QXJlYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhCODUzQzBFN0M3RjExMDBB
QjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2Nyb2xsYmFyVGhlbWVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIwMDk4LDYgKzIwMTAwLDggQEAKIAkJCQkzMTQwQzUyMjFGREYzMTg2MDBEMkE4NzMgLyogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oICovLAogCQkJCUJDRTA0OTBDMjYzQTJGMUMwMDlE
Q0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5oICovLAogCQkJCUJDRTA0
OTBFMjYzQTJGMUMwMDlEQ0JCOCAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy5p
ZGwgKi8sCisJCQkJQkM4NEY0M0UyNjQxQUNDMjAwRjU3QzFDIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lLmNwcCAqLywKKwkJCQlCQzg0RjQzRDI2NDFBQ0MyMDBGNTdDMUMgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dE5vbmUuaCAqLywKIAkJCQk3QzE5M0JBRDFGNUUwRUIzMDA4OEYzRTYg
LyogQ2FudmFzU2hhZG93U3R5bGVzLmlkbCAqLywKIAkJCQk3QzE5M0JCMjFGNUUwRUI2MDA4OEYz
RTYgLyogQ2FudmFzU3RhdGUuaWRsICovLAogCQkJCTQ5NDg0RkJGMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNTdHlsZS5jcHAgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFz
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1
ZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAKKyNpbmNsdWRlICJIVE1MQ2Fu
dmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBDU1NDYW52YXNWYWx1ZTo6fkNTU0NhbnZhc1ZhbHVlKCkKIHsKLSAgICBpZiAo
bV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPnJlbW92ZU9ic2VydmVyKG1fY2FudmFzT2Jz
ZXJ2ZXIpOworICAgIGlmIChtX2NhbnZhcykKKyAgICAgICAgbV9jYW52YXMtPnJlbW92ZU9ic2Vy
dmVyKG1fY2FudmFzT2JzZXJ2ZXIpOwogfQogCiBTdHJpbmcgQ1NTQ2FudmFzVmFsdWU6OmN1c3Rv
bUNTU1RleHQoKSBjb25zdApAQCAtNDEsNTMgKzQyLDUzIEBAIFN0cmluZyBDU1NDYW52YXNWYWx1
ZTo6Y3VzdG9tQ1NTVGV4dCgpIGMKICAgICByZXR1cm4gbWFrZVN0cmluZygiLXdlYmtpdC1jYW52
YXMoIiwgbV9uYW1lLCAnKScpOwogfQogCi12b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFu
Z2VkKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdl
ZFJlY3QpCit2b2lkIENTU0NhbnZhc1ZhbHVlOjpjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBj
b25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JiBjaGFuZ2VkUmVjdCkKIHsKICAgICBpZiAoIWNoYW5n
ZWRSZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGltYWdlQ2hhbmdlUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QoY2hhbmdlZFJlY3QudmFsdWUoKSk7Ci0gICAgZm9yIChhdXRvIGl0ID0g
Y2xpZW50cygpLmJlZ2luKCksIGVuZCA9IGNsaWVudHMoKS5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KQotICAgICAgICBpdC0+a2V5LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nhc3Q8V3JhcHBlZEltYWdl
UHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CisgICAgZm9yIChhdXRvIGNsaWVudCA6IGNs
aWVudHMoKS52YWx1ZXMoKSkKKyAgICAgICAgY2xpZW50LT5pbWFnZUNoYW5nZWQoc3RhdGljX2Nh
c3Q8V3JhcHBlZEltYWdlUHRyPih0aGlzKSwgJmltYWdlQ2hhbmdlUmVjdCk7CiB9CiAKLXZvaWQg
Q1NTQ2FudmFzVmFsdWU6OmNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQmKQordm9pZCBD
U1NDYW52YXNWYWx1ZTo6Y2FudmFzUmVzaXplZChDYW52YXNCYXNlJikKIHsKLSAgICBmb3IgKGF1
dG8gaXQgPSBjbGllbnRzKCkuYmVnaW4oKSwgZW5kID0gY2xpZW50cygpLmVuZCgpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgIGl0LT5rZXktPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFw
cGVkSW1hZ2VQdHI+KHRoaXMpKTsKKyAgICBmb3IgKGF1dG8gY2xpZW50IDogY2xpZW50cygpLnZh
bHVlcygpKQorICAgICAgICBjbGllbnQtPmltYWdlQ2hhbmdlZChzdGF0aWNfY2FzdDxXcmFwcGVk
SW1hZ2VQdHI+KHRoaXMpKTsKIH0KIAotdm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2FudmFzRGVzdHJv
eWVkKEhUTUxDYW52YXNFbGVtZW50JiBlbGVtZW50KQordm9pZCBDU1NDYW52YXNWYWx1ZTo6Y2Fu
dmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmIGNhbnZhcykKIHsKLSAgICBBU1NFUlRfVU5VU0VEKCZl
bGVtZW50LCAmZWxlbWVudCA9PSBtX2VsZW1lbnQpOwotICAgIG1fZWxlbWVudCA9IG51bGxwdHI7
CisgICAgQVNTRVJUX1VOVVNFRCgmY2FudmFzLCAmY2FudmFzID09IG1fY2FudmFzKTsKKyAgICBt
X2NhbnZhcyA9IG51bGxwdHI7CiB9CiAKIEZsb2F0U2l6ZSBDU1NDYW52YXNWYWx1ZTo6Zml4ZWRT
aXplKGNvbnN0IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIGlmIChIVE1MQ2FudmFz
RWxlbWVudCogZWx0ID0gZWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgpKSkKLSAgICAgICAgcmV0
dXJuIEZsb2F0U2l6ZShlbHQtPndpZHRoKCksIGVsdC0+aGVpZ2h0KCkpOworICAgIGlmIChhdXRv
KiBjYW52YXMgPSB0aGlzLT5jYW52YXMocmVuZGVyZXIuZG9jdW1lbnQoKSkpCisgICAgICAgIHJl
dHVybiBGbG9hdFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKTsKICAgICBy
ZXR1cm4geyB9OwogfQogCi1IVE1MQ2FudmFzRWxlbWVudCogQ1NTQ2FudmFzVmFsdWU6OmVsZW1l
bnQoRG9jdW1lbnQmIGRvY3VtZW50KQorQ2FudmFzQmFzZSogQ1NTQ2FudmFzVmFsdWU6OmNhbnZh
cyhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgIGlmICghbV9lbGVtZW50KSB7Ci0gICAgICAg
IG1fZWxlbWVudCA9IGRvY3VtZW50LmdldENTU0NhbnZhc0VsZW1lbnQobV9uYW1lKTsKLSAgICAg
ICAgaWYgKCFtX2VsZW1lbnQpCisgICAgaWYgKCFtX2NhbnZhcykgeworICAgICAgICBtX2NhbnZh
cyA9IGRvY3VtZW50LmdldENTU0NhbnZhc0VsZW1lbnQobV9uYW1lKTsKKyAgICAgICAgaWYgKCFt
X2NhbnZhcykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBtX2VsZW1lbnQt
PmFkZE9ic2VydmVyKG1fY2FudmFzT2JzZXJ2ZXIpOworICAgICAgICBtX2NhbnZhcy0+YWRkT2Jz
ZXJ2ZXIobV9jYW52YXNPYnNlcnZlcik7CiAgICAgfQotICAgIHJldHVybiBtX2VsZW1lbnQ7Cisg
ICAgcmV0dXJuIG1fY2FudmFzOwogfQogCiBSZWZQdHI8SW1hZ2U+IENTU0NhbnZhc1ZhbHVlOjpp
bWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXplJiAvKnNpemUqLykK
IHsKICAgICBBU1NFUlQoY2xpZW50cygpLmNvbnRhaW5zKCZyZW5kZXJlcikpOwotICAgIEhUTUxD
YW52YXNFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudChyZW5kZXJlci5kb2N1bWVudCgp
KTsKLSAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmJ1ZmZlcigpKQorICAgIGF1dG8qIGNh
bnZhcyA9IHRoaXMtPmNhbnZhcyhyZW5kZXJlci5kb2N1bWVudCgpKTsKKyAgICBpZiAoIWNhbnZh
cyB8fCAhY2FudmFzLT5idWZmZXIoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIGVsZW1lbnQtPmNvcGllZEltYWdlKCk7CisgICAgcmV0dXJuIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKTsKIH0KIAogYm9vbCBDU1NDYW52YXNWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NhbnZhc1Zh
bHVlJiBvdGhlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYW52YXNWYWx1ZS5oCShy
ZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZS5oIgogI2luY2x1ZGUgIkNhbnZhc0Jhc2UuaCIKLSNpbmNsdWRlICJIVE1MQ2Fu
dmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDUsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZpeGVkU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICBGbG9hdFNpemUgZml4ZWRTaXplKGNvbnN0IFJl
bmRlckVsZW1lbnQmKTsKIAotICAgIEhUTUxDYW52YXNFbGVtZW50KiBlbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50OyB9CisgICAgQ2FudmFzQmFzZSogY2FudmFzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW52YXM7IH0KIAogICAgIGJvb2wgaXNQZW5kaW5nKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2b2lkIGxvYWRTdWJpbWFnZXMoQ2FjaGVkUmVzb3VyY2VMb2FkZXImLCBj
b25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKSB7IH0KQEAgLTY4LDE4ICs2NywxNSBAQCBwdWJs
aWM6CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2Um
IGNhbnZhc0Jhc2UsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KSBmaW5h
bAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNh
bnZhc0Jhc2UpKTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNDaGFuZ2VkKGRvd25j
YXN0PEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSwgY2hhbmdlZFJlY3QpOworICAgICAg
ICAgICAgbV9vd25lclZhbHVlLmNhbnZhc0NoYW5nZWQoY2FudmFzQmFzZSwgY2hhbmdlZFJlY3Qp
OwogICAgICAgICB9CiAgICAgICAgIHZvaWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJiBjYW52
YXNCYXNlKSBmaW5hbAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8SFRNTENhbnZh
c0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNS
ZXNpemVkKGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihjYW52YXNCYXNlKSk7CisgICAgICAg
ICAgICBtX293bmVyVmFsdWUuY2FudmFzUmVzaXplZChjYW52YXNCYXNlKTsKICAgICAgICAgfQog
ICAgICAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXNCYXNlKSBmaW5h
bAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KGNh
bnZhc0Jhc2UpKTsKLSAgICAgICAgICAgIG1fb3duZXJWYWx1ZS5jYW52YXNEZXN0cm95ZWQoZG93
bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+KGNhbnZhc0Jhc2UpKTsKKyAgICAgICAgICAgIG1fb3du
ZXJWYWx1ZS5jYW52YXNEZXN0cm95ZWQoY2FudmFzQmFzZSk7CiAgICAgICAgIH0KIAogICAgICAg
ICBDU1NDYW52YXNWYWx1ZSYgbV9vd25lclZhbHVlOwpAQCAtOTMsMTggKzg5LDE4IEBAIHByaXZh
dGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgY2FudmFzQ2hhbmdlZChIVE1MQ2FudmFzRWxl
bWVudCYsIGNvbnN0IE9wdGlvbmFsPEZsb2F0UmVjdD4mIGNoYW5nZWRSZWN0KTsKLSAgICB2b2lk
IGNhbnZhc1Jlc2l6ZWQoSFRNTENhbnZhc0VsZW1lbnQmKTsKLSAgICB2b2lkIGNhbnZhc0Rlc3Ry
b3llZChIVE1MQ2FudmFzRWxlbWVudCYpOworICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52YXNC
YXNlJiwgY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYgY2hhbmdlZFJlY3QpOworICAgIHZvaWQg
Y2FudmFzUmVzaXplZChDYW52YXNCYXNlJik7CisgICAgdm9pZCBjYW52YXNEZXN0cm95ZWQoQ2Fu
dmFzQmFzZSYpOwogCi0gICAgSFRNTENhbnZhc0VsZW1lbnQqIGVsZW1lbnQoRG9jdW1lbnQmKTsK
KyAgICBDYW52YXNCYXNlKiBjYW52YXMoRG9jdW1lbnQmKTsKIAogICAgIENhbnZhc09ic2VydmVy
UHJveHkgbV9jYW52YXNPYnNlcnZlcjsKIAogICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBjYW52YXMu
CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICAvLyBUaGUgZG9jdW1lbnQgc3VwcGxpZXMgdGhlIGVs
ZW1lbnQgYW5kIG93bnMgaXQuCi0gICAgSFRNTENhbnZhc0VsZW1lbnQqIG1fZWxlbWVudCB7IG51
bGxwdHIgfTsKKyAgICAvLyBUaGUgZG9jdW1lbnQgc3VwcGxpZXMgdGhlIGNhbnZhcyBhbmQgb3du
cyBpdC4KKyAgICBDYW52YXNCYXNlKiBtX2NhbnZhcyB7IG51bGxwdHIgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVy
YXRvclZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZS5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQs
OCBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NOYW1lZEltYWdl
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYWludEltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDYW52
YXNCYXNlLmgiCiAjaW5jbHVkZSAiR2VuZXJhdGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJIVE1MQ2Fu
dmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKIApAQCAtNzQsOCArNzQsOCBAQCB2b2lkIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWU6OmFkZENsaWVudChSCiAgICAgbV9jbGllbnRzLmFkZCgmcmVuZGVyZXIp
OwogCiAgICAgaWYgKGlzPENTU0NhbnZhc1ZhbHVlPih0aGlzKSkgewotICAgICAgICBpZiAoSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4o
dGhpcyktPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhc0VsZW1lbnQpOworICAgICAgICBp
ZiAoYXV0byogY2FudmFzID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5jYW52YXMo
KSkKKyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2Fu
dmFzQ2xpZW50Tm9kZXMoKmNhbnZhcyk7CiAgICAgfQogfQogCkBAIC04Niw4ICs4Niw4IEBAIHZv
aWQgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZTo6cmVtb3ZlQ2xpZW4KICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGlzPENTU0NhbnZhc1ZhbHVlPih0aGlzKSkgewotICAgICAgICBpZiAoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhc0VsZW1lbnQgPSBkb3duY2FzdDxDU1NDYW52YXNWYWx1ZT4odGhp
cyktPmVsZW1lbnQoKSkKLSAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoKmNhbnZhc0VsZW1lbnQpOworICAgICAgICBpZiAo
YXV0byogY2FudmFzID0gZG93bmNhc3Q8Q1NTQ2FudmFzVmFsdWU+KHRoaXMpLT5jYW52YXMoKSkK
KyAgICAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2hhbmdlQ1NTQ2FudmFz
Q2xpZW50Tm9kZXMoKmNhbnZhcyk7CiAgICAgfQogCiAgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OTYsNyAr
Mzg5Niw3IEBAIHN0YXRpYyBib29sIGlzVmFsaWRQYWdlU2FtcGxlTG9jYXRpb24oRG8KIAogICAg
ICAgICAvLyBTa2lwIGA8Y2FudmFzPmAgYnV0IG9ubHkgaWYgdGhleSd2ZSBiZWVuIGRyYXduIGlu
dG8uIEd1ZXNzIHRoaXMgYnkgc2VlaW5nIGlmIHRoZXJlJ3MgYWxyZWFkeQogICAgICAgICAvLyBh
IGBDYW52YXNSZW5kZXJpbmdDb250ZXh0YCwgd2hpY2ggaXMgb25seSBjcmVhdGVkIGJ5IEphdmFT
Y3JpcHQuCi0gICAgICAgIGlmIChpczxIVE1MQ2FudmFzRWxlbWVudD4obm9kZSkgJiYgZG93bmNh
c3Q8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAg
aWYgKGlzPEhUTUxDYW52YXNFbGVtZW50Pihub2RlKSAmJiAhZG93bmNhc3Q8SFRNTENhbnZhc0Vs
ZW1lbnQ+KG5vZGUpLnJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAvLyBTa2lwIDNyZC1wYXJ0eSBgPGlmcmFtZT5gIGFzIHRo
ZSBjb250ZW50IGxpa2VseSB3b24ndCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgcGFnZS4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKICNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCIK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCkBAIC01MSw3ICs1Miw4IEBAIGNvbnN0IEludGVycG9sYXRpb25R
dWFsaXR5IGRlZmF1bHRJbnRlcnAKICNlbmRpZgogCiBDYW52YXNCYXNlOjpDYW52YXNCYXNlKElu
dFNpemUgc2l6ZSkKLSAgICA6IG1fc2l6ZShzaXplKQorICAgIDogbV9zaXplIHsgc2l6ZSB9Cisg
ICAgLCBtX2NvbnRleHQgeyBDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZTo6Y3JlYXRlKCp0aGlz
KSB9CiB7CiB9CiAKQEAgLTU5LDEzICs2MSwxNyBAQCBDYW52YXNCYXNlOjp+Q2FudmFzQmFzZSgp
CiB7CiAgICAgQVNTRVJUKG1fZGlkTm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKTsKICAg
ICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1faW1hZ2VCdWZm
ZXIpOworCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBtX2NvbnRleHQtPnJlc2V0KCk7CisjZW5k
aWYKKworICAgIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogfQogCiBHcmFwaGljc0NvbnRleHQqIENh
bnZhc0Jhc2U6OmRyYXdpbmdDb250ZXh0KCkgY29uc3QKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0g
cmVuZGVyaW5nQ29udGV4dCgpOwotICAgIGlmIChjb250ZXh0ICYmICFjb250ZXh0LT5pczJkKCkg
JiYgIWNvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKKyAgICBpZiAoIW1fY29udGV4dC0+aXMyZCgp
ICYmICFtX2NvbnRleHQtPmlzT2Zmc2NyZWVuMmQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICByZXR1cm4gYnVmZmVyKCkgPyAmbV9pbWFnZUJ1ZmZlci0+Y29udGV4dCgpIDogbnVs
bHB0cjsKQEAgLTgyLDcgKzg4LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBDYW52YXNCYXNlOjpleGlz
dGluZ0RyYQogSW1hZ2VCdWZmZXIqIENhbnZhc0Jhc2U6OmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
aWYgKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSkKLSAgICAgICAgY3JlYXRlSW1hZ2VCdWZmZXIo
KTsKKyAgICAgICAgY29uc3RfY2FzdDxDYW52YXNCYXNlKj4odGhpcyktPmNyZWF0ZUltYWdlQnVm
ZmVyKCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiB9CiAKQEAgLTk0LDggKzEw
MCw3IEBAIEFmZmluZVRyYW5zZm9ybSBDYW52YXNCYXNlOjpiYXNlVHJhbnNmb3IKIAogdm9pZCBD
YW52YXNCYXNlOjptYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpCiB7Ci0gICAgaWYgKGF1
dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpOwogfQogCiBzaXplX3QgQ2FudmFzQmFzZTo6bWVtb3J5Q29zdCgp
IGNvbnN0CkBAIC0xMDMsNyArMTA4LDcgQEAgc2l6ZV90IENhbnZhc0Jhc2U6Om1lbW9yeUNvc3Qo
KSBjb25zdAogICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkg
ZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bAogICAgIC8vIGFib3V0
IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LiBXZSBuZWVkIHRvIGhvbGQgYSBsb2Nr
IHRvIHByZXZlbnQgbV9pbWFnZUJ1ZmZlcgogICAgIC8vIGZyb20gYmVpbmcgY2hhbmdlZCB3aGls
ZSB3ZSBhY2Nlc3MgaXQuCi0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVy
QXNzaWdubWVudExvY2spOworICAgIExvY2tlciBsb2NrZXIgeyBtX2ltYWdlQnVmZmVyQXNzaWdu
bWVudExvY2sgfTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLT5tZW1vcnlDb3N0KCk7CkBAIC0xMTQsNyArMTE5LDcg
QEAgc2l6ZV90IENhbnZhc0Jhc2U6OmV4dGVybmFsTWVtb3J5Q29zdCgpIAogICAgIC8vIGV4dGVy
bmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhy
ZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsCiAgICAgLy8gYWJvdXQgd2hhdCBkYXRhIHdl
IGFjY2VzcyBoZXJlIGFuZCBob3cuIFdlIG5lZWQgdG8gaG9sZCBhIGxvY2sgdG8gcHJldmVudCBt
X2ltYWdlQnVmZmVyCiAgICAgLy8gZnJvbSBiZWluZyBjaGFuZ2VkIHdoaWxlIHdlIGFjY2VzcyBp
dC4KLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9j
ayk7CisgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9jayB9Owog
ICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXItPmV4dGVybmFsTWVtb3J5Q29zdCgpOwpAQCAtMTgwLDE1ICsxODUsMTkgQEAg
SGFzaFNldDxFbGVtZW50Kj4gQ2FudmFzQmFzZTo6Y3NzQ2FudmFzQwogCiBib29sIENhbnZhc0Jh
c2U6Omhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdAogewotICAgIGF1
dG8qIGNvbnRleHQgPSByZW5kZXJpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYg
Y29udGV4dC0+aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpOworICAgIHJldHVy
biBtX2NvbnRleHQtPmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKTsKK30KKwor
dm9pZCBDYW52YXNCYXNlOjpzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0PiYmIGNvbnRleHQpCit7CisgICAgbV9jb250ZXh0ID0gV1RGTW92ZShjb250
ZXh0KTsKIH0KIAotUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVyKSBjb25zdAorUmVmUHRyPEltYWdlQnVmZmVy
PiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
KQogewogICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gcmV0dXJuQnVmZmVyOwogICAgIHsKLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2ltYWdlQnVmZmVyQXNzaWdubWVudExvY2spOwor
ICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2NrIH07CiAg
ICAgICAgIG1fY29udGV4dFN0YXRlU2F2ZXIgPSBudWxscHRyOwogICAgICAgICByZXR1cm5CdWZm
ZXIgPSBzdGQ6OmV4Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAg
fQpAQCAtMjAwLDkgKzIwOSw4IEBAIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzQmFzZTo6c2V0
SW1hZ2UKICAgICBtX2ltYWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKICAgICBzX2FjdGl2
ZVBpeGVsTWVtb3J5ICs9IG1faW1hZ2VCdWZmZXJDb3N0IC0gcHJldmlvdXNNZW1vcnlDb3N0Owog
Ci0gICAgYXV0byogY29udGV4dCA9IHJlbmRlcmluZ0NvbnRleHQoKTsKLSAgICBpZiAoY29udGV4
dCAmJiBtX2ltYWdlQnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVmZmVy
Q29zdCkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52YXNN
ZW1vcnkoKmNvbnRleHQpOworICAgIGlmICghbV9jb250ZXh0LT5pc05vbmUoKSAmJiBtX2ltYWdl
QnVmZmVyICYmIHByZXZpb3VzTWVtb3J5Q29zdCAhPSBtX2ltYWdlQnVmZmVyQ29zdCkKKyAgICAg
ICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkobV9jb250
ZXh0LmdldCgpKTsKIAogICAgIGlmIChtX2ltYWdlQnVmZmVyKSB7CiAgICAgICAgIG1faW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyh0cnVlKTsKQEAgLTIx
Nyw2ICsyMjUsMjAgQEAgUmVmUHRyPEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZQog
ICAgIHJldHVybiByZXR1cm5CdWZmZXI7CiB9CiAKK3ZvaWQgQ2FudmFzQmFzZTo6ZGVzdHJveUlt
YWdlQnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IG9sZEJ1ZmZlcjsKKworICAg
IHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1faW1hZ2VCdWZmZXJBc3NpZ25tZW50TG9jayB9
OworICAgICAgICBtX2NvbnRleHRTdGF0ZVNhdmVyID0gbnVsbHB0cjsKKyAgICAgICAgb2xkQnVm
ZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBudWxscHRyKTsKKyAgICB9CisgICAg
CisgICAgc19hY3RpdmVQaXhlbE1lbW9yeSAtPSBtX2ltYWdlQnVmZmVyQ29zdDsKKyAgICBtX2lt
YWdlQnVmZmVyQ29zdCA9IDA7Cit9CisKIHNpemVfdCBDYW52YXNCYXNlOjphY3RpdmVQaXhlbE1l
bW9yeSgpCiB7CiAgICAgcmV0dXJuIHNfYWN0aXZlUGl4ZWxNZW1vcnkubG9hZCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9DYW52YXNCYXNlLmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvQ2FudmFzQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1R5cGVDYXN0cy5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC03MCw3ICs3MSw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRTaXpl
JiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBJbWFnZUJ1ZmZlciogYnVm
ZmVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3Q7CiAKICAgICB2b2lkIG1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxlKCk7CkBA
IC04NSw3ICs4NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFNlY3VyaXR5T3JpZ2luKiBzZWN1
cml0eU9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gY2FudmFz
QmFzZVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgIH0KIAotICAgIHZpcnR1YWwgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICBjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0LmdldCgpOyB9CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgcmVuZGVyaW5n
Q29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCiAgICAgdm9pZCBhZGRPYnNl
cnZlcihDYW52YXNPYnNlcnZlciYpOwogICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoQ2FudmFzT2Jz
ZXJ2ZXImKTsKQEAgLTEwMCw4ICsxMDEsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+JikgPSAwOwogCi0gICAgdmlydHVhbCBJ
bWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQ29w
aWVkSW1hZ2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbWFnZSogY29waWVkSW1hZ2UoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSA9IDA7CiAKICAgICBib29s
IGhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdDsKIApAQCAtMTEyLDIw
ICsxMTMsMjUgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CiAKLSAgICBSZWZQdHI8SW1hZ2VCdWZm
ZXI+IHNldEltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4mJikgY29uc3Q7CisgICAgdm9p
ZCBzZXRSZW5kZXJpbmdDb250ZXh0KFVuaXF1ZVJlZjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiYm
KTsKKworICAgIFJlZlB0cjxJbWFnZUJ1ZmZlcj4gc2V0SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdl
QnVmZmVyPiYmKTsKKyAgICB2b2lkIGRlc3Ryb3lJbWFnZUJ1ZmZlcigpOwogICAgIHZpcnR1YWwg
Ym9vbCBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHN0YXRpYyBzaXplX3QgYWN0aXZlUGl4ZWxNZW1vcnkoKTsKIAogICAgIHZvaWQgcmVzZXRHcmFw
aGljc0NvbnRleHRTdGF0ZSgpIGNvbnN0OwogCiBwcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFn
ZUJ1ZmZlcigpIHsgfQogCi0gICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRTaXpl
IG1fc2l6ZTsKICAgICBtdXRhYmxlIExvY2sgbV9pbWFnZUJ1ZmZlckFzc2lnbm1lbnRMb2NrOwot
ICAgIG11dGFibGUgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOwotICAgIG11dGFi
bGUgc2l6ZV90IG1faW1hZ2VCdWZmZXJDb3N0IHsgMCB9OwotICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXI+IG1fY29udGV4dFN0YXRlU2F2ZXI7Cisg
ICAgUmVmUHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyOworICAgIHNpemVfdCBtX2ltYWdl
QnVmZmVyQ29zdCB7IDAgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlcj4gbV9jb250ZXh0U3RhdGVTYXZlcjsKKworICAgIFVuaXF1ZVJlZjxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CiAKICAgICBib29sIG1fb3JpZ2luQ2xlYW4geyB0cnVl
IH07CiAjaWYgQVNTRVJUX0VOQUJMRUQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50Q2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNDUgKzQ4LDQyIEBA
IEN1c3RvbVBhaW50Q2FudmFzOjpDdXN0b21QYWludENhbnZhcyhTY3IKIEN1c3RvbVBhaW50Q2Fu
dmFzOjp+Q3VzdG9tUGFpbnRDYW52YXMoKQogewogICAgIG5vdGlmeU9ic2VydmVyc0NhbnZhc0Rl
c3Ryb3llZCgpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29l
cyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0
cik7CiB9CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IEN1
c3RvbVBhaW50Q2FudmFzOjpnZXRDb250ZXh0KCkKIHsKLSAgICBpZiAobV9jb250ZXh0KQotICAg
ICAgICByZXR1cm4geyBSZWZQdHI8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KSB9IH07CisgICAgaWYgKCFyZW5k
ZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJl
bmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJl
bmRlcmluZ0NvbnRleHQoKSkgfSB9OwogCi0gICAgbV9jb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdD
b250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7Ci0gICAgZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcodHJ1ZSk7CisgICAg
YXV0byBjb250ZXh0ID0gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcyk7Cisg
ICAgY29udGV4dC0+c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyh0cnVlKTsKKyAgICBzZXRSZW5k
ZXJpbmdDb250ZXh0KFdURk1vdmUoY29udGV4dCkpOwogCi0gICAgcmV0dXJuIHsgUmVmUHRyPFBh
aW50UmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxQYWludFJlbmRlcmluZ0NvbnRleHQy
RD4oKm1fY29udGV4dCkgfSB9OworICAgIHJldHVybiB7IFJlZlB0cjxQYWludFJlbmRlcmluZ0Nv
bnRleHQyRD4geyAmZG93bmNhc3Q8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkgfSB9OwogfQogCi12b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpyZXBsYXlEaXNwbGF5
TGlzdChHcmFwaGljc0NvbnRleHQqIGN0eCkgY29uc3QKK3ZvaWQgQ3VzdG9tUGFpbnRDYW52YXM6
OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgY3R4KQogewogICAgIEFTU0VSVCgh
bV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWln
aHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFVzaW5nIGFuIGludGVybWVk
aWF0ZSBidWZmZXIgaXMgbm90IG5lZWRlZCBpZiB0aGVyZSBhcmUgbm8gY29tcG9zaXRlIG9wZXJh
dGlvbnMuCi0gICAgYXV0byBjbGlwQm91bmRzID0gY3R4LT5jbGlwQm91bmRzKCk7CisgICAgYXV0
byBjbGlwQm91bmRzID0gY3R4LmNsaXBCb3VuZHMoKTsKIAotICAgIGF1dG8gaW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjbGlwQm91bmRzLnNpemUoKSwgKmN0eCk7
CisgICAgYXV0byBpbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNs
aXBCb3VuZHMuc2l6ZSgpLCBjdHgpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSAmaW1hZ2UtPmNvbnRleHQoKTsK
ICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0LT50cmFuc2xhdGUoLWNsaXBCb3VuZHMu
bG9jYXRpb24oKSk7Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0Nv
bnRleHQgPSBudWxscHRyOwogCi0gICAgY3R4LT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBjbGlw
Qm91bmRzKTsKKyAgICBjdHguZHJhd0ltYWdlQnVmZmVyKCppbWFnZSwgY2xpcEJvdW5kcyk7CiB9
CiAKLUltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAorSW1hZ2Uq
IEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgQVNTRVJUKCFtX2Rlc3Rp
bmF0aW9uR3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQpA
QCAtOTcsMTUgKzk0LDE0IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2Uo
KSAKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3ND
b250ZXh0ID0gJm1fY29waWVkQnVmZmVyLT5jb250ZXh0KCk7Ci0gICAgaWYgKG1fY29udGV4dCkK
LSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAg
IHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAg
IG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCiAgICAgbV9jb3BpZWRJ
bWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsK
IH0KIAotdm9pZCBDdXN0b21QYWludENhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2
b2lkIEN1c3RvbVBhaW50Q2FudmFzOjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGll
ZEltYWdlID0gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTcgKzU1LDE2IEBAIHB1YmxpYzoK
IAogICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4+IGdldENv
bnRleHQoKTsKIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBHcmFwaGljc0Nv
bnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAgICAgR3JhcGhpY3NDb250ZXh0
KiBleGlzdGluZ0RyYXdpbmdDb250ZXh0KCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGRpZERy
YXcoY29uc3QgT3B0aW9uYWw8RmxvYXRSZWN0PiYpIGZpbmFsIHsgfQogCiAgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBmaW5hbCB7IEFTU0VSVChtX2Rlc3RpbmF0aW9u
R3JhcGhpY3NDb250ZXh0ICYmIG1fY29waWVkQnVmZmVyKTsgcmV0dXJuIG1fY29waWVkQnVmZmVy
LT5iYXNlVHJhbnNmb3JtKCk7IH0KLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSog
Y29waWVkSW1hZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsK
IAotICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0KikgY29uc3Q7Cisg
ICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIHVzaW5n
IFJlZkNvdW50ZWQ6OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKQEAgLTc3LDcg
Kzc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVmQ2FudmFzQmFzZSgpIGZpbmFsIHsgZGVy
ZWYoKTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNhbnZhc0Jhc2VTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ29udGV4dERlc3RydWN0aW9uT2Jz
ZXJ2ZXI6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKICAgICBtdXRhYmxlIEdyYXBoaWNz
Q29udGV4dCogbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAgICAgbXV0
YWJsZSBSZWZQdHI8SW1hZ2VCdWZmZXI+IG1fY29waWVkQnVmZmVyOwogICAgIG11dGFibGUgUmVm
UHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsOSArMTU2LDYg
QEAgSFRNTENhbnZhc0VsZW1lbnQ6On5IVE1MQ2FudmFzRWxlbWVudCgpCiAgICAgLy8gYXZvaWRl
ZCBpbiBkZXN0cnVjdG9ycywgYnV0IHdvcmtzIGFzIGxvbmcgYXMgaXQncyBkb25lIGJlZm9yZSBI
VE1MQ2FudmFzRWxlbWVudCBkZXN0cnVjdHMgY29tcGxldGVseS4KICAgICBub3RpZnlPYnNlcnZl
cnNDYW52YXNEZXN0cm95ZWQoKTsKICAgICBkb2N1bWVudCgpLmNsZWFyQ2FudmFzUHJlcGFyYXRp
b24oKnRoaXMpOwotCi0gICAgbV9jb250ZXh0ID0gbnVsbHB0cjsgLy8gRW5zdXJlIHRoaXMgZ29l
cyBhd2F5IGJlZm9yZSB0aGUgSW1hZ2VCdWZmZXIuCi0gICAgc2V0SW1hZ2VCdWZmZXIobnVsbHB0
cik7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlKQpAQCAtMjM5LDUwICsy
MzYsNTAgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0TWF4UGl4ZWxNZW1vcgogCiBFeGNl
cHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gSFRNTENhbnZhc0VsZW1lbnQ6Omdl
dENvbnRleHQoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIGNvbnN0IFN0cmluZyYgY29udGV4
dElkLCBWZWN0b3I8SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj4mJiBhcmd1bWVudHMpCiB7Ci0g
ICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1BsYWNlaG9sZGVy
KCkpCisgICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYg
KHJlbmRlcmluZ0NvbnRleHQoKS5pc1BsYWNlaG9sZGVyKCkpCiAgICAgICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgICAgICBpZiAobV9jb250ZXh0
LT5pczJkKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpIHsKICAg
ICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAg
ICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+IHsgJmRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkgfSB9OworICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0g
fTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4geyAmZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0
KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fY29udGV4dC0+aXNCaXRtYXBS
ZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBSZW5k
ZXJlcigpKSB7CiAgICAgICAgICAgICBpZiAoIWlzQml0bWFwUmVuZGVyZXJUeXBlKGNvbnRleHRJ
ZCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsg
V1RGOjpudWxsb3B0IH07Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpIH0gfTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7
IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICAgICAgICAg
fQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICBpZiAobV9jb250ZXh0LT5pc1dlYkdMKCkp
IHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKICAgICAgICAg
ICAgIGlmICghaXNXZWJHTFR5cGUoY29udGV4dElkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
T3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07CiAgICAgICAgICAgICBhdXRvIHZlcnNp
b24gPSB0b1dlYkdMVmVyc2lvbihjb250ZXh0SWQpOwotICAgICAgICAgICAgaWYgKHZlcnNpb24g
PT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIW1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxv
cHQgfTsKLSAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lvbjo6V2ViR0wxICYm
IG1fY29udGV4dC0+aXNXZWJHTDEoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8
UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKLSAgICAgICAgICAgIGlmIChpczxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVy
biBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9Owor
ICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gV2ViR0xWZXJzaW9uOjpXZWJHTDEgJiYgIXJlbmRl
cmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RG
OjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uICE9IFdlYkdMVmVyc2lvbjo6
V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJl
bmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdF
QkdMMikKLSAgICAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9j
b250ZXh0KSk7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4g
eyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVy
aW5nQ29udGV4dD4oKm1fY29udGV4dCkgfSB9OworICAgICAgICAgICAgQVNTRVJUKGlzPFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpOworICAgICAgICAgICAgcmV0
dXJuIHsgeyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSB9IH0gfTsKICNlbmRpZgogICAg
ICAgICB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShXRUJHUFUpCi0gICAgICAgIGlmIChtX2NvbnRl
eHQtPmlzV2ViR1BVKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdQ
VSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlzV2ViR1BVVHlwZShjb250ZXh0SWQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9w
dCB9OwotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgUmVm
UHRyPEdQVUNhbnZhc0NvbnRleHQ+IHsgJmRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KCptX2Nv
bnRleHQpIH0gfTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVsbG9wdCB9IH07
CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXNDb250ZXh0PiB7ICZkb3du
Y2FzdDxHUFVDYW52YXNDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAg
ICB9CiAjZW5kaWYKIAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0IH07CisgICAgICAg
IHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKICAgICB9CiAKICAgICBpZiAoaXMyZFR5cGUo
Y29udGV4dElkKSkgewpAQCAtMjkyLDggKzI4OSw4IEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJl
bmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRvIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0
MmQoY29udGV4dElkLCBXVEZNb3ZlKHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVs
bG9wdCB9OwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQ
dHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICAgICBp
ZiAoaXNCaXRtYXBSZW5kZXJlclR5cGUoY29udGV4dElkKSkgewpAQCAtMzAzLDggKzMwMCw4IEBA
IEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+PiAKIAogICAgICAgICBhdXRv
IGNvbnRleHQgPSBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIoY29udGV4dElkLCBXVEZNb3Zl
KHNldHRpbmdzKSk7CiAgICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBP
cHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFdURjo6bnVsbG9wdCB9OwotICAgICAgICByZXR1
cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8SW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51
bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ+IHsgY29udGV4dCB9IH0gfTsKICAgICB9CiAKICNpZiBFTkFCTEUoV0VCR0wpCkBA
IC0zMTUsMTMgKzMxMiwxMyBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0
Pj4gCiAKICAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdlYkdMKHRvV2ViR0xW
ZXJzaW9uKGNvbnRleHRJZCksIFdURk1vdmUoYXR0cmlidXRlcykpOwogICAgICAgICBpZiAoIWNv
bnRleHQpCi0gICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBX
VEY6Om51bGxvcHQgfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsK
IAogICAgICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkpCi0gICAg
ICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29udGV4dD4geyBSZWZQdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCpjb250
ZXh0KSB9IH07CisgICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfSB9
OwogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgIEFTU0VSVChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0PigqY29udGV4dCkpOwotICAgICAgICByZXR1cm4gT3B0aW9uYWw8UmVuZGVyaW5nQ29u
dGV4dD4geyBSZWZQdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4oKmNvbnRleHQpIH0gfTsKKyAgICAgICAgcmV0dXJuIHsgeyBSZWZQ
dHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4oKmNvbnRleHQpIH0gfSB9OwogI2VuZGlmCiAgICAgfQogI2VuZGlmCkBAIC0zMzAsMTIg
KzMyNywxMiBAQCBFeGNlcHRpb25PcjxPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0Pj4gCiAgICAg
aWYgKGlzV2ViR1BVVHlwZShjb250ZXh0SWQpKSB7CiAgICAgICAgIGF1dG8gY29udGV4dCA9IGNy
ZWF0ZUNvbnRleHRXZWJHUFUoY29udGV4dElkKTsKICAgICAgICAgaWYgKCFjb250ZXh0KQotICAg
ICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+IHsgV1RGOjpudWxsb3B0
IH07Ci0gICAgICAgIHJldHVybiBPcHRpb25hbDxSZW5kZXJpbmdDb250ZXh0PiB7IFJlZlB0cjxH
UFVDYW52YXNDb250ZXh0PiB7IGNvbnRleHQgfSB9OworICAgICAgICAgICAgcmV0dXJuIHsgeyBX
VEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxHUFVDYW52YXNDb250
ZXh0PiB7IGNvbnRleHQgfSB9IH07CiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4gT3B0aW9u
YWw8UmVuZGVyaW5nQ29udGV4dD4geyBXVEY6Om51bGxvcHQgfTsKKyAgICByZXR1cm4geyB7IFdU
Rjo6bnVsbG9wdCB9IH07CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNF
bGVtZW50OjpnZXRDb250ZXh0KGNvbnN0IFN0cmluZyYgdHlwZSkKQEAgLTM2Nyw3ICszNjQsNyBA
QCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3Ry
aW5nJiB0eXBlLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmIHNldHRpbmdzKQog
ewogICAgIEFTU0VSVF9VTlVTRUQoSFRNTENhbnZhc0VsZW1lbnQ6OmlzMmRUeXBlKHR5cGUpLCB0
eXBlKTsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRl
eHQoKS5pc05vbmUoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIG1vcmUgcGl4
ZWwgbWVtb3J5IHRoYW4gdGhlIHN5c3RlbSBjYW4gc3VwcG9ydC4KICAgICBzaXplX3QgcmVxdWVz
dGVkUGl4ZWxNZW1vcnkgPSA0ICogd2lkdGgoKSAqIGhlaWdodCgpOwpAQCAtMzgwLDI2ICszNzcs
MjcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncyksIGRvY3VtZW50KCkuaW5R
dWlya3NNb2RlKCkpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGluZ3MpLCBkb2N1bWVudCgpLmluUXVp
cmtzTW9kZSgpKSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQog
ICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxh
eWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExh
eWVyQ29tcG9zaXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3du
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAK
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQy
ZChjb25zdCBTdHJpbmcmIHR5cGUsIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYg
c2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5
cGUodHlwZSksIHR5cGUpOwogCi0gICAgaWYgKG1fY29udGV4dCAmJiAhbV9jb250ZXh0LT5pczJk
KCkpCisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUNvbnRleHQyZCh0eXBlLCBXVEZNb3ZlKHNldHRpbmdzKSk7CisKKyAgICBpZiAoIXJl
bmRlcmluZ0NvbnRleHQoKS5pczJkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
aWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0MmQodHlwZSwgV1RG
TW92ZShzZXR0aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiAjaWYgRU5BQkxF
KFdFQkdMKQpAQCAtNDQ4LDcgKzQ0Niw3IEBAIEdyYXBoaWNzQ29udGV4dEdMV2ViR0xWZXJzaW9u
IEhUTUxDYW52YXMKIAogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUNvbnRleHRXZWJHTChXZWJHTFZlcnNpb24gdHlwZSwgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyYmIGF0dHJzKQogewotICAgIEFTU0VSVCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQo
cmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKIAogICAgIGlmICghc2hvdWxkRW5hYmxlV2Vi
R0woZG9jdW1lbnQoKS5zZXR0aW5ncygpKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00
NjUsMjAgKzQ2MywyNCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxl
CiAKICAgICAvLyBUT0RPKFdFQlhSKTogZW5zdXJlIHRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgaW4g
YSBjb21wYXRpYmxlIGdyYXBoaWNzCiAgICAgLy8gYWRhcHRlciB3aGVuIHRoZXJlIGlzIGFuIGFj
dGl2ZSBpbW1lcnNpdmUgZGV2aWNlLgotICAgIG1fY29udGV4dCA9IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOwotICAgIGlmIChtX2NvbnRleHQp
IHsKLSAgICAgICAgLy8gVGhpcyBuZXcgY29udGV4dCBuZWVkcyB0byBiZSBvYnNlcnZlZCBieSB0
aGUgRG9jdW1lbnQsIGluIG9yZGVyCi0gICAgICAgIC8vIGZvciBpdCB0byBiZSBjb3JyZWN0bHkg
cHJlcGFyZWRGb3JSZW5kZXJpbmcgYmVmb3JlIGl0IGlzIGNvbXBvc2l0ZWQuCi0gICAgICAgIGFk
ZE9ic2VydmVyKGRvY3VtZW50KCkpOworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHR5cGUpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBzZXRSZW5kZXJpbmdDb250ZXh0KG1h
a2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0cihXVEZNb3ZlKGNvbnRleHQpKSk7CisKKyAg
ICAvLyBUaGlzIG5ldyBjb250ZXh0IG5lZWRzIHRvIGJlIG9ic2VydmVkIGJ5IHRoZSBEb2N1bWVu
dCwgaW4gb3JkZXIKKyAgICAvLyBmb3IgaXQgdG8gYmUgY29ycmVjdGx5IHByZXBhcmVkRm9yUmVu
ZGVyaW5nIGJlZm9yZSBpdCBpcyBjb21wb3NpdGVkLgorICAgIGFkZE9ic2VydmVyKGRvY3VtZW50
KCkpOworCisgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCisgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJl
IGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUg
Q2FudmFzLgotICAgICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAj
aWYgRU5BQkxFKFdFQlhSKQotICAgICAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8fCBk
b3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpLT5pc1hS
Q29tcGF0aWJsZSgpKTsKKyAgICBBU1NFUlQoIWF0dHJzLnhyQ29tcGF0aWJsZSB8fCBkb3duY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpLmlzWFJDb21w
YXRpYmxlKCkpOwogI2VuZGlmCi0gICAgfQogCi0gICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5kZXJpbmdDb250ZXh0KCkpOwogfQogCiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dFdl
YkdMKFdlYkdMVmVyc2lvbiB0eXBlLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgYXR0cnMpCkBA
IC00ODYsMjEgKzQ4OCwyMCBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBIVE1MQ2FudmFz
RWxlCiAgICAgaWYgKCFzaG91bGRFbmFibGVXZWJHTChkb2N1bWVudCgpLnNldHRpbmdzKCkpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmlzV2ViR0woKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCisgICAgICAgIHJldHVybiBjcmVh
dGVDb250ZXh0V2ViR0wodHlwZSwgV1RGTW92ZShhdHRycykpOwogCi0gICAgICAgIC8vIFRoZSBw
aHJhc2luZyBvZiB0aGVzZSBjaGVja3MgYXZvaWRzIGNvbXBpbGUtdGltZSBndWFyZHMgZm9yIFdl
YkdMMiBzdXBwb3J0LgotICAgICAgICBpZiAodHlwZSA9PSBXZWJHTFZlcnNpb246OldlYkdMMSAm
JiAhbV9jb250ZXh0LT5pc1dlYkdMMSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICBpZiAodHlwZSAhPSBXZWJHTFZlcnNpb246OldlYkdMMSAmJiBtX2Nv
bnRleHQtPmlzV2ViR0wxKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Cisg
ICAgLy8gVGhlIHBocmFzaW5nIG9mIHRoZXNlIGNoZWNrcyBhdm9pZHMgY29tcGlsZS10aW1lIGd1
YXJkcyBmb3IgV2ViR0wyIHN1cHBvcnQuCisgICAgaWYgKHR5cGUgPT0gV2ViR0xWZXJzaW9uOjpX
ZWJHTDEgJiYgIXJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gY3JlYXRlQ29u
dGV4dFdlYkdMKHR5cGUsIFdURk1vdmUoYXR0cnMpKTsKLSAgICByZXR1cm4gJmRvd25jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCptX2NvbnRleHQpOworICAgIGlmICh0eXBlICE9IFdl
YkdMVmVyc2lvbjo6V2ViR0wxICYmIHJlbmRlcmluZ0NvbnRleHQoKS5pc1dlYkdMMSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZT4ocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKQEAgLTUxNSwxOCArNTE2LDE3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Omlz
V2ViR1BVVHlwZShjb24KIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVh
dGVDb250ZXh0V2ViR1BVKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBBU1NFUlRfVU5VU0VE
KHR5cGUsIEhUTUxDYW52YXNFbGVtZW50Ojppc1dlYkdQVVR5cGUodHlwZSkpOwotICAgIEFTU0VS
VCghbV9jb250ZXh0KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsK
IAogICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygpLndlYkdQVUVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvbnRleHQgPSBHUFVDYW52YXNDb250ZXh0Ojpj
cmVhdGUoKnRoaXMpOwotICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gTmVlZCB0byBt
YWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQg
Zm9yIHRoZSBDYW52YXMuCi0gICAgICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRp
b24oKTsKLSAgICB9CisgICAgc2V0UmVuZGVyaW5nQ29udGV4dChHUFVDYW52YXNDb250ZXh0Ojpj
cmVhdGUoKnRoaXMpKTsKKworICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIg
YW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgorICAgIGlu
dmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIAotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHUFVDYW52YXNDb250ZXh0Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gJmRv
d25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIEdQVUNh
bnZhc0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0V2ViR1BVKGNvbnN0IFN0
cmluZyYgdHlwZSkKQEAgLTUzNiwxMiArNTM2LDEzIEBAIEdQVUNhbnZhc0NvbnRleHQqIEhUTUxD
YW52YXNFbGVtZW50OjpnZXQKICAgICBpZiAoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS53ZWJHUFVF
bmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKG1fY29udGV4dCAm
JiAhbV9jb250ZXh0LT5pc1dlYkdQVSgpKQorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNO
b25lKCkpCisgICAgICAgIHJldHVybiBjcmVhdGVDb250ZXh0V2ViR1BVKHR5cGUpOworCisgICAg
aWYgKCFyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHUFUoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnRleHRX
ZWJHUFUodHlwZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQVUNhbnZhc0NvbnRleHQqPiht
X2NvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiAmZG93bmNhc3Q8R1BVQ2FudmFzQ29udGV4dD4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCkBAIC01
NTQsMjQgKzU1NSwyOSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojppc0JpdG1hcFJlbmRlcmVy
CiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVD
b250ZXh0Qml0bWFwUmVuZGVyZXIoY29uc3QgU3RyaW5nJiB0eXBlLCBJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQogewogICAgIEFTU0VSVF9VTlVTRUQodHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQml0bWFwUmVuZGVyZXJUeXBlKHR5cGUpKTsKLSAgICBB
U1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUo
KSk7CiAKLSAgICBtX2NvbnRleHQgPSBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZSgqdGhpcywgV1RGTW92ZShzZXR0aW5ncykpOworICAgIHNldFJlbmRlcmluZ0NvbnRleHQoSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUoc2V0dGluZ3Mp
KSk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIC8vIE5l
ZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBj
cmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuICZkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSk7CiB9CiAKIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHRC
aXRtYXBSZW5kZXJlcihjb25zdCBTdHJpbmcmIHR5cGUsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCiB7CiAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudDo6aXNCaXRtYXBSZW5kZXJlclR5cGUodHlwZSkpOwotICAgIGlmICghbV9j
b250ZXh0KQorICAgIAorICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVDb250ZXh0Qml0bWFwUmVuZGVyZXIodHlwZSwgV1RGTW92ZShzZXR0
aW5ncykpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQqPihtX2NvbnRleHQuZ2V0KCkpOworICAgIAorICAgIGlmICghcmVuZGVyaW5nQ29udGV4dCgp
LmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gJmRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4
dCgpKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGlkRHJhdyhjb25zdCBPcHRpb25h
bDxGbG9hdFJlY3Q+JiByZWN0KQpAQCAtNjE1LDE0ICs2MjEsMTUgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6cmVzZXQoKQogICAgIGludCBoID0gbGltaXRUb09ubHlIVE1MTm9uTmVnYXRpdmUo
YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihoZWlnaHRBdHRyKSwgZGVmYXVsdEhlaWdo
dCk7CiAKICAgICByZXNldEdyYXBoaWNzQ29udGV4dFN0YXRlKCk7Ci0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXNldCgpOworICAgIGlmIChp
czxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkpCisgICAgICAg
IGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5y
ZXNldCgpOwogCiAgICAgSW50U2l6ZSBvbGRTaXplID0gc2l6ZSgpOwogICAgIEludFNpemUgbmV3
U2l6ZSh3LCBoKTsKKwogICAgIC8vIElmIHRoZSBzaXplIG9mIGFuIGV4aXN0aW5nIGJ1ZmZlciBt
YXRjaGVzLCB3ZSBjYW4ganVzdCBjbGVhciBpdCBpbnN0ZWFkIG9mIHJlYWxsb2NhdGluZy4KICAg
ICAvLyBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGRvbmUgZm9yIDJEIGNhbnZhc2VzIGZvciBu
b3cuCi0gICAgaWYgKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyICYmIG9sZFNpemUgPT0gbmV3U2l6
ZSAmJiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkgJiYgYnVmZmVyKCkgJiYgbV9jb250
ZXh0LT5jb2xvclNwYWNlKCkgPT0gYnVmZmVyKCktPmNvbG9yU3BhY2UoKSAmJiBtX2NvbnRleHQt
PnBpeGVsRm9ybWF0KCkgPT0gYnVmZmVyKCktPnBpeGVsRm9ybWF0KCkpIHsKKyAgICBpZiAobV9o
YXNDcmVhdGVkSW1hZ2VCdWZmZXIgJiYgb2xkU2l6ZSA9PSBuZXdTaXplICYmIHJlbmRlcmluZ0Nv
bnRleHQoKS5pczJkKCkgJiYgYnVmZmVyKCkgJiYgcmVuZGVyaW5nQ29udGV4dCgpLmNvbG9yU3Bh
Y2UoKSA9PSBidWZmZXIoKS0+Y29sb3JTcGFjZSgpICYmIHJlbmRlcmluZ0NvbnRleHQoKS5waXhl
bEZvcm1hdCgpID09IGJ1ZmZlcigpLT5waXhlbEZvcm1hdCgpKSB7CiAgICAgICAgIGlmICghbV9k
aWRDbGVhckltYWdlQnVmZmVyKQogICAgICAgICAgICAgY2xlYXJJbWFnZUJ1ZmZlcigpOwogICAg
ICAgICByZXR1cm47CkBAIC02MzEsNyArNjM4LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
cmVzZXQoKQogICAgIHNldFN1cmZhY2VTaXplKG5ld1NpemUpOwogCiAgICAgaWYgKGlzR1BVQmFz
ZWQoKSAmJiBvbGRTaXplICE9IHNpemUoKSkKLSAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52
YXNSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KS5yZXNoYXBlKHdpZHRoKCksIGhlaWdodCgp
KTsKKyAgICAgICAgZG93bmNhc3Q8R1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0PihyZW5k
ZXJpbmdDb250ZXh0KCkpLnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogCiAgICAgYXV0byBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCk7CiAgICAgaWYgKGlzPFJlbmRlckhUTUxDYW52YXM+
KHJlbmRlcmVyKSkgewpAQCAtNjUwLDEzICs2NTcsMTIgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cmVzZXQoKQogCiBib29sIEhUTUxDYW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzQnVm
ZmVyKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2NvbnRleHQtPmlzMmQoKSB8fCBtX2Nv
bnRleHQtPmlzQml0bWFwUmVuZGVyZXIoKSkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlz
MmQoKSB8fCByZW5kZXJpbmdDb250ZXh0KCkuaXNCaXRtYXBSZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICNlbmRpZgogCi0gICAgaWYgKCFtX2NvbnRleHQtPmlzQWNjZWxlcmF0ZWQo
KSkKKyAgICBpZiAoIXJlbmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlbmRlckJveCgpICYmIHJlbmRlckJveCgpLT5oYXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCkBAIC02NjgsNDIgKzY3NCwzNSBAQCBib29sIEhUTUxD
YW52YXNFbGVtZW50OjpwYWludHNJbnRvQ2FudmFzCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgcikKIHsK
LSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyQWNjdW11bGF0ZWRE
aXJ0eVJlY3QoKTsKKyAgICByZW5kZXJpbmdDb250ZXh0KCkuY2xlYXJBY2N1bXVsYXRlZERpcnR5
UmVjdCgpOwogCiAgICAgaWYgKCFjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkgewotICAgICAg
ICBib29sIHNob3VsZFBhaW50ID0gdHJ1ZTsKLQotICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0g
ICAgICAgICAgICBzaG91bGRQYWludCA9IHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSB8fCBkb2N1
bWVudCgpLnByaW50aW5nKCkgfHwgbV9pc1NuYXBzaG90dGluZzsKLSAgICAgICAgICAgIGlmIChz
aG91bGRQYWludCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cHJlcGFyZUZvckRpc3Bs
YXlXaXRoUGFpbnQoKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQorICAgICAgICBi
b29sIHNob3VsZFBhaW50ID0gcGFpbnRzSW50b0NhbnZhc0J1ZmZlcigpIHx8IGRvY3VtZW50KCku
cHJpbnRpbmcoKSB8fCBtX2lzU25hcHNob3R0aW5nOwogICAgICAgICBpZiAoc2hvdWxkUGFpbnQp
IHsKKyAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wcmVwYXJlRm9yRGlzcGxheVdpdGhQ
YWludCgpOworICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgICAgIGlmIChoYXNDcmVhdGVkSW1hZ2VCdWZmZXIo
KSkgewotICAgICAgICAgICAgICAgIGlmIChJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBidWZm
ZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogaW1hZ2VCdWZmZXIgPSBidWZmZXIoKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBzbmFwcGVkSW50UmVjdChyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAoVU5MSUtFTFkobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aGFzQWN0aXZlSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcigpKSkKLSAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
OjpkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqbV9jb250ZXh0KTsKKyAgICBpZiAoVU5M
SUtFTFkocmVuZGVyaW5nQ29udGV4dCgpLmhhc0FjdGl2ZUluc3BlY3RvckNhbnZhc0NhbGxUcmFj
ZXIoKSkpCisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRmluaXNoUmVjb3Jk
aW5nQ2FudmFzRnJhbWUocmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogYm9vbCBIVE1MQ2FudmFz
RWxlbWVudDo6aXNHUFVCYXNlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzR1BVQmFzZWQoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgpLmlz
R1BVQmFzZWQoKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0U3VyZmFjZVNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBDYW52YXNCYXNlOjpzZXRTaXplKHNpemUpOwog
ICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7Ci0gICAgc2V0SW1hZ2VCdWZmZXIo
bnVsbHB0cik7CisgICAgZGVzdHJveUltYWdlQnVmZmVyKCk7CiAgICAgY2xlYXJDb3BpZWRJbWFn
ZSgpOwogfQogCkBAIC03OTUsMTEgKzc5NCwxMiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9CCiAjaWYgRU5BQkxFKE9GRlNDUkVFTl9DQU5WQVMpCiBFeGNlcHRpb25P
cjxSZWY8T2Zmc2NyZWVuQ2FudmFzPj4gSFRNTENhbnZhc0VsZW1lbnQ6OnRyYW5zZmVyQ29udHJv
bFRvT2Zmc2NyZWVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgaWYg
KG1fY29udGV4dCkKKyAgICBpZiAocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAotICAgIG1fY29udGV4
dCA9IG1ha2VVbmlxdWU8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqdGhpcyk7Ci0gICAg
aWYgKG1fY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpKQorICAgIHNldFJlbmRlcmluZ0NvbnRleHQo
UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoKnRoaXMpKTsKKworICAgIGlmIChy
ZW5kZXJpbmdDb250ZXh0KCkuaXNBY2NlbGVyYXRlZCgpKQogICAgICAgICBpbnZhbGlkYXRlU3R5
bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiAKICAgICByZXR1cm4gT2Zmc2NyZWVuQ2FudmFzOjpj
cmVhdGUoY29udGV4dCwgKnRoaXMpOwpAQCAtODA5LDEwICs4MDksMTAgQEAgRXhjZXB0aW9uT3I8
UmVmPE9mZnNjcmVlbkNhbnZhcz4+IEhUTUxDYQogUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZh
c0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiB7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChp
czxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihtX2NvbnRleHQuZ2V0KCkpKSB7CisgICAgaWYg
KGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkpIHsKICAg
ICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQVBJ
U3RhdGlzdGljc0VuYWJsZWQoKSkKICAgICAgICAgICAgIFJlc291cmNlTG9hZE9ic2VydmVyOjpz
aGFyZWQoKS5sb2dDYW52YXNSZWFkKGRvY3VtZW50KCkpOwotICAgICAgICByZXR1cm4gZG93bmNh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4dCkucGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9JbWFnZURhdGEoKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkucGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKTsKICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTky
MSw3ICs5MjEsNyBAQCBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMCiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJ
bWFnZUJ1ZmZlcigpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1
ZmZlcigpCiB7CiAgICAgQVNTRVJUKCFoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKSk7CiAKQEAgLTk1
OCwyNiArOTU4LDIwIEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmUK
ICAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcg
b24gY2FudmFzLgogICAgIGF1dG8gdXNlRGlzcGxheUxpc3QgPSBtX3VzZXNEaXNwbGF5TGlzdERy
YXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5h
YmxlZCgpKSA/IFNob3VsZFVzZURpc3BsYXlMaXN0OjpZZXMgOiBTaG91bGRVc2VEaXNwbGF5TGlz
dDo6Tm87CiAKLSAgICBhdXRvIFtjb2xvclNwYWNlLCBwaXhlbEZvcm1hdF0gPSBbJl0gewotICAg
ICAgICBpZiAobV9jb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6cGFpciB7IG1fY29u
dGV4dC0+Y29sb3JTcGFjZSgpLCBtX2NvbnRleHQtPnBpeGVsRm9ybWF0KCkgfTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpciB7IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgUGl4ZWxGb3Jt
YXQ6OkJHUkE4IH07Ci0gICAgfSgpOwotCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQ
dXJwb3NlOjpDYW52YXMsIDEsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBob3N0V2luZG93KSk7
CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmlu
Z01vZGUsIHVzZURpc3BsYXlMaXN0LCBSZW5kZXJpbmdQdXJwb3NlOjpDYW52YXMsIDEsIHJlbmRl
cmluZ0NvbnRleHQoKS5jb2xvclNwYWNlKCksIHJlbmRlcmluZ0NvbnRleHQoKS5waXhlbEZvcm1h
dCgpLCBob3N0V2luZG93KSk7CiAKICAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCkpCiAgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIAogI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzMmQoKSkgeworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXMyZCgpKSB7
CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2Nl
bGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KHRoaXMpLT5pbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CisgICAg
ICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKICAgICB9CiAjZW5kaWYK
IAotICAgIGlmIChtX2NvbnRleHQgJiYgYnVmZmVyKCkgJiYgYnVmZmVyKCktPnByZWZlcnNQcmVw
YXJhdGlvbkZvckRpc3BsYXkoKSkKLSAgICAgICAgY29uc3RfY2FzdDxIVE1MQ2FudmFzRWxlbWVu
dCo+KHRoaXMpLT5hZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKKyAgICBpZiAoIXJlbmRlcmluZ0Nv
bnRleHQoKS5pc05vbmUoKSAmJiBidWZmZXIoKSAmJiBidWZmZXIoKS0+cHJlZmVyc1ByZXBhcmF0
aW9uRm9yRGlzcGxheSgpKQorICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCgpKTsKIH0KIAog
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0SW1hZ2VCdWZmZXJBbmRNYXJrRGlydHkoUmVmUHRy
PEltYWdlQnVmZmVyPiYmIGJ1ZmZlcikKQEAgLTEwMDMsMzEgKzk5NywzMCBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpzZXRJbWFnZUJ1ZmZlckFuCiAgICAgZGlkRHJhdyhGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBzaXplKCkpKTsKIH0KIAotSW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpjb3Bp
ZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogSFRNTENhbnZhc0VsZW1lbnQ6OmNvcGllZEltYWdlKCkK
IHsKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVyKCkpIHsKLSAgICAgICAgaWYgKG1f
Y29udGV4dCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCgpLnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKCk7CiAgICAgICAgIG1fY29waWVkSW1hZ2UgPSBidWZmZXIoKS0+Y29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICB9CiAgICAg
cmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKLXZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdAordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y2xlYXJJ
bWFnZUJ1ZmZlcigpCiB7CiAgICAgQVNTRVJUKG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKTsKICAg
ICBBU1NFUlQoIW1fZGlkQ2xlYXJJbWFnZUJ1ZmZlcik7Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7
CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pczJkKCkpOwogCiAgICAgbV9kaWRDbGVh
ckltYWdlQnVmZmVyID0gdHJ1ZTsKIAotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
cmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICAvLyBObyBuZWVkIHRvIHVuZG8gdHJhbnNm
b3Jtcy9jbGlwL2V0Yy4gYmVjYXVzZSB3ZSBhcmUgY2FsbGVkIHJpZ2h0IGFmdGVyIHRoZSBjb250
ZXh0IGlzIHJlc2V0LgotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLmNsZWFyUmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSk7CisgICAgICAg
IGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5j
bGVhclJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgIH0KIH0KIAotdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpjbGVhckNvcGllZEltYWdlKCkKIHsKICAgICBtX2NvcGllZEltYWdlID0gbnVsbHB0
cjsKICAgICBtX2RpZENsZWFySW1hZ2VCdWZmZXIgPSBmYWxzZTsKQEAgLTEwNDEsOSArMTAzNCw5
IEBAIGNvbnN0IGNoYXIqIEhUTUxDYW52YXNFbGVtZW50OjphY3RpdmVET00KIGJvb2wgSFRNTENh
bnZhc0VsZW1lbnQ6OnZpcnR1YWxIYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogewogI2lmIEVO
QUJMRShXRUJHTCkKLSAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4obV9jb250
ZXh0LmdldCgpKSkgeworICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihyZW5k
ZXJpbmdDb250ZXh0KCkpKSB7CiAgICAgICAgIC8vIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IG1h
eSBmaXJlIGNvbnRleHRsb3N0IC8gY29udGV4dGNoYW5nZSAvIGNvbnRleHRyZXN0b3JlZCBldmVu
dHMgYXQgYW55IHBvaW50LgotICAgICAgICByZXR1cm4gbV9oYXNSZWxldmFudFdlYkdMRXZlbnRM
aXN0ZW5lciAmJiAhZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oKm1fY29udGV4
dCkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsKKyAgICAgICAgcmV0dXJuIG1faGFzUmVs
ZXZhbnRXZWJHTEV2ZW50TGlzdGVuZXIgJiYgIWRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U+KHJlbmRlcmluZ0NvbnRleHQoKSkuaXNDb250ZXh0VW5yZWNvdmVyYWJseUxvc3QoKTsK
ICAgICB9CiAjZW5kaWYKIApAQCAtMTA3Nyw3ICsxMDcwLDcgQEAgTm9kZTo6SW5zZXJ0ZWRJbnRv
QW5jZXN0b3JSZXN1bHQgSFRNTENhbgogICAgICAgICBhZGRPYnNlcnZlcihkb2N1bWVudCk7CiAg
ICAgICAgIC8vIERyYXdpbmcgY29tbWFuZHMgbWF5IGhhdmUgYmVlbiBpc3N1ZWQgdG8gdGhlIGNh
bnZhcyBiZWZvcmUgbm93LCBzbyB3ZSBuZWVkIHRvCiAgICAgICAgIC8vIHRlbGwgdGhlIGRvY3Vt
ZW50IGlmIHdlIG5lZWQgcHJlcGFyYXRpb24uCi0gICAgICAgIGlmIChtX2NvbnRleHQgJiYgbV9j
b250ZXh0LT5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKKyAgICAgICAgaWYgKHJl
bmRlcmluZ0NvbnRleHQoKS5jb21wb3NpdGluZ1Jlc3VsdHNOZWVkVXBkYXRpbmcoKSkKICAgICAg
ICAgICAgIGRvY3VtZW50LmNhbnZhc0NoYW5nZWQoKnRoaXMsIEZsb2F0UmVjdCB7IH0pOwogICAg
IH0KIApAQCAtMTA5NiwyMCArMTA4OSwxOSBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZW1v
dmVkRnJvbUFuY2VzCiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6Om5lZWRzUHJlcGFyYXRpb25G
b3JEaXNwbGF5KCkKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+bmVlZHNQ
cmVwYXJhdGlvbkZvckRpc3BsYXkoKTsKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dCgpLm5l
ZWRzUHJlcGFyYXRpb25Gb3JEaXNwbGF5KCk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OnByZXBhcmVGb3JEaXNwbGF5KCkKIHsKICAgICBBU1NFUlQobmVlZHNQcmVwYXJhdGlvbkZvckRp
c3BsYXkoKSk7CiAKLSAgICBpZiAobV9jb250ZXh0KQotICAgICAgICBtX2NvbnRleHQtPnByZXBh
cmVGb3JEaXNwbGF5KCk7CisgICAgcmVuZGVyaW5nQ29udGV4dCgpLnByZXBhcmVGb3JEaXNwbGF5
KCk7CiB9CiAKIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzQ29udHJvbGxlZEJ5T2Zmc2NyZWVu
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXNQbGFjZWhv
bGRlcigpOworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0KCkuaXNQbGFjZWhvbGRlcigpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZp
c2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRT
aXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpIG92ZXJyaWRlOwogCi0gICAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQogICAgIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPFJlbmRlcmluZ0NvbnRleHQ+
PiBnZXRDb250ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QmLCBjb25zdCBTdHJpbmcmIGNvbnRleHRJ
ZCwgVmVjdG9yPEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+JiYgYXJndW1lbnRzKTsKLQogICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGdldENvbnRleHQoY29uc3QgU3RyaW5nJik7CiAKICAg
ICBzdGF0aWMgYm9vbCBpczJkVHlwZShjb25zdCBTdHJpbmcmKTsKQEAgLTExNiw4ICsxMTQsOCBA
QCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFtPj4gY2FwdHVyZVN0cmVh
bShEb2N1bWVudCYsIE9wdGlvbmFsPGRvdWJsZT4mJiBmcmFtZVJlcXVlc3RSYXRlKTsKICNlbmRp
ZgogCi0gICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjbGVh
ckNvcGllZEltYWdlKCkgY29uc3QgZmluYWw7CisgICAgSW1hZ2UqIGNvcGllZEltYWdlKCkgZmlu
YWw7CisgICAgdm9pZCBjbGVhckNvcGllZEltYWdlKCkgZmluYWw7CiAgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKCk7CiAKICAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdCBmaW5hbDsKQEAgLTE2MywxMCArMTYxLDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgcmVzZXQoKTsKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNsZWFySW1hZ2VCdWZmZXIoKSBjb25zdDsKLQogICAgIGJvb2wgaGFzQ3JlYXRl
ZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVkSW1hZ2VCdWZm
ZXI7IH0KKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKCkgZmluYWw7CisgICAgdm9pZCBjbGVh
ckltYWdlQnVmZmVyKCk7CiAKICAgICB2b2lkIHNldFN1cmZhY2VTaXplKGNvbnN0IEludFNpemUm
KTsKIApAQCAtMTgzLDE2ICsxODAsMTUgQEAgcHJpdmF0ZToKICAgICBOb2RlOjpJbnNlcnRlZElu
dG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3RvcihJbnNlcnRpb25UeXBlLCBDb250
YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXJlbnRPZlJlbW92ZWRUcmVlKSBmaW5hbDsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7Ci0gICAg
bXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRl
bXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIg
dG8gcmVuZGVyIChhbmQgZm9yIENTU0NhbnZhc1ZhbHVlKS4KKyAgICBSZWZQdHI8SW1hZ2U+IG1f
Y29waWVkSW1hZ2U7IC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBmb3IgcGxhdGZvcm1zIHRo
YXQgaGF2ZSB0byBjb3B5IHRoZSBpbWFnZSBidWZmZXIgdG8gcmVuZGVyIChhbmQgZm9yIENTU0Nh
bnZhc1ZhbHVlKS4KIAogICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OwogCiAgICAg
Ym9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKICAgICAvLyBtX2hhc0NyZWF0ZWRJbWFnZUJ1
ZmZlciBtZWFucyB3ZSB0cmllZCB0byBtYWxsb2MgdGhlIGJ1ZmZlci4gV2UgZGlkbid0IG5lY2Vz
c2FyaWx5IGdldCBpdC4KLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIg
eyBmYWxzZSB9OwotICAgIG11dGFibGUgYm9vbCBtX2RpZENsZWFySW1hZ2VCdWZmZXIgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9kaWRDbGVhckltYWdlQnVmZmVyIHsgZmFsc2UgfTsKICNpZiBFTkFCTEUoV0VCR0wpCiAg
ICAgYm9vbCBtX2hhc1JlbGV2YW50V2ViR0xFdmVudExpc3RlbmVyIHsgZmFsc2UgfTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAkocmV2aXNpb24g
Mjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIFJlZjxPZmZzY3JlZW5DYW52YXM+IE9mZnNjcmVl
bkNhbnZhczo6Y3IKICAgICBjYWxsT25NYWluVGhyZWFkKFtkZXRhY2hlZENhbnZhcyA9IFdURk1v
dmUoZGV0YWNoZWRDYW52YXMpLCBwbGFjZWhvbGRlckRhdGEgPSBtYWtlUmVmKCpjbG9uZS0+bV9w
bGFjZWhvbGRlckRhdGEpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgcGxhY2Vob2xkZXJEYXRhLT5j
YW52YXMgPSBkZXRhY2hlZENhbnZhcy0+dGFrZVBsYWNlaG9sZGVyQ2FudmFzKCk7CiAgICAgICAg
IGlmIChwbGFjZWhvbGRlckRhdGEtPmNhbnZhcykgewotICAgICAgICAgICAgYXV0byYgcGxhY2Vo
b2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PigqcGxh
Y2Vob2xkZXJEYXRhLT5jYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgICAgICBh
dXRvJiBwbGFjZWhvbGRlckNvbnRleHQgPSBkb3duY2FzdDxQbGFjZWhvbGRlclJlbmRlcmluZ0Nv
bnRleHQ+KHBsYWNlaG9sZGVyRGF0YS0+Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOwogICAg
ICAgICAgICAgYXV0byYgaW1hZ2VCdWZmZXJQaXBlID0gcGxhY2Vob2xkZXJDb250ZXh0LmltYWdl
QnVmZmVyUGlwZSgpOwogICAgICAgICAgICAgaWYgKGltYWdlQnVmZmVyUGlwZSkKICAgICAgICAg
ICAgICAgICBwbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZlclBp
cGUtPnNvdXJjZSgpOwpAQCAtMTE1LDkgKzExNSw2IEBAIE9mZnNjcmVlbkNhbnZhczo6T2Zmc2Ny
ZWVuQ2FudmFzKFNjcmlwdEUKIE9mZnNjcmVlbkNhbnZhczo6fk9mZnNjcmVlbkNhbnZhcygpCiB7
CiAgICAgbm90aWZ5T2JzZXJ2ZXJzQ2FudmFzRGVzdHJveWVkKCk7Ci0KLSAgICBtX2NvbnRleHQg
PSBudWxscHRyOyAvLyBFbnN1cmUgdGhpcyBnb2VzIGF3YXkgYmVmb3JlIHRoZSBJbWFnZUJ1ZmZl
ci4KLSAgICBzZXRJbWFnZUJ1ZmZlcihudWxscHRyKTsKIH0KIAogdW5zaWduZWQgT2Zmc2NyZWVu
Q2FudmFzOjp3aWR0aCgpIGNvbnN0CkBAIC0xNTQsNiArMTUxLDIzIEBAIHZvaWQgT2Zmc2NyZWVu
Q2FudmFzOjpzZXRTaXplKGNvbnN0IEludFMKICAgICByZXNldCgpOwogfQogCitib29sIE9mZnNj
cmVlbkNhbnZhczo6aXMyZFR5cGUoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUpCit7
CisgICAgcmV0dXJuIGNvbnRleHRUeXBlID09IFJlbmRlcmluZ0NvbnRleHRUeXBlOjpfMmQ7Cit9
CisKK09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogT2Zmc2NyZWVuQ2FudmFzOjpj
cmVhdGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUp
Cit7CisgICAgQVNTRVJUX1VOVVNFRChpczJkVHlwZShjb250ZXh0VHlwZSksIGNvbnRleHRUeXBl
KTsKKyAgICBBU1NFUlQocmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpKTsKKworICAgIC8vIEZJ
WE1FOiBBZGQgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBlbm91Z2ggcGl4ZWwgbWVtb3J5LiBT
ZWUgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZC4KKworICAgIHNldFJlbmRlcmlu
Z0NvbnRleHQoT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMp
KTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpOworfQorCiAjaWYgRU5BQkxFKFdFQkdMKQogc3RhdGlj
IGJvb2wgcmVxdWlyZXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRm9yV2ViR0woKQogewpAQCAtMTc1
LDI4ICsxODksNDIgQEAgc3RhdGljIGJvb2wgc2hvdWxkRW5hYmxlV2ViR0woYm9vbCB3ZWJHTAog
ICAgIHJldHVybiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDsKIH0KIAotdm9pZCBPZmZz
Y3JlZW5DYW52YXM6OmNyZWF0ZUNvbnRleHRXZWJHTChSZW5kZXJpbmdDb250ZXh0VHlwZSBjb250
ZXh0VHlwZSwgV2ViR0xDb250ZXh0QXR0cmlidXRlcyYmIGF0dHJzKQorYm9vbCBPZmZzY3JlZW5D
YW52YXM6OmlzV2ViR0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlIGNvbnRleHRUeXBlKQorewor
ICAgIHJldHVybiBjb250ZXh0VHlwZSA9PSBSZW5kZXJpbmdDb250ZXh0VHlwZTo6V2ViZ2wgfHwg
Y29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsMjsKK30KKworV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVDb250ZXh0V2ViR0wo
UmVuZGVyaW5nQ29udGV4dFR5cGUgY29udGV4dFR5cGUsIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMm
JiBhdHRycykKIHsKLSAgICBBU1NFUlQoIW1fY29udGV4dCk7CisgICAgQVNTRVJUKGlzV2ViR0xU
eXBlKGNvbnRleHRUeXBlKSk7CisgICAgQVNTRVJUKHJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUo
KSk7CiAKICAgICBhdXRvIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CiAgICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzV29ya2Vy
R2xvYmFsU2NvcGUoKSkgewogICAgICAgICBXb3JrZXJHbG9iYWxTY29wZSYgd29ya2VyR2xvYmFs
U2NvcGUgPSBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oKnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpOwogICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHdvcmtlckdsb2JhbFNjb3BlLnNl
dHRpbmdzVmFsdWVzKCkud2ViR0xFbmFibGVkLCB3b3JrZXJHbG9iYWxTY29wZS5zZXR0aW5nc1Zh
bHVlcygpLmFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZSBpZiAoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKSB7CiAgICAgICAgIGF1dG8mIHNldHRpbmdzID0g
ZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KS5zZXR0aW5ncygpOwog
ICAgICAgICBpZiAoIXNob3VsZEVuYWJsZVdlYkdMKHNldHRpbmdzLndlYkdMRW5hYmxlZCgpLCBz
ZXR0aW5ncy5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCgpKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZQotICAgICAgICBy
ZXR1cm47Ci0gICAgR3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb24gd2ViR0xWZXJzaW9uID0g
R3JhcGhpY3NDb250ZXh0R0xXZWJHTFZlcnNpb246OldlYkdMMTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIHdlYkdMVmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4dEdMV2ViR0xW
ZXJzaW9uOjpXZWJHTDE7CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICB3ZWJHTFZlcnNpb24gPSAo
Y29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5cGU6OldlYmdsKSA/IEdyYXBoaWNzQ29u
dGV4dEdMV2ViR0xWZXJzaW9uOjpXZWJHTDEgOiBHcmFwaGljc0NvbnRleHRHTFdlYkdMVmVyc2lv
bjo6V2ViR0wyOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dFR5cGUpOwogI2VuZGlm
Ci0gICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKCp0aGlz
LCBhdHRycywgd2ViR0xWZXJzaW9uKTsKKworICAgIGF1dG8gY29udGV4dCA9IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZSgqdGhpcywgYXR0cnMsIHdlYkdMVmVyc2lvbik7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHNldFJlbmRlcmlu
Z0NvbnRleHQobWFrZVVuaXF1ZVJlZkZyb21Ob25OdWxsVW5pcXVlUHRyKFdURk1vdmUoY29udGV4
dCkpKTsKKworICAgIHJldHVybiAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKQEAgLTIw
Niw0NCArMjM0LDUzIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFsPE9mZnNjcmVlblJlbmRlcmluZ0MK
ICAgICBpZiAobV9kZXRhY2hlZCkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yIH07CiAKLSAgICBpZiAoY29udGV4dFR5cGUgPT0gUmVuZGVyaW5nQ29udGV4dFR5
cGU6Ol8yZCkgewotICAgICAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgICAgICBpZiAoIWlz
PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkpCisgICAgaWYg
KCFyZW5kZXJpbmdDb250ZXh0KCkuaXNOb25lKCkpIHsKKyAgICAgICAgaWYgKHJlbmRlcmluZ0Nv
bnRleHQoKS5pczJkKCkpIHsKKyAgICAgICAgICAgIGlmICghaXMyZFR5cGUoY29udGV4dFR5cGUp
KQogICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0gfTsKLSAgICAgICAg
ICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4g
eyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0
KSB9IH0gfTsKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPE9mZnNjcmVlbkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4geyAmZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpIH0gfSB9OwogICAgICAgICB9CiAKLSAgICAgICAg
bV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCp0aGlzKTsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4geyB7
IFdURjo6bnVsbG9wdCB9IH07Ci0KLSAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8T2Zmc2NyZWVu
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiB7ICZkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpIH0gfSB9OwotICAgIH0KICNpZiBFTkFCTEUoV0VC
R0wpCi0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIGlm
IChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KCptX2NvbnRleHQpKQotICAgICAgICAgICAgICAg
IHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4geyAmZG93bmNhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKHJlbmRl
cmluZ0NvbnRleHQoKS5pc1dlYkdMKCkpIHsKKyAgICAgICAgICAgIGlmICghaXNXZWJHTFR5cGUo
Y29udGV4dFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHsgV1RGOjpudWxsb3B0IH0g
fTsKKyAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgeyBSZWZQdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0Nv
bnRleHQoKSkgfSB9IH07CiAjaWYgRU5BQkxFKFdFQkdMMikKLSAgICAgICAgICAgIGlmIChpczxX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4geyB7IFJlZlB0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgICAgIGlmIChpczxX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0PihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0
PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmluZ0NvbnRleHQoKSkgfSB9IH07CisjZW5k
aWYKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OwogICAg
ICAgICB9CiAKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7
IHsgV1RGOjpudWxsb3B0IH0gfTsKKyAgICB9CisKKyAgICBpZiAoaXMyZFR5cGUoY29udGV4dFR5
cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncy4KKyAgICAgICAgYXV0byBjb250ZXh0ID0gY3JlYXRl
T2Zmc2NyZWVuQ29udGV4dDJkKGNvbnRleHRUeXBlKTsKKyAgICAgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICAgICAgcmV0dXJuIHsgeyBXVEY6Om51bGxvcHQgfSB9OworICAgICAgICByZXR1cm4g
eyB7IFJlZlB0cjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsgY29udGV4dCB9
IH0gfTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCR0wpCisgICAgaWYgKGlzV2ViR0xUeXBlKGNv
bnRleHRUeXBlKSkgewogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS52bSgpKTsKICAgICAgICAgYXV0byBhdHRyaWJ1dGVzID0gY29udmVydDxJRExEaWN0aW9u
YXJ5PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+PihzdGF0ZSwgIWFyZ3VtZW50cy5pc0VtcHR5KCkg
PyBhcmd1bWVudHNbMF0uZ2V0KCkgOiBKU0M6OmpzVW5kZWZpbmVkKCkpOwogICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9y
IH0pOwogCi0gICAgICAgIGNyZWF0ZUNvbnRleHRXZWJHTChjb250ZXh0VHlwZSwgV1RGTW92ZShh
dHRyaWJ1dGVzKSk7Ci0gICAgICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICBhdXRvIGNvbnRl
eHQgPSBjcmVhdGVDb250ZXh0V2ViR0woY29udGV4dFR5cGUsIFdURk1vdmUoYXR0cmlidXRlcykp
OworICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4geyB7IFdURjo6bnVs
bG9wdCB9IH07CiAKICNpZiBFTkFCTEUoV0VCR0wyKQotICAgICAgICBpZiAoaXM8V2ViR0wyUmVu
ZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCkpCi0gICAgICAgICAgICByZXR1cm4geyB7IFJlZlB0
cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PiB7ICZkb3duY2FzdDxXZWJHTDJSZW5kZXJpbmdDb250
ZXh0PigqbV9jb250ZXh0KSB9IH0gfTsKKyAgICAgICAgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ+KCpjb250ZXh0KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KCpjb250
ZXh0KSB9IH0gfTsKICNlbmRpZgotICAgICAgICByZXR1cm4geyB7IFJlZlB0cjxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+IHsgJmRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4
dCkgfSB9IH07CisgICAgICAgIHJldHVybiB7IHsgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4geyAmZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0PigqY29udGV4dCkgfSB9IH07CiAg
ICAgfQogI2VuZGlmCiAKQEAgLTI1MiwxMCArMjg5LDEwIEBAIEV4Y2VwdGlvbk9yPE9wdGlvbmFs
PE9mZnNjcmVlblJlbmRlcmluZ0MKIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4g
T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogewotICAgIGlmIChtX2Rl
dGFjaGVkIHx8ICFtX2NvbnRleHQpCisgICAgaWYgKG1fZGV0YWNoZWQgfHwgcmVuZGVyaW5nQ29u
dGV4dCgpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IgfTsKIAotICAgIGlmIChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpKSB7CisgICAgaWYgKGlzPE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgewogICAgICAgICBpZiAoIXdpZHRoKCkgfHwgIWhl
aWdodCgpKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxw
dHIgfSB9OwogCkBAIC0yNjgsMTUgKzMwNSwxNSBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiBPZmZzY3JlCiAgICAgICAgIC8vIGJ5IGJ1ZmZlcigpLCB0byBhdm9pZCByZXNldHRp
bmcgdGhlIGNvbnRleHQgc3RhdGUsIHdlIGhhdmUgdG8gbWFrZSBhIGNvcHkgYW5kCiAgICAgICAg
IC8vIGNsZWFyIHRoZSBvcmlnaW5hbCBidWZmZXIgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIHRoZSBv
cmlnaW5hbCBidWZmZXIuCiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9IGJ1ZmZlcigpLT5jb3B5
UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGJ1ZmZlcigpLT5sb2dpY2FsU2l6
ZSgpKSwgYnVmZmVyKCktPmNvbG9yU3BhY2UoKSwgKmRyYXdpbmdDb250ZXh0KCkpOwotICAgICAg
ICBkb3duY2FzdDxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQp
LmNsZWFyQ2FudmFzKCk7CisgICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4ocmVuZGVyaW5nQ29udGV4dCgpKS5jbGVhckNhbnZhcygpOwogICAgICAgICBj
bGVhckNvcGllZEltYWdlKCk7CiAKICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0
ZShJbWFnZUJpdG1hcEJhY2tpbmcoV1RGTW92ZShidWZmZXJDb3B5KSwgb3JpZ2luQ2xlYW4oKSA/
IFNlcmlhbGl6YXRpb25TdGF0ZTo6T3JpZ2luQ2xlYW4gOiBTZXJpYWxpemF0aW9uU3RhdGUoKSkp
IH07CiAgICAgfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIGlmIChpczxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ+KCptX2NvbnRleHQpKSB7Ci0gICAgICAgIGF1dG8gd2ViR0xDb250ZXh0ID0gJmRv
d25jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oKm1fY29udGV4dCk7CisgICAgaWYgKGlzPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4ocmVuZGVyaW5nQ29udGV4dCgpKSkgeworICAgICAgICBhdXRv
IHdlYkdMQ29udGV4dCA9ICZkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KHJlbmRlcmlu
Z0NvbnRleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1cHBvc2VkIHRvIGNyZWF0
ZSBhbiBJbWFnZUJpdG1hcCB1c2luZyB0aGUgYmFja2luZwogICAgICAgICAvLyBzdG9yZSBmcm9t
IHRoaXMgY2FudmFzIChvciBpdHMgY29udGV4dCksIGJ1dCBmb3Igbm93IHdlJ2xsIGp1c3QKQEAg
LTM1OCwyMCArMzk1LDE5IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpkaWREcmF3KGNvbnN0IE9w
dGkKICAgICBub3RpZnlPYnNlcnZlcnNDYW52YXNDaGFuZ2VkKHJlY3QpOwogfQogCi1JbWFnZSog
T2Zmc2NyZWVuQ2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CitJbWFnZSogT2Zmc2NyZWVuQ2Fu
dmFzOjpjb3BpZWRJbWFnZSgpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgaWYgKCFtX2NvcGllZEltYWdlICYmIGJ1ZmZlcigpKSB7Ci0gICAg
ICAgIGlmIChtX2NvbnRleHQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQoKS5wYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVyKCkt
PmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAg
ICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCi12b2lkIE9mZnNjcmVl
bkNhbnZhczo6Y2xlYXJDb3BpZWRJbWFnZSgpIGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZhczo6
Y2xlYXJDb3BpZWRJbWFnZSgpCiB7CiAgICAgbV9jb3BpZWRJbWFnZSA9IG51bGxwdHI7CiB9CkBA
IC0zODcsNyArNDIzLDcgQEAgU2VjdXJpdHlPcmlnaW4qIE9mZnNjcmVlbkNhbnZhczo6c2VjdXJp
dAogCiBib29sIE9mZnNjcmVlbkNhbnZhczo6Y2FuRGV0YWNoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gIW1fZGV0YWNoZWQgJiYgIW1fY29udGV4dDsKKyAgICByZXR1cm4gIW1fZGV0YWNoZWQgJiYg
cmVuZGVyaW5nQ29udGV4dCgpLmlzTm9uZSgpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8RGV0YWNo
ZWRPZmZzY3JlZW5DYW52YXM+IE9mZnNjcmVlbkNhbnZhczo6ZGV0YWNoKCkKQEAgLTQwNSwxMCAr
NDQxLDEwIEBAIHN0ZDo6dW5pcXVlX3B0cjxEZXRhY2hlZE9mZnNjcmVlbkNhbnZhcz4KIAogdm9p
ZCBPZmZzY3JlZW5DYW52YXM6OnNldFBsYWNlaG9sZGVyQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50
JiBjYW52YXMpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbnRleHQpOworICAgIEFTU0VSVChyZW5kZXJp
bmdDb250ZXh0KCkuaXNOb25lKCkpOwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
bV9wbGFjZWhvbGRlckRhdGEtPmNhbnZhcyA9IG1ha2VXZWFrUHRyKGNhbnZhcyk7Ci0gICAgYXV0
byYgcGxhY2Vob2xkZXJDb250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250
ZXh0PigqY2FudmFzLnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgYXV0byYgcGxhY2Vob2xkZXJD
b250ZXh0ID0gZG93bmNhc3Q8UGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0PihjYW52YXMucmVu
ZGVyaW5nQ29udGV4dCgpKTsKICAgICBhdXRvJiBpbWFnZUJ1ZmZlclBpcGUgPSBwbGFjZWhvbGRl
ckNvbnRleHQuaW1hZ2VCdWZmZXJQaXBlKCk7CiAgICAgaWYgKGltYWdlQnVmZmVyUGlwZSkKICAg
ICAgICAgbV9wbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVTb3VyY2UgPSBpbWFnZUJ1ZmZlclBp
cGUtPnNvdXJjZSgpOwpAQCAtNDMxLDggKzQ2Nyw4IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpj
b21taXRUb1BsYWNlaG9sZGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRyYW5z
ZmVyIHRleHR1cmUgb3ZlciBpZiB3ZSdyZSB1c2luZyBhY2NlbGVyYXRlZCBjb21wb3NpdGluZwot
ICAgIGlmIChtX2NvbnRleHQgJiYgKG1fY29udGV4dC0+aXNXZWJHTCgpIHx8IG1fY29udGV4dC0+
aXNBY2NlbGVyYXRlZCgpKSkKLSAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpOworICAgIGlmIChyZW5kZXJpbmdDb250ZXh0KCkuaXNXZWJHTCgpIHx8IHJl
bmRlcmluZ0NvbnRleHQoKS5pc0FjY2VsZXJhdGVkKCkpCisgICAgICAgIHJlbmRlcmluZ0NvbnRl
eHQoKS5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogCiAgICAgaWYgKG1fcGxhY2Vo
b2xkZXJEYXRhLT5idWZmZXJQaXBlU291cmNlKSB7CiAgICAgICAgIGF1dG8gYnVmZmVyQ29weSA9
IGltYWdlQnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGlt
YWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKQEAgLTQ2OSw3ICs1MDUsNyBAQCBDU1NWYWx1ZVBvb2wm
IE9mZnNjcmVlbkNhbnZhczo6Y3NzVmFsdWVQCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCk7CiB9CiAKLXZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IGNvbnN0Cit2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKQogewogICAg
IG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gdHJ1ZTsKIApAQCAtNDc5LDcgKzUxNSw3IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigKICAgICBzZXRJbWFnZUJ1ZmZl
cihJbWFnZUJpdG1hcDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKmNhbnZhc0Jhc2VTY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQog
Ci1SZWZQdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkg
Y29uc3QKK1JlZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZm
ZXIoKQogewogICAgIEFTU0VSVChtX2RldGFjaGVkKTsKIApAQCAtNDkzLDggKzUyOSw4IEBAIFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWsKIHZvaWQgT2Zmc2NyZWVuQ2Fu
dmFzOjpyZXNldCgpCiB7CiAgICAgcmVzZXRHcmFwaGljc0NvbnRleHRTdGF0ZSgpOwotICAgIGlm
IChpczxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkp
Ci0gICAgICAgIGRvd25jYXN0PE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkucmVzZXQoKTsKKyAgICBpZiAoaXM8T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihyZW5kZXJpbmdDb250ZXh0KCkpKQorICAgICAgICBkb3duY2FzdDxPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KHJlbmRlcmluZ0NvbnRleHQoKSkucmVzZXQoKTsKIAog
ICAgIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyID0gZmFsc2U7CiAgICAgc2V0SW1hZ2VCdWZmZXIo
bnVsbHB0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJKHJldmlz
aW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDcgQEAgcHVibGljOgogICAgICAgICBkb3VibGUg
cXVhbGl0eSA9IDEuMDsKICAgICB9OwogCi0gICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250ZXh0
VHlwZSB7Ci0gICAgICAgIF8yZCwKLSAgICAgICAgV2ViZ2wsCi0gICAgICAgIFdlYmdsMgotICAg
IH07CisgICAgZW51bSBjbGFzcyBSZW5kZXJpbmdDb250ZXh0VHlwZSB7IF8yZCwgV2ViZ2wsIFdl
YmdsMiB9OwogCiAgICAgc3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAg
c3RhdGljIFJlZjxPZmZzY3JlZW5DYW52YXM+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
Jiwgc3RkOjp1bmlxdWVfcHRyPERldGFjaGVkT2Zmc2NyZWVuQ2FudmFzPiYmKTsKQEAgLTEyMiwx
NiArMTE4LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpZHRoKHVuc2lnbmVkKTsKICAgICB2
b2lkIHNldEhlaWdodCh1bnNpZ25lZCk7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBy
ZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9
Ci0KICAgICBFeGNlcHRpb25PcjxPcHRpb25hbDxPZmZzY3JlZW5SZW5kZXJpbmdDb250ZXh0Pj4g
Z2V0Q29udGV4dChKU0M6OkpTR2xvYmFsT2JqZWN0JiwgUmVuZGVyaW5nQ29udGV4dFR5cGUsIFZl
Y3RvcjxKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PiYmIGFyZ3VtZW50cyk7CiAgICAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gdHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7CiAgICAg
dm9pZCBjb252ZXJ0VG9CbG9iKEltYWdlRW5jb2RlT3B0aW9ucyYmLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmKTsKIAogICAgIHZvaWQgZGlkRHJhdyhjb25zdCBPcHRpb25hbDxGbG9hdFJlY3Q+Jikg
ZmluYWw7CiAKLSAgICBJbWFnZSogY29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IGNsZWFyQ29waWVkSW1hZ2UoKSBjb25zdCBmaW5hbDsKKyAgICBJbWFnZSogY29waWVkSW1hZ2Uo
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyQ29waWVkSW1hZ2UoKSBmaW5hbDsKIAogICAgIGJvb2wg
aGFzQ3JlYXRlZEltYWdlQnVmZmVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9oYXNDcmVhdGVk
SW1hZ2VCdWZmZXI7IH0KIApAQCAtMTQ4LDcgKzE0Miw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBS
ZWZDb3VudGVkOjpkZXJlZjsKIAogcHJpdmF0ZToKLQogICAgIE9mZnNjcmVlbkNhbnZhcyhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAK
ICAgICBib29sIGlzT2Zmc2NyZWVuQ2FudmFzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtMTY1LDEyICsxNTgsMTYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0U2l6ZShjb25z
dCBJbnRTaXplJikgZmluYWw7CiAKKyAgICBzdGF0aWMgYm9vbCBpczJkVHlwZShSZW5kZXJpbmdD
b250ZXh0VHlwZSk7CisgICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjcmVh
dGVPZmZzY3JlZW5Db250ZXh0MmQoUmVuZGVyaW5nQ29udGV4dFR5cGUpOworCiAjaWYgRU5BQkxF
KFdFQkdMKQotICAgIHZvaWQgY3JlYXRlQ29udGV4dFdlYkdMKFJlbmRlcmluZ0NvbnRleHRUeXBl
LCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzJiYgPSB7IH0pOworICAgIHN0YXRpYyBib29sIGlzV2Vi
R0xUeXBlKFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjcmVhdGVDb250ZXh0V2ViR0woUmVuZGVyaW5nQ29udGV4dFR5cGUsIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMmJik7CiAjZW5kaWYKIAotICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBj
b25zdCBmaW5hbDsKLSAgICBSZWZQdHI8SW1hZ2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpIGNv
bnN0OworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoKSBmaW5hbDsKKyAgICBSZWZQdHI8SW1h
Z2VCdWZmZXI+IHRha2VJbWFnZUJ1ZmZlcigpOwogCiAgICAgdm9pZCByZXNldCgpOwogCkBAIC0x
NzgsMTQgKzE3NSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgcHVzaEJ1ZmZlclRvUGxhY2Vob2xk
ZXIoKTsKICAgICB2b2lkIHNjaGVkdWxlQ29tbWl0VG9QbGFjZWhvbGRlckNhbnZhcygpOwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsKLQog
ICAgIC8vIG1faGFzQ3JlYXRlZEltYWdlQnVmZmVyIG1lYW5zIHdlIHRyaWVkIHRvIG1hbGxvYyB0
aGUgYnVmZmVyLiBXZSBkaWRuJ3QgbmVjZXNzYXJpbHkgZ2V0IGl0LgogICAgIG11dGFibGUgYm9v
bCBtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlciB7IGZhbHNlIH07CiAKICAgICBib29sIG1fZGV0YWNo
ZWQgeyBmYWxzZSB9OwogCi0gICAgbXV0YWJsZSBSZWZQdHI8SW1hZ2U+IG1fY29waWVkSW1hZ2U7
CisgICAgUmVmUHRyPEltYWdlPiBtX2NvcGllZEltYWdlOwogCiAgICAgYm9vbCBtX2hhc1NjaGVk
dWxlZENvbW1pdCB7IGZhbHNlIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMjc3
MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTEgKzY5LDExIEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQpOwogCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpCitVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldHRpbmdzJiYgc2V0dGluZ3MsIGJvb2wgdXNlc0NTU0Nv
bXBhdGliaWxpdHlQYXJzZU1vZGUpCiB7Ci0gICAgYXV0byByZW5kZXJpbmdDb250ZXh0ID0gc3Rk
Ojp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obmV3IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRChjYW52YXMsIFdURk1vdmUoc2V0dGluZ3MpLCB1c2VzQ1NTQ29tcGF0aWJpbGl0
eVBhcnNlTW9kZSkpOworICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IGFkb3B0UmVmZXJlbmNl
TWFraW5nVW5pcXVlUmVmKCpuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcywgV1RG
TW92ZShzZXR0aW5ncyksIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKSk7CiAKLSAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENyZWF0ZUNhbnZhc1JlbmRlcmluZ0NvbnRleHQo
KnJlbmRlcmluZ0NvbnRleHQpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3Jl
YXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChyZW5kZXJpbmdDb250ZXh0LmdldCgpKTsKIAogICAg
IHJldHVybiByZW5kZXJpbmdDb250ZXh0OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDI3
NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFRleHRNZXRyaWNz
OwogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3JlYXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29sIHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VN
b2RlKTsKKyAgICBzdGF0aWMgVW5pcXVlUmVmPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4gY3Jl
YXRlKENhbnZhc0Jhc2UmLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXR0aW5ncyYmLCBib29s
IHVzZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlKTsKIAogICAgIHZpcnR1YWwgfkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCShyZXZpc2lvbiAy
NzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Niw3ICsxOTYsNyBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgY29uc3RleHByIGZsb2F0IHdlYmtpdEJhY2tpbmdTdG9yZVBpeGVsUmF0aW8o
KSB7IHJldHVybiAxOyB9CiAKLSAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCByZXNldCgpIGZp
bmFsOwogCiAgICAgYm9vbCBpbWFnZVNtb290aGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBz
dGF0ZSgpLmltYWdlU21vb3RoaW5nRW5hYmxlZDsgfQogICAgIHZvaWQgc2V0SW1hZ2VTbW9vdGhp
bmdFbmFibGVkKGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIENhbnZhc0Jhc2UmIGNhbnZhc0Jh
c2UoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhczsgfQogCisgICAgdmlydHVhbCBib29sIGlzTm9u
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzV2ViR0wyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgIC8vIHVzZWQgZm9yIGNv
bXBvc2l0aW5nIHB1cnBvc2VzLgogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGlzcGxheVdp
dGhQYWludCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpIHsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICBib29sIGhhc0FjdGl2ZUluc3Bl
Y3RvckNhbnZhc0NhbGxUcmFjZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjdGl2ZUluc3BlY3Rv
ckNhbnZhc0NhbGxUcmFjZXI7IH0KICAgICB2b2lkIHNldEhhc0FjdGl2ZUluc3BlY3RvckNhbnZh
c0NhbGxUcmFjZXIoYm9vbCBoYXNBY3RpdmVJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyKSB7IG1f
aGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlciA9IGhhc0FjdGl2ZUluc3BlY3RvckNh
bnZhc0NhbGxUcmFjZXI7IH0KQEAgLTg4LDYgKzg5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBuZWVkc1ByZXBhcmF0aW9uRm9yRGlzcGxheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEaXNwbGF5KCkgeyB9CiAKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzZXQoKSB7IH0KKwogICAgIHZpcnR1YWwgUGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkg
Y29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHROb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoQ2FudmFzUmVuZGVyaW5n
Q29udGV4dE5vbmUpOworCitVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmU+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHROb25lOjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzKQorewor
ICAgIHJldHVybiBhZG9wdFJlZmVyZW5jZU1ha2luZ1VuaXF1ZVJlZigqbmV3IENhbnZhc1JlbmRl
cmluZ0NvbnRleHROb25lKGNhbnZhcykpOworfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0Tm9u
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoQ2FudmFzQmFzZSYgY2FudmFzKQorICAgIDog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dCB7IGNhbnZhcyB9Cit7Cit9CisKK0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHROb25lOjp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dE5vbmUoKSA9IGRlZmF1bHQ7CisK
K30KKwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dE5vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0Tm9uZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENhbnZhc1JlbmRlcmluZ0NvbnRleHROb25lIGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dE5vbmUpOworcHVibGljOgorICAgIHN0YXRpYyBVbmlxdWVSZWY8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dE5vbmU+IGNyZWF0ZShDYW52YXNCYXNlJik7CisKKyAgICB2aXJ0dWFsIH5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0Tm9uZSgpOworCitwcml2YXRlOgorICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHROb25lKENhbnZhc0Jhc2UmKTsKKworICAgIGJvb2wgaXNOb25lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gdHJ1ZTsgfQorfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTEgQEAgc3Rh
dGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZQogc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAj
ZW5kaWYKIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQorVW5pcXVlUmVmPElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0
aW5ncyYmIHNldHRpbmdzKQogewotICAgIGF1dG8gcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KG5ldyBJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQoY2FudmFzLCBXVEZNb3ZlKHNldHRpbmdzKSkpOworICAgIGF1dG8gcmVuZGVy
aW5nQ29udGV4dCA9IGFkb3B0UmVmZXJlbmNlTWFraW5nVW5pcXVlUmVmKCpuZXcgSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgV1RGTW92ZShzZXR0aW5ncykpKTsKIAotICAgIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dCgq
cmVuZGVyaW5nQ29udGV4dCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDcmVh
dGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KHJlbmRlcmluZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAg
cmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgSW1h
Z2VCdWZmZXI7CiBjbGFzcyBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYs
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOworICAgIHN0YXRpYyBVbmlx
dWVSZWY8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoQ2FudmFzQmFzZSYsIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYpOwogCiAgICAgZW51bSBjbGFzcyBC
aXRtYXBNb2RlIHsKICAgICAgICAgVmFsaWQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7CiAKK1VuaXF1ZVJl
ZjxPZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IE9mZnNjcmVlbkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWZlcmVuY2VNYWtpbmdVbmlxdWVSZWYoKm5ldyBPZmZzY3JlZW5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQoY2FudmFzKSk7Cit9CisKIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6T2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmIGNhbnZh
cykKICAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UoY2FudmFzLCBmYWxzZSkKIHsK
QEAgLTEwOCw3ICsxMTMsOCBAQCBDYW52YXNEaXJlY3Rpb24gT2Zmc2NyZWVuQ2FudmFzUmVuZGVy
aW5nCiAgICAgcmV0dXJuIERpcmVjdGlvbjo6THRyOwogfQogCi1hdXRvIE9mZnNjcmVlbkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29uc3QgRm9udFByb3h5KiB7Cith
dXRvIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zm9udFByb3h5KCkgLT4gY29u
c3QgRm9udFByb3h5KgorewogICAgIGlmICghc3RhdGUoKS5mb250LnJlYWxpemVkKCkpCiAgICAg
ICAgIHNldEZvbnQoc3RhdGUoKS51bnBhcnNlZEZvbnQpOwogICAgIHJldHVybiAmc3RhdGUoKS5m
b250OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT2Zmc2NyZWVuQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDI3NzIwOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09mZnNjcmVlbkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaWYgRU5BQkxFKE9G
RlNDUkVFTl9DQU5WQVMpCiAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgiCi0KICNpbmNsdWRlICJPZmZzY3JlZW5DYW52YXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtMzYsNyArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZzY3JlZW5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQpOwogcHVibGljOgotICAgIE9mZnNjcmVlbkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRChDYW52YXNCYXNlJik7CisgICAgc3RhdGljIFVuaXF1ZVJlZjxPZmZzY3JlZW5D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7CisKICAgICB2aXJ0
dWFsIH5PZmZzY3JlZW5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAogICAgIE9mZnNjcmVl
bkNhbnZhcyYgY2FudmFzKCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8T2Zmc2NyZWVuQ2FudmFz
PihjYW52YXNCYXNlKCkpOyB9CkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBSZWY8VGV4
dE1ldHJpY3M+IG1lYXN1cmVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKIHByaXZhdGU6Cisg
ICAgT2Zmc2NyZWVuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKENhbnZhc0Jhc2UmKTsKKwogICAg
IGJvb2wgaXNPZmZzY3JlZW4yZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBj
b25zdCBGb250UHJveHkqIGZvbnRQcm94eSgpIGZpbmFsOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1BhaW50UmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5jcHAJ
KHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BhaW50UmVu
ZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFBhaW50UmVuZGVyaW5n
Q29udGV4dDJEKTsKIAotc3RkOjp1bmlxdWVfcHRyPFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBQ
YWludFJlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcykKK1VuaXF1
ZVJlZjxQYWludFJlbmRlcmluZ0NvbnRleHQyRD4gUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ6OmNy
ZWF0ZShDYW52YXNCYXNlJiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxQ
YWludFJlbmRlcmluZ0NvbnRleHQyRD4obmV3IFBhaW50UmVuZGVyaW5nQ29udGV4dDJEKGNhbnZh
cykpOworICAgIHJldHVybiBhZG9wdFJlZmVyZW5jZU1ha2luZ1VuaXF1ZVJlZigqbmV3IFBhaW50
UmVuZGVyaW5nQ29udGV4dDJEKGNhbnZhcykpOwogfQogCiBQYWludFJlbmRlcmluZ0NvbnRleHQy
RDo6UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQoQ2FudmFzQmFzZSYgY2FudmFzKQpAQCAtNDcsNCAr
NDcsNSBAQCBQYWludFJlbmRlcmluZ0NvbnRleHQyRDo6UGFpbnRSZW5kZXJpbmdDCiBQYWludFJl
bmRlcmluZ0NvbnRleHQyRDo6flBhaW50UmVuZGVyaW5nQ29udGV4dDJEKCkgPSBkZWZhdWx0Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvUGFpbnRSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lv
biAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QYWludFJlbmRlcmluZ0Nv
bnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDE4ICszNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBQYWludFJlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1YmxpYyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlIHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFBhaW50
UmVuZGVyaW5nQ29udGV4dDJEKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFBhaW50UmVuZGVyaW5nQ29udGV4dDJEPiBjcmVhdGUoQ2FudmFzQmFzZSYpOworICAgIHN0YXRp
YyBVbmlxdWVSZWY8UGFpbnRSZW5kZXJpbmdDb250ZXh0MkQ+IGNyZWF0ZShDYW52YXNCYXNlJik7
CiAKICAgICB2aXJ0dWFsIH5QYWludFJlbmRlcmluZ0NvbnRleHQyRCgpOwogCiAgICAgQ3VzdG9t
UGFpbnRDYW52YXMmIGNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEN1c3RvbVBhaW50
Q2FudmFzPihjYW52YXNCYXNlKCkpOyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBpc1BhaW50KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgUGFpbnRSZW5kZXJpbmdDb250
ZXh0MkQoQ2FudmFzQmFzZSYpOworCisgICAgYm9vbCBpc1BhaW50KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NBTlZBU1JFTkRFUklOR0NPTlRFWFQoV2ViQ29yZTo6UGFpbnRSZW5k
ZXJpbmdDb250ZXh0MkQsIGlzUGFpbnQoKSkKKwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1BsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1Bs
YWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICsz
NywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogCitVbmlxdWVSZWY8UGxhY2Vob2xkZXJS
ZW5kZXJpbmdDb250ZXh0PiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52
YXNCYXNlJiBjYW52YXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmZXJlbmNlTWFraW5nVW5pcXVl
UmVmKCpuZXcgUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykpOworfQorCiBQbGFj
ZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OlBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChDYW52
YXNCYXNlJiBjYW52YXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KGNhbnZhcykKKyAg
ICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeyBjYW52YXMgfQorICAgICwgbV9pbWFnZUJ1ZmZl
clBpcGUgeyBJbWFnZUJ1ZmZlclBpcGU6OmNyZWF0ZSgpIH0KIHsKLSAgICBtX2ltYWdlQnVmZmVy
UGlwZSA9IEltYWdlQnVmZmVyUGlwZTo6Y3JlYXRlKCk7CiB9CiAKIEhUTUxDYW52YXNFbGVtZW50
KiBQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9QbGFjZWhvbGRlclJlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvUGxhY2Vob2xkZXJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEz
ICszNywxNSBAQCBjbGFzcyBPZmZzY3JlZW5DYW52YXM7CiBjbGFzcyBQbGFjZWhvbGRlclJlbmRl
cmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQpOwogcHVi
bGljOgotICAgIFBsYWNlaG9sZGVyUmVuZGVyaW5nQ29udGV4dChDYW52YXNCYXNlJik7CisgICAg
c3RhdGljIFVuaXF1ZVJlZjxQbGFjZWhvbGRlclJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShDYW52
YXNCYXNlJik7CiAKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKCkgY29uc3Q7CiAKICAg
ICBjb25zdCBSZWZQdHI8SW1hZ2VCdWZmZXJQaXBlPiYgaW1hZ2VCdWZmZXJQaXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZUJ1ZmZlclBpcGU7IH0KIAogcHJpdmF0ZToKKyAgICBQbGFjZWhvbGRl
clJlbmRlcmluZ0NvbnRleHQoQ2FudmFzQmFzZSYpOworCiAgICAgYm9vbCBpc1BsYWNlaG9sZGVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9u
IDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQxLDcgKzQ4NDEsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAgICAgICAgIC8vIHNvIGZvciBXZWJH
TCAxLjAgdXBsb2FkcywgZGVmZXIgbWVhc3VyaW5nIHRoZWlyIHJlY3RhbmdsZSBhcyBsb25nIGFz
IHBvc3NpYmxlLgogICAgICAgICB0ZXhJbWFnZUltcGwoZnVuY3Rpb25JRCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6Oklt
YWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGZhbHNlLCBpbnB1
dFNvdXJjZUltYWdlUmVjdCwgZGVwdGgsIHVucGFja0ltYWdlSGVpZ2h0KTsKICAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICB9LCBbJl0oY29uc3QgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiYgY2Fu
dmFzKSAtPiBFeGNlcHRpb25Pcjx2b2lkPiB7CisgICAgfSwgWyZdKFJlZlB0cjxIVE1MQ2FudmFz
RWxlbWVudD4mIGNhbnZhcykgLT4gRXhjZXB0aW9uT3I8dm9pZD4gewogICAgICAgICBhdXRvIHZh
bGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGZ1bmN0aW9uTmFtZSwg
Y2FudmFzLmdldCgpKTsKICAgICAgICAgaWYgKHZhbGlkYXRpb25SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAkocmV2aXNpb24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKLXN0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hlc0Rldmlj
ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2UmIGRldmljZSkK
K3N0YXRpYyBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzSWZDb250ZXh0TWF0Y2hlc0RldmljZShj
b25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0LCBXZWJHUFVEZXZpY2UmIGRldmlj
ZSkKIHsKICAgICBpZiAoaXM8R1BVQ2FudmFzQ29udGV4dD4oY29udGV4dCkpIHsKICAgICAgICAg
YXV0byYgY29udGV4dEdQVSA9IGRvd25jYXN0PEdQVUNhbnZhc0NvbnRleHQ+KGNvbnRleHQpOwpA
QCAtMTk1LDcgKzE5NSw3IEBAIFdlYkdQVURldmljZSogSW5zcGVjdG9yQ2FudmFzOjpkZXZpY2VD
b24KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBJbnNwZWN0b3JDYW52YXM6OmlzRGV2
aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KSBjb25z
dAorYm9vbCBJbnNwZWN0b3JDYW52YXM6OmlzRGV2aWNlRm9yQ2FudmFzQ29udGV4dChjb25zdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewogICAgIGlmIChhdXRvKiBk
ZXZpY2UgPSBkZXZpY2VDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBjYW52YXNJZkNvbnRleHRN
YXRjaGVzRGV2aWNlKGNvbnRleHQsICpkZXZpY2UpOwpAQCAtMTA3NiwxNiArMTA3NiwxNiBAQCBT
dHJpbmcgSW5zcGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50CiAgICAgfQogCiAjaWYgRU5B
QkxFKFdFQkdMKQotICAgIGF1dG8qIGNvbnRleHQgPSBub2RlLT5yZW5kZXJpbmdDb250ZXh0KCk7
CisgICAgYXV0byYgY29udGV4dCA9IG5vZGUtPnJlbmRlcmluZ0NvbnRleHQoKTsKICAgICBpZiAo
aXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAgIGRvd25jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVyQ2xl
YXJGb3JJbnNwZWN0b3IodHJ1ZSk7CisgICAgICAgIGRvd25jYXN0PFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNvbnRleHQpLnNldFByZXZlbnRCdWZmZXJDbGVhckZvckluc3BlY3Rvcih0cnVl
KTsKICNlbmRpZgogCiAgICAgRXhjZXB0aW9uT3I8VW5jYWNoZWRTdHJpbmc+IHJlc3VsdCA9IG5v
ZGUtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zKTsKIAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBp
ZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpCi0gICAgICAgIGRvd25j
YXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KCpjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVy
Q2xlYXJGb3JJbnNwZWN0b3IoZmFsc2UpOworICAgICAgICBkb3duY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlPihjb250ZXh0KS5zZXRQcmV2ZW50QnVmZmVyQ2xlYXJGb3JJbnNwZWN0b3Io
ZmFsc2UpOwogI2VuZGlmCiAKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZpc2lvbiAy
NzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKICAgICBXZWJHUFVEZXZpY2UqIGRldmljZUNvbnRleHQoKSBjb25zdDsKLSAgICBib29sIGlz
RGV2aWNlRm9yQ2FudmFzQ29udGV4dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JikgY29uc3Q7Cisg
ICAgYm9vbCBpc0RldmljZUZvckNhbnZhc0NvbnRleHQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpIGNvbnN0OwogI2VuZGlmCiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhc0NhbGxUcmFjZXIuY3BwCShyZXZpc2lvbiAy
NzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRy
YWNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgSW5zcGVjdG9yQ2FudmFzQWdlbnQqIGVuYWJsZWRDYW52YXNBZ2Vu
dChDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0KQorc3RhdGlj
IEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudmFzQWdlbnQoY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCkKIHsKICAgICBBU1NFUlQoSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uUHVibGljOjpoYXNGcm9udGVuZHMoKSk7CiAKQEAgLTgzLDcg
KzgzLDcgQEAgc3RhdGljIEluc3BlY3RvckNhbnZhc0FnZW50KiBlbmFibGVkQ2FudgogfQogCiAj
ZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTihBcmd1bWVudFR5cGUpIFwKLU9wdGlv
bmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50PiBJbnNwZWN0
b3JDYW52YXNDYWxsVHJhY2VyOjpwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBlIGFyZ3VtZW50KSBcCitPcHRp
b25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcjo6cHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBhcmd1bWVudCkg
XAogeyBcCiAgICAgaWYgKGF1dG8qIGNhbnZhc0FnZW50ID0gZW5hYmxlZENhbnZhc0FnZW50KGNh
bnZhc1JlbmRlcmluZ0NvbnRleHQpKSBcCiAgICAgICAgIHJldHVybiBjYW52YXNBZ2VudC0+cHJv
Y2Vzc0FyZ3VtZW50KGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIGFyZ3VtZW50KTsgXApAQCAtOTMs
NyArOTMsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jCiAgICAg
Rk9SX0VBQ0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNTX0FS
R1VNRU5UX0RFRklOSVRJT04pCiAjdW5kZWYgUFJPQ0VTU19BUkdVTUVOVF9ERUZJTklUSU9OCiAK
LXZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5hbWUsIEluc3Bl
Y3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50cykKK3Zv
aWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVjb3JkQWN0aW9uKGNvbnN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmluZyYmIG5hbWUsIElu
c3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYmIGFyZ3VtZW50cykK
IHsKICAgICBpZiAoYXV0byogY2FudmFzQWdlbnQgPSBlbmFibGVkQ2FudmFzQWdlbnQoY2FudmFz
UmVuZGVyaW5nQ29udGV4dCkpCiAgICAgICAgIGNhbnZhc0FnZW50LT5yZWNvcmRBY3Rpb24oY2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShhcmd1bWVudHMpKTsK
QEAgLTEwMSwxNCArMTAxLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6cmVj
b3JkQWMKIAogT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2VkQXJn
dW1lbnQ+IEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OnByb2Nlc3NBcmd1bWVudChjb25zdCBI
VE1MQ2FudmFzRWxlbWVudCYgY2FudmFzRWxlbWVudCwgdWludDMyX3QgYXJndW1lbnQpCiB7Ci0g
ICAgQVNTRVJUKGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpKTsKLSAgICByZXR1cm4g
cHJvY2Vzc0FyZ3VtZW50KCpjYW52YXNFbGVtZW50LnJlbmRlcmluZ0NvbnRleHQoKSwgYXJndW1l
bnQpOworICAgIHJldHVybiBwcm9jZXNzQXJndW1lbnQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdD
b250ZXh0KCksIGFyZ3VtZW50KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2Vy
OjpyZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmIGNhbnZhc0VsZW1lbnQsIFN0
cmluZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50
cyYmIGFyZ3VtZW50cykKIHsKLSAgICBBU1NFUlQoY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250
ZXh0KCkpOwotICAgIHJlY29yZEFjdGlvbigqY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0
KCksIFdURk1vdmUobmFtZSksIFdURk1vdmUoYXJndW1lbnRzKSk7CisgICAgcmVjb3JkQWN0aW9u
KGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KGFyZ3VtZW50cykpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyLmgJ
KHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXNDYWxsVHJhY2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDEyIEBAIHB1
YmxpYzoKICAgICB1c2luZyBQcm9jZXNzZWRBcmd1bWVudHMgPSBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8T3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1lbnQ+PjsKIAogI2RlZmluZSBQUk9DRVNTX0FSR1VN
RU5UX0RFQ0xBUkFUSU9OKEFyZ3VtZW50VHlwZSkgXAotICAgIHN0YXRpYyBPcHRpb25hbDxQcm9j
ZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmLCBB
cmd1bWVudFR5cGUpOyBcCisgICAgc3RhdGljIE9wdGlvbmFsPFByb2Nlc3NlZEFyZ3VtZW50PiBw
cm9jZXNzQXJndW1lbnQoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIEFyZ3VtZW50VHlw
ZSk7IFwKIC8vIGVuZCBvZiBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9OCiAgICAgRk9SX0VB
Q0hfSU5TUEVDVE9SX0NBTlZBU19DQUxMX1RSQUNFUl9BUkdVTUVOVChQUk9DRVNTX0FSR1VNRU5U
X0RFQ0xBUkFUSU9OKQogI3VuZGVmIFBST0NFU1NfQVJHVU1FTlRfREVDTEFSQVRJT04KIAotICAg
IHN0YXRpYyB2b2lkIHJlY29yZEFjdGlvbihDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgU3RyaW5n
JiYsIFByb2Nlc3NlZEFyZ3VtZW50cyYmID0geyB9KTsKKyAgICBzdGF0aWMgdm9pZCByZWNvcmRB
Y3Rpb24oY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBQcm9jZXNzZWRB
cmd1bWVudHMmJiA9IHsgfSk7CiAKICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvY2Vzc2VkQXJndW1l
bnQ+IHByb2Nlc3NBcmd1bWVudChjb25zdCBIVE1MQ2FudmFzRWxlbWVudCYsIHVpbnQzMl90KTsK
ICAgICBzdGF0aWMgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgSFRNTENhbnZhc0VsZW1lbnQmLCBT
dHJpbmcmJiwgUHJvY2Vzc2VkQXJndW1lbnRzJiYgPSB7IH0pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTcsMTMgKzQxNyw3
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZyYW1lTmF2aWdhdGUKIAogdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ1NTQ2FudmFzQ2xpZW50Tm9kZXMoQ2FudmFzQmFz
ZSYgY2FudmFzQmFzZSkKIHsKLSAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZS5yZW5kZXJp
bmdDb250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBpbnNwZWN0b3JDYW52
YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKCpjb250ZXh0KTsKKyAgICBhdXRvIGluc3BlY3RvckNh
bnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY2FudmFzQmFzZS5yZW5kZXJpbmdDb250ZXh0KCkp
OwogICAgIEFTU0VSVChpbnNwZWN0b3JDYW52YXMpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFz
KQogICAgICAgICByZXR1cm47CkBAIC00NDcsNyArNDQxLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudgogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZGlkQ2hhbmdlQ2FudmFzTWVtb3J5KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDaGFuZ2VDYW52YXNNZW1vcnkoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBSZWZQdHI8SW5zcGVj
dG9yQ2FudmFzPiBpbnNwZWN0b3JDYW52YXM7CiAKQEAgLTQ3NywxMSArNDcxLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ2hhbmdlQ2FudgogCiB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmIGNhbnZhc0Jhc2UsIGNvbnN0IE9wdGlv
bmFsPEZsb2F0UmVjdD4mKQogewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRl
cmluZ0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7Cisg
ICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jhc2Uu
cmVuZGVyaW5nQ29udGV4dCgpKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAgICBp
ZiAoIWluc3BlY3RvckNhbnZhcykKICAgICAgICAgcmV0dXJuOwpAQCAtNDkxLDExICs0ODEsNyBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpjYW52YXNDaGFuZ2VkCiAKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJiBjYW52YXNCYXNlKQog
ewotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlLnJlbmRlcmluZ0NvbnRleHQoKTsKLSAg
ICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gZmluZEluc3BlY3RvckNhbnZhcygqY29udGV4dCk7CisgICAgYXV0byBpbnNwZWN0b3JD
YW52YXMgPSBmaW5kSW5zcGVjdG9yQ2FudmFzKGNhbnZhc0Jhc2UucmVuZGVyaW5nQ29udGV4dCgp
KTsKICAgICBBU1NFUlQoaW5zcGVjdG9yQ2FudmFzKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZh
cykKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzLDcgKzQ4OSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OmNhbnZhc0Rlc3Ryb3kKICAgICB1bmJpbmRDYW52YXMoKmluc3BlY3RvckNhbnZh
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0Nh
bnZhc0ZyYW1lKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9yY2VEaXNw
YXRjaCkKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZEZpbmlzaFJlY29yZGluZ0NhbnZh
c0ZyYW1lKGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIGJvb2wgZm9yY2VE
aXNwYXRjaCkKIHsKICAgICBpZiAoIWNvbnRleHQuaGFzQWN0aXZlSW5zcGVjdG9yQ2FudmFzQ2Fs
bFRyYWNlcigpKQogICAgICAgICByZXR1cm47CkBAIC01MzcsNyArNTIzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZGlkRmluaXNoUmVjbwogICAgIG1fcmVjb3JkaW5nQ2FudmFzSWRl
bnRpZmllcnMucmVtb3ZlKGluc3BlY3RvckNhbnZhcy0+aWRlbnRpZmllcigpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQsIEpTQzo6SlNHbG9iYWxPYmplY3QmIGV4ZWMsIEpT
Qzo6SlNPYmplY3QqIG9wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xl
U3RhcnRSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCwgSlNDOjpKU0dsb2JhbE9iamVjdCYgZXhlYywgSlNDOjpKU09iamVjdCogb3B0aW9ucykKIHsK
ICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0b3JDYW52YXMoY29udGV4dCk7
CiAgICAgQVNTRVJUKGluc3BlY3RvckNhbnZhcyk7CkBAIC01NTksNyArNTQ1LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UgogICAgIHN0YXJ0UmVjb3JkaW5nKCpp
bnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwg
V1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RvcFJlY29yZGluZ0Nh
bnZhcyhjb25zdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQogewogICAgIGRpZEZp
bmlzaFJlY29yZGluZ0NhbnZhc0ZyYW1lKGNvbnRleHQsIHRydWUpOwogfQpAQCAtNjgyLDcgKzY2
OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95V2UKICNlbmRpZiAv
LyBFTkFCTEUoV0VCR1BVKQogCiAjZGVmaW5lIFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTihB
cmd1bWVudFR5cGUpIFwKLU9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nl
c3NlZEFyZ3VtZW50PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cHJvY2Vzc0FyZ3VtZW50KENhbnZh
c1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIEFyZ3VtZW50VHlwZSBh
cmd1bWVudCkgXAorT3B0aW9uYWw8SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcjo6UHJvY2Vzc2Vk
QXJndW1lbnQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojpwcm9jZXNzQXJndW1lbnQoY29uc3QgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dCYgY2FudmFzUmVuZGVyaW5nQ29udGV4dCwgQXJndW1lbnRUeXBl
IGFyZ3VtZW50KSBcCiB7IFwKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGZpbmRJbnNwZWN0
b3JDYW52YXMoY2FudmFzUmVuZGVyaW5nQ29udGV4dCk7IFwKICAgICBBU1NFUlQoaW5zcGVjdG9y
Q2FudmFzKTsgXApAQCAtNjkyLDcgKzY3OCw3IEBAIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0Nh
bGxUcmFjZXI6OlByb2MKICAgICBGT1JfRUFDSF9JTlNQRUNUT1JfQ0FOVkFTX0NBTExfVFJBQ0VS
X0FSR1VNRU5UKFBST0NFU1NfQVJHVU1FTlRfREVGSU5JVElPTikKICN1bmRlZiBQUk9DRVNTX0FS
R1VNRU5UX0RFRklOSVRJT04KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVjb3JkQWN0
aW9uKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQsIFN0cmlu
ZyYmIG5hbWUsIEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6OlByb2Nlc3NlZEFyZ3VtZW50cyYm
IGFyZ3VtZW50cykKK3ZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlY29yZEFjdGlvbihjb25z
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjYW52YXNSZW5kZXJpbmdDb250ZXh0LCBTdHJpbmcm
JiBuYW1lLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRBcmd1bWVudHMmJiBh
cmd1bWVudHMpCiB7CiAgICAgQVNTRVJUKGNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaGFzQWN0aXZl
SW5zcGVjdG9yQ2FudmFzQ2FsbFRyYWNlcigpKTsKIApAQCAtODg3LDcgKzg3Myw3IEBAIFJlZlB0
cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0EKICAgICByZXR1cm4gaW5zcGVjdG9y
Q2FudmFzOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQor
UmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmZpbmRJbnNwZWN0
b3JDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBm
b3IgKGF1dG8mIGluc3BlY3RvckNhbnZhcyA6IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFz
LnZhbHVlcygpKSB7CiAgICAgICAgIGlmIChpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQo
KSA9PSAmY29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgJKHJldmlzaW9uIDI3NzIwOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtOTksMTAgKzk5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lTmF2
aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDaGFuZ2VDU1NDYW52YXNDbGllbnROb2RlcyhD
YW52YXNCYXNlJik7CiAgICAgdm9pZCBkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENh
bnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKLSAgICB2b2lkIGRpZENoYW5nZUNhbnZhc01lbW9yeShD
YW52YXNSZW5kZXJpbmdDb250ZXh0Jik7Ci0gICAgdm9pZCBkaWRGaW5pc2hSZWNvcmRpbmdDYW52
YXNGcmFtZShDYW52YXNSZW5kZXJpbmdDb250ZXh0JiwgYm9vbCBmb3JjZURpc3BhdGNoID0gZmFs
c2UpOwotICAgIHZvaWQgY29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQmLCBKU0M6OkpTR2xvYmFsT2JqZWN0JiwgSlNDOjpKU09iamVjdCogb3B0aW9ucyk7
Ci0gICAgdm9pZCBjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VDYW52YXNNZW1vcnkoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYpOworICAgIHZvaWQgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoY29u
c3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYsIGJvb2wgZm9yY2VEaXNwYXRjaCA9IGZhbHNlKTsK
KyAgICB2b2lkIGNvbnNvbGVTdGFydFJlY29yZGluZ0NhbnZhcyhjb25zdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0JiwgSlNDOjpKU0dsb2JhbE9iamVjdCYsIEpTQzo6SlNPYmplY3QqIG9wdGlvbnMp
OworICAgIHZvaWQgY29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoY29uc3QgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCYpOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICB2b2lkIGRpZEVuYWJsZUV4dGVu
c2lvbihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBkaWRDcmVhdGVXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYsIFdlYkdM
UHJvZ3JhbSYpOwpAQCAtMTIwLDExICsxMjAsMTEgQEAgcHVibGljOgogCiAgICAgLy8gSW5zcGVj
dG9yQ2FudmFzQ2FsbFRyYWNlcgogI2RlZmluZSBQUk9DRVNTX0FSR1VNRU5UX0RFQ0xBUkFUSU9O
KEFyZ3VtZW50VHlwZSkgXAotICAgIE9wdGlvbmFsPEluc3BlY3RvckNhbnZhc0NhbGxUcmFjZXI6
OlByb2Nlc3NlZEFyZ3VtZW50PiBwcm9jZXNzQXJndW1lbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCYsIEFyZ3VtZW50VHlwZSk7IFwKKyAgICBPcHRpb25hbDxJbnNwZWN0b3JDYW52YXNDYWxsVHJh
Y2VyOjpQcm9jZXNzZWRBcmd1bWVudD4gcHJvY2Vzc0FyZ3VtZW50KGNvbnN0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQmLCBBcmd1bWVudFR5cGUpOyBcCiAvLyBlbmQgb2YgUFJPQ0VTU19BUkdVTUVO
VF9ERUNMQVJBVElPTgogICAgIEZPUl9FQUNIX0lOU1BFQ1RPUl9DQU5WQVNfQ0FMTF9UUkFDRVJf
QVJHVU1FTlQoUFJPQ0VTU19BUkdVTUVOVF9ERUNMQVJBVElPTikKICN1bmRlZiBQUk9DRVNTX0FS
R1VNRU5UX0RFQ0xBUkFUSU9OCi0gICAgdm9pZCByZWNvcmRBY3Rpb24oQ2FudmFzUmVuZGVyaW5n
Q29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9jZXNzZWRB
cmd1bWVudHMmJiA9IHsgfSk7CisgICAgdm9pZCByZWNvcmRBY3Rpb24oY29uc3QgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYsIFN0cmluZyYmLCBJbnNwZWN0b3JDYW52YXNDYWxsVHJhY2VyOjpQcm9j
ZXNzZWRBcmd1bWVudHMmJiA9IHsgfSk7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFJlY29yZGlu
Z09wdGlvbnMgewpAQCAtMTQ2LDcgKzE0Niw3IEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdQVSkKICAgICB2b2lkIHVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQmKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFz
KGNvbnN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAg
IFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNl
Jik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDEwICsy
NDIsMTAgQEAgc3RhdGljIEpTQzo6SlNPYmplY3QqIG9iamVjdEFyZ3VtZW50QXQoUwogc3RhdGlj
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNhbnZhc1JlbmRlcmluZ0NvbnRleHQoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB0YXJnZXQpCiB7CiAgICAgaWYgKGF1dG8qIGNhbnZhcyA9IEpTSFRN
TENhbnZhc0VsZW1lbnQ6OnRvV3JhcHBlZCh2bSwgdGFyZ2V0KSkKLSAgICAgICAgcmV0dXJuIGNh
bnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNhbnZhcy0+cmVuZGVy
aW5nQ29udGV4dCgpOwogI2lmIEVOQUJMRShPRkZTQ1JFRU5fQ0FOVkFTKQogICAgIGlmIChhdXRv
KiBjYW52YXMgPSBKU09mZnNjcmVlbkNhbnZhczo6dG9XcmFwcGVkKHZtLCB0YXJnZXQpKQotICAg
ICAgICByZXR1cm4gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgICAgIHJldHVybiAm
Y2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKICAgICBpZiAoYXV0byogY29udGV4
dCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1dyYXBwZWQodm0sIHRhcmdldCkpCiAg
ICAgICAgIHJldHVybiBjb250ZXh0OwpAQCAtMzQ5LDEwICszNDksOCBAQCB2b2lkIFBhZ2VDb25z
b2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6CiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXM8SFRNTENhbnZhc0VsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvJiBjYW52YXNFbGVtZW50ID0gZG93bmNhc3Q8SFRNTENhbnZhc0VsZW1lbnQ+
KCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBjYW52YXNSZW5kZXJp
bmdDb250ZXh0ID0gY2FudmFzRWxlbWVudC5yZW5kZXJpbmdDb250ZXh0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byByZXN1bHQgPSBzbmFwc2hvdENhbnZhcyhjYW52
YXNFbGVtZW50LCAqY2FudmFzUmVuZGVyaW5nQ29udGV4dCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFVUkwgPSByZXN1bHQudmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHNuYXBz
aG90Q2FudmFzKGNhbnZhc0VsZW1lbnQsIGNhbnZhc0VsZW1lbnQucmVuZGVyaW5nQ29udGV4dCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVVJMID0gcmVzdWx0LnZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2Uu
Y3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9DdXN0b21QYWludEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBA
IEltYWdlRHJhd1Jlc3VsdCBDdXN0b21QYWludEltYWdlOjpkb0N1c3QKICAgICBpZiAocmVzdWx0
LnR5cGUoKSAhPSBDYWxsYmFja1Jlc3VsdFR5cGU6OlN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7CiAKLSAgICBjYW52YXMtPnJlcGxheURpc3BsYXlM
aXN0KCZkZXN0Q29udGV4dCk7CisgICAgY2FudmFzLT5yZXBsYXlEaXNwbGF5TGlzdChkZXN0Q29u
dGV4dCk7CiAKICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWREcmF3OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNp
b24gMjc3MjA5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsNyBAQCBib29sIFJlbmRlckhUTUxDYW52
YXM6OnJlcXVpcmVzTGF5ZXIoKSBjCiAgICAgaWYgKFJlbmRlclJlcGxhY2VkOjpyZXF1aXJlc0xh
eWVyKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQgPSBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpKQotICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNBY2NlbGVyYXRlZCgpOwotCi0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBjYW52YXNFbGVtZW50KCkucmVuZGVyaW5nQ29udGV4dCgpLmlzQWNjZWxl
cmF0ZWQoKTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludFJlcGxhY2VkKFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC03Myw3
ICs3MCw3IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnRSZXBsYWNlZChQYWkKICAgICBM
YXlvdXRSZWN0IGNvbnRlbnRCb3hSZWN0ID0gdGhpcy0+Y29udGVudEJveFJlY3QoKTsKIAogICAg
IGlmIChjb250ZXh0LmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpKSB7Ci0gICAgICAgIGlmICgh
Y29udGV4dC5jb250ZW5mdWxQYWludERldGVjdGVkKCkgJiYgY2FudmFzRWxlbWVudCgpLnJlbmRl
cmluZ0NvbnRleHQoKSkKKyAgICAgICAgaWYgKCFjb250ZXh0LmNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSAmJiAhY2FudmFzRWxlbWVudCgpLnJlbmRlcmluZ0NvbnRleHQoKS5pc05vbmUoKSkKICAg
ICAgICAgICAgIGNvbnRleHQuc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAyNzcyMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIg
KzkxLDEyIEBAIENhbnZhc0NvbXBvc2l0aW5nU3RyYXRlZ3kgY2FudmFzQ29tcG9zaXQKIHsKICAg
ICBBU1NFUlQocmVuZGVyZXIuaXNDYW52YXMoKSk7CiAgICAgCi0gICAgY29uc3QgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlci5u
b2RlKCkpOwotICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKTsK
LSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPmlzQWNjZWxlcmF0ZWQoKSkKKyAgICBjb25z
dCBhdXRvKiBjYW52YXMgPSBkb3duY2FzdDxIVE1MQ2FudmFzRWxlbWVudD4ocmVuZGVyZXIubm9k
ZSgpKTsKKyAgICBhdXRvJiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0LmlzQWNjZWxlcmF0ZWQoKSkKICAgICAgICAgcmV0dXJuIFVuYWNjZWxl
cmF0ZWRDYW52YXM7CiAgICAgCi0gICAgaWYgKGNvbnRleHQtPmlzR1BVQmFzZWQoKSkKKyAgICBp
ZiAoY29udGV4dC5pc0dQVUJhc2VkKCkpCiAgICAgICAgIHJldHVybiBDYW52YXNBc0xheWVyQ29u
dGVudHM7CiAKICAgICByZXR1cm4gQ2FudmFzUGFpbnRlZFRvTGF5ZXI7IC8vIE9uIE1hYyBhbmQg
aU9TIHdlIHBhaW50IGFjY2VsZXJhdGVkIGNhbnZhc2VzIGludG8gdGhlaXIgbGF5ZXJzLgpAQCAt
MTA2NCw5ICsxMDY0LDggQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUNvbmZpZ3Vy
YQogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKSB8fCBFTkFCTEUo
T0ZGU0NSRUVOX0NBTlZBUykKICAgICBlbHNlIGlmIChyZW5kZXJlcigpLmlzQ2FudmFzKCkgJiYg
Y2FudmFzQ29tcG9zaXRpbmdTdHJhdGVneShyZW5kZXJlcigpKSA9PSBDYW52YXNBc0xheWVyQ29u
dGVudHMpIHsKLSAgICAgICAgY29uc3QgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGRvd25j
YXN0PEhUTUxDYW52YXNFbGVtZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7Ci0gICAgICAgIGlm
IChhdXRvKiBjb250ZXh0ID0gY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpCi0gICAgICAgICAg
ICBtX2dyYXBoaWNzTGF5ZXItPnNldENvbnRlbnRzVG9QbGF0Zm9ybUxheWVyKGNvbnRleHQtPnBs
YXRmb3JtTGF5ZXIoKSwgR3JhcGhpY3NMYXllcjo6Q29udGVudHNMYXllclB1cnBvc2U6OkNhbnZh
cyk7CisgICAgICAgIGNvbnN0IGF1dG8qIGNhbnZhcyA9IGRvd25jYXN0PEhUTUxDYW52YXNFbGVt
ZW50PihyZW5kZXJlcigpLmVsZW1lbnQoKSk7CisgICAgICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0
Q29udGVudHNUb1BsYXRmb3JtTGF5ZXIoY2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkucGxhdGZv
cm1MYXllcigpLCBHcmFwaGljc0xheWVyOjpDb250ZW50c0xheWVyUHVycG9zZTo6Q2FudmFzKTsK
IAogICAgICAgICBsYXllckNvbmZpZ0NoYW5nZWQgPSB0cnVlOwogICAgIH0K
</data>
<flag name="commit-queue"
          id="448886"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>