<?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>212576</bug_id>
          
          <creation_ts>2020-05-30 20:51:10 -0700</creation_ts>
          <short_desc>Extended Color: Replace Color constructors taking numeric values with type specific factory functions</short_desc>
          <delta_ts>2020-06-01 07: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>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>dino</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hi</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1657733</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-30 20:51:10 -0700</bug_when>
    <thetext>Extended Color: Replace Color constructors taking numeric values with type specific factory functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657734</commentid>
    <comment_count>1</comment_count>
      <attachid>400688</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-30 20:56:29 -0700</bug_when>
    <thetext>Created attachment 400688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657735</commentid>
    <comment_count>2</comment_count>
      <attachid>400689</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-30 21:04:46 -0700</bug_when>
    <thetext>Created attachment 400689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657736</commentid>
    <comment_count>3</comment_count>
      <attachid>400690</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-30 21:08:17 -0700</bug_when>
    <thetext>Created attachment 400690
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657738</commentid>
    <comment_count>4</comment_count>
      <attachid>400692</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-30 21:19:50 -0700</bug_when>
    <thetext>Created attachment 400692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657786</commentid>
    <comment_count>5</comment_count>
      <attachid>400704</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-31 07:48:28 -0700</bug_when>
    <thetext>Created attachment 400704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657788</commentid>
    <comment_count>6</comment_count>
      <attachid>400705</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-31 08:27:13 -0700</bug_when>
    <thetext>Created attachment 400705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657793</commentid>
    <comment_count>7</comment_count>
      <attachid>400707</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-31 09:25:27 -0700</bug_when>
    <thetext>Created attachment 400707
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657893</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-01 07:17:17 -0700</bug_when>
    <thetext>Committed r262377: &lt;https://trac.webkit.org/changeset/262377&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400707.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657894</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-01 07:18:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/63828497&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400688</attachid>
            <date>2020-05-30 20:56:29 -0700</date>
            <delta_ts>2020-05-30 21:04:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200530205627.patch</filename>
            <type>text/plain</type>
            <size>112595</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAg
ICogY3NzL0NTU1ZhbHVlUG9vbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1
ZVBvb2w6OlN0YXRpY0NTU1ZhbHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVu
dDo6Y3JlYXRlSW5uZXJUZXh0U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6
Q2FudmFzU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dFJHQkEgY29uc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3U2hhcGVIaWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
T3ZlcmxheTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d1BhaW50UmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0Jv
dW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VDb2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xh
eW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJ
bnRlZ3JhdGlvbjo6TGluZUxheW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNh
cHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3Qp
OgorICAgICAgICAqIHBhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG91Y2hFdmVudFJlZ2lvbkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmll
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAg
ICAgICAqIHBhZ2UvUHJpbnRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29u
dGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmxpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpk
YXJrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29s
b3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5k
ZWRDb2xvcnNFcXVhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNW
YWxpZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6
dGFnQXNTZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpleHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVk
Q29sb3I6OkV4dGVuZGVkQ29sb3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI6OmdldERlYnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb250ZW50c0xheWVyRGVidWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9u
ZUxheWVyRGVidWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVy
Q0E6OmNyZWF0ZVRyYW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVDb3ZlcmFnZU1hcDo6VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDb3ZlcmFnZU1hcDo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9D
b2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xvckZvck1hcmtlckxpbmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAg
ICAgICAqIHBsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lUaWxlQ2FjaGU6OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9QYWludEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6
Zm9yY2VkVGV4dENvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRk
ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBh
aW50UmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJl
Y3RQcmVzc2VkQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRU
ZXh0Um91bmRlZFJlY3RDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNl
bWVudFRleHRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBs
dWdpbkJvcmRlckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJh
bWVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1u
Qm9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpib3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Ym9yZGVyRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXJzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092
ZXJsYXlzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29u
c3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xv
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2Jv
eERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50
TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUlPUzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQ
cm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToK
KyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjp0aXRsZVRleHRDb2xvckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0
YWNobWVudExheW91dDo6bGF5T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRB
dHRhY2htZW50SWNvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2ht
ZW50VGl0bGVCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBy
b2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9y
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3Jv
dW5kQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5h
Y3RpdmVUZXh0Q29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1
YnRpdGxlVGV4dENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQ
cm9ncmVzc0JhckJhY2tncm91bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjph
dHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6YXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJNYXRoTUxCbG9jazo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdD
dXJyZW50Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcv
U1ZHU3RvcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0
b3BDb2xvckluY2x1ZGluZ09wYWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGlvbkNvbG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3Rp
bmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdl
T3ZlcmxheUNsaWVudDo6ZHJhd1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmll
d1Zpc3VhbElkZW50aWZpY2F0aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3Vh
bElkZW50aWZpY2F0aW9uT3ZlcmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0p
OgorCiAyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBFeHRlbmRlZCBDb2xvcjogQWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZE9iamVjdC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFs
aXplQXR0cmlidQogICAgIAogICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVl
KHIsIGcsIGIpOwotICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBD
b2xvcihyLCBnLCBiKSk7CisgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFs
dWUsIG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRo
RWxlbWVudCA9IG9iamVjdC5pc01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OklzTWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5
IEBAIFN0YXRpY0NTU1ZhbHVlUG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0
VmFsdWUuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRW
YWx1ZS5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNw
YXJlbnRDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xv
cjo6dHJhbnNwYXJlbnQpKTsKLSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpT
dGF0aWNDU1NWYWx1ZSwgQ29sb3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNv
bnN0cnVjdChDU1NWYWx1ZTo6U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOwor
ICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFs
dWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25z
dHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gZmlyc3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5
d29yZDsgKytpKQogICAgICAgICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1Zh
bHVlOjpTdGF0aWNDU1NWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyAr
Njg3LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlm
ICghYXJncy5hdEVuZCgpKQogICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1
cm4gQ29sb3IoY29sb3JDaGFubmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVs
c1syXSwgY29sb3JDaGFubmVsc1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRl
bmRlZENvbG9yKGNvbG9yQ2hhbm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5l
bHNbMl0sIGNvbG9yQ2hhbm5lbHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9u
YWw8U2ltcGxlQ29sb3I+IHBhcnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2Us
IGJvb2wgYWNjZXB0UXVpcmt5Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBA
QCBSZW5kZXJTdHlsZSBIVE1MSW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1
dG9GaWxsU3Ryb25nUGFzc3dvcmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkg
ewogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVC
bG9jayk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwg
UGVyY2VudCB9KTsKLSAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBm
LCAwLjBmLCAwLjZmIH0pOworICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMCwgMTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRP
dmVyZmxvdyhUZXh0T3ZlcmZsb3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRN
YXNrSW1hZ2UoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dv
cmRNYXNrSW1hZ2UoKSkpOwogICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVk
IGZvciB0aGUgbWFzay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNoYWRvd0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3Rh
dGUoKS5zaGFkb3dDb2xvcikuc2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRv
d0NvbG9yLnNlcmlhbGl6ZWQoKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzZXRTaGFkb3dDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywx
NyArMTMwNywxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAK
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRo
LCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEp
CiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3Io
Z3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7
Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3Iociwg
ZywgYiwgYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIs
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9h
dCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENv
bG9yKGMsIG0sIHksIGssIGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWln
aHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsMTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShD
b2xvciBjb2xvcikKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZl
bCwgZmxvYXQgYWxwaGEpCi0gICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAK
IENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9h
dCBhKQotICAgIDogbV9zdHlsZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUo
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5
bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0
IGEpCi0gICAgOiBtX3N0eWxlKENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwg
YywgbSwgeSwgaywgYSB9KQorICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNv
bG9yRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAg
LTE2Miw3ICsxNjIsNyBAQCBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25z
CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywg
ZmxvYXQgYiwgZmxvYXQgYSkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9y
IHsgciwgZywgYiwgYSB9OworICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFs
ZW50Q01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JPdmVybGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2
b2lkIGRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1
YWRUb1BhdGgocXVhZCwgYm91bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1h
a2VTaW1wbGVDb2xvcigyNTUsIDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1Bh
dGgoY2xpcFF1YWQsIGJvdW5kcykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZv
aWQgZHJhd1NoYXBlSGlnaGxpZ2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmlu
Z1ZpZXcgPSBjb250YWluaW5nRnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3
ID0gY29udGFpbmluZ0ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNv
bnN0IENvbG9yIHNoYXBlSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29u
c3RleHByIGF1dG8gc2hhcGVIaWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIs
IDEyNywgMjA0KTsKIAogICAgIFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVP
dXRzaWRlSW5mby0+Y29tcHV0ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAg
LTM0NSw3ICszNDUsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3ND
CiAKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwogCi0gICAgICAgIGNvbnN0IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgy
LCAxMjcsIDE1Myk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250
ZXh0LmZpbGxQYXRoKG1hcmdpblBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lk
IEluc3BlY3Rvck92ZXJsYXk6OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGlu
ZykgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7CiAKLSAgICAgICAgY29uc3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAs
IDE2OCk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxMTEsIDE2OCwgMjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihpbmRpY2F0aW5nQ29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2lu
dDo6emVybygpLCB2aWV3cG9ydFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBw
YWludFJlY3RzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1
dG8gcGFpbnRSZWN0c0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25z
dCBUaW1lUmVjdFBhaXImIHBhaXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZv
aWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKDEpOwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwg
MC4wZiwgMC4wZiwgMC42Zik7CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Io
Ym91bmRzQ29sb3IpOwogCiAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkg
KzY3MCw5IEBAIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9p
ZCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW5zcGVjdG9yT3ZlcmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQog
ewotICAgIGNvbnN0IENvbG9yIHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDAuNmYpOwotICAgIGNvbnN0IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBm
LCAwLjJmKTsKLSAgICBjb25zdCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBm
LCAwLjVmKTsKKyAgICBjb25zdGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0
UnVsZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHBy
IGF1dG8gZGFya1J1bGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAog
ICAgIEludFBvaW50IHNjcm9sbE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRo
IEluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5z
bGF0ZShlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUg
LyAyLjBmKTsKIAotICAgIGNvbnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigy
NTUsIDI1NSwgMTk0KTsKKyAgICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5k
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoZWxlbWVudFRpdGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmls
bFBhdGgocGF0aCk7CiAKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0
YUJvcmRlclNpemUpOwogCi0gICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3Io
MTI4LCAxMjgsIDEyOCk7CisgICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihlbGVtZW50VGl0bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBh
dGgocGF0aCk7CkBAIC0xMDY4LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6
ZHJhd0VsZW1lbnRUaXRsZSgKICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdU
ZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9
KTsKICAgICB9OwogCi0gICAgZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgs
IDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0g
ICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAg
dGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBk
cmF3VGV4dChlbGVtZW50Q2xhc3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3
VGV4dChlbGVtZW50UHNldWRvVHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50
VGFnTmFtZSwgbWFrZVNpbXBsZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4g
c3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFs
dWUsIG1ha2VTaW1wbGVDb2xvcigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3
aXRoIFhNTFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVu
dENsYXNzVmFsdWUsIG1ha2VTaW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBp
biBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0
KGVsZW1lbnRQc2V1ZG9UeXBlLCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgi
ICJfcywgQ29sb3I6OmJsYWNrKTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpi
bGFjayk7CiAgICAgZHJhd1RleHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3
ICsxMDg1LDcgQEAgUGF0aCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAg
ICAgICB0ZXh0UG9zaXRpb25YID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAg
dGV4dFBvc2l0aW9uWSArPSBmb250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9z
LCBDb2xvcigxNzAsIDEzLCAxNDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VT
aW1wbGVDb2xvcigxNzAsIDEzLCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9y
OjpibGFjayk7CiAgICAgICAgIGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQxLDcgKzE0MSw3IEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9i
amUKIAogICAgIGRvdWJsZSBhID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJs
ZSgiYSIsIGEpKQotICAgICAgICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3IociwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUg
WzAuLjFdIHJhbmdlLgogICAgIGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMg
Q29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAg
ICAgICAgIGEgPSAxOwogCi0gICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGlu
dD4oYSAqIDI1NSkpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGlj
X2Nhc3Q8aW50PihhICogMjU1KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9y
KGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVj
dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3Jh
dGlvbkxpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRp
b25MaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRv
d0RhdGEqIExpbmVMYXlvdXQ6OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0
aW5ncygpLnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRl
YnVnVGV4dFNoYWRvdyhJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFs
LCB0cnVlLCBDb2xvcigwLCAwLCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTaGFkb3dEYXRhPiBkZWJ1Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hh
ZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7
CiAgICAgcmV0dXJuICZkZWJ1Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3Bw
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJl
ZmVyZW5jZXNNZWRpYUFGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0
cmluZyBDYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRl
ZmF1bHQgdmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRp
YUNvbnRyb2xzLmNzcyBmb3IgLXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAg
ICAvLyBhbmQgd2Via2l0LW1lZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAw
LjggKiAyNTUpOworICAgIGNvbnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVh
cmFuY2VCZWhhdmlvciBiZWhhdmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1
Z1BhZ2VPdmVybGF5cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1
Z1BhZ2VPdmVybGF5cy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3Zlcmxh
eShQYWdlJiBwYWdlKQotICAgICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41Ziwg
MC4wZiwgMC4wZiwgMC40ZikpCisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9
CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQg
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVn
aW9uT3ZlcmxheShwYWdlLCBDb2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAg
OiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41
ZiwgMC4wZiwgMC40ZikpCiAgICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wg
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hh
bmdlZDsKIH0KIAotc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZl
bnRSZWdpb25Db2xvcnMoKQorc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xv
cj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJl
Z2lvbkNvbG9ycyA9IG1ha2VOZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBF
bnRyeSB7CkBAIC0xNjMsOSArMTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBD
b2xvcj4mIHRvdQogICAgICAgICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwK
ICAgICAgICAgICAgIHsgIm1vdXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9Owot
ICAgICAgICBIYXNoTWFwPFN0cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFNpbXBsZUNvbG9yPiBtYXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVz
KQotICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5
LmcsIGVudHJ5LmIsIDUwIH0pOworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtl
U2ltcGxlQ29sb3IoZW50cnkuciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0
dXJuIG1hcDsKICAgICB9KCkpOwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyAr
MjQ2LDcgQEAgdm9pZCBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlm
CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50
VHJhY2tpbmdSZWdpb25zLmV2ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykg
ewotICAgICAgICBDb2xvciByZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8g
cmVnaW9uQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRv
IGl0ID0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lv
bi5rZXkpOwogICAgICAgICBpZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgp
KQogICAgICAgICAgICAgcmVnaW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQg
RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJu
aW5nQ29sb3IpIHsKICAgICAgICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAg
ICAgICAgZGVidWdSZWN0LmludGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZp
bGxSZWN0KGRlYnVnUmVjdCwgQ29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQu
ZmlsbFJlY3QoZGVidWdSZWN0LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAg
fQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFs
bFBhZ2VzV2l0aEJvdW4KICAgICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICog
KHBhZ2VTaXplSW5QaXhlbHMuaGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3
aG9sZSBiYWNrZ3JvdW5kIGJ5IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3IoQ29sb3IoMjU1LCAyNTUsIDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3IobWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAg
IGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENv
bnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGlu
ZVkgPSBjdXJyZW50SGVpZ2h0IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNhdmUoKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihD
b2xvcigwLCAwLCAyNTUpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29s
b3IoQ29sb3IoMCwgMCwgMjU1KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ry
b2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5l
WSksIEludFBvaW50KHBhZ2VXaWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24gMjYyMzUy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcElt
YWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0aXZlSW1h
Z2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1cnJlbnRT
dWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3luY2hyb25v
dXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAgICAgICAg
ICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9yKENvbG9y
Ojp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAKQEAgLTI0
OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpCiAg
ICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1czo6RGVj
b2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21wbGV0ZSkg
fHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9j
dXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0gU3RhcnRB
bmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dyb3VuZCkg
ewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0LCBDb2xv
cihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RS
ZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAg
ICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFnZTo6ZHJh
dyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVjdGFuZ2xl
IGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZpbmlzaCBk
ZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsKLSAgICAg
ICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9yKENv
bG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RS
ZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlOjol
cyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmluaXNoXSIs
IF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWRS
ZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBAIENvbG9y
OjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7CiB9CiAK
LUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6Y3JlYXRl
KGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0aGUgdW5p
b24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQotICAgIC8v
IHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVyIGJlbG93
LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1fY29sb3JE
YXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAgQVNTRVJU
KGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0IENvbG9y
JiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEzMywxMiBA
QCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0
ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBy
ICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBn
ICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBi
ICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwogfQogCiBD
b2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xvciBDb2xv
cjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAg
ICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAot
ICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgYWxwaGEo
KQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QKQEAgLTI0
NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0CiAKICAg
ICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNpcmVkIGFu
ZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0
LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICog
KGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0
aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhh
KTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBuZXdBbHBo
YSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5h
bHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3MSw3ICsy
NTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAKICAgICBD
b2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKICAgICBp
ZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgICAg
ICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI4
NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0CiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6dG9TUkdC
QUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygpOwogfQog
Ci1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBi
KQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAg
cmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNTRVJUKGEu
aXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRs
ZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdpdGhvdXRQ
cmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNpbXBsZUNv
bG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBvbmVudCgp
LCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6Ymxl
bmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50KCksIHBy
b2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBvbmVudCgp
LCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVudCgpLCBw
cm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsKLSAgICBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7CisgICAg
KTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29s
b3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29sb3Igewog
cHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCB0aGVz
ZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0aGUgb25l
cyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAgIENvbG9y
KFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihTaW1wbGVD
b2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFNp
bXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwogICAgIH0K
IAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNpbXBsZUNv
bG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAgICB7Ci0g
ICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRpYygpOwot
ICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAgICAgICBz
ZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQotICAgIENv
bG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0U2ltcGxl
Q29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBDb2xvcihm
bG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAgc2V0U2lt
cGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CisgICAgICAg
IHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZy
b20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1wbGVDb2xv
cihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAgICAvLyBa
ZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMg
dGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xv
ciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdz
ID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRlZENvbG9y
LmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQogCiAgICAg
ZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAtMTE0LDEy
ICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwogICAgIH0K
IAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUKLSAgICAv
LyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBub3JtYWwg
Q29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxv
YXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRlbmRlZENv
bG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
V0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBAQCBwdWJs
aWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBjb25zdDsK
LSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsKIAogICAg
IC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291cmNlLW92
ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4dGVuZGVk
IGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KICAgICBm
cmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CiAg
ICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEs
IGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwo
Y29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVyZW5jZVNx
dWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJvb2wgaXNC
bGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0ZToKICAg
ICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRTaW1w
bGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9y
RGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQor
CisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZs
YWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNWYWxpZCgp
IHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNvbG9yOyB9
CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIuCiAgICAg
Ly8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4ICsyMjks
NiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFzaFZhbHVl
ID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBlbXB0eUhh
c2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1wbGVDb2xv
ckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVkQ29sb3Iq
IGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMuCi1XRUJD
T1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBD
b2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywg
ZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENv
bG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0yODgsNiAr
MjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMKICAgICBy
ZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
JiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFz
RXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQo
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2Vt
YW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAgaWYgKGEu
aXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBAIE9wdGlv
bmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCiAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29sb3IgeyBj
MSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29sb3IgeyBF
eHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpIH07CiAg
ICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6aXNCbGFj
aygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09IDE7CiB9
CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMs
IGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJuIEV4dGVu
ZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9CisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5kZWRDb2xv
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBAQCBwcml2
YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxv
YXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBvbmVudHMo
YzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCi0g
ICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4gbV9jb21w
b25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6U1JHQiB9
OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBiKQpAQCAt
NzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVkQ29sCiAg
ICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNwYWNlIGlz
IHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0bHkgdG8g
aW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VYUE9SVCBD
b2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9h
dCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVyOjpnZXRE
ZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0JhY2tkcm9w
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8gaGFzIGJh
Y2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwg
MjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGggPSAxMjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50KCkpIHsK
ICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9IENvbG9y
KDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAgICAgICBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQgbGF5ZXI6
IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisgICAgICAg
IGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1hbCBsYXll
cjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29udGVudHNM
YXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9u
LXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGgg
Y29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xv
cigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQorICAgICAg
ICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcg
bGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29udGFpbmVy
OiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsg
Ly8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRhdGVEZWJ1
Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBhcyBhIGtl
eSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0cyBhIHdh
c2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlvbi4KICAg
ICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkpICYmICFt
X3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOworICAgICAg
ICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwg
MCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNpYmxlVGls
ZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5nKCJWaXNp
YmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNlKSk7CkBA
IC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3JkZXIoUGxh
dGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGggPSA0Owog
c3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hvd2luZ0Jv
cmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwgMTI4LCAx
ODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29s
b3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3QgZmxvYXQg
Y2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVyRGVidWdC
b3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93aW5nQm9y
ZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2lu
Z0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigpOwogfQog
CiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAgLTM3NzQs
NyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91bmQKIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9yLCBmbG9h
dCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVyKCkpIHsK
LSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5
ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAxMjgs
IDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRPV1MpCiAg
ICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1D
QUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbE1h
cmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsKICAgICBj
b25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tncm91bmRD
b2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNjZWxlcmF0
ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29uc3QgQ29s
b3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYp
OwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYsIDAuZiwg
MC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byBh
Y2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwg
MjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVsQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0
byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihTdHJpbmc6
Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZpc2lvbiAy
NjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJh
Z2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNvdmVyYWdl
TWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldpZHRoKDIp
OwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5jaG9yUG9p
bnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIu
Z2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VTaW1wbGVD
b2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxh
eWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAgICBtX2xh
eW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7CiAgICAg
bV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50KEZsb2F0
UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0
Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0Vmlld3Bv
cnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwg
MTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIu
Z2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7Ci0gICAg
bV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29s
b3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxheWVyLmdl
dCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsK
IAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJbmRpY2F0
b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2libGVWaWV3
cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGlsZUNvdmVy
YWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3I7CiAg
ICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2FzZSBTeW5j
aHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9ySW5kaWNh
dGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIwMCwgODAs
IDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Nj
cm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRp
Y2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNh
dG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0
aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1LCAyNTUs
IDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9sbGluZ0lu
ZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigwLCAy
MDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JS
ZWYgY29sb3IsIFNlbWFudGljVAogICAgIH0KIAogICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1w
bGVDb2xvckZyb21DR0NvbG9yKGNvbG9yKSk7Ci0gICAgc2V0SXNTZW1hbnRpYygpOworICAgIHRh
Z0FzU2VtYW50aWMoKTsKIH0KIAogc3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw5ICs2NCw5IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKGMKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYgKCFwaXhlbFszXSkK
LSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50OwogCi0gICAgcmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzNdKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVsWzBdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4
ZWxbM10sIHBpeGVsWzNdKTsKIH0KIAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTIwNSwxNSArMjA1LDE1IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFy
a2VyTGluZVN0eWwKICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgLy8gUmVkCiAgICAgY2FzZSBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBj
YWNoZWRDR0NvbG9yKHVzZURhcmtNb2RlID8gQ29sb3IgeyAyNTUsIDE0MCwgMTQwLCAyMTcgfSA6
IENvbG9yIHsgMjU1LCA1OSwgNDgsIDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29s
b3IodXNlRGFya01vZGUgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxNDAsIDE0MCwgMjE3KSA6IG1h
a2VTaW1wbGVDb2xvcigyNTUsIDU5LCA0OCwgMTkxKSk7CiAgICAgLy8gQmx1ZQogICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKICAg
ICBjYXNlIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRp
b25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzOgogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYWNo
ZWRDR0NvbG9yKHVzZURhcmtNb2RlID8gQ29sb3IgeyA0MCwgMTQ1LCAyNTUsIDIxNyB9IDogQ29s
b3IgeyAwLCAxMjIsIDI1NSwgMTkxIH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1
c2VEYXJrTW9kZSA/IG1ha2VTaW1wbGVDb2xvcig0MCwgMTQ1LCAyNTUsIDIxNykgOiBtYWtlU2lt
cGxlQ29sb3IoMCwgMTIyLCAyNTUsIDE5MSkpOwogICAgIC8vIEdyZWVuCiAgICAgY2FzZSBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIGNhY2hl
ZENHQ29sb3IodXNlRGFya01vZGUgPyBDb2xvciB7IDUwLCAyMTUsIDc1LCAyMTcgfSA6IENvbG9y
IHsgMjUsIDE3NSwgNTAsIDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNl
RGFya01vZGUgPyBtYWtlU2ltcGxlQ29sb3IoNTAsIDIxNSwgNzUsIDIxNykgOiBtYWtlU2ltcGxl
Q29sb3IoMjUsIDE3NSwgNTAsIDE5MSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDcsMTIgKzMwNywxMiBAQCBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVy
CiAgICAgICAgIHJldHVybiBEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAg
ICAgICAgICBXZWJDb3JlOjpibGVuZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyks
CiAgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3Mp
LAotICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5z
cGFyZW50KSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3Is
IENvbG9yOjp0cmFuc3BhcmVudCwgcHJvZ3Jlc3MpKTsKIAogICAgIGNvbnN0IERyb3BTaGFkb3dG
aWx0ZXJPcGVyYXRpb24qIGZyb21PcGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uPihmcm9tKTsKICAgICBJbnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3BlcmF0
aW9uID8gZnJvbU9wZXJhdGlvbi0+bG9jYXRpb24oKSA6IEludFBvaW50KCk7CiAgICAgaW50IGZy
b21TdGREZXZpYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+c3RkRGV2aWF0
aW9uKCkgOiAwOwotICAgIENvbG9yIGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3Bl
cmF0aW9uLT5jb2xvcigpIDogQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBDb2xvciBm
cm9tQ29sb3IgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9y
Ojp0cmFuc3BhcmVudDsKICAgICAKICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlv
bjo6Y3JlYXRlKAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRp
b24sIHByb2dyZXNzKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYs
NyArOTYsNyBAQCBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewogICAg
IC8vIEZJWE1FOiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4K
IAotICAgIHJldHVybiBDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcik7CiB9CiAKIENvbG9y
IHNlbWFudGljQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkocmV2aXNpb24gMjYy
MzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw5IEBAIHVuc2lnbmVkIExlZ2FjeVRpbGVDYWNo
ZTo6dGlsZUNhcGFjaXR5Rm8KIENvbG9yIExlZ2FjeVRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGls
ZUJvcmRlcihMZWdhY3lUaWxlR3JpZCogZ3JpZCkgY29uc3QKIHsKICAgICBpZiAoZ3JpZCA9PSBt
X3pvb21lZE91dFRpbGVHcmlkLmdldCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoMC4yZiwgMS4w
ZiwgMC5mLCAwLjVmKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
MC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKIAotICAgIHJldHVybiBDb2xvcigwLjJmLCAwLjlmLCAw
LmYsIDAuNWYpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMmYsIDAu
OWYsIDAuZiwgMC41Zik7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZFJlcGFpbnRJblBpZWNlcyhj
b25zdCBDR1JlY3QmIGRpcnR5UmVjdCwgQ0dTUmVnaW9uT2JqIGRpcnR5UmVnaW9uLCBDR0Zsb2F0
IGNvbnRlbnRzU2NhbGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3RydWN0IFBhaW50SW5mbyB7CiAgICAg
Ym9vbCBmb3JjZVRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgfHwg
Zm9yY2VXaGl0ZVRleHQoKTsgfQogICAgIGJvb2wgZm9yY2VCbGFja1RleHQoKSBjb25zdCB7IHJl
dHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZvcmNlQmxhY2tUZXh0
KTsgfQogICAgIGJvb2wgZm9yY2VXaGl0ZVRleHQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2
aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZvcmNlV2hpdGVUZXh0KTsgfQotICAgIENvbG9y
IGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIChmb3JjZUJsYWNrVGV4dCgpKSA/IENv
bG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQorICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgPyBDb2xvcjo6YmxhY2sgOiBDb2xvcjo6
d2hpdGU7IH0KIAogICAgIGJvb2wgc2tpcFJvb3RCYWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4g
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpTa2lwUm9vdEJhY2tncm91bmQp
OyB9CiAgICAgYm9vbCBwYWludFJvb3RCYWNrZ3JvdW5kT25seSgpIGNvbnN0IHsgcmV0dXJuIHBh
aW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Um9vdEJhY2tncm91bmRPbmx5KTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRP
YmplY3QuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCwyOSArNzQsMTAg
QEAgc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dMZWZ0TQogc3RhdGljIGNvbnN0
IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dQYWRkaW5nID0gNDsKIHN0YXRpYyBjb25zdCBmbG9hdCBy
ZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9IDM7CiAKLXN0YXRpYyBjb25zdCBDb2xvciYg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUsIDEwNSwgMTA1LCAyNDIpOwotICAgIHJl
dHVybiBwcmVzc2VkOwotfQotCi1zdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJv
dW5kZWRSZWN0Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3Rh
bmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0
YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29sb3IoKQotewotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAyNDAsIDI0MCwgMjU1KTsKLSAgICBy
ZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgdW5hdmFpbGFibGVQbHVn
aW5Cb3JkZXJDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFu
ZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwotICAgIHJldHVybiBzdGFuZGFyZDsKLX0KK2NvbnN0
ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDEwNSwgMTA1LCAxMDUsIDI0Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVu
dFRleHRSb3VuZGVkUmVjdENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyNSwgMTI1LCAxMjUsIDI0
Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigyNDAsIDI0MCwgMjQwLCAyNTUpOworY29uc3RleHByIGF1dG8gdW5hdmFpbGFibGVQbHVnaW5C
b3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1LCAyMTYpOwogCiBSZW5k
ZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRkZWRPYmplY3QoSFRNTEZyYW1lT3duZXJFbGVt
ZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQogICAgIDogUmVuZGVyV2lkZ2V0KGVs
ZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpAQCAtMzEyLDcgKzI5Myw3IEBAIHZvaWQgUmVuZGVyRW1i
ZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0LmNsaXAoY29udGVudFJlY3QpOwot
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5hdmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1By
ZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFByZXNzZWRDb2xvcigpIDogcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvciht
X3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91
bmRlZFJlY3RQcmVzc2VkQ29sb3IgOiByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yKTsK
ICAgICBjb250ZXh0LmZpbGxQYXRoKGJhY2tncm91bmQpOwogCiAgICAgUGF0aCBzdHJva2VQYXRo
OwpAQCAtMzIwLDIxICszMDEsMjEgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRS
ZXBsYWNlZAogICAgIHN0cm9rZVJlY3QuaW5mbGF0ZSgxKTsKICAgICBzdHJva2VQYXRoLmFkZFJv
dW5kZWRSZWN0KHN0cm9rZVJlY3QsIEZsb2F0U2l6ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVj
dFJhZGl1cyArIDEsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzICsgMSkpOwogCi0g
ICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKCkp
OworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xv
cik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoMik7CiAgICAgY29udGV4dC5zdHJv
a2VQYXRoKHN0cm9rZVBhdGgpOwogCiAgICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNz
ID0gZm9udC5mb250TWV0cmljcygpOwogICAgIGZsb2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNl
bWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RM
ZWZ0VGV4dE1hcmdpbik7CiAgICAgZmxvYXQgbGFiZWxZID0gcm91bmRmKHJlcGxhY2VtZW50VGV4
dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0
KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSkgLyAyICsgZm9udE1ldHJpY3MuYXNjZW50KCkgKyBy
ZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFRvcFRleHRNYXJnaW4pOwotICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOworICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAgICBjb250ZXh0LmRyYXdCaWRpVGV4dChmb250
LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJlbFkpKTsKIAogICAgIGlmIChzaG91bGRVbmF2
YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihwYWdlKCksIG1fcGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24pKSB7CiAgICAgICAgIGFycm93UmVjdC5pbmZsYXRlKC1yZXBsYWNlbWVudEFycm93
Q2lyY2xlUGFkZGluZyk7CiAKICAgICAgICAgY29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVy
KDEuMCk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9y
KCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihyZXBsYWNlbWVudFRleHRDb2xvcik7
CiAgICAgICAgIGNvbnRleHQuZmlsbEVsbGlwc2UoYXJyb3dSZWN0KTsKIAogICAgICAgICBjb250
ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6Q2xlYXIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02OCwyMyArNjgsOSBAQCBSZW5kZXJGcmFtZVNldDo6R3JpZEF4
aXM6OkdyaWRBeGlzKCkKIHsKIH0KIAotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJTdGFydEVk
Z2VDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBjb2xvcigxNzAs
IDE3MCwgMTcwKTsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYg
Ym9yZGVyRW5kRWRnZUNvbG9yKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+
IGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIHJldHVybiBjb2xvcjsKLX0KLQotc3RhdGljIGNv
bnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7Ci0gICAgcmV0dXJuIGNvbG9yOwotfQorY29u
c3RleHByIGF1dG8gYm9yZGVyU3RhcnRFZGdlQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTcwLCAx
NzAsIDE3MCk7Citjb25zdGV4cHIgYXV0byBib3JkZXJFbmRFZGdlQ29sb3IgPSBDb2xvcjo6Ymxh
Y2s7Citjb25zdGV4cHIgYXV0byBib3JkZXJGaWxsQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA4
LCAyMDgsIDIwOCk7CiAKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBib3JkZXJSZWN0KQogewpA
QCAtOTUsMTMgKzgxLDEzIEBAIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVy
KGMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0LgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4dC5maWxsUmVjdChib3JkZXJSZWN0
LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS52aXNpdGVkRGVw
ZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDog
Ym9yZGVyRmlsbENvbG9yKCkpOworICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJh
bWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVu
dENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRl
ckZpbGxDb2xvcik7CiAgICAgCiAgICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkg
aWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUK
ICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChi
b3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJl
Y3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0
YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9p
bnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0LnkoKSksIEludFNpemUoMSwgaGVp
Z2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0
KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJv
cmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KElu
dFBvaW50KGJvcmRlclJlY3QubWF4WCgpIC0gMSwgYm9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEs
IGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQogCkBAIC0xMTQsMTMg
KzEwMCwxMyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAg
CiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWlu
dEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVT
ZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENv
bG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZp
bGxDb2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxl
bWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldp
dGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29s
b3IpOwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBl
bm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQg
b2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0Lmhl
aWdodCgpID49IDMpIHsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJl
Y3QubG9jYXRpb24oKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9y
KCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVj
dC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3Jk
ZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChib3Jk
ZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VD
b2xvcik7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3JkZXJS
ZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAxKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJv
cmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMTgsNyArMjIx
OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIKICNlbmRpZgog
CiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMKLSAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC41ZiwgMC4yZikpOworICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuNWYs
IDAuMmYpKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChwaXhlbFNuYXBwZWRDbGlwUmVjdCk7
CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMDEs
NyArMzIwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludERlYnVnT3ZlcmwKICAg
ICAvLyBUaGUgaW50ZXJhY3RpdmUgcGFydC4KICAgICAvLyBQYWludCByZWN0cyBmb3IgdG91Y2gg
YWN0aW9uLgogICAgIGlmICh2aXNpYmxlRGVidWdPdmVybGF5UmVnaW9ucyAmIFRvdWNoQWN0aW9u
UmVnaW9uKSB7Ci0gICAgICAgIENvbG9yIHJlZ2lvbkNvbG9yKDAsIDAsIDI1NSwgNTApOworICAg
ICAgICBjb25zdGV4cHIgYXV0byByZWdpb25Db2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAy
NTUsIDUwKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IocmVnaW9uQ29sb3IpOwogICAg
ICAgICBmb3IgKGF1dG8gcmVjdCA6IGV2ZW50UmVnaW9uLnJlZ2lvbigpLnJlY3RzKCkpCiAgICAg
ICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzAsNyArNjcw
LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlTGlzdEJveFNlbGVjdAogQ29sb3IgUmVu
ZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKICAgICAvLyBVc2UgYSBibHVlIGNvbG9y
IGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRoZW1lIGRvZXNuJ3QgZGVmaW5lIGFueXRoaW5n
LgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBjb2xvciBieSBkZWZhdWx0IGlmIHRoZSBwbGF0
Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0aGluZy4KICAgICAvLyBUaGlzIGNvbG9yIG1h
dGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9yLgotICAgIHJldHVybiBDb2xvcigxNzYsIDE3
NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDE3NiwgMTc2LCAxNzYpOwogfQog
CiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CkBAIC0xMzU3LDcgKzEz
NTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvCiAKIENvbG9y
IFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1
LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBDb2xvcjo6eWVsbG93OwogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6
OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAgIGF1dG8gbWFya2VyUmVjdCA9IEZsb2F0UmVj
dCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAyNCwgcmVjdC55KCkgKyA4LCAxNiwgMTYgfTsK
ICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0gRmxvYXRSb3VuZGVkUmVjdCB7IG1hcmtlclJl
Y3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgOCB9IH07Ci0gICAgYXV0byBjb2xvciA9IENv
bG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRNYXJrZXJSZWN0LCBj
b2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyArMTQ1OSw3IEBAIENvbG9yIFJlbmRlclRoZW1l
OjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAgICAvLyBUaGlzIGNvbG9yIGlzIGV4cGVjdGVk
IHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3BhcmVudCBvdmVybGF5LAogICAgIC8vIG1ha2lu
ZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRzIGFscGhhIHZhbHVlIGluZGljYXRlcy4KLSAg
ICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRl
eHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IHsgcmV0dXJuIENvbG9yKDAsIDAs
IDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gQ29sb3I6OmJsYWNrOyB9CiAg
ICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNSaW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKICAg
ICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpIHsgcmV0dXJuIDM7IH0KICAg
ICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdPZmZzZXQoZmxvYXQgb3V0bGluZVdpZHRo
KSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0bGluZVdpZHRoIC0gcGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDYgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpIGZpbmFsOwogI2VuZGlmCiAK
LSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdDsKICAgICBGbG9hdFJlY3QgYWRk
Um91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENvbG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQs
IE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTMxOSw3ICszMTksNiBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRDb250
ZW50U2l6ZUNhdGVnCiAKIGNvbnN0IENvbG9yJiBSZW5kZXJUaGVtZUlPUzo6c2hhZG93Q29sb3Io
KSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMC4wZiwg
MC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCkBAIC0zODcsNyArMzg2
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYQogCiAgICAgaWYg
KGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSkgewogICAgICAgICBhdXRvIGJvcmRlciA9IGJveC5z
dHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVjdCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBh
aW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBDb2xvcigwLjBmLCAw
LjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5k
ZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAu
MGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKIAogICAgICAgICBhdXRvIGNsaXAgPSBhZGRSb3VuZGVk
Qm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0KCksIHJlY3QpOwogICAgICAgICBhdXRv
IHdpZHRoID0gY2xpcC53aWR0aCgpOwpAQCAtNDIzLDEwICs0MjIsMTAgQEAgYm9vbCBSZW5kZXJU
aGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYQogICAgICAgICB9CiAKICAgICAgICAgbGluZVdp
ZHRoID0gc3RkOjptYXg8ZmxvYXQ+KGxpbmVXaWR0aCwgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRM
aW5lcyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dM
aW5lQ2FwU3F1YXJlLCBsaW5lV2lkdGgsIENvbG9yIHsgMC4wZiwgMC4wZiwgMC4wZiwgMC43ZiB9
KTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsg
V1RGTW92ZShzaGFkb3cpIH0sIGtDR0xpbmVDYXBTcXVhcmUsIGxpbmVXaWR0aCwgbWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKSk7CiAKICAgICAgICAgbGlu
ZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluKHdpZHRoLCBoZWlnaHQpICogdGhpY2tu
ZXNzUmF0aW8sIDEpOwotICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8
Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIENv
bG9yIHsgMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBmIH0pOworICAgICAgICBkcmF3Sm9p
bmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtD
R0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwg
MS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBmKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBj
bGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0
KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQ4NCw3ICs0ODMsNyBA
QCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICBpZiAoaXND
aGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBib3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3Vu
ZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3Vu
ZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC44
ZikpOworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIu
cGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBm
LCAwLjhmKSk7CiAKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94
LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQo
Y2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVHcmFkaWVudCksIGNsaXAubG9jYXRp
b24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0
aW9uKTsKQEAgLTQ5Niw4ICs0OTUsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlv
RGVjb3JhdGlvCiAKICAgICAgICAgY2xpcC5pbmZsYXRlWCgtY2xpcC53aWR0aCgpICogSW5uZXJJ
bnZlcnNlUmF0aW8pOwogICAgICAgICBjbGlwLmluZmxhdGVZKC1jbGlwLmhlaWdodCgpICogSW5u
ZXJJbnZlcnNlUmF0aW8pOwotCi0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZHJhd1JhaXNl
ZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBzaGFkb3dDb2xvcigpKTsKKyAgICAgICAgCisg
ICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAs
IDAsIDAuN2YgKiAyNTUpOworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRF
bGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwgc2hhZG93Q29sb3IpOwogCiAgICAgICAgIEZsb2F0
U2l6ZSByYWRpdXMoY2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5oZWlnaHQoKSAvIDIuMGYpOwog
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXBSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRS
ZWN0KGNsaXAsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJhZGl1cykpOwpAQCAtNzMxLDcgKzcz
MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAg
RmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAoYnV0dG9uQ2xpcC53aWR0aCgpIC0g
Y291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykgLyAyLjAsIGJ1dHRvbkNsaXAubWF4
WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRF
bGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41
ZikpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShl
bGxpcHNlLCBDb2xvcjo6d2hpdGUsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4w
ZiwgMC4wZiwgMC41ZikpOwogICAgICAgICAgICAgZWxsaXBzZS5tb3ZlKHNpemUgKyBwYWRkaW5n
LCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2UgewpAQCAtNzUxLDggKzc1MSw4IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgfTsKIAogICAgICAg
ICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDAuMiA6IDAuNTsKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigwLjBmLCAwLjBm
LCAwLjBmLCBvcGFjaXR5KSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENv
bG9yKENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYs
IDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRG
aWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCBvcGFj
aXR5KSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZHJhd1BhdGgoUGF0aDo6cG9seWdv
blBhdGhGcm9tUG9pbnRzKHNoYWRvdykpOwogCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCku
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKQEAgLTg0MCw5ICs4NDAsOSBAQCBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvCiAKICAgICAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
ICAgIGlmIChyZWFkb25seSkKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ry
b2tlQ29sb3IoQ29sb3IoMTc4LCAxNzgsIDE3OCkpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMTc4LCAxNzgsIDE3OCkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNv
bG9yKENvbG9yKDc2LCA3NiwgNzYpKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCku
c2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDc2LCA3NiwgNzYpKTsKIAogICAgICAgICBS
ZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91bmRlZFJlY3RQYXRoID0gYWRvcHRDRihDR1Bh
dGhDcmVhdGVNdXRhYmxlKCkpOwogICAgICAgICBDR1BhdGhBZGRSb3VuZGVkUmVjdChyb3VuZGVk
UmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwgY29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7
CkBAIC05MTksMTMgKzkxOSwxMyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNz
QmFyKGNvCiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVj
dC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBhdXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICBzdHJva2VH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwotICAg
IHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhl
ZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwg
MHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xv
cigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ryb2tlR3JhZGll
bnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxlQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkp
OworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9y
KDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEu
MCwgbWFrZVNpbXBsZUNvbG9yKDB4OGQsIDB4OGQsIDB4OGQpKTsKICAgICBjb250ZXh0LnNldFN0
cm9rZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tlR3JhZGllbnQpKTsKIAotICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0cmFja1BhdGg7CiAgICAgRmxvYXRSZWN0IHRy
YWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1
LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNzQmFySGVpZ2h0IC0gMC41KTsKQEAgLTkzOSw4
ICs5MzksOCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAg
ICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0ID0gcHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKICAg
ICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJE
YXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAu
NSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBl
ckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC4wLCBDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpKTsKLSAgICB1cHBlckdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMS4wLCBDb2xvcigxOCwgMTgsIDE4LCA1MSkpOworICAgIHVwcGVyR3JhZGll
bnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgp
KTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3Io
MTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKHVw
cGVyR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgp
LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCByZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRI
ZWlnaHQpKTsKQEAgLTk1MSwxOCArOTUxLDE4IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgZG91YmxlIHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQ
cm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9
IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwogICAgICAgICBhdXRvIGJhckdyYWRpZW50ID0gR3Jh
ZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCks
IHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2
ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAg
ICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDE5NSwgMjE3LCAyNDcp
KTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBDb2xvcigxMTgsIDE2
NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40OSwgQ29sb3Io
MTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTEs
IENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNTUsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMTk1LCAyMTcsIDI0NykpOworICAgICAg
ICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2
NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40OSwgbWFrZVNp
bXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjUxLCBtYWtlU2ltcGxlQ29sb3IoMzYsIDExNCwgMjEwKSk7CisgICAgICAgIGJhckdy
YWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkp
OworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9y
KDU3LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxHcmFkaWVudChXVEZNb3Zl
KGJhckdyYWRpZW50KSk7CiAKICAgICAgICAgYXV0byBiYXJTdHJva2VHcmFkaWVudCA9IEdyYWRp
ZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2
ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxS
ZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7Ci0gICAgICAgIGJh
clN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcig5NSwgMTA3LCAxODMpKTsK
LSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUsIENvbG9yKDY2LCAx
MDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MS4wLCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcig5NSwgMTA3LCAxODMpKTsKKyAgICAgICAg
YmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUsIG1ha2VTaW1wbGVDb2xvcig2Niwg
MTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDEuMCwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2NikpOwogICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZUdyYWRpZW50KFdURk1vdmUoYmFyU3Ryb2tlR3JhZGllbnQpKTsKIAogICAgICAgICBQ
YXRoIGJhclBhdGg7CkBAIC0xNTY4LDEwICsxNTY4LDEwIEBAIENvbG9yIFJlbmRlclRoZW1lSU9T
OjpzeXN0ZW1Db2xvcihDU1NWYWwKIGNvbnN0IENHU2l6ZSBhdHRhY2htZW50U2l6ZSA9IHsgMTYw
LCAxMTkgfTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50Qm9yZGVyUmFkaXVzID0gMTY7Ci1z
dGF0aWMgQ29sb3IgYXR0YWNobWVudEJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjA0LCAy
MDQsIDIwNCk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50Qm9yZGVyQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIwNCk7CiBzdGF0aWMgQ0dGbG9hdCBhdHRhY2ht
ZW50Qm9yZGVyVGhpY2tuZXNzID0gMTsKIAotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVz
c0NvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjIyLCAyMjIsIDIyMik7IH0KK2NvbnN0ZXhwciBTaW1w
bGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMjIsIDIy
MiwgMjIyKTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFByb2dyZXNzQm9yZGVyVGhpY2tuZXNz
ID0gMzsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NTaXplID0gMzY7CkBAIC0x
ODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQcm9ncmVzcyhHcmFw
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZlcihjb250ZXh0KTsKIAogICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQcm9ncmVzc0JvcmRlclRoaWNrbmVz
cyk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcigp
KTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpKTsK
KyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0dGFjaG1lbnRQcm9ncmVzc0NvbG9yKTsKKyAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcik7CiAgICAgY29u
dGV4dC5zdHJva2VFbGxpcHNlKGluZm8ucHJvZ3Jlc3NSZWN0KTsKIAogICAgIEZsb2F0UG9pbnQg
Y2VudGVyID0gaW5mby5wcm9ncmVzc1JlY3QuY2VudGVyKCk7CkBAIC0xODk2LDcgKzE4OTYsNyBA
QCBzdGF0aWMgUGF0aCBhdHRhY2htZW50Qm9yZGVyUGF0aChSZW5kZXJBCiAKIHN0YXRpYyB2b2lk
IHBhaW50QXR0YWNobWVudEJvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBhdGgmIGJv
cmRlclBhdGgpCiB7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRhY2htZW50Qm9yZGVy
Q29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRhY2htZW50Qm9yZGVyQ29s
b3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRCb3JkZXJUaGlj
a25lc3MpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKIH0KQEAgLTIwMjQs
NyArMjAyNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0IKICAg
ICAvLyBEcmF3IGEgZHJvcCBzaGFkb3cgYXJvdW5kIHRoZSBjaXJjbGUuCiAgICAgLy8gVXNlIHRo
ZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1
ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3Bh
Y2UuCi0gICAgQ29sb3Igc2hhZG93Q29sb3IgPSBDb2xvciB7IDAuZiwgMC5mLCAwLmYsIDAuMWYg
fTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLmYs
IDAuZiwgMC5mLCAwLjFmKTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6
ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFy
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ5LDggKzE2NDksOCBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgfTsKICAgICBwYWludEluZm8uY29udGV4dCgp
LmZpbGxQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhhcnJvdzIpKTsKIAotICAgIENv
bG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAwLCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBh
cmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7CisgICAgY29uc3RleHByIGF1dG8gbGVmdFNl
cGFyYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDQwKTsKKyAgICBjb25zdGV4
cHIgYXV0byByaWdodFNlcGFyYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAy
NTUsIDQwKTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlIHNlcGFyYXRvciB0aGlja25lc3Mg
YW5kIHNwYWNlIGJlIHNjYWxlZCB1cCBieSBmb250U2NhbGU/CiAgICAgaW50IHNlcGFyYXRvclNw
YWNlID0gMjsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNl
ciBpZiBpdCBzdGF5cyB0aGluLgpAQCAtMjQ3Miw4ICsyNDcyLDggQEAgY29uc3QgQ0dGbG9hdCBh
dHRhY2htZW50SWNvblNlbGVjdGlvbkJvcgogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvbkJh
Y2tncm91bmRSYWRpdXMgPSAzOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvblRvVGl0bGVN
YXJnaW4gPSAyOwogCi1zdGF0aWMgQ29sb3IgYXR0YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3Io
KSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCAzMCk7IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50
SWNvbkJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTI1KTsgfQor
Y29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDMwKTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2ht
ZW50SWNvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEyNSk7
CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlRm9udFNpemUgPSAxMjsKIGNvbnN0IENH
RmxvYXQgYXR0YWNobWVudFRpdGxlQmFja2dyb3VuZFJhZGl1cyA9IDM7CkBAIC0yNDgxLDIzICsy
NDgxLDIzIEBAIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlQmFja2dyb3VuZFAKIGNvbnN0
IENHRmxvYXQgYXR0YWNobWVudFRpdGxlTWF4aW11bVdpZHRoID0gMTAwIC0gKGF0dGFjaG1lbnRU
aXRsZUJhY2tncm91bmRQYWRkaW5nICogMik7CiBjb25zdCBDRkluZGV4IGF0dGFjaG1lbnRUaXRs
ZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFRpdGxlSW5h
Y3RpdmVCYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcigyMDQsIDIwNCwgMjA0LCAyNTUp
OyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IoKSB7IHJl
dHVybiBDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUpOyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3Ig
YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MjA0LCAyMDQsIDIwNCwgMjU1KTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50VGl0
bGVJbmFjdGl2ZVRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUp
OwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRTdWJ0aXRsZUZvbnRTaXplID0gMTA7CiBjb25z
dCBpbnQgYXR0YWNobWVudFN1YnRpdGxlV2lkdGhJbmNyZW1lbnQgPSAxMDsKLXN0YXRpYyBDb2xv
ciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IoKSB7IHJldHVybiBDb2xvcig4MiwgMTQ1LCAy
MTQsIDI1NSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoODIsIDE0NSwgMjE0LCAyNTUpOwogCiBjb25zdCBDR0Zs
b2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhcldpZHRoID0gMzA7CiBjb25zdCBDR0Zsb2F0IGF0dGFj
aG1lbnRQcm9ncmVzc0JhckhlaWdodCA9IDU7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9n
cmVzc0Jhck9mZnNldCA9IC05OwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJC
b3JkZXJXaWR0aCA9IDE7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dy
b3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgODkpOyB9Ci1zdGF0aWMgQ29sb3Ig
YXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yKCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6Ondo
aXRlKTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yKCkg
eyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTI4KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0
dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAwLCA4OSk7Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmls
bENvbG9yID0gQ29sb3I6OndoaXRlOworY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQ
cm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAK
IGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyUmFkaXVzID0gNTsKLXN0
YXRpYyBDb2xvciBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcigpIHsgcmV0dXJuIENv
bG9yKDAsIDAsIDAsIDU2KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDU2KTsKIGNvbnN0
IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyV2lkdGggPSAyOwogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNoTGVuZ3RoID0gNjsKIApAQCAtMjU0
MSw3ICsyNTQxLDcgQEAgc3RhdGljIENvbG9yIHRpdGxlVGV4dENvbG9yRm9yQXR0YWNobWVudAog
ICAgICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFj
dGl2ZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBh
bHRlcm5hdGVTZWxlY3RlZENvbnRyb2xUZXh0Q29sb3JdKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgcmVzdWx0ID0gYXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IoKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlVGV4dENvbG9yOwogICAgIH0K
IAogICAgIHJldHVybiBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIocmVzdWx0KTsKQEAgLTI2NDcsNyArMjY0Nyw3IEBAIHZvaWQgQXR0YWNobWVudExheW91dDo6
bGF5T3V0U3VidGl0bGUoY28KICAgICBpZiAoc3VidGl0bGVUZXh0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQ29sb3Igc3VidGl0bGVDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3Io
KSk7CisgICAgQ29sb3Igc3VidGl0bGVDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5
QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IpOwogICAgIENG
U3RyaW5nUmVmIGxhbmd1YWdlID0gMDsgLy8gQnkgbm90IHNwZWNpZnlpbmcgYSBsYW5ndWFnZSB3
ZSB1c2UgdGhlIHN5c3RlbSBsYW5ndWFnZS4KICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250
ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5ndWFnZShrQ1RGb250VUlGb250U3lz
dGVtLCBhdHRhY2htZW50U3VidGl0bGVGb250U2l6ZSwgbGFuZ3VhZ2UpKTsKICAgICBOU0RpY3Rp
b25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsKQEAgLTI3MjEsNyArMjcyMSw3IEBAIHN0YXRpYyB2
b2lkIHBhaW50QXR0YWNobWVudEljb25CYWNrZ3JvdW4KICAgICBpZiAocGFpbnRCb3JkZXIpCiAg
ICAgICAgIGJhY2tncm91bmRSZWN0LmluZmxhdGUoLWF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9y
ZGVyVGhpY2tuZXNzKTsKIAotICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnQu
c3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50SWNvbkJhY2tncm91
bmRDb2xvcigpKTsKKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IgPSBhdHRhY2htZW50LnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudEljb25CYWNrZ3JvdW5kQ29s
b3IpOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoYmFja2dy
b3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGF0dGFjaG1lbnRJY29uQmFja2dyb3Vu
ZFJhZGl1cykpLCBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgaWYgKHBhaW50Qm9yZGVyKSB7CkBA
IC0yNzMyLDcgKzI3MzIsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRJY29uQmFja2dy
b3VuCiAgICAgICAgIFBhdGggYm9yZGVyUGF0aDsKICAgICAgICAgYm9yZGVyUGF0aC5hZGRSb3Vu
ZGVkUmVjdChib3JkZXJSZWN0LCBpY29uQmFja2dyb3VuZFJhZGl1c1NpemUpOwogCi0gICAgICAg
IENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IoKSk7CisgICAgICAgIENvbG9yIGJv
cmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGJvcmRlckNvbG9yKTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0
YWNobWVudEljb25TZWxlY3Rpb25Cb3JkZXJUaGlja25lc3MpOwogICAgICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CkBAIC0yODMwLDcgKzI4MzAsNyBAQCBzdGF0aWMgdm9pZCBw
YWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91CiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNv
bG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgYWx0ZXJuYXRlU2VsZWN0ZWRDb250cm9sQ29sb3JdKTsK
ICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgfSBlbHNlCi0g
ICAgICAgIGJhY2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3Vu
ZENvbG9yKCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnRUaXRsZUluYWN0
aXZlQmFja2dyb3VuZENvbG9yOwogCiAgICAgYmFja2dyb3VuZENvbG9yID0gYXR0YWNobWVudC5z
dHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJhY2tncm91bmRDb2xvcik7CiAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9yKTsKQEAgLTI4NzUsNyArMjg3NSw3
IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFByb2dyZXNzKGNvbnMKICAgICBiYWNrZ3Jv
dW5kUmVjdC5pbmZsYXRlKC1hdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJXaWR0aCAvIDIpOwog
CiAgICAgRmxvYXRSb3VuZGVkUmVjdCBiYWNrZ3JvdW5kUm91bmRlZFJlY3QoYmFja2dyb3VuZFJl
Y3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGJhY2tncm91bmRSZWN0LmhlaWdodCgpIC8gMikp
OwotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KGJhY2tncm91bmRSb3VuZGVkUmVjdCwgYXR0
YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKCkpOworICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KGJhY2tncm91bmRSb3VuZGVkUmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFj
a2dyb3VuZENvbG9yKTsKIAogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBjbGlwU2F2ZXIoY29udGV4dCk7CkBAIC0yODg1LDEzICsyODg1LDEzIEBAIHN0YXRpYyB2b2lk
IHBhaW50QXR0YWNobWVudFByb2dyZXNzKGNvbnMKICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdp
ZHRoKHByb2dyZXNzUmVjdC53aWR0aCgpICogcHJvZ3Jlc3MpOwogICAgICAgICBwcm9ncmVzc1Jl
Y3QgPSBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKHByb2dyZXNzUmVjdCwgYXR0YWNobWVudC5k
b2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCi0gICAgICAgIGNvbnRleHQuZmlsbFJl
Y3QocHJvZ3Jlc3NSZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IoKSk7CisgICAg
ICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NSZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJG
aWxsQ29sb3IpOwogICAgIH0KIAogICAgIFBhdGggYm9yZGVyUGF0aDsKICAgICBmbG9hdCBib3Jk
ZXJSYWRpdXMgPSBib3JkZXJSZWN0LmhlaWdodCgpIC8gMjsKICAgICBib3JkZXJQYXRoLmFkZFJv
dW5kZWRSZWN0KGJvcmRlclJlY3QsIEZsb2F0U2l6ZShib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1
cykpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0YWNobWVudFByb2dyZXNzQmFyQm9y
ZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRhY2htZW50UHJvZ3Jl
c3NCYXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNo
bWVudFByb2dyZXNzQmFyQm9yZGVyV2lkdGgpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3Jk
ZXJQYXRoKTsKIH0KQEAgLTI5MDEsNyArMjkwMSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNo
bWVudFBsYWNlaG9sZGVyQm8KICAgICBQYXRoIGJvcmRlclBhdGg7CiAgICAgYm9yZGVyUGF0aC5h
ZGRSb3VuZGVkUmVjdChsYXlvdXQuYXR0YWNobWVudFJlY3QsIEZsb2F0U2l6ZShhdHRhY2htZW50
UGxhY2Vob2xkZXJCb3JkZXJSYWRpdXMsIGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlclJhZGl1
cykpOwogCi0gICAgQ29sb3IgcGxhY2Vob2xkZXJCb3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5
bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50UGxhY2Vob2xkZXJCb3Jk
ZXJDb2xvcigpKTsKKyAgICBDb2xvciBwbGFjZWhvbGRlckJvcmRlckNvbG9yID0gYXR0YWNobWVu
dC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRQbGFjZWhvbGRl
ckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9y
ZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0
cm9rZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1
bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJCbG9ja0Zs
b3cmIGZsCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gZGVidWdTaGFkb3cgPSBu
dWxscHRyOwogICAgIGlmIChmbG93LnNldHRpbmdzKCkuc2ltcGxlTGluZUxheW91dERlYnVnQm9y
ZGVyc0VuYWJsZWQoKSkgewotICAgICAgICBkZWJ1Z1NoYWRvdyA9IG1ha2VVbmlxdWU8U2hhZG93
RGF0YT4oSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwg
Q29sb3IoMCwgMjU1LCAwLCAyMDApKTsKKyAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtlVW5pcXVl
PFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpOb3JtYWws
IHRydWUsIG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDAsIDIwMCkpOwogICAgICAgICB0ZXh0UGFp
bnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0KCkpOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJgogCiAgICAgaW5mby5jb250
ZXh0KCkuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwogICAgIGluZm8uY29udGV4dCgpLnNldFN0
cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xv
cihDb2xvcigwLCAwLCAyNTUpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvciht
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAKICAgICBpbmZvLmNvbnRleHQoKS5kcmF3TGlu
ZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSAr
IHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSk7CiAg
ICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54
KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSks
IEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRIZWlnaHQo
KSkpOwpAQCAtMTI4LDEzICsxMjgsMTMgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQo
UGFpbnRJbmZvJgogCiAgICAgaW50IHRvcFN0YXJ0ID0gcGFkZGluZ1RvcCgpOwogCi0gICAgaW5m
by5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgaW5mby5j
b250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAg
ICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54
KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpLCBJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFp
bnRPZmZzZXQueSgpICsgdG9wU3RhcnQpKTsKIAogICAgIGludCBiYXNlbGluZSA9IHJvdW5kVG9J
bnQoYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxM
aW5lKSk7CiAKLSAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigyNTUsIDAs
IDApKTsKKyAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3Io
MjU1LCAwLCAwKSk7CiAKICAgICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2ludChhZGp1
c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSks
IEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lk
dGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSkpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDcgKzIwMjYsNyBAQCBDb2xvciBSZW5kZXJTdHls
ZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50CiAgICAgaWYgKGlzQ3VycmVudENvbG9yKHJlc3VsdCkp
IHsKICAgICAgICAgYXV0byBib3JkZXJTdHlsZSA9IGNvbXB1dGVCb3JkZXJTdHlsZSgpOwogICAg
ICAgICBpZiAoIXZpc2l0ZWRMaW5rICYmIChib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6SW5z
ZXQgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCB8fCBib3JkZXJTdHlsZSA9
PSBCb3JkZXJTdHlsZTo6UmlkZ2UgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6Okdyb292
ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoMjM4LCAyMzgsIDIzOCk7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDIzOCwgMjM4LCAyMzgpOwogCiAgICAgICAgIHJldHVy
biB2aXNpdGVkTGluayA/IHZpc2l0ZWRMaW5rQ29sb3IoKSA6IGNvbG9yKCk7CiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE5LDcgKzEzMTksNyBAQCBwdWJsaWM6CiAgICAgY29u
c3QgQ29sb3ImIHZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJ
bmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1N0cm9rZUNvbG9yOyB9CiAgICAgdm9pZCBzZXRIYXNF
eHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoYm9vbCB2KSB7IFNFVF9WQVIobV9yYXJlSW5oZXJpdGVk
RGF0YSwgaGFzU2V0U3Ryb2tlQ29sb3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2KSk7IH0KICAg
ICBib29sIGhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZUluaGVyaXRlZERhdGEtPmhhc1NldFN0cm9rZUNvbG9yOyB9OwotICAgIHN0YXRpYyBDb2xvciBp
bml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJldHVybiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOyB9
CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxTdHJva2VDb2xvcigpIHsgcmV0dXJuIENvbG9yOjp0
cmFuc3BhcmVudDsgfQogICAgIENvbG9yIGNvbXB1dGVkU3Ryb2tlQ29sb3IoKSBjb25zdDsKIAog
ICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJbmhlcml0
ZWREYXRhLT5taXRlckxpbWl0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU1ZHUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDEwICs3MywxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBpbml0aWFsU3Ryb2tl
UGFpbnRVcmkoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVu
Z3RoVmFsdWU+IGluaXRpYWxTdHJva2VEYXNoQXJyYXkoKSB7IHJldHVybiB7IH07IH0KICAgICBz
dGF0aWMgZmxvYXQgaW5pdGlhbFN0b3BPcGFjaXR5KCkgeyByZXR1cm4gMTsgfQotICAgIHN0YXRp
YyBDb2xvciBpbml0aWFsU3RvcENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCk7IH0KKyAg
ICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0b3BDb2xvcigpIHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cigwLCAwLCAwKTsgfQogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsRmxvb2RPcGFjaXR5KCkgeyBy
ZXR1cm4gMTsgfQotICAgIHN0YXRpYyBDb2xvciBpbml0aWFsRmxvb2RDb2xvcigpIHsgcmV0dXJu
IENvbG9yKDAsIDAsIDApOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxMaWdodGluZ0NvbG9y
KCkgeyByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDI1NSk7IH0KKyAgICBzdGF0aWMgQ29sb3IgaW5p
dGlhbEZsb29kQ29sb3IoKSB7IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCk7IH0KKyAg
ICBzdGF0aWMgQ29sb3IgaW5pdGlhbExpZ2h0aW5nQ29sb3IoKSB7IHJldHVybiBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDI1NSk7IH0KICAgICBzdGF0aWMgU2hhZG93RGF0YSogaW5pdGlhbFNo
YWRvdygpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBzdGF0aWMgU3RyaW5nIGluaXRpYWxNYXNr
ZXJSZXNvdXJjZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgc3RhdGljIFN0cmluZyBpbml0
aWFsTWFya2VyU3RhcnRSZXNvdXJjZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcg
Kzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjbwogQ29sb3Ig
U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSBjb25zdAogewogICAg
IGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKICAgICBhdXRv
JiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgYXV0byYgc3ZnU3R5bGUgPSBzdHls
ZS5zdmdTdHlsZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbklt
cGwuaAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6OmFuaW1h
dGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSwgc2lt
cGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVlQ29tcG9u
ZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25lbnQoKSk7CiAgICAgICAgIGZsb2F0IGFs
cGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYWxw
aGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9m
RHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21wb25lbnQo
KSk7CiAgICAgICAgIAotICAgICAgICBhbmltYXRlZCA9IHsgcm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkgfTsK
KyAgICAgICAgYW5pbWF0ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENvbG9yQ2hh
bm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBoYSkpOwog
ICAgIH0KIAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdFbGVtZW50
KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVycmlkZQpA
QCAtMTIwLDExICsxMjAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byBzaW1wbGVUbyA9IG1f
dG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKIAogICAgICAgICAvLyBJZ25vcmVzIGFueSBh
bHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAgICAgIG1f
dG8gPSB7CisgICAgICAgIG1fdG8gPSBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgICAgICByb3Vu
ZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2ltcGxlRnJv
bS5yZWRDb21wb25lbnQoKSksCiAgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVs
KHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9uZW50KCkp
LAogICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5ibHVlQ29t
cG9uZW50KCkgKyBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKLSAgICAgICAgfTsKKyAgICAg
ICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU3RyaW5nKFNWR0VsZW1l
bnQqLCBjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDEwICsxMDUsMTAgQEAgdm9pZCBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OmRyYXdSZWN0
KFBhZwogICAgIEZsb2F0UmVjdCBpbnNldFJlY3QgPSBvdmVybGF5LmJvdW5kcygpOwogCiAgICAg
aWYgKG92ZXJsYXkub3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KSB7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAw
KSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDI1
NSwgMCkpOwogICAgICAgICBpbnNldFJlY3QuaW5mbGF0ZSgtNTApOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7CisgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOwogICAg
ICAgICBpbnNldFJlY3QuaW5mbGF0ZSgtMjApOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvdGVzdGluZy9jb2NvYS9XZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRpb25PdmVybGF5Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElk
ZW50aWZpY2F0aW9uT3ZlcmxheS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9jb2NvYS9XZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRpb25PdmVybGF5Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aFdl
YlZpZXc6KFBsYXRmb3IKICAgICBfbGF5ZXIgPSBhZG9wdE5TKFtbQ0FUaWxlZExheWVyIGFsbG9j
XSBpbml0XSk7CiAgICAgW19sYXllciBzZXROYW1lOkAiV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheSJdOwogICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCBbX3Zp
ZXcgYm91bmRzXS5zaXplLndpZHRoLCBbX3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCldOwotICAg
IFdlYkNvcmU6OkNvbG9yIHZpZXdDb2xvciA9IGlzRGVwcmVjYXRlZCA/IFdlYkNvcmU6OkNvbG9y
KDI1NSwgMCwgMCwgMzIpIDogV2ViQ29yZTo6Q29sb3IoMCwgMCwgMjU1LCAzMik7CisgICAgV2Vi
Q29yZTo6Q29sb3Igdmlld0NvbG9yID0gaXNEZXByZWNhdGVkID8gV2ViQ29yZTo6bWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMCwgMCwgMzIpIDogV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1
NSwgMzIpOwogICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29sb3Iodmll
d0NvbG9yKV07CiAgICAgW19sYXllciBzZXRaUG9zaXRpb246OTk5XTsKICAgICBbX2xheWVyIHNl
dERlbGVnYXRlOnNlbGZdOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjAt
MDUtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVk
IENvbG9yOiBSZXBsYWNlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2YWx1ZXMg
d2l0aCB0eXBlIHNwZWNpZmljIGZhY3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyQmFj
a2luZ1N0b3JlOjpkcmF3SW5Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRDb2xvclRvV2ViQ29yZUNvbG9yKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBfdGFwSGlnaGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6XSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFpbnRTbmFwc2hv
dEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxl
cklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6aGlnaGxpZ2h0Q29sb3IpOiBEZWxldGVkLgor
CiAyMDIwLTA1LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgRGVwcmVjYXRlIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291
cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3Jl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZTo6ZHJhd0luQ29udAogCiAjaWZuZGVmIE5ERUJVRwogICAgIGlmIChtX2lzT3Bh
cXVlKQotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHNjYWxlZExheWVyQm91bmRzLCBXZWJDb3Jl
OjpDb2xvcigyNTUsIDQ3LCAxNDYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChzY2FsZWRM
YXllckJvdW5kcywgV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDI1NSwgNDcsIDE0NikpOwogI2Vu
ZGlmCiAKICAgICBjb250ZXh0LnNjYWxlKG1fc2NhbGUpOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1MikK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEdfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0Q29s
b3IsIHdlYmtpdF8KIAogY29uc3QgV2ViQ29yZTo6Q29sb3Igd2Via2l0Q29sb3JUb1dlYkNvcmVD
b2xvcihXZWJLaXRDb2xvciogY29sb3IpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkNvbG9yKHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5n
cmVlbiksCisgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmdy
ZWVuKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzMjgsNyArNDMyOCw3IEBAIC0gKHZv
aWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGkKIC0gKFdlYkNvcmU6OkNvbG9yKV90
YXBIaWdobGlnaHRDb2xvckZvckZhc3RDbGljazooQk9PTClmb3JGYXN0Q2xpY2sKIHsKICAgICBB
U1NFUlQoX3Nob3dEZWJ1Z1RhcEhpZ2hsaWdodHNGb3JGYXN0Q2xpY2tpbmcpOwotICAgIHJldHVy
biBmb3JGYXN0Q2xpY2sgPyBXZWJDb3JlOjpDb2xvcigwLCAyMjUsIDAsIDEyNykgOiBXZWJDb3Jl
OjpDb2xvcigyMjUsIDAsIDAsIDEyNyk7CisgICAgcmV0dXJuIGZvckZhc3RDbGljayA/IFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyMjUsIDAsIDEyNykgOiBXZWJDb3JlOjptYWtlU2ltcGxl
Q29sb3IoMjI1LCAwLCAwLCAxMjcpOwogfQogCiAtICh2b2lkKV9zZXREb3VibGVUYXBHZXN0dXJl
c0VuYWJsZWQ6KEJPT0wpZW5hYmxlZApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0
b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9pZCBXZWJJ
bnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoYwogICAgIHBhaW50TGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBwYWludExheWVyLT5zZXRQb3NpdGlvbihyZWN0
LmxvY2F0aW9uKCkpOwogICAgIHBhaW50TGF5ZXItPnNldFNpemUocmVjdC5zaXplKCkpOwotICAg
IHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigxLjBmLCAwLjBmLCAwLjBmLCAw
LjJmKSk7CisgICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMoMS4wZiwgMC4wZiwgMC4wZiwgMC4yZikpOwogCiAgICAgS2V5ZnJhbWVWYWx1
ZUxpc3QgZmFkZUtleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAgICAgZmFkZUtl
eWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCAxKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw4ICs1MDks
OCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxhCiB7CiAgICAgY29u
c3QgaW50IGJvcmRlcldpZHRoID0gMTsKIAotICAgIENvbG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29s
b3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwotICAgIENvbG9yIHNoYWRvd0NvbG9yKDAuMGYs
IDAuMGYsIDAuMGYsIDAuNWYpOworICAgIGF1dG8gb3ZlcmxheUJhY2tncm91bmRDb2xvciA9IG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOworICAgIGF1
dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAu
MGYsIDAuNWYpOwogCiAgICAgSW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9IGRpcnR5
UmVjdDsKICAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGJvcmRlcldpZHRoKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwMiw3ICsyNDAyLDcgQEAgdm9pZCBXZWJQYWdl
OjpwYWludFNuYXBzaG90QXRTaXplKGNvbnN0IAogCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hv
dE9wdGlvbnNQYWludFNlbGVjdGlvblJlY3RhbmdsZSkgewogICAgICAgICBGbG9hdFJlY3Qgc2Vs
ZWN0aW9uUmVjdGFuZ2xlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRzKCk7Ci0g
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigweEZGLCAwLCAwKSk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3Io
MHhGRiwgMCwgMCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc3Ryb2tlUmVjdChzZWxlY3Rp
b25SZWN0YW5nbGUsIDEpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5k
Q29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDcgQEAgY29uc3Qg
aW50IHRvdGFsVmVydGljYWxNYXJnaW4gPSAxOwogCiBjb25zdGV4cHIgT3B0aW9uU2V0PFRleHRJ
bmRpY2F0b3JPcHRpb24+IGZpbmRUZXh0SW5kaWNhdG9yT3B0aW9ucyB7IFRleHRJbmRpY2F0b3JP
cHRpb246OkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiwgVGV4dEluZGljYXRv
ck9wdGlvbjo6RG9Ob3RDbGlwVG9WaXNpYmxlUmVjdCB9OwogCi1zdGF0aWMgQ29sb3IgaGlnaGxp
Z2h0Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigyNTUsIDIyOCwgNTYsIDI1NSk7Ci19Citj
b25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDIyOCwg
NTYsIDI1NSk7CiAKIHZvaWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0
KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKIHsKQEAgLTc5LDcgKzc2LDcgQEAgdm9pZCBGaW5kSW5kaWNhdG9y
T3ZlcmxheUNsaWVudElPUzo6ZHJhdwogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0c0lu
Qm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKTsKICAgICBWZWN0b3I8UGF0aD4gcGF0aHMgPSBQYXRoVXRp
bGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Cb3VuZGluZ1Jl
Y3RDb29yZGluYXRlcywgY29ybmVyUmFkaXVzKTsKIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KGhpZ2hsaWdodENvbG9yKCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGhpZ2hsaWdodENv
bG9yKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykKICAgICAgICAgY29udGV4
dC5maWxsUGF0aChwYXRoKTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMzU0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMjAtMDUtMzAgIFNhbSBXZWluaWcgIDx3
ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yOiBSZXBsYWNlIENvbG9y
IGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2YWx1ZXMgd2l0aCB0eXBlIHNwZWNpZmljIGZh
Y3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjptYWtlQ29sb3IpOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERGU25hcHNob3QubW06CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29hL1Rl
c3RQREZEb2N1bWVudC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRlc3RQREZQYWdlOjpj
b2xvckF0UG9pbnQgY29uc3QpOgorCiAyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFw
cGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjogQWRkaXRpb25hbCBjb2xvciBjbGVh
bnVwcwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBA
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsYWNrKQogCiBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQp
CiB7Ci0gICAgQ29sb3IgY29sb3IoMjU1LCAwLCAwKTsKKyAgICBDb2xvciBjb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDApOwogCiAgICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdo
dG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkp
OwogCkBAIC04Myw3ICs4Myw3IEBAIFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIAogVEVTVChD
b2xvciwgUkdCVG9IU0xfR3JlZW4pCiB7Ci0gICAgQ29sb3IgY29sb3IoMCwgMjU1LCAwKTsKKyAg
ICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApOwogCiAgICAgYXV0byBb
aHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkpOwogCkBAIC05OSw3ICs5OSw3IEBAIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0dyZWVuKQogCiBURVNUKENvbG9yLCBSR0JUb0hTTF9CbHVlKQogewotICAgIENvbG9y
IGNvbG9yKDAsIDAsIDI1NSk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMjU1KTsKIAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0g
PSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIApAQCAtMTcxLDcg
KzE3MSw3IEBAIFRFU1QoQ29sb3IsIFZhbGlkaXR5KQogICAgIEVYUEVDVF9GQUxTRShvdGhlcklu
dmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRShvdGhlckludmFsaWRDb2xv
ci5pc0V4dGVuZGVkKCkpOwogCi0gICAgQ29sb3IgdmFsaWRDb2xvcigyNTUsIDAsIDApOworICAg
IENvbG9yIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICBFWFBF
Q1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29s
b3IuaXNFeHRlbmRlZCgpKTsKIApAQCAtMTc5LDcgKzE3OSw3IEBAIFRFU1QoQ29sb3IsIFZhbGlk
aXR5KQogICAgIEVYUEVDVF9UUlVFKG90aGVyVmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVY
UEVDVF9GQUxTRShvdGhlclZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgIHZhbGlkQ29s
b3IgPSBDb2xvcigxLCAyLCAzLCA0KTsKKyAgICB2YWxpZENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDEsIDIsIDMsIDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAg
ICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogICAgIGF1dG8gc2ltcGxl
VmFsaWRDb2xvciA9IHZhbGlkQ29sb3IudG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRl
ZENvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgQ29uc3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgYXV0byBbciwgZywgYiwgYWxwaGFdID0g
YzEuYXNFeHRlbmRlZCgpLmNvbXBvbmVudHMoKTsKQEAgLTUxLDcgKzUxLDcgQEAgVEVTVChFeHRl
bmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3Ry
dWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIoYzEpOwpAQCAtNjksNyArNjksNyBAQCBURVNU
KEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBB
c3NpZ25tZW50KQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyID0gYzE7CkBAIC04OCwyMCArODgsMjAg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBBc3NpZ25tZW50KQogVEVTVChFeHRlbmRlZENvbG9yLCBF
cXVhbGl0eSkKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9y
IGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAg
ICAgICAgIEVYUEVDVF9FUShjMSwgYzIpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3Ig
YzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAg
Q29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7
CiAKLSAgICAgICAgQ29sb3IgYzIoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JH
Qik7CisgICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUoYzEsIGMyKTsKQEAgLTExMSw4ICsxMTEsOCBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogICAgIGludCBnID0gMTI4OwogICAgIGlu
dCBiID0gNjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMShyIC8gMjU1LjAsIGcg
LyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpOwotICAgIENv
bG9yIHJnYjIociwgZywgYiwgYSk7CisgICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9y
KHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6
U1JHQikgfTsKKyAgICBDb2xvciByZ2IyID0gbWFrZVNpbWVwbENvbG9yKHIsIGcsIGIsIGEpOwog
ICAgIEVYUEVDVF9ORShyZ2IxLCByZ2IyKTsKICAgICBFWFBFQ1RfTkUocmdiMiwgcmdiMSk7CiB9
CkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogVEVT
VChFeHRlbmRlZENvbG9yLCBIYXNoKQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEoMS4wLCAw
LjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAgQ29sb3IgYzEg
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAg
ICAgQ29sb3IgYzIoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsK
KyAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0
ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKICAg
ICB9CiAKICAgICB7Ci0gICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBF
WFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CiAg
ICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05F
KGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKQEAgLTE0MywxNCArMTQzLDE0IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgSGFzaCkKICAgICBpbnQgZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGlu
dCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUu
MCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKLSAgICBDb2xvciByZ2IyKHIsIGcsIGIs
IGEpOworICAgIENvbG9yIHJnYjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAy
NTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29s
b3IgcmdiMiA9IG1ha2VTaW1lcGxDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdi
MS5oYXNoKCksIHJnYjIuaGFzaCgpKTsKIH0KIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29u
c3RydWN0b3IpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShj
MS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIoV1RGTW92ZShjMSkpOwpAQCAtMTcxLDcg
KzE3MSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogCiBURVNUKEV4
dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyID0gV1RG
TW92ZShjMSk7CkBAIC0xOTMsNyArMTkzLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNz
aWdubWVudCkKIAogVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQog
ewotICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvciB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAg
ICBFWFBFQ1RfVFJVRShjMS0+aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yKiBjMiA9IG5ldyBD
b2xvcigqYzEpOwpAQCAtMjE5LDcgKzIxOSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNS
ZWZlcmVuY2VDb3VudGkKIAogQ29sb3IgbWFrZUNvbG9yKCkKIHsKLSAgICBDb2xvciBjMSgxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0VR
KDF1LCBjMS5hc0V4dGVuZGVkKCkucmVmQ291bnQoKSk7CiAKQEAgLTIzOCw3ICsyMzgsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIFJldHVyblZhbHVlcykKIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDND
b252ZXJzaW9uVG9TUkdCKQogewogICAgIHsKLSAgICAgICAgQ29sb3IgcDNDb2xvcigxLjAsIDAu
NSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAgQ29sb3IgcDND
b2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNl
OjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKHAzQ29sb3IuaXNFeHRlbmRlZCgp
KTsKIAogICAgICAgICBhdXRvIHNSR0JDb21wb25lbnRzID0gcDNDb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CkBAIC0yNDksNyArMjQ5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBQM0Nv
bnZlcnNpb25Ub1NSR0IpCiAgICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBsaW5lYXJDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKTsKKyAgICAgICAg
Q29sb3IgbGluZWFyQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43
NSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShsaW5lYXJD
b2xvci5pc0V4dGVuZGVkKCkpOwogICAgICAgICBhdXRvIHNSR0JDb21wb25lbnRzID0gbGluZWFy
Q29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwogICAgICAgICBFWFBFQ1RfVFJVRShXVEY6
OmFyZUVzc2VudGlhbGx5RXF1YWwoc1JHQkNvbXBvbmVudHMuY29tcG9uZW50c1swXSwgMS4wZikp
OwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hv
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29h
L1BERlNuYXBzaG90Lm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1BERlNuYXBzaG90Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3
ICs2MCw3IEBAIFRFU1QoUERGU25hcHNob3QsIEZ1bGxDb250ZW50KQogICAgICAgICBFWFBFQ1Rf
RVEocGFnZS0+dGV4dCgpWzRdLCAnbycpOwogCiAgICAgICAgIC8vIFRoZSBlbnRpcmUgcGFnZSBz
aG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAg
ICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAs
IDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAz
MDApID09IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25h
cHNob3QgPSB0cnVlOwogICAgIH1dOwpAQCAtOTEsNyArOTEsNyBAQCBURVNUKFBERlNuYXBzaG90
LCBTdWJyZWdpb25zKQogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwg
MHUpOwogCiAgICAgICAgIC8vIFRoZSBlbnRpcmUgcGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sg
YSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdl
LT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IG1ha2VTaW1wbGVDb2xv
cigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1d
OwpAQCAtMTExLDEwICsxMTEsMTAgQEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9ucykKICAg
ICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVj
dE1ha2UoMCwgMCwgMTIwMCwgMTIwMCkpKTsKIAogICAgICAgICAvLyBBIHBpeGVsIHRoYXQgd2Fz
IGluIHRoZSB2aWV3IHNob3VsZCBiZSBncmVlbi4gUGljayBhIHBvaW50IGluIHRoZSBtaWRkbGUg
dG8gY2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgyMDAsIDE1
MCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9y
QXRQb2ludCgyMDAsIDE1MCkgPT0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAg
ICAgIC8vIEEgcGl4ZWwgdGhhdCB3YXMgb3V0c2lkZSB0aGUgdmlldyBzaG91bGQgYWxzbyBiZSBn
cmVlbiAod2UgZXh0ZW5kIGJhY2tncm91bmQgY29sb3Igb3V0KS4gUGljayBhIHBvaW50IGluIHRo
ZSBtaWRkbGUgdG8gY2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2lu
dCg5MDAsIDcwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBh
Z2UtPmNvbG9yQXRQb2ludCg5MDAsIDcwMCkgPT0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkp
OwogCiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CiAgICAgfV07CkBAIC0xNDAsMjAg
KzE0MCwyMCBAQCBURVNUKFBERlNuYXBzaG90LCBPdmVyMjAwSW5jaGVzKQogICAgICAgICBhdXRv
IHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgwKTsKICAgICAgICAgRVhQRUNUX05FKHBhZ2UsIG51bGxw
dHIpOwogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChwYWdlLT5ib3VuZHMo
KSwgQ0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShw
YWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IG1ha2VTaW1wbGVD
b2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50
KCksIDV1KTsKIAogICAgICAgICBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMSk7CiAgICAgICAgIEVY
UEVDVF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxU
b1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigw
LCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwg
MzAwKSA9PSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAgICAgRVhQRUNUX0VR
KHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAgICAgICBwYWdlID0gZG9jdW1lbnQt
PnBhZ2UoMik7CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwg
MCwgODAwLCA2MDApKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0
MDAsIDMwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2Ut
PmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwog
ICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgMHUpOwogCiAgICAgICAg
IGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CkBAIC0xNzgsNyArMTc4LDcgQEAgVEVTVChQREZTbmFw
c2hvdCwgTGlua3MpCiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKIAogICAgICAg
ICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChwYWdlLT5ib3VuZHMoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0
UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBtYWtlU2ltcGxlQ29sb3IoMjU1
LCAyNTUsIDI1NSkpOwogCiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgp
LCA4dSk7CiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT50ZXh0KClbMF0sICdDJyk7CkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24g
MjYyMzUyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERG
UGFnZTo6Y29sb3JBdFBvaW50CiAgICAgYXV0byBhID0gcGl4ZWxbaSArIDNdOwogCiAgICAgaWYg
KCFhKQotICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07Ci0gICAgcmV0dXJuIHsgciAqIDI1
NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSB9OworICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApOworICAgIHJldHVybiBXZWJDb3JlOjpt
YWtlU2ltcGxlQ29sb3IociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSk7
CiB9CiAKIC8vIERvY3VtZW50cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400689</attachid>
            <date>2020-05-30 21:04:46 -0700</date>
            <delta_ts>2020-05-30 21:08:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200530210443.patch</filename>
            <type>text/plain</type>
            <size>117111</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9v
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1Zh
bHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEgY29uc3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2hhcGVI
aWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
b2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lv
bkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJs
YXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omxp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29s
b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmdldERl
YnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50c0xheWVyRGVi
dWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUxheWVyRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6
VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmds
ZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZvck1hcmtlckxp
bmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9QYWlu
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6Zm9yY2VkVGV4dENvbG9yIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpi
b3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsYXlzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0aXRsZVRleHRDb2xv
ckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudExheW91dDo6bGF5
T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50SWNvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91
bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJh
d1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zl
cmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjog
QWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidQogICAgIAog
ICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBnLCBiKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5p
c01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
LSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6
U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOworICAgIG1fdHJhbnNwYXJlbnRD
b2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0
YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5d29yZDsgKytpKQogICAgICAg
ICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRlbmRlZENvbG9yKGNvbG9yQ2hh
bm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5l
bHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBh
cnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5
Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBAQCBSZW5kZXJTdHlsZSBIVE1M
SW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1dG9GaWxsU3Ryb25nUGFzc3dv
cmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayk7CiAgICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwgUGVyY2VudCB9KTsKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBmLCAwLjBmLCAwLjZmIH0pOwor
ICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZs
b3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2UoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKSkpOwog
ICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVkIGZvciB0aGUgbWFzay4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGUoKS5zaGFkb3dDb2xvciku
c2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQo
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywxNyArMTMwNywxNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IoZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IociwgZywgYiwgYSkpOworICAgIHNl
dFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIHNldFNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2lt
cGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
MTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xvcikKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxw
aGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHls
ZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBtX3N0eWxl
KENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwgYywgbSwgeSwgaywgYSB9KQor
ICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zCiAKIGJvb2wgQ2FudmFzU3R5
bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHls
ZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9Owor
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgocXVhZCwgYm91
bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgoY2xpcFF1YWQsIGJvdW5k
cykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxp
Z2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5n
RnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNvbnN0IENvbG9yIHNoYXBlSGln
aGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29uc3RleHByIGF1dG8gc2hhcGVI
aWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIsIDEyNywgMjA0KTsKIAogICAg
IFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0
ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3NDCiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0
IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxQYXRoKG1hcmdp
blBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGluZykgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICAgICAgY29u
c3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAsIDE2OCk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwg
MjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihpbmRpY2F0aW5nQ29sb3Ip
OwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBwYWludFJlY3RzQ29sb3IoMS4w
ZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1dG8gcGFpbnRSZWN0c0NvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25zdCBUaW1lUmVjdFBhaXImIHBh
aXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEp
OwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC42Zik7
CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAw
LCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm91bmRzQ29sb3IpOwogCiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkgKzY3MCw5IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3Zl
cmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQogewotICAgIGNvbnN0IENvbG9y
IHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDAuNmYpOwotICAgIGNvbnN0
IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjJmKTsKLSAgICBjb25z
dCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25z
dGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0UnVsZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHByIGF1dG8gZGFya1J1bGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIEludFBvaW50IHNjcm9s
bE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0KTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwogCi0g
ICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IoMTI4LCAxMjgsIDEyOCk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0
bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CkBAIC0xMDY4
LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgK
ICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9KTsKICAgICB9OwogCi0gICAg
ZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1RleHQoZWxlbWVu
dElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVtZW50Q2xh
c3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNldWRv
VHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFtZSwgbWFrZVNpbXBs
ZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFsdWUsIG1ha2VT
aW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmll
d2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBl
LCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNr
KTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7CiAgICAgZHJhd1Rl
eHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgUGF0aCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAgICAgICB0ZXh0UG9zaXRpb25Y
ID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAgdGV4dFBvc2l0aW9uWSArPSBm
b250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBDb2xvcigxNzAsIDEzLCAx
NDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VTaW1wbGVDb2xvcigxNzAsIDEz
LCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAgICAgICAg
IGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamUKIAogICAgIGRvdWJsZSBh
ID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQotICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
ciwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgogICAg
IGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihj
b25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8aW50PihhICogMjU1
KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRvd0RhdGEqIExpbmVMYXlvdXQ6
OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQ
b2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAw
LCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1
Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7CiAgICAgcmV0dXJuICZkZWJ1
Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBi
ZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3Ig
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0LW1l
ZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpOworICAgIGNv
bnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhh
dmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41ZiwgMC4wZiwgMC4wZiwgMC40Zikp
CisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBD
b2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBh
Z2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCiAg
ICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0KIAotc3RhdGlj
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQor
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4mIHRvdWNoRXZlbnRSZWdp
b25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xNjMsOSAr
MTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdQogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQotICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5LmcsIGVudHJ5LmIsIDUwIH0p
OworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnku
ciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9KCkp
OwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2
ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewotICAgICAgICBDb2xvciBy
ZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8gcmVnaW9uQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRvIGl0ID0gdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lvbi5rZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgpKQogICAgICAgICAgICAgcmVn
aW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJuaW5nQ29sb3IpIHsKICAgICAg
ICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgZGVidWdSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwg
Q29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoZGVidWdSZWN0
LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMw
LDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAg
ICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICogKHBhZ2VTaXplSW5QaXhlbHMu
aGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIGJ5
IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUs
IDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGluZVkgPSBjdXJyZW50SGVpZ2h0
IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1
KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5lWSksIEludFBvaW50KHBhZ2VX
aWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3Rv
cmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC44ZikpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjlm
LCAwLjlmLCAwLjlmLCAxLmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjbGlwLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjlmLCAwLjlm
LCAwLjlmLCAxLmYpKTsKIAogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0geyAxMCwgMjAg
fTsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9ICAiQ1BVOiAiICsgY3B1VXNhZ2VTdHJpbmcoZ0Rh
dGEuY3B1KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5Ojpw
bGF0Zm9ybUluaXRpCiAgICAgbV9wYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG92
ZXJsYXkoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICptX292ZXJsYXlQYWludGVyKTsKICAgICBtX3BhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldFNpemUoeyBub3JtYWxXaWR0aCwg
bm9ybWFsSGVpZ2h0IH0pOwotICAgIG1fcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
OGYpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICBvdmVy
bGF5KCkubGF5ZXIoKS5hZGRDaGlsZCgqbV9wYWludExheWVyKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1
cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAg
ICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9y
KENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRl
c3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpCiAgICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1
czo6RGVjb2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21w
bGV0ZSkgfHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dy
b3VuZCkgewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVj
dGFuZ2xlIGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZp
bmlzaCBkZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsK
LSAgICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENv
bG9yKENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcElt
YWdlOjolcyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmlu
aXNoXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWRSZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBA
IENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7
CiB9CiAKLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQot
ICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVy
IGJlbG93LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0
IENvbG9yJiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEz
MywxMiBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiByICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBiICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwog
fQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xv
ciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2
KTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
YWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
QEAgLTI0NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAg
cmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhh
ID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3
MSw3ICsyNTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTI4NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0CiAKICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRp
YygpOworICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6
dG9TUkdCQUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OwogfQogCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNT
RVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRv
IGhhbmRsZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBv
bmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBv
bmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVu
dCgpLCBwcm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
CisgICAgKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29s
b3IgewogcHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAg
IENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihT
aW1wbGVDb2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwog
ICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNp
bXBsZUNvbG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRp
YygpOwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAg
ICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7Cisg
ICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNv
bG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1w
bGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5k
ZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRl
ZENvbG9yLmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQog
CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAt
MTE0LDEyICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUK
LSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBu
b3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291
cmNlLW92ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3Jz
RXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJp
dDsgfQorCisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNW
YWxpZCgpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNv
bG9yOyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIu
CiAgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4
ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1w
bGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVk
Q29sb3IqIGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMu
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0y
ODgsNiArMjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMK
ICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9
PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFj
ZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29s
b3IgeyBjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29s
b3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6
aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09
IDE7CiB9CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJu
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBA
QCBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBv
bmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bV9jb21wb25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBi
KQpAQCAtNzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVy
OjpnZXREZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0Jh
Y2tkcm9wKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8g
aGFzIGJhY2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGgg
PSAxMjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9
IENvbG9yKDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAg
ICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQg
bGF5ZXI6IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29sb3IgPSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisg
ICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1h
bCBsYXllcjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29u
dGVudHNMYXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsg
Ly8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVy
IHdpdGggY29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQor
ICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1h
c2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29u
dGFpbmVyOiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwg
MTkyKTsgLy8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRh
dGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBh
cyBhIGtleSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0
cyBhIHdhc2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlv
bi4KICAgICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkp
ICYmICFtX3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwor
ICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNp
YmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5n
KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNl
KSk7CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3Jk
ZXIoUGxhdGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGgg
PSA0Owogc3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hv
d2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwg
MTI4LCAxODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVy
RGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93
aW5nQm9yZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4g
c2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAg
LTM3NzQsNyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91
bmQKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9y
LCBmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVy
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2Fj
aGUgbGF5ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsK
ICAgICBjb25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tn
cm91bmRDb2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNj
ZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29u
c3QgQ29sb3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xv
cigwLmYsIDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIg
YXV0byBhY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihT
dHJpbmc6Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
Q292ZXJhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3Ii
KTsKICAgICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldp
ZHRoKDIpOwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBt
X3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGlj
YXRvckxheWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0
Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMCwgMTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
Ci0gICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxh
eWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwg
NTApKTsKIAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGls
ZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29s
b3I7CiAgICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2Fz
ZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9y
SW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIw
MCwgODAsIDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJv
bm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJl
Y3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJ
bmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1
LCAyNTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDbwogICAg
IGZsb2F0IGIgPSBiMSArIChiMiAtIGIxKSAqIDAuNWY7CiAgICAgZmxvYXQgYSA9IGExICsgKGEy
IC0gYTEpICogMC41ZjsKIAotICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwg
Q29sb3IociwgZywgYiwgYSkpOworICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNl
dCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiB9CiAKIHN0YXRpYyBj
YWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwg
ZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVAog
ICAgIH0KIAogICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNv
bG9yKSk7Ci0gICAgc2V0SXNTZW1hbnRpYygpOworICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAog
c3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1h
Z2VDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5
IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwg
aW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAg
cmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKIH0K
IAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNSArMjA1
LDE1IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGluZVN0eWwKICAgICBzd2l0
Y2ggKHN0eWxlKSB7CiAgICAgLy8gUmVkCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtN
b2RlID8gQ29sb3IgeyAyNTUsIDE0MCwgMTQwLCAyMTcgfSA6IENvbG9yIHsgMjU1LCA1OSwgNDgs
IDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAxNDAsIDE0MCwgMjE3KSA6IG1ha2VTaW1wbGVDb2xvcigyNTUsIDU5
LCA0OCwgMTkxKSk7CiAgICAgLy8gQmx1ZQogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOgogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0
aW9uUmVwbGFjZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtNb2Rl
ID8gQ29sb3IgeyA0MCwgMTQ1LCAyNTUsIDIxNyB9IDogQ29sb3IgeyAwLCAxMjIsIDI1NSwgMTkx
IH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1c2VEYXJrTW9kZSA/IG1ha2VTaW1w
bGVDb2xvcig0MCwgMTQ1LCAyNTUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMCwgMTIyLCAyNTUs
IDE5MSkpOwogICAgIC8vIEdyZWVuCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUg
PyBDb2xvciB7IDUwLCAyMTUsIDc1LCAyMTcgfSA6IENvbG9yIHsgMjUsIDE3NSwgNTAsIDE5MSB9
KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtlU2ltcGxl
Q29sb3IoNTAsIDIxNSwgNzUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMjUsIDE3NSwgNTAsIDE5
MSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMwNywxMiBAQCBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyCiAgICAgICAgIHJldHVybiBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVu
ZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgcHJvZ3Jlc3MpKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwg
cHJvZ3Jlc3MpKTsKIAogICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21P
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAg
ICBJbnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bG9jYXRpb24oKSA6IEludFBvaW50KCk7CiAgICAgaW50IGZyb21TdGREZXZpYXRpb24gPSBmcm9t
T3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCkgOiAwOwotICAgIENvbG9y
IGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigpIDogQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0
aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAK
ICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBDb2xvciBjb2xv
ckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KIAotICAgIHJldHVybiBDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tTlNDb2xvcihjb2xvcik7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlND
b2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OnAKICAgICAgICAgQVNTRVJUKCFtX3RleHR1cmUp
OwogICAgICAgICBpZiAobV9ob2xlUHVuY2hDbGllbnQpCiAgICAgICAgICAgICBtX2hvbGVQdW5j
aENsaWVudC0+c2V0VmlkZW9SZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtb2RlbFZpZXdNYXRy
aXgubWFwUmVjdCh0YXJnZXRSZWN0KSkpOwotICAgICAgICB0ZXhtYXBHTC5kcmF3U29saWRDb2xv
cih0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIENvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7
CisgICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxl
Q2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2Fj
eVRpbGVDYWNoZS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw5
IEBAIHVuc2lnbmVkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm8KIENvbG9yIExlZ2Fj
eVRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihMZWdhY3lUaWxlR3JpZCogZ3JpZCkg
Y29uc3QKIHsKICAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpKQotICAg
ICAgICByZXR1cm4gQ29sb3IoMC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKIAotICAg
IHJldHVybiBDb2xvcigwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMmYsIDAuOWYsIDAuZiwgMC41Zik7CiB9CiAKIHN0YXRpYyBi
b29sIHNob3VsZFJlcGFpbnRJblBpZWNlcyhjb25zdCBDR1JlY3QmIGRpcnR5UmVjdCwgQ0dTUmVn
aW9uT2JqIGRpcnR5UmVnaW9uLCBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgc3RydWN0IFBhaW50SW5mbyB7CiAgICAgYm9vbCBmb3JjZVRleHRDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgfHwgZm9yY2VXaGl0ZVRleHQoKTsgfQogICAgIGJvb2wg
Zm9yY2VCbGFja1RleHQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBh
aW50QmVoYXZpb3I6OkZvcmNlQmxhY2tUZXh0KTsgfQogICAgIGJvb2wgZm9yY2VXaGl0ZVRleHQo
KSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZv
cmNlV2hpdGVUZXh0KTsgfQotICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIChmb3JjZUJsYWNrVGV4dCgpKSA/IENvbG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQor
ICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0
KCkgPyBDb2xvcjo6YmxhY2sgOiBDb2xvcjo6d2hpdGU7IH0KIAogICAgIGJvb2wgc2tpcFJvb3RC
YWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJl
aGF2aW9yOjpTa2lwUm9vdEJhY2tncm91bmQpOyB9CiAgICAgYm9vbCBwYWludFJvb3RCYWNrZ3Jv
dW5kT25seSgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhh
dmlvcjo6Um9vdEJhY2tncm91bmRPbmx5KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCwyOSArNzQsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2Vt
ZW50QXJyb3dMZWZ0TQogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dQYWRkaW5n
ID0gNDsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9
IDM7CiAKLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVz
c2VkQ29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgx
MDUsIDEwNSwgMTA1LCAyNDIpOwotICAgIHJldHVybiBwcmVzc2VkOwotfQotCi1zdGF0aWMgY29u
c3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKLSAg
ICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRU
ZXh0Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQo
MjQwLCAyNDAsIDI0MCwgMjU1KTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBj
b25zdCBDb2xvciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwotICAg
IHJldHVybiBzdGFuZGFyZDsKLX0KK2NvbnN0ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0UHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEwNSwgMTA1LCAxMDUsIDI0Mik7
Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDEyNSwgMTI1LCAxMjUsIDI0Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVu
dFRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDAsIDI0MCwgMjQwLCAyNTUpOworY29uc3Rl
eHByIGF1dG8gdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigy
NTUsIDI1NSwgMjU1LCAyMTYpOwogCiBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRk
ZWRPYmplY3QoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlKQogICAgIDogUmVuZGVyV2lkZ2V0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpAQCAtMzEy
LDcgKzI5Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBj
b250ZXh0LmNsaXAoY29udGVudFJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVk
UmVjdFByZXNzZWRDb2xvcigpIDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpKTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IgOiByZXBsYWNl
bWVudFRleHRSb3VuZGVkUmVjdENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKGJhY2tncm91
bmQpOwogCiAgICAgUGF0aCBzdHJva2VQYXRoOwpAQCAtMzIwLDIxICszMDEsMjEgQEAgdm9pZCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIHN0cm9rZVJlY3QuaW5mbGF0
ZSgxKTsKICAgICBzdHJva2VQYXRoLmFkZFJvdW5kZWRSZWN0KHN0cm9rZVJlY3QsIEZsb2F0U2l6
ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cyArIDEsIHJlcGxhY2VtZW50VGV4dFJv
dW5kZWRSZWN0UmFkaXVzICsgMSkpOwogCi0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmF2
YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Io
dW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMik7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKHN0cm9rZVBhdGgpOwogCiAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgIGZs
b2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0VGV4dE1hcmdpbik7CiAgICAgZmxvYXQgbGFi
ZWxZID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFj
ZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSkgLyAy
ICsgZm9udE1ldHJpY3MuYXNjZW50KCkgKyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFRvcFRl
eHRNYXJnaW4pOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9y
KCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAg
ICBjb250ZXh0LmRyYXdCaWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJl
bFkpKTsKIAogICAgIGlmIChzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihw
YWdlKCksIG1fcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKSB7CiAgICAgICAgIGFycm93UmVj
dC5pbmZsYXRlKC1yZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyk7CiAKICAgICAgICAgY29u
dGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEuMCk7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihyZXBsYWNlbWVudFRleHRDb2xvcik7CiAgICAgICAgIGNvbnRleHQuZmlsbEVsbGlwc2Uo
YXJyb3dSZWN0KTsKIAogICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6Q2xlYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyMyArNjgs
OSBAQCBSZW5kZXJGcmFtZVNldDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIHsKIH0KIAotc3RhdGlj
IGNvbnN0IENvbG9yJiBib3JkZXJTdGFydEVkZ2VDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiBjb2xvcigxNzAsIDE3MCwgMTcwKTsKLSAgICByZXR1cm4gY29sb3I7
Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyRW5kRWRnZUNvbG9yKCkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIHJl
dHVybiBjb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7
Ci0gICAgcmV0dXJuIGNvbG9yOwotfQorY29uc3RleHByIGF1dG8gYm9yZGVyU3RhcnRFZGdlQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMTcwLCAxNzAsIDE3MCk7Citjb25zdGV4cHIgYXV0byBib3Jk
ZXJFbmRFZGdlQ29sb3IgPSBDb2xvcjo6YmxhY2s7Citjb25zdGV4cHIgYXV0byBib3JkZXJGaWxs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA4LCAyMDgsIDIwOCk7CiAKIHZvaWQgUmVuZGVyRnJh
bWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiBib3JkZXJSZWN0KQogewpAQCAtOTUsMTMgKzgxLDEzIEBAIHZvaWQgUmVuZGVy
RnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0Lgog
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAg
Y29udGV4dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJD
b2xvcigpID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCkpOworICAgIGNvbnRl
eHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3Io
KSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcik7CiAgICAgCiAgICAgLy8gTm93
IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWlu
dCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Ig
c2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRT
aXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250
ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3Jk
ZXJSZWN0LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkp
OworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigp
LCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAgICAg
Y29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4WCgpIC0gMSwg
Ym9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xv
cik7CiAgICAgfQogfQogCkBAIC0xMTQsMTMgKzEwMCwxMyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0
OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgCiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQu
ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/
IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHls
ZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29sb3IpOwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUg
ZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2Vz
IHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJv
dWdoLgogICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAgICAgY29udGV4
dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24oKSwgSW50U2l6ZSh3aWR0aCgp
LCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0
KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSks
IEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNv
bnRleHQuZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUod2lk
dGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcik7CisgICAgICAgIGNvbnRleHQuZmlsbFJl
Y3QoSW50UmVjdChJbnRQb2ludChib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAx
KSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMTgsNyArMjIxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9M
QVlFUlMKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC41
ZiwgMC4yZikpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuNWYsIDAuMmYpKTsKICAgICAgICAgY29udGV4dC5maWxs
UmVjdChwaXhlbFNuYXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMDEsNyArMzIwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpwYWludERlYnVnT3ZlcmwKICAgICAvLyBUaGUgaW50ZXJhY3RpdmUgcGFydC4KICAg
ICAvLyBQYWludCByZWN0cyBmb3IgdG91Y2ggYWN0aW9uLgogICAgIGlmICh2aXNpYmxlRGVidWdP
dmVybGF5UmVnaW9ucyAmIFRvdWNoQWN0aW9uUmVnaW9uKSB7Ci0gICAgICAgIENvbG9yIHJlZ2lv
bkNvbG9yKDAsIDAsIDI1NSwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byByZWdpb25Db2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUsIDUwKTsKICAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IocmVnaW9uQ29sb3IpOwogICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IGV2ZW50UmVn
aW9uLnJlZ2lvbigpLnJlY3RzKCkpCiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NzAsNyArNjcwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0
aXZlTGlzdEJveFNlbGVjdAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QK
IHsKICAgICAvLyBVc2UgYSBibHVlIGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRo
ZW1lIGRvZXNuJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUp
OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVu
ZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBS
ZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBj
b2xvciBieSBkZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0
aGluZy4KICAgICAvLyBUaGlzIGNvbG9yIG1hdGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9y
LgotICAgIHJldHVybiBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKDE3NiwgMTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4
dFNlYXJjaEhpZ2hsaWdodENvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBD
b2xvcjo6eWVsbG93OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAg
IGF1dG8gbWFya2VyUmVjdCA9IEZsb2F0UmVjdCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAy
NCwgcmVjdC55KCkgKyA4LCAxNiwgMTYgfTsKICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0g
RmxvYXRSb3VuZGVkUmVjdCB7IG1hcmtlclJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsg
OCB9IH07Ci0gICAgYXV0byBjb2xvciA9IENvbG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5k
ZWRSZWN0KHJvdW5kZWRNYXJrZXJSZWN0LCBjb2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyAr
MTQ1OSw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAg
ICAvLyBUaGlzIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3Bh
cmVudCBvdmVybGF5LAogICAgIC8vIG1ha2luZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRz
IGFscGhhIHZhbHVlIGluZGljYXRlcy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJs
ZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0IHsgcmV0dXJuIENvbG9yKDAsIDAsIDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qg
eyByZXR1cm4gQ29sb3I6OmJsYWNrOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNS
aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpIHsgcmV0dXJuIDM7IH0KICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1Jp
bmdPZmZzZXQoZmxvYXQgb3V0bGluZVdpZHRoKSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0
bGluZVdpZHRoIC0gcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsNyArMTU1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Io
KSBjb25zdDsKICAgICBGbG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENv
bG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNiBAQCB2
b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRDb250ZW50U2l6ZUNhdGVnCiAKIGNvbnN0IENvbG9yJiBS
ZW5kZXJUaGVtZUlPUzo6c2hhZG93Q29sb3IoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb2xvcj4gY29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJu
IGNvbG9yOwogfQogCkBAIC0zODcsNyArMzg2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRDaGVja2JveERlY29yYQogCiAgICAgaWYgKGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSkgewog
ICAgICAgICBhdXRvIGJvcmRlciA9IGJveC5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVj
dCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5w
aXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3Vu
ZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKIAogICAg
ICAgICBhdXRvIGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250
ZXh0KCksIHJlY3QpOwogICAgICAgICBhdXRvIHdpZHRoID0gY2xpcC53aWR0aCgpOwpAQCAtNDIz
LDEwICs0MjIsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYQog
ICAgICAgICB9CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KGxpbmVXaWR0
aCwgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50
PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1YXJlLCBsaW5lV2lkdGgsIENvbG9y
IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC43ZiB9KTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNn
Q29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFkb3cpIH0sIGtDR0xpbmVDYXBT
cXVhcmUsIGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAw
LjBmLCAwLjdmKSk7CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6
bWluKHdpZHRoLCBoZWlnaHQpICogdGhpY2tuZXNzUmF0aW8sIDEpOwotICAgICAgICBkcmF3Sm9p
bmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtD
R0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIENvbG9yIHsgMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8g
MjU1LjBmIH0pOworICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQ
b2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIG1ha2VT
aW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBmKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94
LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAu
d2lkdGgoKTsKQEAgLTQ4NCw3ICs0ODMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvCiAKICAgICBpZiAoaXNDaGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBi
b3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91
bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwg
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWlu
dGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CiAKICAgICAgICAgYXV0byBjbGlw
ID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsK
ICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENv
bmNhdmVHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xp
cC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKQEAgLTQ5Niw4ICs0OTUsOSBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICAgICAgY2xpcC5pbmZs
YXRlWCgtY2xpcC53aWR0aCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwogICAgICAgICBjbGlwLmlu
ZmxhdGVZKC1jbGlwLmhlaWdodCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwotCi0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBz
aGFkb3dDb2xvcigpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0Nv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuN2YgKiAyNTUpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwgc2hh
ZG93Q29sb3IpOwogCiAgICAgICAgIEZsb2F0U2l6ZSByYWRpdXMoY2xpcC53aWR0aCgpIC8gMi4w
ZiwgY2xpcC5oZWlnaHQoKSAvIDIuMGYpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNs
aXBSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGNsaXAsIHJhZGl1cywgcmFkaXVzLCByYWRp
dXMsIHJhZGl1cykpOwpAQCAtNzMxLDcgKzczMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50TWVudUxpc3RCdXR0b24KICAgICAgICAgRmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54
KCkgKyAoYnV0dG9uQ2xpcC53aWR0aCgpIC0gY291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFk
ZGluZykgLyAyLjAsIGJ1dHRvbkNsaXAubWF4WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwg
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUsIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOwogICAgICAgICAgICAg
ZWxsaXBzZS5tb3ZlKHNpemUgKyBwYWRkaW5nLCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2Ug
ewpAQCAtNzUxLDggKzc1MSw4IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RC
dXR0b24KICAgICAgICAgfTsKIAogICAgICAgICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNv
bnRyb2woYm94KSA/IDAuMiA6IDAuNTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRT
dHJva2VDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7Ci0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIG9w
YWNpdHkpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cygwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZHJhd1BhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHNoYWRvdykpOwogCiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsK
QEAgLTg0MCw5ICs4NDAsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNr
KGNvCiAKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgIGlmIChyZWFkb25seSkKLSAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMTc4LCAxNzgsIDE3OCkp
OworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2lt
cGxlQ29sb3IoMTc4LCAxNzgsIDE3OCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDc2LCA3NiwgNzYpKTsKKyAgICAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDc2LCA3NiwgNzYpKTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91
bmRlZFJlY3RQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgICAgICBD
R1BhdGhBZGRSb3VuZGVkUmVjdChyb3VuZGVkUmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwg
Y29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7CkBAIC05MTksMTMgKzkxOSwxMyBAQCBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBh
dXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0
YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9h
dFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJI
ZWlnaHQgLSAxKSB9KTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29s
b3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhk
LCAweDhkKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2lt
cGxlQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJv
a2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDB4OGQsIDB4OGQs
IDB4OGQpKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tlR3Jh
ZGllbnQpKTsKIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUp
KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0
cmFja1BhdGg7CiAgICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNz
QmFySGVpZ2h0IC0gMC41KTsKQEAgLTkzOSw4ICs5MzksOCBAQCBib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0ID0g
cHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKICAgICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAg
ICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigxMzMsIDEzMywgMTMzLCAx
ODgpKTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigxOCwgMTgs
IDE4LCA1MSkpOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1w
bGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpKTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0
LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKHVwcGVyR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCBy
ZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKQEAgLTk1MSwxOCArOTUxLDE4IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7
CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwogICAg
ICAgICBhdXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFy
RGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAw
LjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJv
Z3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjAsIENvbG9yKDE5NSwgMjE3LCAyNDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTEsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAg
ICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwot
ICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0
KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29s
b3IoMTk1LCAyMTcsIDI0NykpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAu
NDUsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMC40OSwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAg
ICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUxLCBtYWtlU2ltcGxlQ29sb3IoMzYs
IDExNCwgMjEwKSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFr
ZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250
ZXh0LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGJhckdyYWRpZW50KSk7CiAKICAgICAgICAgYXV0
byBiYXJTdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRh
dGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFy
SGVpZ2h0IC0gMSkgfSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC4wLCBDb2xvcig5NSwgMTA3LCAxODMpKTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgwLjUsIENvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKKyAg
ICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xv
cig5NSwgMTA3LCAxODMpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjUsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJT
dHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQs
IDE2NikpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoYmFyU3Ry
b2tlR3JhZGllbnQpKTsKIAogICAgICAgICBQYXRoIGJhclBhdGg7CkBAIC0xNTY4LDEwICsxNTY4
LDEwIEBAIENvbG9yIFJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKIGNvbnN0IENH
U2l6ZSBhdHRhY2htZW50U2l6ZSA9IHsgMTYwLCAxMTkgfTsKIAogY29uc3QgQ0dGbG9hdCBhdHRh
Y2htZW50Qm9yZGVyUmFkaXVzID0gMTY7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudEJvcmRlckNv
bG9yKCkgeyByZXR1cm4gQ29sb3IoMjA0LCAyMDQsIDIwNCk7IH0KK2NvbnN0ZXhwciBTaW1wbGVD
b2xvciBhdHRhY2htZW50Qm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIw
NCk7CiBzdGF0aWMgQ0dGbG9hdCBhdHRhY2htZW50Qm9yZGVyVGhpY2tuZXNzID0gMTsKIAotc3Rh
dGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0NvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjIyLCAy
MjIsIDIyMik7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyMjIsIDIyMiwgMjIyKTsKIGNvbnN0IENHRmxvYXQgYXR0YWNo
bWVudFByb2dyZXNzQm9yZGVyVGhpY2tuZXNzID0gMzsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2ht
ZW50UHJvZ3Jlc3NTaXplID0gMzY7CkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgdm9pZCBw
YWludEF0dGFjaG1lbnRQcm9ncmVzcyhHcmFwCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFj
aG1lbnRQcm9ncmVzc0JvcmRlclRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihh
dHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0
dGFjaG1lbnRQcm9ncmVzc0NvbG9yKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2ht
ZW50UHJvZ3Jlc3NDb2xvcik7CiAgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKGluZm8ucHJvZ3Jl
c3NSZWN0KTsKIAogICAgIEZsb2F0UG9pbnQgY2VudGVyID0gaW5mby5wcm9ncmVzc1JlY3QuY2Vu
dGVyKCk7CkBAIC0xODk2LDcgKzE4OTYsNyBAQCBzdGF0aWMgUGF0aCBhdHRhY2htZW50Qm9yZGVy
UGF0aChSZW5kZXJBCiAKIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEJvcmRlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIFBhdGgmIGJvcmRlclBhdGgpCiB7Ci0gICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihhdHRhY2htZW50Qm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihhdHRhY2htZW50Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGF0dGFjaG1lbnRCb3JkZXJUaGlja25lc3MpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0
aChib3JkZXJQYXRoKTsKIH0KQEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50U3lzdGVtUHJldmlld0IKICAgICAvLyBEcmF3IGEgZHJvcCBzaGFkb3cgYXJvdW5k
IHRoZSBjaXJjbGUuCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJl
Y2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAg
ICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCi0gICAgQ29sb3Igc2hhZG93Q29sb3IgPSBD
b2xvciB7IDAuZiwgMC5mLCAwLmYsIDAuMWYgfTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLmYsIDAuZiwgMC5mLCAwLjFmKTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAg
ICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9y
IHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ5LDgg
KzE2NDksOCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAg
fTsKICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJv
bVBvaW50cyhhcnJvdzIpKTsKIAotICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAw
LCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7
CisgICAgY29uc3RleHByIGF1dG8gbGVmdFNlcGFyYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDAsIDAsIDQwKTsKKyAgICBjb25zdGV4cHIgYXV0byByaWdodFNlcGFyYXRvckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDQwKTsKIAogICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhlIHNlcGFyYXRvciB0aGlja25lc3MgYW5kIHNwYWNlIGJlIHNjYWxlZCB1cCBieSBmb250
U2NhbGU/CiAgICAgaW50IHNlcGFyYXRvclNwYWNlID0gMjsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9y
ZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0aGluLgpAQCAtMjQ3Miw4
ICsyNDcyLDggQEAgY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvblNlbGVjdGlvbkJvcgogY29u
c3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvbkJhY2tncm91bmRSYWRpdXMgPSAzOwogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50SWNvblRvVGl0bGVNYXJnaW4gPSAyOwogCi1zdGF0aWMgQ29sb3IgYXR0
YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCAzMCk7
IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29s
b3IoMjU1LCAyNTUsIDI1NSwgMTI1KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1l
bnRJY29uQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDMwKTsKK2Nv
bnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEyNSk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRp
dGxlRm9udFNpemUgPSAxMjsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlQmFja2dyb3Vu
ZFJhZGl1cyA9IDM7CkBAIC0yNDgxLDIzICsyNDgxLDIzIEBAIGNvbnN0IENHRmxvYXQgYXR0YWNo
bWVudFRpdGxlQmFja2dyb3VuZFAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlTWF4aW11
bVdpZHRoID0gMTAwIC0gKGF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmRQYWRkaW5nICogMik7CiBj
b25zdCBDRkluZGV4IGF0dGFjaG1lbnRUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1zdGF0
aWMgQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVy
biBDb2xvcigyMDQsIDIwNCwgMjA0LCAyNTUpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFRp
dGxlSW5hY3RpdmVUZXh0Q29sb3IoKSB7IHJldHVybiBDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUp
OyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIwNCwgMjU1KTsKK2NvbnN0ZXhw
ciBTaW1wbGVDb2xvciBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZVRleHRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRT
dWJ0aXRsZUZvbnRTaXplID0gMTA7CiBjb25zdCBpbnQgYXR0YWNobWVudFN1YnRpdGxlV2lkdGhJ
bmNyZW1lbnQgPSAxMDsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3Io
KSB7IHJldHVybiBDb2xvcig4MiwgMTQ1LCAyMTQsIDI1NSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVD
b2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoODIsIDE0
NSwgMjE0LCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhcldpZHRo
ID0gMzA7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhckhlaWdodCA9IDU7CiBj
b25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0Jhck9mZnNldCA9IC05OwogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJXaWR0aCA9IDE7Ci1zdGF0aWMgQ29sb3Ig
YXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgODkpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9y
KCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6OndoaXRlKTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1l
bnRQcm9ncmVzc0JhckJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTI4KTsg
fQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCA4OSk7Citjb25zdGV4cHIgU2ltcGxlQ29s
b3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yID0gQ29sb3I6OndoaXRlOworY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNl
aG9sZGVyQm9yZGVyUmFkaXVzID0gNTsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50UGxhY2Vob2xk
ZXJCb3JkZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDU2KTsgfQorY29uc3RleHBy
IFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDAsIDU2KTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyV2lkdGggPSAyOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3Jk
ZXJEYXNoTGVuZ3RoID0gNjsKIApAQCAtMjU0MSw3ICsyNTQxLDcgQEAgc3RhdGljIENvbG9yIHRp
dGxlVGV4dENvbG9yRm9yQXR0YWNobWVudAogICAgICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgp
LnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0g
Y29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBhbHRlcm5hdGVTZWxlY3RlZENvbnRyb2xUZXh0Q29s
b3JdKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXR0YWNobWVudFRpdGxl
SW5hY3RpdmVUZXh0Q29sb3IoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRs
ZUluYWN0aXZlVGV4dENvbG9yOwogICAgIH0KIAogICAgIHJldHVybiBhdHRhY2htZW50LnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVzdWx0KTsKQEAgLTI2NDcsNyArMjY0Nyw3
IEBAIHZvaWQgQXR0YWNobWVudExheW91dDo6bGF5T3V0U3VidGl0bGUoY28KICAgICBpZiAoc3Vi
dGl0bGVUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29sb3Igc3VidGl0
bGVDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihh
dHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IoKSk7CisgICAgQ29sb3Igc3VidGl0bGVDb2xvciA9
IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50
U3VidGl0bGVUZXh0Q29sb3IpOwogICAgIENGU3RyaW5nUmVmIGxhbmd1YWdlID0gMDsgLy8gQnkg
bm90IHNwZWNpZnlpbmcgYSBsYW5ndWFnZSB3ZSB1c2UgdGhlIHN5c3RlbSBsYW5ndWFnZS4KICAg
ICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRG
b3JMYW5ndWFnZShrQ1RGb250VUlGb250U3lzdGVtLCBhdHRhY2htZW50U3VidGl0bGVGb250U2l6
ZSwgbGFuZ3VhZ2UpKTsKICAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsKQEAg
LTI3MjEsNyArMjcyMSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEljb25CYWNrZ3Jv
dW4KICAgICBpZiAocGFpbnRCb3JkZXIpCiAgICAgICAgIGJhY2tncm91bmRSZWN0LmluZmxhdGUo
LWF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9yZGVyVGhpY2tuZXNzKTsKIAotICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihhdHRhY2htZW50SWNvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
YXR0YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3IpOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KEZsb2F0Um91bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJh
ZGlpKGF0dGFjaG1lbnRJY29uQmFja2dyb3VuZFJhZGl1cykpLCBiYWNrZ3JvdW5kQ29sb3IpOwog
CiAgICAgaWYgKHBhaW50Qm9yZGVyKSB7CkBAIC0yNzMyLDcgKzI3MzIsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludEF0dGFjaG1lbnRJY29uQmFja2dyb3VuCiAgICAgICAgIFBhdGggYm9yZGVyUGF0aDsK
ICAgICAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBpY29uQmFja2dy
b3VuZFJhZGl1c1NpemUpOwogCi0gICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVu
dC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVy
Q29sb3IoKSk7CisgICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgp
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOwog
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yKTsKICAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudEljb25TZWxlY3Rpb25Cb3JkZXJUaGlj
a25lc3MpOwogICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CkBAIC0yODMw
LDcgKzI4MzAsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91CiAg
ICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgYWx0ZXJu
YXRlU2VsZWN0ZWRDb250cm9sQ29sb3JdKTsKICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAgICAgfSBlbHNlCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IGF0dGFj
aG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGJhY2tncm91bmRD
b2xvciA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yOwogCiAgICAgYmFj
a2dyb3VuZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKGJhY2tncm91bmRDb2xvcik7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3Vu
ZENvbG9yKTsKQEAgLTI4NzUsNyArMjg3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVu
dFByb2dyZXNzKGNvbnMKICAgICBiYWNrZ3JvdW5kUmVjdC5pbmZsYXRlKC1hdHRhY2htZW50UHJv
Z3Jlc3NCYXJCb3JkZXJXaWR0aCAvIDIpOwogCiAgICAgRmxvYXRSb3VuZGVkUmVjdCBiYWNrZ3Jv
dW5kUm91bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGJh
Y2tncm91bmRSZWN0LmhlaWdodCgpIC8gMikpOwotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KGJhY2tncm91bmRSb3VuZGVkUmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENv
bG9yKCkpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KGJhY2tncm91bmRSb3VuZGVkUmVj
dCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKTsKIAogICAgIHsKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlwU2F2ZXIoY29udGV4dCk7CkBAIC0yODg1
LDEzICsyODg1LDEzIEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFByb2dyZXNzKGNvbnMK
ICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzUmVjdC53aWR0aCgpICogcHJv
Z3Jlc3MpOwogICAgICAgICBwcm9ncmVzc1JlY3QgPSBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxz
KHByb2dyZXNzUmVjdCwgYXR0YWNobWVudC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkp
OwogCi0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NSZWN0LCBhdHRhY2htZW50UHJv
Z3Jlc3NCYXJGaWxsQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NS
ZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IpOwogICAgIH0KIAogICAgIFBhdGgg
Ym9yZGVyUGF0aDsKICAgICBmbG9hdCBib3JkZXJSYWRpdXMgPSBib3JkZXJSZWN0LmhlaWdodCgp
IC8gMjsKICAgICBib3JkZXJQYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIEZsb2F0U2l6
ZShib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cykpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyV2lkdGgpOwog
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKIH0KQEAgLTI5MDEsNyArMjkwMSw3
IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm8KICAgICBQYXRoIGJv
cmRlclBhdGg7CiAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChsYXlvdXQuYXR0YWNobWVu
dFJlY3QsIEZsb2F0U2l6ZShhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJSYWRpdXMsIGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlclJhZGl1cykpOwogCi0gICAgQ29sb3IgcGxhY2Vob2xkZXJC
b3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcigpKTsKKyAgICBDb2xvciBwbGFjZWhv
bGRlckJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4OCwxOSArMjg4LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIoY29u
c3QKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgQ09M
T1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQpOwotICAgIHJldHVybiBD
b2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3Ip
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1
ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVD
b2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBjb2xvciBtYXRjaGVzIEZpcmVm
b3guCi0gICAgcmV0dXJuIENvbG9yKDE3NiwgMTc2LCAxNzYpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoMTc2LCAxNzYsIDE3Nik7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xP
Ul9ISUdITElHSFRURVhUKTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0
R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3Ip
KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNv
bnN0CkBAIC0xMDA5LDcgKzEwMDksNyBAQCBDb2xvciBSZW5kZXJUaGVtZVdpbjo6c3lzdGVtQ29s
b3IoQ1NTVmFsCiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFs
dWVJZCwgb3B0aW9ucyk7CiAKICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKHN5c0Nv
bG9ySW5kZXgpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUo
Y29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdl
dFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQog
CiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjYyMzUyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGRl
YnVnU2hhZG93ID0gbnVsbHB0cjsKICAgICBpZiAoZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtl
VW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpO
b3JtYWwsIHRydWUsIENvbG9yKDAsIDI1NSwgMCwgMjAwKSk7CisgICAgICAgIGRlYnVnU2hhZG93
ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dT
dHlsZTo6Tm9ybWFsLCB0cnVlLCBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwLCAyMDApKTsKICAg
ICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KGRlYnVnU2hhZG93LmdldCgpKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDcgKzExOSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYKIAog
ICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICBpbmZvLmNv
bnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgaW5mby5jb250ZXh0KCku
c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0
U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOwogCiAgICAgaW5mby5jb250
ZXh0KCkuZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSkpOwogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgcGl4ZWxTbmFwcGVk
T2Zmc2V0SGVpZ2h0KCkpKTsKQEAgLTEyOCwxMyArMTI4LDEzIEBAIHZvaWQgUmVuZGVyTWF0aE1M
QmxvY2s6OnBhaW50KFBhaW50SW5mbyYKIAogICAgIGludCB0b3BTdGFydCA9IHBhZGRpbmdUb3Ao
KTsKIAotICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCkp
OworICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAy
NTUsIDApKTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgSW50
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSk7CiAKICAgICBpbnQgYmFzZWxp
bmUgPSByb3VuZFRvSW50KGJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVl
LCBIb3Jpem9udGFsTGluZSkpOwogCi0gICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3Io
Q29sb3IoMjU1LCAwLCAwKSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCkpOwogCiAgICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUo
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgYmFzZWxpbmUpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiw3ICsyMDI2LDcgQEAgQ29s
b3IgUmVuZGVyU3R5bGU6OmNvbG9yUmVzb2x2aW5nQ3VycmVudAogICAgIGlmIChpc0N1cnJlbnRD
b2xvcihyZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyU3R5bGUgPSBjb21wdXRlQm9yZGVy
U3R5bGUoKTsKICAgICAgICAgaWYgKCF2aXNpdGVkTGluayAmJiAoYm9yZGVyU3R5bGUgPT0gQm9y
ZGVyU3R5bGU6Okluc2V0IHx8IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQgfHwg
Ym9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlIHx8IGJvcmRlclN0eWxlID09IEJvcmRl
clN0eWxlOjpHcm9vdmUpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKDIzOCwgMjM4LCAyMzgp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KTsKIAog
ICAgICAgICByZXR1cm4gdmlzaXRlZExpbmsgPyB2aXNpdGVkTGlua0NvbG9yKCkgOiBjb2xvcigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgcHVi
bGljOgogICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua1N0cm9rZUNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtTdHJva2VDb2xvcjsgfQogICAg
IHZvaWQgc2V0SGFzRXhwbGljaXRseVNldFN0cm9rZUNvbG9yKGJvb2wgdikgeyBTRVRfVkFSKG1f
cmFyZUluaGVyaXRlZERhdGEsIGhhc1NldFN0cm9rZUNvbG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odikpOyB9CiAgICAgYm9vbCBoYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT5oYXNTZXRTdHJva2VDb2xvcjsgfTsKLSAgICBz
dGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNvbG9yKCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6OnRy
YW5zcGFyZW50KTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJl
dHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7IH0KICAgICBDb2xvciBjb21wdXRlZFN0cm9rZUNvbG9y
KCkgY29uc3Q7CiAKICAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlSW5oZXJpdGVkRGF0YS0+bWl0ZXJMaW1pdDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDI2MjM1MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcg
aW5pdGlhbFN0cm9rZVBhaW50VXJpKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBzdGF0aWMg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBpbml0aWFsU3Ryb2tlRGFzaEFycmF5KCkgeyByZXR1cm4g
eyB9OyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxTdG9wT3BhY2l0eSgpIHsgcmV0dXJuIDE7
IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0b3BDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAs
IDAsIDApOyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxTdG9wQ29sb3IoKSB7IHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMCk7IH0KICAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbEZsb29k
T3BhY2l0eSgpIHsgcmV0dXJuIDE7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbEZsb29kQ29s
b3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwKTsgfQotICAgIHN0YXRpYyBDb2xvciBpbml0aWFs
TGlnaHRpbmdDb2xvcigpIHsgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CisgICAgc3Rh
dGljIENvbG9yIGluaXRpYWxGbG9vZENvbG9yKCkgeyByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAs
IDAsIDApOyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxMaWdodGluZ0NvbG9yKCkgeyByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CiAgICAgc3RhdGljIFNoYWRvd0Rh
dGEqIGluaXRpYWxTaGFkb3coKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgc3RhdGljIFN0cmlu
ZyBpbml0aWFsTWFza2VyUmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHN0YXRp
YyBTdHJpbmcgaW5pdGlhbE1hcmtlclN0YXJ0UmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoY28KIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBDb2xvcihDb2xv
cjo6dHJhbnNwYXJlbnQsIHRydWUpOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50
OwogCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAgIGF1dG8mIHN2
Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZh
bHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IGJsdWUg
PSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ibHVlQ29t
cG9uZW50KCksIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRp
b24uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ibHVlQ29tcG9uZW50KCkpOwogICAg
ICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRvLmFscGhhQ29tcG9uZW50KCksIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmFs
cGhhQ29tcG9uZW50KCkpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSB7IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiks
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoYWxwaGEpIH07CisgICAgICAgIGFuaW1hdGVkID0gbWFrZVNpbXBsZUNvbG9yKHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiks
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29u
c3Qgb3ZlcnJpZGUKQEAgLTEyMCwxMSArMTIwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8g
c2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAKICAgICAgICAgLy8g
SWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVl
LgotICAgICAgICBtX3RvID0geworICAgICAgICBtX3RvID0gbWFrZVNpbXBsZUNvbG9yKAogICAg
ICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWRDb21wb25lbnQo
KSArIHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkpLAogICAgICAgICAgICAgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ncmVl
bkNvbXBvbmVudCgpKSwKICAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2lt
cGxlVG8uYmx1ZUNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkpCi0gICAg
ICAgIH07CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0
cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSwxMCArMTA1LDEwIEBAIHZvaWQgTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50OjpkcmF3UmVjdChQYWcKICAgICBGbG9hdFJlY3QgaW5zZXRSZWN0ID0gb3ZlcmxheS5ib3Vu
ZHMoKTsKIAogICAgIGlmIChvdmVybGF5Lm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpEb2N1bWVudCkgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENv
bG9yKDAsIDI1NSwgMCkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1w
bGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTUwKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1
NSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAyNTUpKTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTIwKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9u
T3ZlcmxheS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2NvY29hL1dl
YlZpZXdWaXN1YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkubW0JKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9u
T3ZlcmxheS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCAtIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhXZWJWaWV3OihQbGF0Zm9yCiAgICAgX2xheWVyID0gYWRvcHROUyhbW0NBVGls
ZWRMYXllciBhbGxvY10gaW5pdF0pOwogICAgIFtfbGF5ZXIgc2V0TmFtZTpAIldlYlZpZXdWaXN1
YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkiXTsKICAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgW192aWV3IGJvdW5kc10uc2l6ZS53aWR0aCwgW192aWV3IGJvdW5kc10uc2l6ZS5o
ZWlnaHQpXTsKLSAgICBXZWJDb3JlOjpDb2xvciB2aWV3Q29sb3IgPSBpc0RlcHJlY2F0ZWQgPyBX
ZWJDb3JlOjpDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDI1NSwg
MzIpOworICAgIFdlYkNvcmU6OkNvbG9yIHZpZXdDb2xvciA9IGlzRGVwcmVjYXRlZCA/IFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6Om1ha2VTaW1wbGVD
b2xvcigwLCAwLCAyNTUsIDMyKTsKICAgICBbX2xheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNo
ZWRDR0NvbG9yKHZpZXdDb2xvcildOwogICAgIFtfbGF5ZXIgc2V0WlBvc2l0aW9uOjk5OV07CiAg
ICAgW19sYXllciBzZXREZWxlZ2F0ZTpzZWxmXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI2IEBACisyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51
bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29udGV4dCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNv
cmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3RhcEhpZ2hsaWdodENvbG9yRm9yRmFz
dENsaWNrOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBhaW50U25hcHNob3RBdFNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
RmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3JPdmVy
bGF5Q2xpZW50SU9TOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmhpZ2hsaWdodENvbG9y
KTogRGVsZXRlZC4KKwogMjAyMC0wNS0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIERlcHJlY2F0ZSBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQg
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRyYXdJbkNvbnQKIAogI2lmbmRlZiBOREVCVUcKICAg
ICBpZiAobV9pc09wYXF1ZSkKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChzY2FsZWRMYXllckJv
dW5kcywgV2ViQ29yZTo6Q29sb3IoMjU1LCA0NywgMTQ2KSk7CisgICAgICAgIGNvbnRleHQuZmls
bFJlY3Qoc2NhbGVkTGF5ZXJCb3VuZHMsIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigyNTUsIDQ3
LCAxNDYpKTsKICNlbmRpZgogCiAgICAgY29udGV4dC5zY2FsZShtX3NjYWxlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9U
WVBFKFdlYktpdENvbG9yLCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENv
bG9yVG9XZWJDb3JlQ29sb3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJD
b3JlOjpDb2xvcihzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci0+Z3JlZW4pLAorICAgIHJldHVybiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yLT5ncmVlbiksCiAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Ymx1
ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpKTsKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzI4LDcgKzQz
MjgsNyBAQCAtICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3RpCiAtIChXZWJD
b3JlOjpDb2xvcilfdGFwSGlnaGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6KEJPT0wpZm9yRmFzdENs
aWNrCiB7CiAgICAgQVNTRVJUKF9zaG93RGVidWdUYXBIaWdobGlnaHRzRm9yRmFzdENsaWNraW5n
KTsKLSAgICByZXR1cm4gZm9yRmFzdENsaWNrID8gV2ViQ29yZTo6Q29sb3IoMCwgMjI1LCAwLCAx
MjcpIDogV2ViQ29yZTo6Q29sb3IoMjI1LCAwLCAwLCAxMjcpOworICAgIHJldHVybiBmb3JGYXN0
Q2xpY2sgPyBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjI1LCAwLCAxMjcpIDogV2ViQ29y
ZTo6bWFrZVNpbXBsZUNvbG9yKDIyNSwgMCwgMCwgMTI3KTsKIH0KIAogLSAodm9pZClfc2V0RG91
YmxlVGFwR2VzdHVyZXNFbmFibGVkOihCT09MKWVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3
IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGMKICAgICBwYWludExh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CiAgICAgcGFpbnRMYXllci0+c2V0
UG9zaXRpb24ocmVjdC5sb2NhdGlvbigpKTsKICAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Qu
c2l6ZSgpKTsKLSAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwg
MC4wZiwgMC4wZiwgMC4yZikpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKIAogICAg
IEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwogICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1
ZT4oMCwgMSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDksOCArNTA5LDggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJs
YQogewogICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDE7CiAKLSAgICBDb2xvciBvdmVybGF5
QmFja2dyb3VuZENvbG9yKDAuMWYsIDAuMWYsIDAuMWYsIDAuMjVmKTsKLSAgICBDb2xvciBzaGFk
b3dDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBhdXRvIG92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMWYsIDAuMWYsIDAuMWYsIDAu
MjVmKTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKIAogICAgIEludFJlY3QgYm9yZGVySW5mbGF0ZWREaXJ0
eVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3QuaW5mbGF0ZShi
b3JkZXJXaWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDIsNyArMjQwMiw3IEBA
IHZvaWQgV2ViUGFnZTo6cGFpbnRTbmFwc2hvdEF0U2l6ZShjb25zdCAKIAogICAgIGlmIChvcHRp
b25zICYgU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25SZWN0YW5nbGUpIHsKICAgICAgICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bkJvdW5kcygpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3Io
MHhGRiwgMCwgMCkpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yKDB4RkYsIDAsIDApKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnN0cm9r
ZVJlY3Qoc2VsZWN0aW9uUmVjdGFuZ2xlLCAxKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVy
SU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1
Myw3IEBAIGNvbnN0IGludCB0b3RhbFZlcnRpY2FsTWFyZ2luID0gMTsKIAogY29uc3RleHByIE9w
dGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBmaW5kVGV4dEluZGljYXRvck9wdGlvbnMgeyBU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24s
IFRleHRJbmRpY2F0b3JPcHRpb246OkRvTm90Q2xpcFRvVmlzaWJsZVJlY3QgfTsKIAotc3RhdGlj
IENvbG9yIGhpZ2hsaWdodENvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyMjgsIDU2
LCAyNTUpOwotfQorY29uc3RleHByIGF1dG8gaGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyMjgsIDU2LCAyNTUpOwogCiB2b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CkBAIC03OSw3ICs3Niw3IEBAIHZvaWQg
RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXcKICAgICBWZWN0b3I8RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7CiAgICAgVmVjdG9yPFBhdGg+IHBh
dGhzID0gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIGNvcm5lclJhZGl1cyk7CiAKLSAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihoaWdobGlnaHRDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihoaWdobGlnaHRDb2xvcik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMpCiAg
ICAgICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1NCkKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjog
UmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWVyaWMgdmFsdWVzIHdpdGggdHlw
ZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9y
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BERlNuYXBzaG90
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
ZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50IGNvbnN0KToKKwogMjAyMC0wNS0zMCAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEFkZGl0aW9u
YWwgY29sb3IgY2xlYW51cHMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogVEVTVChDb2xvciwg
UkdCVG9IU0xfUmVkKQogewotICAgIENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7CisgICAgQ29sb3Ig
Y29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAogICAgIGF1dG8gW2h1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpKTsKIApAQCAtODMsNyArODMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9S
ZWQpCiAKIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewotICAgIENvbG9yIGNvbG9yKDAs
IDI1NSwgMCk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsK
IAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9I
U0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIApAQCAtOTksNyArOTksNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkK
IHsKLSAgICBDb2xvciBjb2xvcigwLCAwLCAyNTUpOworICAgIENvbG9yIGNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0
bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7
CiAKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1Rf
RkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3Ro
ZXJJbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgIENvbG9yIHZhbGlkQ29sb3IoMjU1
LCAwLCAwKTsKKyAgICBDb2xvciB2YWxpZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwg
MCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9G
QUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKQEAgLTE3OSw3ICsxNzksNyBAQCBURVNU
KENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxp
ZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAK
LSAgICB2YWxpZENvbG9yID0gQ29sb3IoMSwgMiwgMywgNCk7CisgICAgdmFsaWRDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigxLCAyLCAzLCA0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlz
VmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAg
ICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBU
RVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBAIC01MSw3ICs1MSw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTY5LDcg
KzY5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwg
MS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAt
ODgsMjAgKzg4LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAg
ICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwor
ICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQ
Myk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OlNSR0IpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CiAgICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7CkBAIC0x
MTEsOCArMTExLDggQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBpbnQgZyA9
IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEo
ciAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpT
UkdCKTsKLSAgICBDb2xvciByZ2IyKHIsIGcsIGIsIGEpOworICAgIENvbG9yIHJnYjEgeyBtYWtl
RXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAs
IENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1lcGxDb2xvcihy
LCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJn
YjIsIHJnYjEpOwogfQpAQCAtMTIwLDIwICsxMjAsMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBF
cXVhbGl0eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKIHsKICAgICB7Ci0gICAgICAgIENv
bG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAg
ICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVk
KCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMy
Lmhhc2goKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xv
ciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgQ29s
b3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpTUkdCKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAg
ICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIg
PSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxKHIgLyAyNTUuMCwgZyAvIDI1
NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQik7Ci0gICAgQ29sb3Ig
cmdiMihyLCBnLCBiLCBhKTsKKyAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAv
IDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdC
KSB9OworICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltZXBsQ29sb3IociwgZywgYiwgYSk7CiAgICAg
RVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CiAKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAg
RVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEp
KTsKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3Rv
cikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBj
MSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9y
IGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBD
b2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIFRFU1QoRXh0ZW5kZWRD
b2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVu
Y2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcgQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciogYzEgPSBuZXcgQ29sb3Ig
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xv
ciogYzIgPSBuZXcgQ29sb3IoKmMxKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpCiAKIENvbG9yIG1ha2VDb2xvcigpCiB7Ci0gICAg
Q29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAg
ICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
ICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgs
NyArMjM4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIHAz
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAg
ICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43
NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShwM0NvbG9y
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9IHAzQ29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29s
b3IgbGluZWFyQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJH
Qik7CisgICAgICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAgICAgICAgRVhQRUNU
X1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICAgICAgYXV0byBzUkdCQ29tcG9u
ZW50cyA9IGxpbmVhckNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVu
dHNbMF0sIDEuMGYpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUERGU25hcHNob3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNyBAQCBURVNUKFBERlNuYXBzaG90LCBGdWxsQ29udGVudCkKICAg
ICAgICAgRVhQRUNUX0VRKHBhZ2UtPnRleHQoKVs0XSwgJ28nKTsKIAogICAgICAgICAvLyBUaGUg
ZW50aXJlIHBhZ2Ugc2hvdWxkIGJlIGdyZWVuLiBQaWNrIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSB0
byBjaGVjay4KLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAw
KSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JB
dFBvaW50KDQwMCwgMzAwKSA9PSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAg
ICAgZGlkVGFrZVNuYXBzaG90ID0gdHJ1ZTsKICAgICB9XTsKQEAgLTkxLDcgKzkxLDcgQEAgVEVT
VChQREZTbmFwc2hvdCwgU3VicmVnaW9ucykKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJh
Y3RlckNvdW50KCksIDB1KTsKIAogICAgICAgICAvLyBUaGUgZW50aXJlIHBhZ2Ugc2hvdWxkIGJl
IGdyZWVuLiBQaWNrIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSB0byBjaGVjay4KLSAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDIwMCwgMTUwKSA9PSBDb2xvcigwLCAyNTUsIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDIwMCwgMTUwKSA9PSBt
YWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAgICAgZGlkVGFrZVNuYXBzaG90ID0g
dHJ1ZTsKICAgICB9XTsKQEAgLTExMSwxMCArMTExLDEwIEBAIFRFU1QoUERGU25hcHNob3QsIFN1
YnJlZ2lvbnMpCiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJv
dW5kcygpLCBDR1JlY3RNYWtlKDAsIDAsIDEyMDAsIDEyMDApKSk7CiAKICAgICAgICAgLy8gQSBw
aXhlbCB0aGF0IHdhcyBpbiB0aGUgdmlldyBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBp
biB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0
UG9pbnQoMjAwLCAxNTApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJV
RShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IG1ha2VTaW1wbGVDb2xvcigwLCAyNTUs
IDApKTsKIAogICAgICAgICAvLyBBIHBpeGVsIHRoYXQgd2FzIG91dHNpZGUgdGhlIHZpZXcgc2hv
dWxkIGFsc28gYmUgZ3JlZW4gKHdlIGV4dGVuZCBiYWNrZ3JvdW5kIGNvbG9yIG91dCkuIFBpY2sg
YSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdl
LT5jb2xvckF0UG9pbnQoOTAwLCA3MDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoOTAwLCA3MDApID09IG1ha2VTaW1wbGVDb2xv
cigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1d
OwpAQCAtMTQwLDIwICsxNDAsMjAgQEAgVEVTVChQREZTbmFwc2hvdCwgT3ZlcjIwMEluY2hlcykK
ICAgICAgICAgYXV0byBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMCk7CiAgICAgICAgIEVYUEVDVF9O
RShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3Qo
cGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigwLCAyNTUs
IDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9
PSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT5j
aGFyYWN0ZXJDb3VudCgpLCA1dSk7CiAKICAgICAgICAgcGFnZSA9IGRvY3VtZW50LT5wYWdlKDEp
OwogICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7CiAgICAgICAgIEVYUEVDVF9UUlVF
KENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RNYWtlKDAsIDAsIDgwMCwg
MTQ0MDApKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMw
MCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9y
QXRQb2ludCg0MDAsIDMwMCkgPT0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAg
ICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgpLCAwdSk7CiAKICAgICAgICAgcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKDIpOwogICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7
CiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBD
R1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5j
b2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBF
Q1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IG1ha2VTaW1wbGVDb2xvcigw
LCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1
KTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwpAQCAtMTc4LDcgKzE3OCw3IEBA
IFRFU1QoUERGU25hcHNob3QsIExpbmtzKQogICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0
cik7CiAKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRz
KCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
cGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigyNTUsIDI1NSwgMjU1KSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gbWFrZVNp
bXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpKTsKIAogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hh
cmFjdGVyQ291bnQoKSwgOHUpOwogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+dGV4dCgpWzBdLCAn
QycpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQu
bW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBE
RkRvY3VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDggQEAgV2ViQ29yZTo6
Q29sb3IgVGVzdFBERlBhZ2U6OmNvbG9yQXRQb2ludAogICAgIGF1dG8gYSA9IHBpeGVsW2kgKyAz
XTsKIAogICAgIGlmICghYSkKLSAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwotICAgIHJl
dHVybiB7IHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEgfTsKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAwKTsKKyAgICByZXR1
cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAq
IDI1NSAvIGEsIGEpOwogfQogCiAvLyBEb2N1bWVudHMK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400690</attachid>
            <date>2020-05-30 21:08:17 -0700</date>
            <delta_ts>2020-05-30 21:19:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200530210816.patch</filename>
            <type>text/plain</type>
            <size>117365</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9v
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1Zh
bHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEgY29uc3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2hhcGVI
aWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
b2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lv
bkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJs
YXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omxp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29s
b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmdldERl
YnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50c0xheWVyRGVi
dWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUxheWVyRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6
VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmds
ZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZvck1hcmtlckxp
bmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9QYWlu
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6Zm9yY2VkVGV4dENvbG9yIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpi
b3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsYXlzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0aXRsZVRleHRDb2xv
ckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudExheW91dDo6bGF5
T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50SWNvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91
bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJh
d1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zl
cmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjog
QWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidQogICAgIAog
ICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBnLCBiKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5p
c01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
LSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6
U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOworICAgIG1fdHJhbnNwYXJlbnRD
b2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0
YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5d29yZDsgKytpKQogICAgICAg
ICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRlbmRlZENvbG9yKGNvbG9yQ2hh
bm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5l
bHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBh
cnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5
Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBAQCBSZW5kZXJTdHlsZSBIVE1M
SW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1dG9GaWxsU3Ryb25nUGFzc3dv
cmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayk7CiAgICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwgUGVyY2VudCB9KTsKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBmLCAwLjBmLCAwLjZmIH0pOwor
ICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZs
b3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2UoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKSkpOwog
ICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVkIGZvciB0aGUgbWFzay4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGUoKS5zaGFkb3dDb2xvciku
c2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQo
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywxNyArMTMwNywxNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IoZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IociwgZywgYiwgYSkpOworICAgIHNl
dFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIHNldFNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2lt
cGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
MTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xvcikKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxw
aGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHls
ZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBtX3N0eWxl
KENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwgYywgbSwgeSwgaywgYSB9KQor
ICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zCiAKIGJvb2wgQ2FudmFzU3R5
bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHls
ZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9Owor
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgocXVhZCwgYm91
bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgoY2xpcFF1YWQsIGJvdW5k
cykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxp
Z2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5n
RnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNvbnN0IENvbG9yIHNoYXBlSGln
aGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29uc3RleHByIGF1dG8gc2hhcGVI
aWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIsIDEyNywgMjA0KTsKIAogICAg
IFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0
ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3NDCiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0
IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxQYXRoKG1hcmdp
blBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGluZykgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICAgICAgY29u
c3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAsIDE2OCk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwg
MjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihpbmRpY2F0aW5nQ29sb3Ip
OwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBwYWludFJlY3RzQ29sb3IoMS4w
ZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1dG8gcGFpbnRSZWN0c0NvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25zdCBUaW1lUmVjdFBhaXImIHBh
aXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEp
OwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC42Zik7
CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAw
LCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm91bmRzQ29sb3IpOwogCiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkgKzY3MCw5IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3Zl
cmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQogewotICAgIGNvbnN0IENvbG9y
IHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDAuNmYpOwotICAgIGNvbnN0
IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjJmKTsKLSAgICBjb25z
dCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25z
dGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0UnVsZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHByIGF1dG8gZGFya1J1bGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIEludFBvaW50IHNjcm9s
bE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0KTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwogCi0g
ICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IoMTI4LCAxMjgsIDEyOCk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0
bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CkBAIC0xMDY4
LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgK
ICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9KTsKICAgICB9OwogCi0gICAg
ZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1RleHQoZWxlbWVu
dElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVtZW50Q2xh
c3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNldWRv
VHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFtZSwgbWFrZVNpbXBs
ZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFsdWUsIG1ha2VT
aW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmll
d2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBl
LCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNr
KTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7CiAgICAgZHJhd1Rl
eHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgUGF0aCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAgICAgICB0ZXh0UG9zaXRpb25Y
ID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAgdGV4dFBvc2l0aW9uWSArPSBm
b250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBDb2xvcigxNzAsIDEzLCAx
NDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VTaW1wbGVDb2xvcigxNzAsIDEz
LCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAgICAgICAg
IGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamUKIAogICAgIGRvdWJsZSBh
ID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQotICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
ciwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgogICAg
IGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihj
b25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8aW50PihhICogMjU1
KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRvd0RhdGEqIExpbmVMYXlvdXQ6
OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQ
b2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAw
LCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1
Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7CiAgICAgcmV0dXJuICZkZWJ1
Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBi
ZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3Ig
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0LW1l
ZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpOworICAgIGNv
bnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhh
dmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41ZiwgMC4wZiwgMC4wZiwgMC40Zikp
CisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBD
b2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBh
Z2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCiAg
ICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0KIAotc3RhdGlj
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQor
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4mIHRvdWNoRXZlbnRSZWdp
b25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xNjMsOSAr
MTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdQogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQotICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5LmcsIGVudHJ5LmIsIDUwIH0p
OworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnku
ciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9KCkp
OwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2
ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewotICAgICAgICBDb2xvciBy
ZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8gcmVnaW9uQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRvIGl0ID0gdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lvbi5rZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgpKQogICAgICAgICAgICAgcmVn
aW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJuaW5nQ29sb3IpIHsKICAgICAg
ICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgZGVidWdSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwg
Q29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoZGVidWdSZWN0
LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMw
LDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAg
ICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICogKHBhZ2VTaXplSW5QaXhlbHMu
aGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIGJ5
IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUs
IDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGluZVkgPSBjdXJyZW50SGVpZ2h0
IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1
KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5lWSksIEludFBvaW50KHBhZ2VX
aWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3Rv
cmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC44ZikpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjlm
LCAwLjlmLCAwLjlmLCAxLmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjbGlwLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjlmLCAwLjlm
LCAwLjlmLCAxLmYpKTsKIAogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0geyAxMCwgMjAg
fTsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9ICAiQ1BVOiAiICsgY3B1VXNhZ2VTdHJpbmcoZ0Rh
dGEuY3B1KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5Ojpw
bGF0Zm9ybUluaXRpCiAgICAgbV9wYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG92
ZXJsYXkoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICptX292ZXJsYXlQYWludGVyKTsKICAgICBtX3BhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldFNpemUoeyBub3JtYWxXaWR0aCwg
bm9ybWFsSGVpZ2h0IH0pOwotICAgIG1fcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
OGYpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICBvdmVy
bGF5KCkubGF5ZXIoKS5hZGRDaGlsZCgqbV9wYWludExheWVyKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1
cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAg
ICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9y
KENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRl
c3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpCiAgICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1
czo6RGVjb2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21w
bGV0ZSkgfHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dy
b3VuZCkgewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVj
dGFuZ2xlIGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZp
bmlzaCBkZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsK
LSAgICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENv
bG9yKENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcElt
YWdlOjolcyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmlu
aXNoXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWRSZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBA
IENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7
CiB9CiAKLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQot
ICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVy
IGJlbG93LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0
IENvbG9yJiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEz
MywxMiBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiByICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBiICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwog
fQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xv
ciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2
KTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
YWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
QEAgLTI0NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAg
cmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhh
ID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3
MSw3ICsyNTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTI4NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0CiAKICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRp
YygpOworICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6
dG9TUkdCQUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OwogfQogCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNT
RVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRv
IGhhbmRsZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBv
bmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBv
bmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVu
dCgpLCBwcm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
CisgICAgKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29s
b3IgewogcHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAg
IENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihT
aW1wbGVDb2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwog
ICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNp
bXBsZUNvbG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRp
YygpOwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAg
ICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7Cisg
ICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNv
bG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1w
bGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5k
ZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRl
ZENvbG9yLmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQog
CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAt
MTE0LDEyICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUK
LSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBu
b3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291
cmNlLW92ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3Jz
RXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJp
dDsgfQorCisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNW
YWxpZCgpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNv
bG9yOyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIu
CiAgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4
ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1w
bGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVk
Q29sb3IqIGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMu
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0y
ODgsNiArMjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMK
ICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9
PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFj
ZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29s
b3IgeyBjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29s
b3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6
aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09
IDE7CiB9CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJu
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBA
QCBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBv
bmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bV9jb21wb25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBi
KQpAQCAtNzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVy
OjpnZXREZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0Jh
Y2tkcm9wKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8g
aGFzIGJhY2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGgg
PSAxMjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9
IENvbG9yKDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAg
ICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQg
bGF5ZXI6IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29sb3IgPSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisg
ICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1h
bCBsYXllcjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29u
dGVudHNMYXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsg
Ly8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVy
IHdpdGggY29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQor
ICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1h
c2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29u
dGFpbmVyOiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwg
MTkyKTsgLy8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRh
dGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBh
cyBhIGtleSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0
cyBhIHdhc2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlv
bi4KICAgICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkp
ICYmICFtX3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwor
ICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNp
YmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5n
KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNl
KSk7CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3Jk
ZXIoUGxhdGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGgg
PSA0Owogc3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hv
d2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwg
MTI4LCAxODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVy
RGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93
aW5nQm9yZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4g
c2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAg
LTM3NzQsNyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91
bmQKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9y
LCBmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVy
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2Fj
aGUgbGF5ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsK
ICAgICBjb25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tn
cm91bmRDb2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNj
ZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29u
c3QgQ29sb3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xv
cigwLmYsIDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIg
YXV0byBhY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihT
dHJpbmc6Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
Q292ZXJhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3Ii
KTsKICAgICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldp
ZHRoKDIpOwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBt
X3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGlj
YXRvckxheWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0
Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMCwgMTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
Ci0gICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxh
eWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwg
NTApKTsKIAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGls
ZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29s
b3I7CiAgICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2Fz
ZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9y
SW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIw
MCwgODAsIDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJv
bm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJl
Y3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJ
bmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1
LCAyNTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDbwogICAg
IGZsb2F0IGIgPSBiMSArIChiMiAtIGIxKSAqIDAuNWY7CiAgICAgZmxvYXQgYSA9IGExICsgKGEy
IC0gYTEpICogMC41ZjsKIAotICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwg
Q29sb3IociwgZywgYiwgYSkpOworICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNl
dCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiB9CiAKIHN0YXRpYyBj
YWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwg
ZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVAog
ICAgIH0KIAogICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNv
bG9yKSk7Ci0gICAgc2V0SXNTZW1hbnRpYygpOworICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAog
c3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1h
Z2VDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5
IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwg
aW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAg
cmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKIH0K
IAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNSArMjA1
LDE1IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGluZVN0eWwKICAgICBzd2l0
Y2ggKHN0eWxlKSB7CiAgICAgLy8gUmVkCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtN
b2RlID8gQ29sb3IgeyAyNTUsIDE0MCwgMTQwLCAyMTcgfSA6IENvbG9yIHsgMjU1LCA1OSwgNDgs
IDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAxNDAsIDE0MCwgMjE3KSA6IG1ha2VTaW1wbGVDb2xvcigyNTUsIDU5
LCA0OCwgMTkxKSk7CiAgICAgLy8gQmx1ZQogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOgogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0
aW9uUmVwbGFjZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtNb2Rl
ID8gQ29sb3IgeyA0MCwgMTQ1LCAyNTUsIDIxNyB9IDogQ29sb3IgeyAwLCAxMjIsIDI1NSwgMTkx
IH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1c2VEYXJrTW9kZSA/IG1ha2VTaW1w
bGVDb2xvcig0MCwgMTQ1LCAyNTUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMCwgMTIyLCAyNTUs
IDE5MSkpOwogICAgIC8vIEdyZWVuCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUg
PyBDb2xvciB7IDUwLCAyMTUsIDc1LCAyMTcgfSA6IENvbG9yIHsgMjUsIDE3NSwgNTAsIDE5MSB9
KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtlU2ltcGxl
Q29sb3IoNTAsIDIxNSwgNzUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMjUsIDE3NSwgNTAsIDE5
MSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMwNywxMiBAQCBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyCiAgICAgICAgIHJldHVybiBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVu
ZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgcHJvZ3Jlc3MpKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwg
cHJvZ3Jlc3MpKTsKIAogICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21P
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAg
ICBJbnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bG9jYXRpb24oKSA6IEludFBvaW50KCk7CiAgICAgaW50IGZyb21TdGREZXZpYXRpb24gPSBmcm9t
T3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCkgOiAwOwotICAgIENvbG9y
IGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigpIDogQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0
aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAK
ICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBDb2xvciBjb2xv
ckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KIAotICAgIHJldHVybiBDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tTlNDb2xvcihjb2xvcik7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlND
b2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OnAKICAgICAgICAgQVNTRVJUKCFtX3RleHR1cmUp
OwogICAgICAgICBpZiAobV9ob2xlUHVuY2hDbGllbnQpCiAgICAgICAgICAgICBtX2hvbGVQdW5j
aENsaWVudC0+c2V0VmlkZW9SZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtb2RlbFZpZXdNYXRy
aXgubWFwUmVjdCh0YXJnZXRSZWN0KSkpOwotICAgICAgICB0ZXhtYXBHTC5kcmF3U29saWRDb2xv
cih0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIENvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7
CisgICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxl
Q2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2Fj
eVRpbGVDYWNoZS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw5
IEBAIHVuc2lnbmVkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm8KIENvbG9yIExlZ2Fj
eVRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihMZWdhY3lUaWxlR3JpZCogZ3JpZCkg
Y29uc3QKIHsKICAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpKQotICAg
ICAgICByZXR1cm4gQ29sb3IoMC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKKyAgICAgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKIAotICAg
IHJldHVybiBDb2xvcigwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMmYsIDAuOWYsIDAuZiwgMC41Zik7CiB9CiAKIHN0YXRpYyBi
b29sIHNob3VsZFJlcGFpbnRJblBpZWNlcyhjb25zdCBDR1JlY3QmIGRpcnR5UmVjdCwgQ0dTUmVn
aW9uT2JqIGRpcnR5UmVnaW9uLCBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcg
QEAgc3RydWN0IFBhaW50SW5mbyB7CiAgICAgYm9vbCBmb3JjZVRleHRDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgfHwgZm9yY2VXaGl0ZVRleHQoKTsgfQogICAgIGJvb2wg
Zm9yY2VCbGFja1RleHQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBh
aW50QmVoYXZpb3I6OkZvcmNlQmxhY2tUZXh0KTsgfQogICAgIGJvb2wgZm9yY2VXaGl0ZVRleHQo
KSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZv
cmNlV2hpdGVUZXh0KTsgfQotICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIChmb3JjZUJsYWNrVGV4dCgpKSA/IENvbG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQor
ICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0
KCkgPyBDb2xvcjo6YmxhY2sgOiBDb2xvcjo6d2hpdGU7IH0KIAogICAgIGJvb2wgc2tpcFJvb3RC
YWNrZ3JvdW5kKCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJl
aGF2aW9yOjpTa2lwUm9vdEJhY2tncm91bmQpOyB9CiAgICAgYm9vbCBwYWludFJvb3RCYWNrZ3Jv
dW5kT25seSgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhh
dmlvcjo6Um9vdEJhY2tncm91bmRPbmx5KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCwyOSArNzQsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2Vt
ZW50QXJyb3dMZWZ0TQogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dQYWRkaW5n
ID0gNDsKIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9
IDM7CiAKLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVz
c2VkQ29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgx
MDUsIDEwNSwgMTA1LCAyNDIpOwotICAgIHJldHVybiBwcmVzc2VkOwotfQotCi1zdGF0aWMgY29u
c3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKLSAg
ICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRU
ZXh0Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQo
MjQwLCAyNDAsIDI0MCwgMjU1KTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBj
b25zdCBDb2xvciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwotICAg
IHJldHVybiBzdGFuZGFyZDsKLX0KK2NvbnN0ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0UHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEwNSwgMTA1LCAxMDUsIDI0Mik7
Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDEyNSwgMTI1LCAxMjUsIDI0Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVu
dFRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDAsIDI0MCwgMjQwLCAyNTUpOworY29uc3Rl
eHByIGF1dG8gdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigy
NTUsIDI1NSwgMjU1LCAyMTYpOwogCiBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRk
ZWRPYmplY3QoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0
eWxlKQogICAgIDogUmVuZGVyV2lkZ2V0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpAQCAtMzEy
LDcgKzI5Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBj
b250ZXh0LmNsaXAoY29udGVudFJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5h
dmFpbGFibGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVk
UmVjdFByZXNzZWRDb2xvcigpIDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpKTsK
KyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQ
cmVzc2VkID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IgOiByZXBsYWNl
bWVudFRleHRSb3VuZGVkUmVjdENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKGJhY2tncm91
bmQpOwogCiAgICAgUGF0aCBzdHJva2VQYXRoOwpAQCAtMzIwLDIxICszMDEsMjEgQEAgdm9pZCBS
ZW5kZXJFbWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIHN0cm9rZVJlY3QuaW5mbGF0
ZSgxKTsKICAgICBzdHJva2VQYXRoLmFkZFJvdW5kZWRSZWN0KHN0cm9rZVJlY3QsIEZsb2F0U2l6
ZShyZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cyArIDEsIHJlcGxhY2VtZW50VGV4dFJv
dW5kZWRSZWN0UmFkaXVzICsgMSkpOwogCi0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmF2
YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3Io
dW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoMik7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKHN0cm9rZVBhdGgpOwogCiAgICAgY29u
c3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgIGZs
b2F0IGxhYmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0VGV4dE1hcmdpbik7CiAgICAgZmxvYXQgbGFi
ZWxZID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFj
ZW1lbnRUZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSkgLyAy
ICsgZm9udE1ldHJpY3MuYXNjZW50KCkgKyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFRvcFRl
eHRNYXJnaW4pOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9y
KCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAg
ICBjb250ZXh0LmRyYXdCaWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJl
bFkpKTsKIAogICAgIGlmIChzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihw
YWdlKCksIG1fcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKSB7CiAgICAgICAgIGFycm93UmVj
dC5pbmZsYXRlKC1yZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyk7CiAKICAgICAgICAgY29u
dGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKDEuMCk7Ci0gICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihyZXBsYWNlbWVudFRleHRDb2xvcik7CiAgICAgICAgIGNvbnRleHQuZmlsbEVsbGlwc2Uo
YXJyb3dSZWN0KTsKIAogICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvcjo6Q2xlYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZyYW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyMyArNjgs
OSBAQCBSZW5kZXJGcmFtZVNldDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIHsKIH0KIAotc3RhdGlj
IGNvbnN0IENvbG9yJiBib3JkZXJTdGFydEVkZ2VDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiBjb2xvcigxNzAsIDE3MCwgMTcwKTsKLSAgICByZXR1cm4gY29sb3I7
Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyRW5kRWRnZUNvbG9yKCkKLXsKLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIHJl
dHVybiBjb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7
Ci0gICAgcmV0dXJuIGNvbG9yOwotfQorY29uc3RleHByIGF1dG8gYm9yZGVyU3RhcnRFZGdlQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMTcwLCAxNzAsIDE3MCk7Citjb25zdGV4cHIgYXV0byBib3Jk
ZXJFbmRFZGdlQ29sb3IgPSBDb2xvcjo6YmxhY2s7Citjb25zdGV4cHIgYXV0byBib3JkZXJGaWxs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA4LCAyMDgsIDIwOCk7CiAKIHZvaWQgUmVuZGVyRnJh
bWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiBib3JkZXJSZWN0KQogewpAQCAtOTUsMTMgKzgxLDEzIEBAIHZvaWQgUmVuZGVy
RnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0Lgog
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAg
Y29udGV4dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJD
b2xvcigpID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCkpOworICAgIGNvbnRl
eHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3Io
KSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcik7CiAgICAgCiAgICAgLy8gTm93
IHN0cm9rZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWlu
dCBib3RoIGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Ig
c2hvd2luZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRT
aXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250
ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3Jk
ZXJSZWN0LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkp
OworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigp
LCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAgICAg
Y29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4WCgpIC0gMSwg
Ym9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xv
cik7CiAgICAgfQogfQogCkBAIC0xMTQsMTMgKzEwMCwxMyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0
OjpwYWludFJvd0JvcmRlcihjb25zCiAgICAgCiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQu
ZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/
IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5
Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxS
ZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHls
ZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29sb3IpOwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUg
ZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2Vz
IHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJv
dWdoLgogICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAgICAgY29udGV4
dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24oKSwgSW50U2l6ZSh3aWR0aCgp
LCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0
KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSks
IEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNv
bnRleHQuZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUod2lk
dGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcik7CisgICAgICAgIGNvbnRleHQuZmlsbFJl
Y3QoSW50UmVjdChJbnRQb2ludChib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAx
KSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9u
IDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyMTgsNyArMjIxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9M
QVlFUlMKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC41
ZiwgMC4yZikpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuNWYsIDAuMmYpKTsKICAgICAgICAgY29udGV4dC5maWxs
UmVjdChwaXhlbFNuYXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMDEsNyArMzIwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpwYWludERlYnVnT3ZlcmwKICAgICAvLyBUaGUgaW50ZXJhY3RpdmUgcGFydC4KICAg
ICAvLyBQYWludCByZWN0cyBmb3IgdG91Y2ggYWN0aW9uLgogICAgIGlmICh2aXNpYmxlRGVidWdP
dmVybGF5UmVnaW9ucyAmIFRvdWNoQWN0aW9uUmVnaW9uKSB7Ci0gICAgICAgIENvbG9yIHJlZ2lv
bkNvbG9yKDAsIDAsIDI1NSwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byByZWdpb25Db2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUsIDUwKTsKICAgICAgICAgY29udGV4dC5zZXRG
aWxsQ29sb3IocmVnaW9uQ29sb3IpOwogICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IGV2ZW50UmVn
aW9uLnJlZ2lvbigpLnJlY3RzKCkpCiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3Qp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NzAsNyArNjcwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0
aXZlTGlzdEJveFNlbGVjdAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QK
IHsKICAgICAvLyBVc2UgYSBibHVlIGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRo
ZW1lIGRvZXNuJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUp
OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVu
ZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBS
ZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBj
b2xvciBieSBkZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0
aGluZy4KICAgICAvLyBUaGlzIGNvbG9yIG1hdGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9y
LgotICAgIHJldHVybiBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKDE3NiwgMTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4
dFNlYXJjaEhpZ2hsaWdodENvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBD
b2xvcjo6eWVsbG93OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAg
IGF1dG8gbWFya2VyUmVjdCA9IEZsb2F0UmVjdCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAy
NCwgcmVjdC55KCkgKyA4LCAxNiwgMTYgfTsKICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0g
RmxvYXRSb3VuZGVkUmVjdCB7IG1hcmtlclJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsg
OCB9IH07Ci0gICAgYXV0byBjb2xvciA9IENvbG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5k
ZWRSZWN0KHJvdW5kZWRNYXJrZXJSZWN0LCBjb2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyAr
MTQ1OSw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAg
ICAvLyBUaGlzIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3Bh
cmVudCBvdmVybGF5LAogICAgIC8vIG1ha2luZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRz
IGFscGhhIHZhbHVlIGluZGljYXRlcy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJs
ZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0IHsgcmV0dXJuIENvbG9yKDAsIDAsIDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qg
eyByZXR1cm4gQ29sb3I6OmJsYWNrOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNS
aW5nQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1Jp
bmdXaWR0aCgpIHsgcmV0dXJuIDM7IH0KICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1Jp
bmdPZmZzZXQoZmxvYXQgb3V0bGluZVdpZHRoKSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0
bGluZVdpZHRoIC0gcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTUsNyArMTU1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3Io
KSBjb25zdDsKICAgICBGbG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENv
bG9yIHN5c3RlbUNvbG9yKENTU1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PikgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNiBAQCB2
b2lkIFJlbmRlclRoZW1lSU9TOjpzZXRDb250ZW50U2l6ZUNhdGVnCiAKIGNvbnN0IENvbG9yJiBS
ZW5kZXJUaGVtZUlPUzo6c2hhZG93Q29sb3IoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxDb2xvcj4gY29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJu
IGNvbG9yOwogfQogCkBAIC0zODcsNyArMzg2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRDaGVja2JveERlY29yYQogCiAgICAgaWYgKGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSkgewog
ICAgICAgICBhdXRvIGJvcmRlciA9IGJveC5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVj
dCk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5w
aXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3Vu
ZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKIAogICAg
ICAgICBhdXRvIGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250
ZXh0KCksIHJlY3QpOwogICAgICAgICBhdXRvIHdpZHRoID0gY2xpcC53aWR0aCgpOwpAQCAtNDIz
LDEwICs0MjIsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYQog
ICAgICAgICB9CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KGxpbmVXaWR0
aCwgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50
PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1YXJlLCBsaW5lV2lkdGgsIENvbG9y
IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC43ZiB9KTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNn
Q29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFkb3cpIH0sIGtDR0xpbmVDYXBT
cXVhcmUsIGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAw
LjBmLCAwLjdmKSk7CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6
bWluKHdpZHRoLCBoZWlnaHQpICogdGhpY2tuZXNzUmF0aW8sIDEpOwotICAgICAgICBkcmF3Sm9p
bmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtD
R0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIENvbG9yIHsgMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8g
MjU1LjBmIH0pOworICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQ
b2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIG1ha2VT
aW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBmKSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94
LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAu
d2lkdGgoKTsKQEAgLTQ4NCw3ICs0ODMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvCiAKICAgICBpZiAoaXNDaGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBi
b3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91
bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwg
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWlu
dGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CiAKICAgICAgICAgYXV0byBjbGlw
ID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsK
ICAgICAgICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENv
bmNhdmVHcmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xp
cC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKQEAgLTQ5Niw4ICs0OTUsOSBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICAgICAgY2xpcC5pbmZs
YXRlWCgtY2xpcC53aWR0aCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwogICAgICAgICBjbGlwLmlu
ZmxhdGVZKC1jbGlwLmhlaWdodCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwotCi0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBz
aGFkb3dDb2xvcigpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0Nv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuN2YgKiAyNTUpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwgc2hh
ZG93Q29sb3IpOwogCiAgICAgICAgIEZsb2F0U2l6ZSByYWRpdXMoY2xpcC53aWR0aCgpIC8gMi4w
ZiwgY2xpcC5oZWlnaHQoKSAvIDIuMGYpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNs
aXBSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGNsaXAsIHJhZGl1cywgcmFkaXVzLCByYWRp
dXMsIHJhZGl1cykpOwpAQCAtNzMxLDcgKzczMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50TWVudUxpc3RCdXR0b24KICAgICAgICAgRmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54
KCkgKyAoYnV0dG9uQ2xpcC53aWR0aCgpIC0gY291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFk
ZGluZykgLyAyLjAsIGJ1dHRvbkNsaXAubWF4WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwg
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUsIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOwogICAgICAgICAgICAg
ZWxsaXBzZS5tb3ZlKHNpemUgKyBwYWRkaW5nLCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2Ug
ewpAQCAtNzUxLDggKzc1MSw4IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RC
dXR0b24KICAgICAgICAgfTsKIAogICAgICAgICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNv
bnRyb2woYm94KSA/IDAuMiA6IDAuNTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRT
dHJva2VDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7Ci0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIG9w
YWNpdHkpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cygwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZHJhd1BhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHNoYWRvdykpOwogCiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsK
QEAgLTg0MCw5ICs4NDAsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNr
KGNvCiAKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgIGlmIChyZWFkb25seSkKLSAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMTc4LCAxNzgsIDE3OCkp
OworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2lt
cGxlQ29sb3IoMTc4LCAxNzgsIDE3OCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDc2LCA3NiwgNzYpKTsKKyAgICAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDc2LCA3NiwgNzYpKTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91
bmRlZFJlY3RQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgICAgICBD
R1BhdGhBZGRSb3VuZGVkUmVjdChyb3VuZGVkUmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwg
Y29ybmVyV2lkdGgsIGNvcm5lckhlaWdodCk7CkBAIC05MTksMTMgKzkxOSwxMyBAQCBib29sIFJl
bmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBh
dXRvIHN0cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0
YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9h
dFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJI
ZWlnaHQgLSAxKSB9KTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29s
b3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC40NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhk
LCAweDhkKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2lt
cGxlQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMC41NSwgbWFrZVNpbXBsZUNvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJv
a2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDB4OGQsIDB4OGQs
IDB4OGQpKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tlR3Jh
ZGllbnQpKTsKIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUp
KTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0
cmFja1BhdGg7CiAgICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNz
QmFySGVpZ2h0IC0gMC41KTsKQEAgLTkzOSw4ICs5MzksOCBAQCBib29sIFJlbmRlclRoZW1lSU9T
OjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0ID0g
cHJvZ3Jlc3NCYXJIZWlnaHQgLyAyLjsKICAgICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVu
dDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRp
Y2FsUmVuZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAg
ICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigxMzMsIDEzMywgMTMzLCAx
ODgpKTsKLSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigxOCwgMTgs
IDE4LCA1MSkpOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1w
bGVDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpKTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xv
clN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0
LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKHVwcGVyR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQu
ZmlsbFJlY3QoRmxvYXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCBy
ZWN0LndpZHRoKCksIHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKQEAgLTk1MSwxOCArOTUxLDE4IEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7
CiAgICAgICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwogICAg
ICAgICBhdXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFy
RGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAw
LjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJv
Z3Jlc3NCYXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjAsIENvbG9yKDE5NSwgMjE3LCAyNDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTEsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAg
ICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwot
ICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0
KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29s
b3IoMTk1LCAyMTcsIDI0NykpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAu
NDUsIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMC40OSwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAg
ICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUxLCBtYWtlU2ltcGxlQ29sb3IoMzYs
IDExNCwgMjEwKSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFr
ZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250
ZXh0LnNldEZpbGxHcmFkaWVudChXVEZNb3ZlKGJhckdyYWRpZW50KSk7CiAKICAgICAgICAgYXV0
byBiYXJTdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRh
dGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFy
SGVpZ2h0IC0gMSkgfSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC4wLCBDb2xvcig5NSwgMTA3LCAxODMpKTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgwLjUsIENvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKKyAg
ICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xv
cig5NSwgMTA3LCAxODMpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjUsIG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJT
dHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQs
IDE2NikpOwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoYmFyU3Ry
b2tlR3JhZGllbnQpKTsKIAogICAgICAgICBQYXRoIGJhclBhdGg7CkBAIC0xNTY4LDEwICsxNTY4
LDEwIEBAIENvbG9yIFJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKIGNvbnN0IENH
U2l6ZSBhdHRhY2htZW50U2l6ZSA9IHsgMTYwLCAxMTkgfTsKIAogY29uc3QgQ0dGbG9hdCBhdHRh
Y2htZW50Qm9yZGVyUmFkaXVzID0gMTY7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudEJvcmRlckNv
bG9yKCkgeyByZXR1cm4gQ29sb3IoMjA0LCAyMDQsIDIwNCk7IH0KK2NvbnN0ZXhwciBTaW1wbGVD
b2xvciBhdHRhY2htZW50Qm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIw
NCk7CiBzdGF0aWMgQ0dGbG9hdCBhdHRhY2htZW50Qm9yZGVyVGhpY2tuZXNzID0gMTsKIAotc3Rh
dGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0NvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjIyLCAy
MjIsIDIyMik7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyMjIsIDIyMiwgMjIyKTsKIGNvbnN0IENHRmxvYXQgYXR0YWNo
bWVudFByb2dyZXNzQm9yZGVyVGhpY2tuZXNzID0gMzsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2ht
ZW50UHJvZ3Jlc3NTaXplID0gMzY7CkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgdm9pZCBw
YWludEF0dGFjaG1lbnRQcm9ncmVzcyhHcmFwCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzYXZlcihjb250ZXh0KTsKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFj
aG1lbnRQcm9ncmVzc0JvcmRlclRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihh
dHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0
dGFjaG1lbnRQcm9ncmVzc0NvbG9yKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2ht
ZW50UHJvZ3Jlc3NDb2xvcik7CiAgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKGluZm8ucHJvZ3Jl
c3NSZWN0KTsKIAogICAgIEZsb2F0UG9pbnQgY2VudGVyID0gaW5mby5wcm9ncmVzc1JlY3QuY2Vu
dGVyKCk7CkBAIC0xODk2LDcgKzE4OTYsNyBAQCBzdGF0aWMgUGF0aCBhdHRhY2htZW50Qm9yZGVy
UGF0aChSZW5kZXJBCiAKIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEJvcmRlcihHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIFBhdGgmIGJvcmRlclBhdGgpCiB7Ci0gICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihhdHRhY2htZW50Qm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJv
a2VDb2xvcihhdHRhY2htZW50Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGF0dGFjaG1lbnRCb3JkZXJUaGlja25lc3MpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0
aChib3JkZXJQYXRoKTsKIH0KQEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJ
T1M6OnBhaW50U3lzdGVtUHJldmlld0IKICAgICAvLyBEcmF3IGEgZHJvcCBzaGFkb3cgYXJvdW5k
IHRoZSBjaXJjbGUuCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJl
Y2F1c2UgaXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAg
ICAvLyByYXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCi0gICAgQ29sb3Igc2hhZG93Q29sb3IgPSBD
b2xvciB7IDAuZiwgMC5mLCAwLmYsIDAuMWYgfTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLmYsIDAuZiwgMC5mLCAwLjFmKTsKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAg
ICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9y
IHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ5LDgg
KzE2NDksOCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAg
fTsKICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJv
bVBvaW50cyhhcnJvdzIpKTsKIAotICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAw
LCA0MCk7Ci0gICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7
CisgICAgY29uc3RleHByIGF1dG8gbGVmdFNlcGFyYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDAsIDAsIDQwKTsKKyAgICBjb25zdGV4cHIgYXV0byByaWdodFNlcGFyYXRvckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDQwKTsKIAogICAgIC8vIEZJWE1FOiBTaG91
bGQgdGhlIHNlcGFyYXRvciB0aGlja25lc3MgYW5kIHNwYWNlIGJlIHNjYWxlZCB1cCBieSBmb250
U2NhbGU/CiAgICAgaW50IHNlcGFyYXRvclNwYWNlID0gMjsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9y
ZXMgem9vbSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0aGluLgpAQCAtMjQ3Miw4
ICsyNDcyLDggQEAgY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvblNlbGVjdGlvbkJvcgogY29u
c3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvbkJhY2tncm91bmRSYWRpdXMgPSAzOwogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50SWNvblRvVGl0bGVNYXJnaW4gPSAyOwogCi1zdGF0aWMgQ29sb3IgYXR0
YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCAzMCk7
IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29s
b3IoMjU1LCAyNTUsIDI1NSwgMTI1KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1l
bnRJY29uQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDMwKTsKK2Nv
bnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEyNSk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRp
dGxlRm9udFNpemUgPSAxMjsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlQmFja2dyb3Vu
ZFJhZGl1cyA9IDM7CkBAIC0yNDgxLDIzICsyNDgxLDIzIEBAIGNvbnN0IENHRmxvYXQgYXR0YWNo
bWVudFRpdGxlQmFja2dyb3VuZFAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlTWF4aW11
bVdpZHRoID0gMTAwIC0gKGF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmRQYWRkaW5nICogMik7CiBj
b25zdCBDRkluZGV4IGF0dGFjaG1lbnRUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1zdGF0
aWMgQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVy
biBDb2xvcigyMDQsIDIwNCwgMjA0LCAyNTUpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFRp
dGxlSW5hY3RpdmVUZXh0Q29sb3IoKSB7IHJldHVybiBDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUp
OyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIwNCwgMjU1KTsKK2NvbnN0ZXhw
ciBTaW1wbGVDb2xvciBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZVRleHRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRT
dWJ0aXRsZUZvbnRTaXplID0gMTA7CiBjb25zdCBpbnQgYXR0YWNobWVudFN1YnRpdGxlV2lkdGhJ
bmNyZW1lbnQgPSAxMDsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3Io
KSB7IHJldHVybiBDb2xvcig4MiwgMTQ1LCAyMTQsIDI1NSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVD
b2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoODIsIDE0
NSwgMjE0LCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhcldpZHRo
ID0gMzA7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhckhlaWdodCA9IDU7CiBj
b25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0Jhck9mZnNldCA9IC05OwogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJXaWR0aCA9IDE7Ci1zdGF0aWMgQ29sb3Ig
YXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgODkpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9y
KCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6OndoaXRlKTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1l
bnRQcm9ncmVzc0JhckJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTI4KTsg
fQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCA4OSk7Citjb25zdGV4cHIgU2ltcGxlQ29s
b3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yID0gQ29sb3I6OndoaXRlOworY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNl
aG9sZGVyQm9yZGVyUmFkaXVzID0gNTsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50UGxhY2Vob2xk
ZXJCb3JkZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDU2KTsgfQorY29uc3RleHBy
IFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDAsIDU2KTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyV2lkdGggPSAyOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3Jk
ZXJEYXNoTGVuZ3RoID0gNjsKIApAQCAtMjU0MSw3ICsyNTQxLDcgQEAgc3RhdGljIENvbG9yIHRp
dGxlVGV4dENvbG9yRm9yQXR0YWNobWVudAogICAgICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgp
LnNlbGVjdGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0g
Y29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBhbHRlcm5hdGVTZWxlY3RlZENvbnRyb2xUZXh0Q29s
b3JdKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXR0YWNobWVudFRpdGxl
SW5hY3RpdmVUZXh0Q29sb3IoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRs
ZUluYWN0aXZlVGV4dENvbG9yOwogICAgIH0KIAogICAgIHJldHVybiBhdHRhY2htZW50LnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVzdWx0KTsKQEAgLTI2NDcsNyArMjY0Nyw3
IEBAIHZvaWQgQXR0YWNobWVudExheW91dDo6bGF5T3V0U3VidGl0bGUoY28KICAgICBpZiAoc3Vi
dGl0bGVUZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29sb3Igc3VidGl0
bGVDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihh
dHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IoKSk7CisgICAgQ29sb3Igc3VidGl0bGVDb2xvciA9
IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50
U3VidGl0bGVUZXh0Q29sb3IpOwogICAgIENGU3RyaW5nUmVmIGxhbmd1YWdlID0gMDsgLy8gQnkg
bm90IHNwZWNpZnlpbmcgYSBsYW5ndWFnZSB3ZSB1c2UgdGhlIHN5c3RlbSBsYW5ndWFnZS4KICAg
ICBSZXRhaW5QdHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRG
b3JMYW5ndWFnZShrQ1RGb250VUlGb250U3lzdGVtLCBhdHRhY2htZW50U3VidGl0bGVGb250U2l6
ZSwgbGFuZ3VhZ2UpKTsKICAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsKQEAg
LTI3MjEsNyArMjcyMSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEljb25CYWNrZ3Jv
dW4KICAgICBpZiAocGFpbnRCb3JkZXIpCiAgICAgICAgIGJhY2tncm91bmRSZWN0LmluZmxhdGUo
LWF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9yZGVyVGhpY2tuZXNzKTsKIAotICAgIENvbG9yIGJh
Y2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihhdHRhY2htZW50SWNvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICBDb2xvciBiYWNrZ3Jv
dW5kQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
YXR0YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3IpOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KEZsb2F0Um91bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJh
ZGlpKGF0dGFjaG1lbnRJY29uQmFja2dyb3VuZFJhZGl1cykpLCBiYWNrZ3JvdW5kQ29sb3IpOwog
CiAgICAgaWYgKHBhaW50Qm9yZGVyKSB7CkBAIC0yNzMyLDcgKzI3MzIsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludEF0dGFjaG1lbnRJY29uQmFja2dyb3VuCiAgICAgICAgIFBhdGggYm9yZGVyUGF0aDsK
ICAgICAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBpY29uQmFja2dy
b3VuZFJhZGl1c1NpemUpOwogCi0gICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVu
dC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVy
Q29sb3IoKSk7CisgICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgp
LmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOwog
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yKTsKICAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudEljb25TZWxlY3Rpb25Cb3JkZXJUaGlj
a25lc3MpOwogICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CkBAIC0yODMw
LDcgKzI4MzAsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91CiAg
ICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgYWx0ZXJu
YXRlU2VsZWN0ZWRDb250cm9sQ29sb3JdKTsKICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAgICAgfSBlbHNlCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IGF0dGFj
aG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGJhY2tncm91bmRD
b2xvciA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yOwogCiAgICAgYmFj
a2dyb3VuZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmls
dGVyKGJhY2tncm91bmRDb2xvcik7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3Vu
ZENvbG9yKTsKQEAgLTI4NzUsNyArMjg3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVu
dFByb2dyZXNzKGNvbnMKICAgICBiYWNrZ3JvdW5kUmVjdC5pbmZsYXRlKC1hdHRhY2htZW50UHJv
Z3Jlc3NCYXJCb3JkZXJXaWR0aCAvIDIpOwogCiAgICAgRmxvYXRSb3VuZGVkUmVjdCBiYWNrZ3Jv
dW5kUm91bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGJh
Y2tncm91bmRSZWN0LmhlaWdodCgpIC8gMikpOwotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KGJhY2tncm91bmRSb3VuZGVkUmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENv
bG9yKCkpOworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KGJhY2tncm91bmRSb3VuZGVkUmVj
dCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKTsKIAogICAgIHsKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlwU2F2ZXIoY29udGV4dCk7CkBAIC0yODg1
LDEzICsyODg1LDEzIEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFByb2dyZXNzKGNvbnMK
ICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzUmVjdC53aWR0aCgpICogcHJv
Z3Jlc3MpOwogICAgICAgICBwcm9ncmVzc1JlY3QgPSBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxz
KHByb2dyZXNzUmVjdCwgYXR0YWNobWVudC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkp
OwogCi0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NSZWN0LCBhdHRhY2htZW50UHJv
Z3Jlc3NCYXJGaWxsQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NS
ZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IpOwogICAgIH0KIAogICAgIFBhdGgg
Ym9yZGVyUGF0aDsKICAgICBmbG9hdCBib3JkZXJSYWRpdXMgPSBib3JkZXJSZWN0LmhlaWdodCgp
IC8gMjsKICAgICBib3JkZXJQYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIEZsb2F0U2l6
ZShib3JkZXJSYWRpdXMsIGJvcmRlclJhZGl1cykpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRT
dHJva2VDb2xvcihhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4
dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyV2lkdGgpOwog
ICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKIH0KQEAgLTI5MDEsNyArMjkwMSw3
IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm8KICAgICBQYXRoIGJv
cmRlclBhdGg7CiAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChsYXlvdXQuYXR0YWNobWVu
dFJlY3QsIEZsb2F0U2l6ZShhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJSYWRpdXMsIGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlclJhZGl1cykpOwogCi0gICAgQ29sb3IgcGxhY2Vob2xkZXJC
b3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcigpKTsKKyAgICBDb2xvciBwbGFjZWhv
bGRlckJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ry
b2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4OCwxOSArMjg4LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIoY29u
c3QKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgQ09M
T1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQpOwotICAgIHJldHVybiBD
b2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3Ip
KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1
ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVD
b2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBjb2xvciBtYXRjaGVzIEZpcmVm
b3guCi0gICAgcmV0dXJuIENvbG9yKDE3NiwgMTc2LCAxNzYpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoMTc2LCAxNzYsIDE3Nik7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xP
Ul9ISUdITElHSFRURVhUKTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0
R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3Ip
KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNv
bnN0CkBAIC0xMDA5LDcgKzEwMDksNyBAQCBDb2xvciBSZW5kZXJUaGVtZVdpbjo6c3lzdGVtQ29s
b3IoQ1NTVmFsCiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFs
dWVJZCwgb3B0aW9ucyk7CiAKICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKHN5c0Nv
bG9ySW5kZXgpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUo
Y29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdl
dFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQog
CiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBs
ZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjYyMzUyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBmbAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGRl
YnVnU2hhZG93ID0gbnVsbHB0cjsKICAgICBpZiAoZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtl
VW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpO
b3JtYWwsIHRydWUsIENvbG9yKDAsIDI1NSwgMCwgMjAwKSk7CisgICAgICAgIGRlYnVnU2hhZG93
ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dT
dHlsZTo6Tm9ybWFsLCB0cnVlLCBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwLCAyMDApKTsKICAg
ICAgICAgdGV4dFBhaW50ZXIuc2V0U2hhZG93KGRlYnVnU2hhZG93LmdldCgpKTsKICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
LDcgKzExOSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYKIAog
ICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICBpbmZvLmNv
bnRleHQoKS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgaW5mby5jb250ZXh0KCku
c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0
U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOwogCiAgICAgaW5mby5jb250
ZXh0KCkuZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWlu
dE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zm
c2V0LnkoKSkpOwogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgcGl4ZWxTbmFwcGVk
T2Zmc2V0SGVpZ2h0KCkpKTsKQEAgLTEyOCwxMyArMTI4LDEzIEBAIHZvaWQgUmVuZGVyTWF0aE1M
QmxvY2s6OnBhaW50KFBhaW50SW5mbyYKIAogICAgIGludCB0b3BTdGFydCA9IHBhZGRpbmdUb3Ao
KTsKIAotICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCkp
OworICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAy
NTUsIDApKTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgSW50
UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgp
LCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSk7CiAKICAgICBpbnQgYmFzZWxp
bmUgPSByb3VuZFRvSW50KGJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVl
LCBIb3Jpem9udGFsTGluZSkpOwogCi0gICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3Io
Q29sb3IoMjU1LCAwLCAwKSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCkpOwogCiAgICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUo
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgYmFzZWxpbmUpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25h
cHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiw3ICsyMDI2LDcgQEAgQ29s
b3IgUmVuZGVyU3R5bGU6OmNvbG9yUmVzb2x2aW5nQ3VycmVudAogICAgIGlmIChpc0N1cnJlbnRD
b2xvcihyZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyU3R5bGUgPSBjb21wdXRlQm9yZGVy
U3R5bGUoKTsKICAgICAgICAgaWYgKCF2aXNpdGVkTGluayAmJiAoYm9yZGVyU3R5bGUgPT0gQm9y
ZGVyU3R5bGU6Okluc2V0IHx8IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQgfHwg
Ym9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlIHx8IGJvcmRlclN0eWxlID09IEJvcmRl
clN0eWxlOjpHcm9vdmUpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKDIzOCwgMjM4LCAyMzgp
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KTsKIAog
ICAgICAgICByZXR1cm4gdmlzaXRlZExpbmsgPyB2aXNpdGVkTGlua0NvbG9yKCkgOiBjb2xvcigp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgcHVi
bGljOgogICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua1N0cm9rZUNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtTdHJva2VDb2xvcjsgfQogICAg
IHZvaWQgc2V0SGFzRXhwbGljaXRseVNldFN0cm9rZUNvbG9yKGJvb2wgdikgeyBTRVRfVkFSKG1f
cmFyZUluaGVyaXRlZERhdGEsIGhhc1NldFN0cm9rZUNvbG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odikpOyB9CiAgICAgYm9vbCBoYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoKSBjb25zdCB7
IHJldHVybiBtX3JhcmVJbmhlcml0ZWREYXRhLT5oYXNTZXRTdHJva2VDb2xvcjsgfTsKLSAgICBz
dGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNvbG9yKCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6OnRy
YW5zcGFyZW50KTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJl
dHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7IH0KICAgICBDb2xvciBjb21wdXRlZFN0cm9rZUNvbG9y
KCkgY29uc3Q7CiAKICAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlSW5oZXJpdGVkRGF0YS0+bWl0ZXJMaW1pdDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDI2MjM1MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MywxMCArNzMsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcg
aW5pdGlhbFN0cm9rZVBhaW50VXJpKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBzdGF0aWMg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBpbml0aWFsU3Ryb2tlRGFzaEFycmF5KCkgeyByZXR1cm4g
eyB9OyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxTdG9wT3BhY2l0eSgpIHsgcmV0dXJuIDE7
IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0b3BDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAs
IDAsIDApOyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxTdG9wQ29sb3IoKSB7IHJldHVybiBt
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMCk7IH0KICAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbEZsb29k
T3BhY2l0eSgpIHsgcmV0dXJuIDE7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbEZsb29kQ29s
b3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwKTsgfQotICAgIHN0YXRpYyBDb2xvciBpbml0aWFs
TGlnaHRpbmdDb2xvcigpIHsgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CisgICAgc3Rh
dGljIENvbG9yIGluaXRpYWxGbG9vZENvbG9yKCkgeyByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAs
IDAsIDApOyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxMaWdodGluZ0NvbG9yKCkgeyByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CiAgICAgc3RhdGljIFNoYWRvd0Rh
dGEqIGluaXRpYWxTaGFkb3coKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgc3RhdGljIFN0cmlu
ZyBpbml0aWFsTWFza2VyUmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHN0YXRp
YyBTdHJpbmcgaW5pdGlhbE1hcmtlclN0YXJ0UmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoY28KIENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkg
Y29uc3QKIHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBDb2xvcihDb2xv
cjo6dHJhbnNwYXJlbnQsIHRydWUpOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50
OwogCiAgICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAgIGF1dG8mIHN2
Z1N0eWxlID0gc3R5bGUuc3ZnU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZh
bHVlRnVuY3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IGJsdWUg
PSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ibHVlQ29t
cG9uZW50KCksIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRp
b24uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ibHVlQ29tcG9uZW50KCkpOwogICAg
ICAgICBmbG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBz
aW1wbGVGcm9tLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRvLmFscGhhQ29tcG9uZW50KCksIHNp
bXBsZVRvQXRFbmRPZkR1cmF0aW9uLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmFs
cGhhQ29tcG9uZW50KCkpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSB7IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiks
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoYWxwaGEpIH07CisgICAgICAgIGFuaW1hdGVkID0gbWFrZVNpbXBsZUNvbG9yKHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiks
IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoYWxwaGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFu
Y2UoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29u
c3Qgb3ZlcnJpZGUKQEAgLTEyMCwxMSArMTIwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8g
c2ltcGxlVG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAKICAgICAgICAgLy8g
SWdub3JlcyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVl
LgotICAgICAgICBtX3RvID0geworICAgICAgICBtX3RvID0gbWFrZVNpbXBsZUNvbG9yKAogICAg
ICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWRDb21wb25lbnQo
KSArIHNpbXBsZUZyb20ucmVkQ29tcG9uZW50KCkpLAogICAgICAgICAgICAgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbChzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ncmVl
bkNvbXBvbmVudCgpKSwKICAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2lt
cGxlVG8uYmx1ZUNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkpCi0gICAg
ICAgIH07CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0
cmluZyhTVkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSwxMCArMTA1LDEwIEBAIHZvaWQgTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50OjpkcmF3UmVjdChQYWcKICAgICBGbG9hdFJlY3QgaW5zZXRSZWN0ID0gb3ZlcmxheS5ib3Vu
ZHMoKTsKIAogICAgIGlmIChvdmVybGF5Lm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92
ZXJsYXlUeXBlOjpEb2N1bWVudCkgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENv
bG9yKDAsIDI1NSwgMCkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1w
bGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTUwKTsKICAg
ICB9IGVsc2UgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1
NSkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAyNTUpKTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTIwKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9u
T3ZlcmxheS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2NvY29hL1dl
YlZpZXdWaXN1YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkubW0JKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9u
T3ZlcmxheS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCAtIChpbnN0YW5jZXR5
cGUpaW5pdFdpdGhXZWJWaWV3OihQbGF0Zm9yCiAgICAgX2xheWVyID0gYWRvcHROUyhbW0NBVGls
ZWRMYXllciBhbGxvY10gaW5pdF0pOwogICAgIFtfbGF5ZXIgc2V0TmFtZTpAIldlYlZpZXdWaXN1
YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkiXTsKICAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1h
a2UoMCwgMCwgW192aWV3IGJvdW5kc10uc2l6ZS53aWR0aCwgW192aWV3IGJvdW5kc10uc2l6ZS5o
ZWlnaHQpXTsKLSAgICBXZWJDb3JlOjpDb2xvciB2aWV3Q29sb3IgPSBpc0RlcHJlY2F0ZWQgPyBX
ZWJDb3JlOjpDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDI1NSwg
MzIpOworICAgIFdlYkNvcmU6OkNvbG9yIHZpZXdDb2xvciA9IGlzRGVwcmVjYXRlZCA/IFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6Om1ha2VTaW1wbGVD
b2xvcigwLCAwLCAyNTUsIDMyKTsKICAgICBbX2xheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNo
ZWRDR0NvbG9yKHZpZXdDb2xvcildOwogICAgIFtfbGF5ZXIgc2V0WlBvc2l0aW9uOjk5OV07CiAg
ICAgW19sYXllciBzZXREZWxlZ2F0ZTpzZWxmXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI2IEBACisyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51
bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29udGV4dCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNv
cmVDb2xvcik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3RhcEhpZ2hsaWdodENvbG9yRm9yRmFz
dENsaWNrOl0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50
UmVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBhaW50U25hcHNob3RBdFNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
RmluZENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3JPdmVy
bGF5Q2xpZW50SU9TOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmhpZ2hsaWdodENvbG9y
KTogRGVsZXRlZC4KKwogMjAyMC0wNS0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIERlcHJlY2F0ZSBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllckJhY2tpbmdTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQg
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRyYXdJbkNvbnQKIAogI2lmbmRlZiBOREVCVUcKICAg
ICBpZiAobV9pc09wYXF1ZSkKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChzY2FsZWRMYXllckJv
dW5kcywgV2ViQ29yZTo6Q29sb3IoMjU1LCA0NywgMTQ2KSk7CisgICAgICAgIGNvbnRleHQuZmls
bFJlY3Qoc2NhbGVkTGF5ZXJCb3VuZHMsIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigyNTUsIDQ3
LCAxNDYpKTsKICNlbmRpZgogCiAgICAgY29udGV4dC5zY2FsZShtX3NjYWxlKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENv
bG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9U
WVBFKFdlYktpdENvbG9yLCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENv
bG9yVG9XZWJDb3JlQ29sb3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJD
b3JlOjpDb2xvcihzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci0+Z3JlZW4pLAorICAgIHJldHVybiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KGNvbG9yLT5ncmVlbiksCiAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Ymx1
ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpKTsKIH0KIApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzI4LDcgKzQz
MjgsNyBAQCAtICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3RpCiAtIChXZWJD
b3JlOjpDb2xvcilfdGFwSGlnaGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6KEJPT0wpZm9yRmFzdENs
aWNrCiB7CiAgICAgQVNTRVJUKF9zaG93RGVidWdUYXBIaWdobGlnaHRzRm9yRmFzdENsaWNraW5n
KTsKLSAgICByZXR1cm4gZm9yRmFzdENsaWNrID8gV2ViQ29yZTo6Q29sb3IoMCwgMjI1LCAwLCAx
MjcpIDogV2ViQ29yZTo6Q29sb3IoMjI1LCAwLCAwLCAxMjcpOworICAgIHJldHVybiBmb3JGYXN0
Q2xpY2sgPyBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjI1LCAwLCAxMjcpIDogV2ViQ29y
ZTo6bWFrZVNpbXBsZUNvbG9yKDIyNSwgMCwgMCwgMTI3KTsKIH0KIAogLSAodm9pZClfc2V0RG91
YmxlVGFwR2VzdHVyZXNFbmFibGVkOihCT09MKWVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0
b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3
IEBAIHZvaWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGMKICAgICBwYWludExh
eWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CiAgICAgcGFpbnRMYXllci0+c2V0
UG9zaXRpb24ocmVjdC5sb2NhdGlvbigpKTsKICAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Qu
c2l6ZSgpKTsKLSAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwg
MC4wZiwgMC4wZiwgMC4yZikpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKIAogICAg
IEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkp
OwogICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1
ZT4oMCwgMSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDksOCArNTA5LDggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJs
YQogewogICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDE7CiAKLSAgICBDb2xvciBvdmVybGF5
QmFja2dyb3VuZENvbG9yKDAuMWYsIDAuMWYsIDAuMWYsIDAuMjVmKTsKLSAgICBDb2xvciBzaGFk
b3dDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBhdXRvIG92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMWYsIDAuMWYsIDAuMWYsIDAu
MjVmKTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKIAogICAgIEludFJlY3QgYm9yZGVySW5mbGF0ZWREaXJ0
eVJlY3QgPSBkaXJ0eVJlY3Q7CiAgICAgYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3QuaW5mbGF0ZShi
b3JkZXJXaWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDIsNyArMjQwMiw3IEBA
IHZvaWQgV2ViUGFnZTo6cGFpbnRTbmFwc2hvdEF0U2l6ZShjb25zdCAKIAogICAgIGlmIChvcHRp
b25zICYgU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25SZWN0YW5nbGUpIHsKICAgICAgICAg
RmxvYXRSZWN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bkJvdW5kcygpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3Io
MHhGRiwgMCwgMCkpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yKDB4RkYsIDAsIDApKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnN0cm9r
ZVJlY3Qoc2VsZWN0aW9uUmVjdGFuZ2xlLCAxKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVy
SU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1
Myw3IEBAIGNvbnN0IGludCB0b3RhbFZlcnRpY2FsTWFyZ2luID0gMTsKIAogY29uc3RleHByIE9w
dGlvblNldDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBmaW5kVGV4dEluZGljYXRvck9wdGlvbnMgeyBU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24s
IFRleHRJbmRpY2F0b3JPcHRpb246OkRvTm90Q2xpcFRvVmlzaWJsZVJlY3QgfTsKIAotc3RhdGlj
IENvbG9yIGhpZ2hsaWdodENvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyMjgsIDU2
LCAyNTUpOwotfQorY29uc3RleHByIGF1dG8gaGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMjU1LCAyMjgsIDU2LCAyNTUpOwogCiB2b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50
SU9TOjpkcmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CkBAIC03OSw3ICs3Niw3IEBAIHZvaWQg
RmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXcKICAgICBWZWN0b3I8RmxvYXRSZWN0
PiB0ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50
ZXh0UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7CiAgICAgVmVjdG9yPFBhdGg+IHBh
dGhzID0gUGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIGNvcm5lclJhZGl1cyk7CiAKLSAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihoaWdobGlnaHRDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xv
cihoaWdobGlnaHRDb2xvcik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMpCiAg
ICAgICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1NCkKKysrIFRvb2xz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjog
UmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWVyaWMgdmFsdWVzIHdpdGggdHlw
ZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9y
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BERlNuYXBzaG90
Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktp
dEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
ZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50IGNvbnN0KToKKwogMjAyMC0wNS0zMCAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEFkZGl0aW9u
YWwgY29sb3IgY2xlYW51cHMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNyArNjcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogVEVTVChDb2xvciwg
UkdCVG9IU0xfUmVkKQogewotICAgIENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7CisgICAgQ29sb3Ig
Y29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAogICAgIGF1dG8gW2h1ZSwgc2F0
dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBv
bmVudHNMb3NzeSgpKTsKIApAQCAtODMsNyArODMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9S
ZWQpCiAKIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewotICAgIENvbG9yIGNvbG9yKDAs
IDI1NSwgMCk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsK
IAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9I
U0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIApAQCAtOTksNyArOTksNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkK
IHsKLSAgICBDb2xvciBjb2xvcigwLCAwLCAyNTUpOworICAgIENvbG9yIGNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0
bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7
CiAKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1Rf
RkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3Ro
ZXJJbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgIENvbG9yIHZhbGlkQ29sb3IoMjU1
LCAwLCAwKTsKKyAgICBDb2xvciB2YWxpZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwg
MCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9G
QUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKQEAgLTE3OSw3ICsxNzksNyBAQCBURVNU
KENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxp
ZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAK
LSAgICB2YWxpZENvbG9yID0gQ29sb3IoMSwgMiwgMywgNCk7CisgICAgdmFsaWRDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigxLCAyLCAzLCA0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlz
VmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAg
ICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRD
b2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBU
RVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcs
IGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBAIC01MSw3ICs1MSw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTY5LDcg
KzY5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwg
MS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAt
ODgsMjAgKzg4LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIFRFU1QoRXh0
ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAg
ICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwor
ICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRl
bmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQ
Myk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OlNSR0IpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CiAgICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7CkBAIC0x
MTEsOCArMTExLDggQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBpbnQgZyA9
IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEo
ciAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpT
UkdCKTsKLSAgICBDb2xvciByZ2IyKHIsIGcsIGIsIGEpOworICAgIENvbG9yIHJnYjEgeyBtYWtl
RXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAs
IENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xvcihy
LCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJn
YjIsIHJnYjEpOwogfQpAQCAtMTIwLDIwICsxMjAsMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBF
cXVhbGl0eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKIHsKICAgICB7Ci0gICAgICAgIENv
bG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAg
ICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVk
KCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMy
Lmhhc2goKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xv
ciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgQ29s
b3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpTUkdCKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAg
ICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIg
PSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxKHIgLyAyNTUuMCwgZyAvIDI1
NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQik7Ci0gICAgQ29sb3Ig
cmdiMihyLCBnLCBiLCBhKTsKKyAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAv
IDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdC
KSB9OworICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAg
RVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CiAKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAg
RVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEp
KTsKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3Rv
cikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBj
MSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9y
IGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBD
b2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIFRFU1QoRXh0ZW5kZWRD
b2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVu
Y2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcgQ29sb3IoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciogYzEgPSBuZXcgQ29sb3Ig
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xv
ciogYzIgPSBuZXcgQ29sb3IoKmMxKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpCiAKIENvbG9yIG1ha2VDb2xvcigpCiB7Ci0gICAg
Q29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAg
ICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
ICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgs
NyArMjM4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiBURVNUKEV4dGVu
ZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIHAz
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAg
ICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43
NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShwM0NvbG9y
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9IHAzQ29sb3Iu
dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29s
b3IgbGluZWFyQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJH
Qik7CisgICAgICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAgICAgICAgRVhQRUNU
X1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICAgICAgYXV0byBzUkdCQ29tcG9u
ZW50cyA9IGxpbmVhckNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVu
dHNbMF0sIDEuMGYpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvUERGU25hcHNob3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzUsOCArMzUsNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUERGQ29uZmlndXJhdGlv
bi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAotdXNpbmcgV2ViQ29y
ZTo6Q29sb3I7Ci0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChQREZTbmFwc2hv
dCwgRnVsbENvbnRlbnQpCkBAIC02MCw3ICs1OCw3IEBAIFRFU1QoUERGU25hcHNob3QsIEZ1bGxD
b250ZW50KQogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+dGV4dCgpWzRdLCAnbycpOwogCiAgICAg
ICAgIC8vIFRoZSBlbnRpcmUgcGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0
aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9p
bnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShw
YWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigw
LCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1dOwpA
QCAtOTEsNyArODksNyBAQCBURVNUKFBERlNuYXBzaG90LCBTdWJyZWdpb25zKQogICAgICAgICBF
WFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgMHUpOwogCiAgICAgICAgIC8vIFRoZSBl
bnRpcmUgcGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRv
IGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTAp
ID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0
UG9pbnQoMjAwLCAxNTApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsK
IAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1dOwpAQCAtMTExLDEwICsx
MDksMTAgQEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9ucykKICAgICAgICAgRVhQRUNUX1RS
VUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgMTIw
MCwgMTIwMCkpKTsKIAogICAgICAgICAvLyBBIHBpeGVsIHRoYXQgd2FzIGluIHRoZSB2aWV3IHNo
b3VsZCBiZSBncmVlbi4gUGljayBhIHBvaW50IGluIHRoZSBtaWRkbGUgdG8gY2hlY2suCi0gICAg
ICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgyMDAsIDE1MCkgPT0gQ29sb3IoMCwg
MjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgyMDAsIDE1
MCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAgICAgIC8v
IEEgcGl4ZWwgdGhhdCB3YXMgb3V0c2lkZSB0aGUgdmlldyBzaG91bGQgYWxzbyBiZSBncmVlbiAo
d2UgZXh0ZW5kIGJhY2tncm91bmQgY29sb3Igb3V0KS4gUGljayBhIHBvaW50IGluIHRoZSBtaWRk
bGUgdG8gY2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg5MDAs
IDcwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNv
bG9yQXRQb2ludCg5MDAsIDcwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwg
MCkpOwogCiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CiAgICAgfV07CkBAIC0xNDAs
MjAgKzEzOCwyMCBAQCBURVNUKFBERlNuYXBzaG90LCBPdmVyMjAwSW5jaGVzKQogICAgICAgICBh
dXRvIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgwKTsKICAgICAgICAgRVhQRUNUX05FKHBhZ2UsIG51
bGxwdHIpOwogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChwYWdlLT5ib3Vu
ZHMoKSwgQ0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJV
RShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNvcmU6
Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNo
YXJhY3RlckNvdW50KCksIDV1KTsKIAogICAgICAgICBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMSk7
CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
Q0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAx
NDQwMCkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAw
KSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JB
dFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7
CiAKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAg
ICAgICBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMik7CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBu
dWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91
bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gV2ViQ29yZTo6
bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hh
cmFjdGVyQ291bnQoKSwgMHUpOwogCiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CkBA
IC0xNzgsNyArMTc2LDcgQEAgVEVTVChQREZTbmFwc2hvdCwgTGlua3MpCiAgICAgICAgIEVYUEVD
VF9ORShwYWdlLCBudWxscHRyKTsKIAogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRv
UmVjdChwYWdlLT5ib3VuZHMoKSwgQ0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAg
ICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDI1
NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQw
MCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSkpOwogCiAg
ICAgICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgpLCA4dSk7CiAgICAgICAgIEVY
UEVDVF9FUShwYWdlLT50ZXh0KClbMF0sICdDJyk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTE0NCw4ICsxNDQsOCBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50
CiAgICAgYXV0byBhID0gcGl4ZWxbaSArIDNdOwogCiAgICAgaWYgKCFhKQotICAgICAgICByZXR1
cm4geyAwLCAwLCAwLCAwIH07Ci0gICAgcmV0dXJuIHsgciAqIDI1NSAvIGEsIGcgKiAyNTUgLyBh
LCBiICogMjU1IC8gYSwgYSB9OworICAgICAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNv
bG9yKDAsIDAsIDAsIDApOworICAgIHJldHVybiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IociAq
IDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSk7CiB9CiAKIC8vIERvY3VtZW50
cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400692</attachid>
            <date>2020-05-30 21:19:50 -0700</date>
            <delta_ts>2020-05-31 07:48:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200530211949.patch</filename>
            <type>text/plain</type>
            <size>119753</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9v
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1Zh
bHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEgY29uc3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2hhcGVI
aWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
b2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lv
bkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJs
YXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omxp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29s
b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmdldERl
YnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50c0xheWVyRGVi
dWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUxheWVyRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6
VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmds
ZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZvck1hcmtlckxp
bmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9QYWlu
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6Zm9yY2VkVGV4dENvbG9yIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpi
b3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsYXlzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0aXRsZVRleHRDb2xv
ckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudExheW91dDo6bGF5
T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50SWNvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91
bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJh
d1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zl
cmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjog
QWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidQogICAgIAog
ICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBnLCBiKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5p
c01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
LSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6
U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOworICAgIG1fdHJhbnNwYXJlbnRD
b2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0
YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5d29yZDsgKytpKQogICAgICAg
ICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRlbmRlZENvbG9yKGNvbG9yQ2hh
bm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5l
bHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBh
cnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5
Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBAQCBSZW5kZXJTdHlsZSBIVE1M
SW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1dG9GaWxsU3Ryb25nUGFzc3dv
cmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayk7CiAgICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwgUGVyY2VudCB9KTsKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBmLCAwLjBmLCAwLjZmIH0pOwor
ICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZs
b3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2UoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKSkpOwog
ICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVkIGZvciB0aGUgbWFzay4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGUoKS5zaGFkb3dDb2xvciku
c2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQo
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywxNyArMTMwNywxNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IoZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IociwgZywgYiwgYSkpOworICAgIHNl
dFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIHNldFNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2lt
cGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
MTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xvcikKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxw
aGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHls
ZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBtX3N0eWxl
KENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwgYywgbSwgeSwgaywgYSB9KQor
ICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zCiAKIGJvb2wgQ2FudmFzU3R5
bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHls
ZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9Owor
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgocXVhZCwgYm91
bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgoY2xpcFF1YWQsIGJvdW5k
cykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxp
Z2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5n
RnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNvbnN0IENvbG9yIHNoYXBlSGln
aGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29uc3RleHByIGF1dG8gc2hhcGVI
aWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIsIDEyNywgMjA0KTsKIAogICAg
IFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0
ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3NDCiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0
IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxQYXRoKG1hcmdp
blBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGluZykgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICAgICAgY29u
c3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAsIDE2OCk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwg
MjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihpbmRpY2F0aW5nQ29sb3Ip
OwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBwYWludFJlY3RzQ29sb3IoMS4w
ZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1dG8gcGFpbnRSZWN0c0NvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25zdCBUaW1lUmVjdFBhaXImIHBh
aXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEp
OwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC42Zik7
CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAw
LCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm91bmRzQ29sb3IpOwogCiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkgKzY3MCw5IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3Zl
cmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQogewotICAgIGNvbnN0IENvbG9y
IHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDAuNmYpOwotICAgIGNvbnN0
IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjJmKTsKLSAgICBjb25z
dCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25z
dGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0UnVsZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHByIGF1dG8gZGFya1J1bGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIEludFBvaW50IHNjcm9s
bE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0KTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwogCi0g
ICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IoMTI4LCAxMjgsIDEyOCk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0
bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CkBAIC0xMDY4
LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgK
ICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9KTsKICAgICB9OwogCi0gICAg
ZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1RleHQoZWxlbWVu
dElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVtZW50Q2xh
c3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNldWRv
VHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFtZSwgbWFrZVNpbXBs
ZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFsdWUsIG1ha2VT
aW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmll
d2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBl
LCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNr
KTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7CiAgICAgZHJhd1Rl
eHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgUGF0aCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAgICAgICB0ZXh0UG9zaXRpb25Y
ID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAgdGV4dFBvc2l0aW9uWSArPSBm
b250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBDb2xvcigxNzAsIDEzLCAx
NDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VTaW1wbGVDb2xvcigxNzAsIDEz
LCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAgICAgICAg
IGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamUKIAogICAgIGRvdWJsZSBh
ID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQotICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
ciwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgogICAg
IGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihj
b25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8aW50PihhICogMjU1
KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRvd0RhdGEqIExpbmVMYXlvdXQ6
OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQ
b2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAw
LCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1
Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7CiAgICAgcmV0dXJuICZkZWJ1
Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBi
ZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3Ig
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0LW1l
ZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpOworICAgIGNv
bnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhh
dmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41ZiwgMC4wZiwgMC4wZiwgMC40Zikp
CisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBD
b2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBh
Z2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCiAg
ICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0KIAotc3RhdGlj
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQor
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4mIHRvdWNoRXZlbnRSZWdp
b25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xNjMsOSAr
MTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdQogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQotICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5LmcsIGVudHJ5LmIsIDUwIH0p
OworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnku
ciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9KCkp
OwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2
ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewotICAgICAgICBDb2xvciBy
ZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8gcmVnaW9uQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRvIGl0ID0gdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lvbi5rZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgpKQogICAgICAgICAgICAgcmVn
aW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJuaW5nQ29sb3IpIHsKICAgICAg
ICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgZGVidWdSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwg
Q29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoZGVidWdSZWN0
LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMw
LDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAg
ICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICogKHBhZ2VTaXplSW5QaXhlbHMu
aGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIGJ5
IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUs
IDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGluZVkgPSBjdXJyZW50SGVpZ2h0
IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1
KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5lWSksIEludFBvaW50KHBhZ2VX
aWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3Rv
cmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC44ZikpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjlm
LCAwLjlmLCAwLjlmLCAxLmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjbGlwLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjlmLCAwLjlm
LCAwLjlmLCAxLmYpKTsKIAogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0geyAxMCwgMjAg
fTsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9ICAiQ1BVOiAiICsgY3B1VXNhZ2VTdHJpbmcoZ0Rh
dGEuY3B1KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5Ojpw
bGF0Zm9ybUluaXRpCiAgICAgbV9wYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG92
ZXJsYXkoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICptX292ZXJsYXlQYWludGVyKTsKICAgICBtX3BhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldFNpemUoeyBub3JtYWxXaWR0aCwg
bm9ybWFsSGVpZ2h0IH0pOwotICAgIG1fcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
OGYpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICBvdmVy
bGF5KCkubGF5ZXIoKS5hZGRDaGlsZCgqbV9wYWludExheWVyKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1
cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAg
ICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9y
KENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRl
c3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpCiAgICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1
czo6RGVjb2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21w
bGV0ZSkgfHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dy
b3VuZCkgewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVj
dGFuZ2xlIGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZp
bmlzaCBkZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsK
LSAgICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENv
bG9yKENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcElt
YWdlOjolcyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmlu
aXNoXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWRSZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBA
IENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7
CiB9CiAKLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQot
ICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVy
IGJlbG93LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0
IENvbG9yJiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEz
MywxMiBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiByICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBiICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwog
fQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xv
ciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2
KTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
YWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
QEAgLTI0NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAg
cmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhh
ID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3
MSw3ICsyNTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTI4NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0CiAKICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRp
YygpOworICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6
dG9TUkdCQUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OwogfQogCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNT
RVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRv
IGhhbmRsZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBv
bmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBv
bmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVu
dCgpLCBwcm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
CisgICAgKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29s
b3IgewogcHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAg
IENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihT
aW1wbGVDb2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwog
ICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNp
bXBsZUNvbG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRp
YygpOwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAg
ICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7Cisg
ICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNv
bG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1w
bGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5k
ZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRl
ZENvbG9yLmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQog
CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAt
MTE0LDEyICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUK
LSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBu
b3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291
cmNlLW92ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3Jz
RXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJp
dDsgfQorCisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNW
YWxpZCgpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNv
bG9yOyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIu
CiAgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4
ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1w
bGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVk
Q29sb3IqIGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMu
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0y
ODgsNiArMjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMK
ICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9
PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFj
ZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29s
b3IgeyBjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29s
b3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6
aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09
IDE7CiB9CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJu
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBA
QCBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBv
bmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bV9jb21wb25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBi
KQpAQCAtNzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVy
OjpnZXREZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0Jh
Y2tkcm9wKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8g
aGFzIGJhY2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGgg
PSAxMjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9
IENvbG9yKDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAg
ICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQg
bGF5ZXI6IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29sb3IgPSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisg
ICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1h
bCBsYXllcjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29u
dGVudHNMYXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsg
Ly8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVy
IHdpdGggY29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQor
ICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1h
c2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29u
dGFpbmVyOiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwg
MTkyKTsgLy8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRh
dGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBh
cyBhIGtleSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0
cyBhIHdhc2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlv
bi4KICAgICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkp
ICYmICFtX3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwor
ICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNp
YmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5n
KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNl
KSk7CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3Jk
ZXIoUGxhdGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGgg
PSA0Owogc3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hv
d2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwg
MTI4LCAxODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVy
RGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93
aW5nQm9yZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4g
c2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAg
LTM3NzQsNyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91
bmQKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9y
LCBmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVy
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2Fj
aGUgbGF5ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsK
ICAgICBjb25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tn
cm91bmRDb2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNj
ZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29u
c3QgQ29sb3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xv
cigwLmYsIDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIg
YXV0byBhY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihT
dHJpbmc6Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
Q292ZXJhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3Ii
KTsKICAgICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldp
ZHRoKDIpOwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBt
X3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGlj
YXRvckxheWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0
Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMCwgMTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
Ci0gICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxh
eWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwg
NTApKTsKIAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGls
ZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29s
b3I7CiAgICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2Fz
ZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9y
SW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIw
MCwgODAsIDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJv
bm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJl
Y3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJ
bmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1
LCAyNTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDbwogICAg
IGZsb2F0IGIgPSBiMSArIChiMiAtIGIxKSAqIDAuNWY7CiAgICAgZmxvYXQgYSA9IGExICsgKGEy
IC0gYTEpICogMC41ZjsKIAotICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwg
Q29sb3IociwgZywgYiwgYSkpOworICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNl
dCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiB9CiAKIHN0YXRpYyBj
YWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwg
ZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVAog
ICAgIH0KIAogICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNv
bG9yKSk7Ci0gICAgc2V0SXNTZW1hbnRpYygpOworICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAog
c3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1h
Z2VDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5
IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwg
aW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAg
cmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKIH0K
IAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNSArMjA1
LDE1IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGluZVN0eWwKICAgICBzd2l0
Y2ggKHN0eWxlKSB7CiAgICAgLy8gUmVkCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtN
b2RlID8gQ29sb3IgeyAyNTUsIDE0MCwgMTQwLCAyMTcgfSA6IENvbG9yIHsgMjU1LCA1OSwgNDgs
IDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAxNDAsIDE0MCwgMjE3KSA6IG1ha2VTaW1wbGVDb2xvcigyNTUsIDU5
LCA0OCwgMTkxKSk7CiAgICAgLy8gQmx1ZQogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOgogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0
aW9uUmVwbGFjZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtNb2Rl
ID8gQ29sb3IgeyA0MCwgMTQ1LCAyNTUsIDIxNyB9IDogQ29sb3IgeyAwLCAxMjIsIDI1NSwgMTkx
IH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1c2VEYXJrTW9kZSA/IG1ha2VTaW1w
bGVDb2xvcig0MCwgMTQ1LCAyNTUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMCwgMTIyLCAyNTUs
IDE5MSkpOwogICAgIC8vIEdyZWVuCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUg
PyBDb2xvciB7IDUwLCAyMTUsIDc1LCAyMTcgfSA6IENvbG9yIHsgMjUsIDE3NSwgNTAsIDE5MSB9
KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtlU2ltcGxl
Q29sb3IoNTAsIDIxNSwgNzUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMjUsIDE3NSwgNTAsIDE5
MSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMwNywxMiBAQCBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyCiAgICAgICAgIHJldHVybiBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVu
ZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgcHJvZ3Jlc3MpKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwg
cHJvZ3Jlc3MpKTsKIAogICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21P
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAg
ICBJbnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bG9jYXRpb24oKSA6IEludFBvaW50KCk7CiAgICAgaW50IGZyb21TdGREZXZpYXRpb24gPSBmcm9t
T3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCkgOiAwOwotICAgIENvbG9y
IGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigpIDogQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0
aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAK
ICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBDb2xvciBjb2xv
ckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KIAotICAgIHJldHVybiBDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tTlNDb2xvcihjb2xvcik7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlND
b2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OnAKICAgICAgICAgQVNTRVJUKCFtX3RleHR1cmUp
OwogICAgICAgICBpZiAobV9ob2xlUHVuY2hDbGllbnQpCiAgICAgICAgICAgICBtX2hvbGVQdW5j
aENsaWVudC0+c2V0VmlkZW9SZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtb2RlbFZpZXdNYXRy
aXgubWFwUmVjdCh0YXJnZXRSZWN0KSkpOwotICAgICAgICB0ZXhtYXBHTC5kcmF3U29saWRDb2xv
cih0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIENvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7
CisgICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFn
ZUlPUy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0RyYWdJbWFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW0KICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQu
dHJhbnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4
dC5zY2FsZSh7IDEsIC0xIH0pOwotICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9h
dFJvdW5kZWRSZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoNCkpLCB7IDI1
NSwgMjU1LCAyNTUgfSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSg0KSksIG1ha2VTaW1w
bGVDb2xvcigyNTUsIDI1NSwgMjU1KSk7CiAgICAgICAgIHRpdGxlRm9udENhc2NhZGUuZ2V0KCku
ZHJhd1RleHQoY29udGV4dCwgVGV4dFJ1bih0cnVuY2F0ZWRUb3BTdHJpbmcpLCBGbG9hdFBvaW50
KGRyYWdJbWFnZVBhZGRpbmcsIDE4ICsgZHJhZ0ltYWdlUGFkZGluZykpOwogICAgICAgICBpZiAo
IXRydW5jYXRlZEJvdHRvbVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmxGb250Q2Fz
Y2FkZS5nZXQoKS5kcmF3VGV4dChjb250ZXh0LCBUZXh0UnVuKHRydW5jYXRlZEJvdHRvbVN0cmlu
ZyksIEZsb2F0UG9pbnQoZHJhZ0ltYWdlUGFkZGluZywgNDAgKyBkcmFnSW1hZ2VQYWRkaW5nKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUu
bW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdh
Y3lUaWxlQ2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw5ICs0NjIsOSBAQCB1bnNpZ25l
ZCBMZWdhY3lUaWxlQ2FjaGU6OnRpbGVDYXBhY2l0eUZvCiBDb2xvciBMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoTGVnYWN5VGlsZUdyaWQqIGdyaWQpIGNvbnN0CiB7CiAg
ICAgaWYgKGdyaWQgPT0gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yKDAuMmYsIDEuMGYsIDAuZiwgMC41Zik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKDAuMmYsIDEuMGYsIDAuZiwgMC41Zik7CiAKLSAgICByZXR1cm4gQ29s
b3IoMC4yZiwgMC45ZiwgMC5mLCAwLjVmKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRS
ZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1JlZ2lvbk9iaiBkaXJ0
eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksMTQgKzE4OSwxNCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhF
bGVtCiAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY29udGV4dFJlZik7CiAgICAgLy8gT24g
TWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAwLjh9LCBob3dldmVyIHdlIGNhbid0IGNvbnRy
b2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFnZXMgb24gd2luLCBzbyB3ZSB1c2UgMQotICAg
IHN0YXRpYyBjb25zdCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoMTQwLCAxNDAsIDE0MCk7CisgICAg
Y29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDE0MCwgMTQw
LCAxNDApOwogICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHJhZGlpKERyYWdMYWJlbFJhZGl1cywg
RHJhZ0xhYmVsUmFkaXVzKTsKICAgICBJbnRSZWN0IHJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxv
YXRSb3VuZGVkUmVjdChyZWN0LCByYWRpaSwgcmFkaWksIHJhZGlpLCByYWRpaSksIGJhY2tncm91
bmRDb2xvcik7CiAgCiAgICAgLy8gRHJhdyB0aGUgdGV4dAotICAgIHN0YXRpYyBjb25zdCBDb2xv
ciB0b3BDb2xvcigwLCAwLCAwLCAyNTUpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNzUKLSAgICBz
dGF0aWMgY29uc3QgQ29sb3IgYm90dG9tQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTI3KTsgLy8gb3Jp
Z2luYWwgYWxwaGEgPSAwLjUKKyAgICBjb25zdGV4cHIgYXV0byB0b3BDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAwLCAyNTUpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNzUKKyAgICBjb25z
dGV4cHIgYXV0byBib3R0b21Db2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1LCAx
MjcpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNQogICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7CiAg
ICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQogICAgICAgICAgICAgdXJsU3RyaW5nID0gU3RyaW5n
VHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKHVybFN0cmluZywgaW1hZ2VTaXplLndpZHRoKCkgLSAo
RHJhZ0xhYmVsQm9yZGVyWCAqIDIuMGYpLCAqdXJsRm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1BhaW50SW5mby5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3Ry
dWN0IFBhaW50SW5mbyB7CiAgICAgYm9vbCBmb3JjZVRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IGZvcmNlQmxhY2tUZXh0KCkgfHwgZm9yY2VXaGl0ZVRleHQoKTsgfQogICAgIGJvb2wgZm9yY2VC
bGFja1RleHQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkZvcmNlQmxhY2tUZXh0KTsgfQogICAgIGJvb2wgZm9yY2VXaGl0ZVRleHQoKSBjb25z
dCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZvcmNlV2hp
dGVUZXh0KTsgfQotICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIChm
b3JjZUJsYWNrVGV4dCgpKSA/IENvbG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQorICAgIENv
bG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgPyBD
b2xvcjo6YmxhY2sgOiBDb2xvcjo6d2hpdGU7IH0KIAogICAgIGJvb2wgc2tpcFJvb3RCYWNrZ3Jv
dW5kKCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9y
OjpTa2lwUm9vdEJhY2tncm91bmQpOyB9CiAgICAgYm9vbCBwYWludFJvb3RCYWNrZ3JvdW5kT25s
eSgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6
Um9vdEJhY2tncm91bmRPbmx5KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCwyOSArNzQsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJy
b3dMZWZ0TQogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dQYWRkaW5nID0gNDsK
IHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9IDM7CiAK
LXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29s
b3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUsIDEw
NSwgMTA1LCAyNDIpOwotICAgIHJldHVybiBwcmVzc2VkOwotfQotCi1zdGF0aWMgY29uc3QgQ29s
b3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKLSAgICByZXR1
cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29s
b3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAy
NDAsIDI0MCwgMjU1KTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBD
b2xvciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwotICAgIHJldHVy
biBzdGFuZGFyZDsKLX0KK2NvbnN0ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0
UHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEwNSwgMTA1LCAxMDUsIDI0Mik7Citjb25z
dGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDEyNSwgMTI1LCAxMjUsIDI0Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDAsIDI0MCwgMjQwLCAyNTUpOworY29uc3RleHByIGF1
dG8gdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAyMTYpOwogCiBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3QoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQog
ICAgIDogUmVuZGVyV2lkZ2V0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpAQCAtMzEyLDcgKzI5
Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0
LmNsaXAoY29udGVudFJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFBy
ZXNzZWRDb2xvcigpIDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpKTsKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
ID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IgOiByZXBsYWNlbWVudFRl
eHRSb3VuZGVkUmVjdENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKGJhY2tncm91bmQpOwog
CiAgICAgUGF0aCBzdHJva2VQYXRoOwpAQCAtMzIwLDIxICszMDEsMjEgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIHN0cm9rZVJlY3QuaW5mbGF0ZSgxKTsK
ICAgICBzdHJva2VQYXRoLmFkZFJvdW5kZWRSZWN0KHN0cm9rZVJlY3QsIEZsb2F0U2l6ZShyZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cyArIDEsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRS
ZWN0UmFkaXVzICsgMSkpOwogCi0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmF2YWlsYWJs
ZVBsdWdpbkJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5hdmFp
bGFibGVQbHVnaW5Cb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
Mik7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKHN0cm9rZVBhdGgpOwogCiAgICAgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgIGZsb2F0IGxh
YmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0VGV4dE1hcmdpbik7CiAgICAgZmxvYXQgbGFiZWxZID0g
cm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRU
ZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSkgLyAyICsgZm9u
dE1ldHJpY3MuYXNjZW50KCkgKyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFRvcFRleHRNYXJn
aW4pOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAgICBjb250
ZXh0LmRyYXdCaWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJlbFkpKTsK
IAogICAgIGlmIChzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihwYWdlKCks
IG1fcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKSB7CiAgICAgICAgIGFycm93UmVjdC5pbmZs
YXRlKC1yZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyk7CiAKICAgICAgICAgY29udGV4dC5i
ZWdpblRyYW5zcGFyZW5jeUxheWVyKDEuMCk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihy
ZXBsYWNlbWVudFRleHRDb2xvcik7CiAgICAgICAgIGNvbnRleHQuZmlsbEVsbGlwc2UoYXJyb3dS
ZWN0KTsKIAogICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvcjo6Q2xlYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyMyArNjgsOSBAQCBS
ZW5kZXJGcmFtZVNldDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIHsKIH0KIAotc3RhdGljIGNvbnN0
IENvbG9yJiBib3JkZXJTdGFydEVkZ2VDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENvbG9yPiBjb2xvcigxNzAsIDE3MCwgMTcwKTsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0K
LXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyRW5kRWRnZUNvbG9yKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIHJldHVybiBj
b2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7Ci0gICAg
cmV0dXJuIGNvbG9yOwotfQorY29uc3RleHByIGF1dG8gYm9yZGVyU3RhcnRFZGdlQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMTcwLCAxNzAsIDE3MCk7Citjb25zdGV4cHIgYXV0byBib3JkZXJFbmRF
ZGdlQ29sb3IgPSBDb2xvcjo6YmxhY2s7Citjb25zdGV4cHIgYXV0byBib3JkZXJGaWxsQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjA4LCAyMDgsIDIwOCk7CiAKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6
OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiBib3JkZXJSZWN0KQogewpAQCAtOTUsMTMgKzgxLDEzIEBAIHZvaWQgUmVuZGVyRnJhbWVT
ZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0LgogICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4
dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJDb2xvcigp
ID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCkpOworICAgIGNvbnRleHQuZmls
bFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcik7CiAgICAgCiAgICAgLy8gTm93IHN0cm9r
ZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3Ro
IGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2lu
ZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAgICAgICBj
b250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKDEs
IGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZp
bGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0
LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkpOworICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRT
aXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAgICAgY29udGV4
dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4WCgpIC0gMSwgYm9yZGVy
UmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAg
ICAgfQogfQogCkBAIC0xMTQsMTMgKzEwMCwxMyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWlu
dFJvd0JvcmRlcihjb25zCiAgICAgCiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQuZmlsbFJl
Y3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9yZGVy
TGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KGJv
cmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRD
b2xvcikgOiBib3JkZXJGaWxsQ29sb3IpOwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMg
YnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGgg
YSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgog
ICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAgICAgY29udGV4dC5maWxs
UmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24oKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSks
IGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJl
Y3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSksIEludFNp
emUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQu
ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUod2lkdGgoKSwg
MSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcik7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludChib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAxKSwgSW50
U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMTgsNyArMjIxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC41ZiwgMC4y
ZikpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuNWYsIDAuMmYpKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChw
aXhlbFNuYXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjYyMzUy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMDEsNyArMzIwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludERlYnVnT3ZlcmwKICAgICAvLyBUaGUgaW50ZXJhY3RpdmUgcGFydC4KICAgICAvLyBQ
YWludCByZWN0cyBmb3IgdG91Y2ggYWN0aW9uLgogICAgIGlmICh2aXNpYmxlRGVidWdPdmVybGF5
UmVnaW9ucyAmIFRvdWNoQWN0aW9uUmVnaW9uKSB7Ci0gICAgICAgIENvbG9yIHJlZ2lvbkNvbG9y
KDAsIDAsIDI1NSwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byByZWdpb25Db2xvciA9IG1h
a2VTaW1wbGVDb2xvcigwLCAwLCAyNTUsIDUwKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IocmVnaW9uQ29sb3IpOwogICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IGV2ZW50UmVnaW9uLnJl
Z2lvbigpLnJlY3RzKCkpCiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NzAsNyArNjcwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlTGlz
dEJveFNlbGVjdAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKICAg
ICAvLyBVc2UgYSBibHVlIGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRoZW1lIGRv
ZXNuJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPikgY29uc3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBSZW5kZXJU
aGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBjb2xvciBi
eSBkZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0aGluZy4K
ICAgICAvLyBUaGlzIGNvbG9yIG1hdGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9yLgotICAg
IHJldHVybiBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDE3NiwgMTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4dFNlYXJj
aEhpZ2hsaWdodENvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBDb2xvcjo6
eWVsbG93OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyArMTQ0OCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAgIGF1dG8g
bWFya2VyUmVjdCA9IEZsb2F0UmVjdCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAyNCwgcmVj
dC55KCkgKyA4LCAxNiwgMTYgfTsKICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0gRmxvYXRS
b3VuZGVkUmVjdCB7IG1hcmtlclJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgOCB9IH07
Ci0gICAgYXV0byBjb2xvciA9IENvbG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBjb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KHJvdW5kZWRNYXJrZXJSZWN0LCBjb2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyArMTQ1OSw3
IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAgICAvLyBU
aGlzIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3BhcmVudCBv
dmVybGF5LAogICAgIC8vIG1ha2luZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRzIGFscGhh
IHZhbHVlIGluZGljYXRlcy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0
Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxh
dGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0
IHsgcmV0dXJuIENvbG9yKDAsIDAsIDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZv
Y3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1
cm4gQ29sb3I6OmJsYWNrOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNSaW5nQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0
aCgpIHsgcmV0dXJuIDM7IH0KICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdPZmZz
ZXQoZmxvYXQgb3V0bGluZVdpZHRoKSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0bGluZVdp
ZHRoIC0gcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsNyArMTU1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25z
dDsKICAgICBGbG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0
JiBib3gsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENvbG9yIHN5
c3RlbUNvbG9yKENTU1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNiBAQCB2b2lkIFJl
bmRlclRoZW1lSU9TOjpzZXRDb250ZW50U2l6ZUNhdGVnCiAKIGNvbnN0IENvbG9yJiBSZW5kZXJU
aGVtZUlPUzo6c2hhZG93Q29sb3IoKSBjb25zdAogewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb2xvcj4gY29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC43Zik7CiAgICAgcmV0dXJuIGNvbG9y
OwogfQogCkBAIC0zODcsNyArMzg2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVj
a2JveERlY29yYQogCiAgICAgaWYgKGNoZWNrZWQgfHwgaW5kZXRlcm1pbmF0ZSkgewogICAgICAg
ICBhdXRvIGJvcmRlciA9IGJveC5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVjdCk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNu
YXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpLCBDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVj
dEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKIAogICAgICAgICBh
dXRvIGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0KCks
IHJlY3QpOwogICAgICAgICBhdXRvIHdpZHRoID0gY2xpcC53aWR0aCgpOwpAQCAtNDIzLDEwICs0
MjIsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYQogICAgICAg
ICB9CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KGxpbmVXaWR0aCwgMSk7
Ci0gICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdU
Rk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1YXJlLCBsaW5lV2lkdGgsIENvbG9yIHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMC43ZiB9KTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4
dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFkb3cpIH0sIGtDR0xpbmVDYXBTcXVhcmUs
IGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAw
LjdmKSk7CiAKICAgICAgICAgbGluZVdpZHRoID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluKHdp
ZHRoLCBoZWlnaHQpICogdGhpY2tuZXNzUmF0aW8sIDEpOwotICAgICAgICBkcmF3Sm9pbmVkTGlu
ZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVD
YXBCdXR0LCBsaW5lV2lkdGgsIENvbG9yIHsgMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBm
IH0pOworICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4g
eyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVDYXBCdXR0LCBsaW5lV2lkdGgsIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoMS4wZiwgMS4wZiwgMS4wZiwgMjQwIC8gMjU1LjBmKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWlu
dEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgo
KTsKQEAgLTQ4NCw3ICs0ODMsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVj
b3JhdGlvCiAKICAgICBpZiAoaXNDaGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBib3JkZXIg
PSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBwYWludElu
Zm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJl
Y3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgQ29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZp
bGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhi
b3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CiAKICAgICAgICAgYXV0byBjbGlwID0gYWRk
Um91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAg
ICAgZHJhd0F4aWFsR3JhZGllbnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVH
cmFkaWVudCksIGNsaXAubG9jYXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZ
KCkpLCBMaW5lYXJJbnRlcnBvbGF0aW9uKTsKQEAgLTQ5Niw4ICs0OTUsOSBAQCBib29sIFJlbmRl
clRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICAgICAgY2xpcC5pbmZsYXRlWCgt
Y2xpcC53aWR0aCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwogICAgICAgICBjbGlwLmluZmxhdGVZ
KC1jbGlwLmhlaWdodCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwotCi0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBzaGFkb3dD
b2xvcigpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuN2YgKiAyNTUpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwgc2hhZG93Q29s
b3IpOwogCiAgICAgICAgIEZsb2F0U2l6ZSByYWRpdXMoY2xpcC53aWR0aCgpIC8gMi4wZiwgY2xp
cC5oZWlnaHQoKSAvIDIuMGYpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmNsaXBSb3Vu
ZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGNsaXAsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMsIHJh
ZGl1cykpOwpAQCAtNzMxLDcgKzczMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVu
dUxpc3RCdXR0b24KICAgICAgICAgRmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAo
YnV0dG9uQ2xpcC53aWR0aCgpIC0gY291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykg
LyAyLjAsIGJ1dHRvbkNsaXAubWF4WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgQ29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQo
KS5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUsIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC41ZikpOwogICAgICAgICAgICAgZWxsaXBz
ZS5tb3ZlKHNpemUgKyBwYWRkaW5nLCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2UgewpAQCAt
NzUxLDggKzc1MSw4IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24K
ICAgICAgICAgfTsKIAogICAgICAgICBmbG9hdCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2wo
Ym94KSA/IDAuMiA6IDAuNTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VD
b2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7Ci0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuc2V0RmlsbENvbG9yKENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkp
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCku
ZHJhd1BhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHNoYWRvdykpOwogCiAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsKQEAgLTg0
MCw5ICs4NDAsOSBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFNsaWRlclRyYWNrKGNvCiAK
ICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCk7CiAgICAgICAgIGlmIChyZWFkb25seSkKLSAgICAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMTc4LCAxNzgsIDE3OCkpOworICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMTc4LCAxNzgsIDE3OCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludEluZm8u
Y29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDc2LCA3NiwgNzYpKTsKKyAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDc2LCA3
NiwgNzYpKTsKIAogICAgICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gcm91bmRlZFJl
Y3RQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgICAgICBDR1BhdGhB
ZGRSb3VuZGVkUmVjdChyb3VuZGVkUmVjdFBhdGguZ2V0KCksIDAsIHRyYWNrQ2xpcCwgY29ybmVy
V2lkdGgsIGNvcm5lckhlaWdodCk7CkBAIC05MTksMTMgKzkxOSwxMyBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAKICAgICBjb25zdCBmbG9hdCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uID0gcmVjdC55KCkgKyB2ZXJ0aWNhbE9mZnNldDsKICAgICBhdXRvIHN0
cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQg
LSAxKSB9KTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMHg4
ZCwgMHg4ZCwgMHg4ZCkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwg
Q29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC41NSwgQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOwotICAgIHN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMS4wLCBDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CisgICAgc3Ryb2tlR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhkLCAweDhk
KSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxlQ29s
b3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MC41NSwgbWFrZVNpbXBsZUNvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJva2VHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDB4OGQsIDB4OGQsIDB4OGQp
KTsKICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoc3Ryb2tlR3JhZGllbnQp
KTsKIAotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKKyAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwogCiAgICAgUGF0aCB0cmFja1Bh
dGg7CiAgICAgRmxvYXRSZWN0IHRyYWNrUmVjdChyZWN0LngoKSArIDAuMjUsIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyAwLjI1LCByZWN0LndpZHRoKCkgLSAwLjUsIHByb2dyZXNzQmFySGVp
Z2h0IC0gMC41KTsKQEAgLTkzOSw4ICs5MzksOCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWlu
dFByb2dyZXNzQmFyKGNvCiAKICAgICBmbG9hdCB1cHBlckdyYWRpZW50SGVpZ2h0ID0gcHJvZ3Jl
c3NCYXJIZWlnaHQgLyAyLjsKICAgICBhdXRvIHVwcGVyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3Jl
YXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxS
ZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gKyB1cHBlckdyYWRpZW50SGVpZ2h0IC0gMS41KSB9KTsKLSAgICB1cHBl
ckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigxMzMsIDEzMywgMTMzLCAxODgpKTsK
LSAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigxOCwgMTgsIDE4LCA1
MSkpOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xv
cigxMzMsIDEzMywgMTMzLCAxODgpKTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MS4wLCBtYWtlU2ltcGxlQ29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKICAgICBjb250ZXh0LnNldEZp
bGxHcmFkaWVudChXVEZNb3ZlKHVwcGVyR3JhZGllbnQpKTsKIAogICAgIGNvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uLCByZWN0Lndp
ZHRoKCksIHVwcGVyR3JhZGllbnRIZWlnaHQpKTsKQEAgLTk1MSwxOCArOTUxLDE4IEBAIGJvb2wg
UmVuZGVyVGhlbWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KICAgICAgICAgZG91YmxlIHBvc2l0
aW9uID0gY2xhbXBUbyhyZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpLCAwLjAsIDEuMCk7CiAgICAg
ICAgIGRvdWJsZSBiYXJXaWR0aCA9IHBvc2l0aW9uICogcmVjdC53aWR0aCgpOwogICAgICAgICBh
dXRvIGJhckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7
IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBG
bG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NC
YXJIZWlnaHQgLSAxKSB9KTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAs
IENvbG9yKDE5NSwgMjE3LCAyNDcpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjQ1LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC40OSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNTEsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAgICBiYXJH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIENvbG9yKDM2LCAxMTQsIDIxMCkpOwotICAgICAg
ICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoNTcsIDE0MiwgMjQ0KSk7Cisg
ICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMTk1
LCAyMTcsIDI0NykpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIG1h
a2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC40OSwgbWFrZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAgICAgICAg
YmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUxLCBtYWtlU2ltcGxlQ29sb3IoMzYsIDExNCwg
MjEwKSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgbWFrZVNpbXBs
ZUNvbG9yKDM2LCAxMTQsIDIxMCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDEuMCwgbWFrZVNpbXBsZUNvbG9yKDU3LCAxNDIsIDI0NCkpOwogICAgICAgICBjb250ZXh0LnNl
dEZpbGxHcmFkaWVudChXVEZNb3ZlKGJhckdyYWRpZW50KSk7CiAKICAgICAgICAgYXV0byBiYXJT
dHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBG
bG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0
IC0gMSkgfSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBD
b2xvcig5NSwgMTA3LCAxODMpKTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9y
U3RvcCgwLjUsIENvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7Ci0gICAgICAgIGJhclN0cm9rZUdy
YWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcigzOCwgMTA0LCAxNjYpKTsKKyAgICAgICAg
YmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcig5NSwg
MTA3LCAxODMpKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUs
IG1ha2VTaW1wbGVDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOworICAgICAgICBiYXJTdHJva2VH
cmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDM4LCAxMDQsIDE2Nikp
OwogICAgICAgICBjb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KFdURk1vdmUoYmFyU3Ryb2tlR3Jh
ZGllbnQpKTsKIAogICAgICAgICBQYXRoIGJhclBhdGg7CkBAIC0xNTY4LDEwICsxNTY4LDEwIEBA
IENvbG9yIFJlbmRlclRoZW1lSU9TOjpzeXN0ZW1Db2xvcihDU1NWYWwKIGNvbnN0IENHU2l6ZSBh
dHRhY2htZW50U2l6ZSA9IHsgMTYwLCAxMTkgfTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50
Qm9yZGVyUmFkaXVzID0gMTY7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudEJvcmRlckNvbG9yKCkg
eyByZXR1cm4gQ29sb3IoMjA0LCAyMDQsIDIwNCk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBh
dHRhY2htZW50Qm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIwNCk7CiBz
dGF0aWMgQ0dGbG9hdCBhdHRhY2htZW50Qm9yZGVyVGhpY2tuZXNzID0gMTsKIAotc3RhdGljIENv
bG9yIGF0dGFjaG1lbnRQcm9ncmVzc0NvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjIyLCAyMjIsIDIy
Mik7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigyMjIsIDIyMiwgMjIyKTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBy
b2dyZXNzQm9yZGVyVGhpY2tuZXNzID0gMzsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJv
Z3Jlc3NTaXplID0gMzY7CkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgdm9pZCBwYWludEF0
dGFjaG1lbnRQcm9ncmVzcyhHcmFwCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzYXZl
cihjb250ZXh0KTsKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQ
cm9ncmVzc0JvcmRlclRoaWNrbmVzcyk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcigpKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2ht
ZW50UHJvZ3Jlc3NDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0dGFjaG1l
bnRQcm9ncmVzc0NvbG9yKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihhdHRhY2htZW50UHJv
Z3Jlc3NDb2xvcik7CiAgICAgY29udGV4dC5zdHJva2VFbGxpcHNlKGluZm8ucHJvZ3Jlc3NSZWN0
KTsKIAogICAgIEZsb2F0UG9pbnQgY2VudGVyID0gaW5mby5wcm9ncmVzc1JlY3QuY2VudGVyKCk7
CkBAIC0xODk2LDcgKzE4OTYsNyBAQCBzdGF0aWMgUGF0aCBhdHRhY2htZW50Qm9yZGVyUGF0aChS
ZW5kZXJBCiAKIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEJvcmRlcihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFBhdGgmIGJvcmRlclBhdGgpCiB7Ci0gICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihhdHRhY2htZW50Qm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xv
cihhdHRhY2htZW50Qm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KGF0dGFjaG1lbnRCb3JkZXJUaGlja25lc3MpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3Jk
ZXJQYXRoKTsKIH0KQEAgLTIwMjQsNyArMjAyNCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBh
aW50U3lzdGVtUHJldmlld0IKICAgICAvLyBEcmF3IGEgZHJvcCBzaGFkb3cgYXJvdW5kIHRoZSBj
aXJjbGUuCiAgICAgLy8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2Ug
aXQgY2FsY3VsYXRlcyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyBy
YXRoZXIgdGhhbiBzY3JlZW4gc3BhY2UuCi0gICAgQ29sb3Igc2hhZG93Q29sb3IgPSBDb2xvciB7
IDAuZiwgMC5mLCAwLmYsIDAuMWYgfTsKKyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cygwLmYsIDAuZiwgMC5mLCAwLjFmKTsKICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hhZG93KEZsb2F0U2l6ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAgICAvLyBU
aGUgY2lyY2xlIG11c3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBz
aGFkb3cgY29sb3IgdG8gYXBwZWFyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ5LDggKzE2NDks
OCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgfTsKICAg
ICBwYWludEluZm8uY29udGV4dCgpLmZpbGxQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50
cyhhcnJvdzIpKTsKIAotICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAwLCA0MCk7
Ci0gICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7CisgICAg
Y29uc3RleHByIGF1dG8gbGVmdFNlcGFyYXRvckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAs
IDAsIDQwKTsKKyAgICBjb25zdGV4cHIgYXV0byByaWdodFNlcGFyYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDQwKTsKIAogICAgIC8vIEZJWE1FOiBTaG91bGQgdGhl
IHNlcGFyYXRvciB0aGlja25lc3MgYW5kIHNwYWNlIGJlIHNjYWxlZCB1cCBieSBmb250U2NhbGU/
CiAgICAgaW50IHNlcGFyYXRvclNwYWNlID0gMjsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9v
bSBzaW5jZSBpdCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0aGluLgpAQCAtMjQ3Miw4ICsyNDcy
LDggQEAgY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50SWNvblNlbGVjdGlvbkJvcgogY29uc3QgQ0dG
bG9hdCBhdHRhY2htZW50SWNvbkJhY2tncm91bmRSYWRpdXMgPSAzOwogY29uc3QgQ0dGbG9hdCBh
dHRhY2htZW50SWNvblRvVGl0bGVNYXJnaW4gPSAyOwogCi1zdGF0aWMgQ29sb3IgYXR0YWNobWVu
dEljb25CYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCAzMCk7IH0KLXN0
YXRpYyBDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjU1
LCAyNTUsIDI1NSwgMTI1KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRJY29u
QmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDMwKTsKK2NvbnN0ZXhw
ciBTaW1wbGVDb2xvciBhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUsIDEyNSk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlRm9u
dFNpemUgPSAxMjsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlQmFja2dyb3VuZFJhZGl1
cyA9IDM7CkBAIC0yNDgxLDIzICsyNDgxLDIzIEBAIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRp
dGxlQmFja2dyb3VuZFAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFRpdGxlTWF4aW11bVdpZHRo
ID0gMTAwIC0gKGF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmRQYWRkaW5nICogMik7CiBjb25zdCBD
RkluZGV4IGF0dGFjaG1lbnRUaXRsZU1heGltdW1MaW5lQ291bnQgPSAyOwogCi1zdGF0aWMgQ29s
b3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xv
cigyMDQsIDIwNCwgMjA0LCAyNTUpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFRpdGxlSW5h
Y3RpdmVUZXh0Q29sb3IoKSB7IHJldHVybiBDb2xvcigxMDAsIDEwMCwgMTAwLCAyNTUpOyB9Citj
b25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMjA0LCAyMDQsIDIwNCwgMjU1KTsKK2NvbnN0ZXhwciBTaW1w
bGVDb2xvciBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZVRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigxMDAsIDEwMCwgMTAwLCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRTdWJ0aXRs
ZUZvbnRTaXplID0gMTA7CiBjb25zdCBpbnQgYXR0YWNobWVudFN1YnRpdGxlV2lkdGhJbmNyZW1l
bnQgPSAxMDsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IoKSB7IHJl
dHVybiBDb2xvcig4MiwgMTQ1LCAyMTQsIDI1NSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBh
dHRhY2htZW50U3VidGl0bGVUZXh0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoODIsIDE0NSwgMjE0
LCAyNTUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhcldpZHRoID0gMzA7
CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0JhckhlaWdodCA9IDU7CiBjb25zdCBD
R0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0Jhck9mZnNldCA9IC05OwogY29uc3QgQ0dGbG9hdCBh
dHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJXaWR0aCA9IDE7Ci1zdGF0aWMgQ29sb3IgYXR0YWNo
bWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwg
ODkpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yKCkgeyBy
ZXR1cm4gQ29sb3IoQ29sb3I6OndoaXRlKTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9n
cmVzc0JhckJvcmRlckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTI4KTsgfQorY29u
c3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCA4OSk7Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0
YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yID0gQ29sb3I6OndoaXRlOworY29uc3RleHByIFNp
bXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDAsIDAsIDAsIDEyOCk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVy
Qm9yZGVyUmFkaXVzID0gNTsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3Jk
ZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDU2KTsgfQorY29uc3RleHByIFNpbXBs
ZUNvbG9yIGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDAsIDAsIDU2KTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVy
V2lkdGggPSAyOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJEYXNo
TGVuZ3RoID0gNjsKIApAQCAtMjU0MSw3ICsyNTQxLDcgQEAgc3RhdGljIENvbG9yIHRpdGxlVGV4
dENvbG9yRm9yQXR0YWNobWVudAogICAgICAgICBpZiAoYXR0YWNobWVudC5mcmFtZSgpLnNlbGVj
dGlvbigpLmlzRm9jdXNlZEFuZEFjdGl2ZSgpKQogICAgICAgICAgICAgcmVzdWx0ID0gY29sb3JG
cm9tTlNDb2xvcihbTlNDb2xvciBhbHRlcm5hdGVTZWxlY3RlZENvbnRyb2xUZXh0Q29sb3JdKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXR0YWNobWVudFRpdGxlSW5hY3Rp
dmVUZXh0Q29sb3IoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRsZUluYWN0
aXZlVGV4dENvbG9yOwogICAgIH0KIAogICAgIHJldHVybiBhdHRhY2htZW50LnN0eWxlKCkuY29s
b3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIocmVzdWx0KTsKQEAgLTI2NDcsNyArMjY0Nyw3IEBAIHZv
aWQgQXR0YWNobWVudExheW91dDo6bGF5T3V0U3VidGl0bGUoY28KICAgICBpZiAoc3VidGl0bGVU
ZXh0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ29sb3Igc3VidGl0bGVDb2xv
ciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2ht
ZW50U3VidGl0bGVUZXh0Q29sb3IoKSk7CisgICAgQ29sb3Igc3VidGl0bGVDb2xvciA9IGF0dGFj
aG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50U3VidGl0
bGVUZXh0Q29sb3IpOwogICAgIENGU3RyaW5nUmVmIGxhbmd1YWdlID0gMDsgLy8gQnkgbm90IHNw
ZWNpZnlpbmcgYSBsYW5ndWFnZSB3ZSB1c2UgdGhlIHN5c3RlbSBsYW5ndWFnZS4KICAgICBSZXRh
aW5QdHI8Q1RGb250UmVmPiBmb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVVSUZvbnRGb3JMYW5n
dWFnZShrQ1RGb250VUlGb250U3lzdGVtLCBhdHRhY2htZW50U3VidGl0bGVGb250U2l6ZSwgbGFu
Z3VhZ2UpKTsKICAgICBOU0RpY3Rpb25hcnkgKnRleHRBdHRyaWJ1dGVzID0gQHsKQEAgLTI3MjEs
NyArMjcyMSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudEljb25CYWNrZ3JvdW4KICAg
ICBpZiAocGFpbnRCb3JkZXIpCiAgICAgICAgIGJhY2tncm91bmRSZWN0LmluZmxhdGUoLWF0dGFj
aG1lbnRJY29uU2VsZWN0aW9uQm9yZGVyVGhpY2tuZXNzKTsKIAotICAgIENvbG9yIGJhY2tncm91
bmRDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihh
dHRhY2htZW50SWNvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICBDb2xvciBiYWNrZ3JvdW5kQ29s
b3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNo
bWVudEljb25CYWNrZ3JvdW5kQ29sb3IpOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZs
b2F0Um91bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGF0
dGFjaG1lbnRJY29uQmFja2dyb3VuZFJhZGl1cykpLCBiYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAg
aWYgKHBhaW50Qm9yZGVyKSB7CkBAIC0yNzMyLDcgKzI3MzIsNyBAQCBzdGF0aWMgdm9pZCBwYWlu
dEF0dGFjaG1lbnRJY29uQmFja2dyb3VuCiAgICAgICAgIFBhdGggYm9yZGVyUGF0aDsKICAgICAg
ICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBpY29uQmFja2dyb3VuZFJh
ZGl1c1NpemUpOwogCi0gICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3Io
KSk7CisgICAgICAgIENvbG9yIGJvcmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOwogICAgICAg
ICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvcmRlckNvbG9yKTsKICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudEljb25TZWxlY3Rpb25Cb3JkZXJUaGlja25lc3Mp
OwogICAgICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CkBAIC0yODMwLDcgKzI4
MzAsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRUaXRsZUJhY2tncm91CiAgICAgICAg
IGJhY2tncm91bmRDb2xvciA9IGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgYWx0ZXJuYXRlU2Vs
ZWN0ZWRDb250cm9sQ29sb3JdKTsKICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAgICAgfSBlbHNlCi0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnRU
aXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIGJhY2tncm91bmRDb2xvciA9
IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yOwogCiAgICAgYmFja2dyb3Vu
ZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJh
Y2tncm91bmRDb2xvcik7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYmFja2dyb3VuZENvbG9y
KTsKQEAgLTI4NzUsNyArMjg3NSw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFByb2dy
ZXNzKGNvbnMKICAgICBiYWNrZ3JvdW5kUmVjdC5pbmZsYXRlKC1hdHRhY2htZW50UHJvZ3Jlc3NC
YXJCb3JkZXJXaWR0aCAvIDIpOwogCiAgICAgRmxvYXRSb3VuZGVkUmVjdCBiYWNrZ3JvdW5kUm91
bmRlZFJlY3QoYmFja2dyb3VuZFJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGJhY2tncm91
bmRSZWN0LmhlaWdodCgpIC8gMikpOwotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KGJhY2tn
cm91bmRSb3VuZGVkUmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKCkp
OworICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KGJhY2tncm91bmRSb3VuZGVkUmVjdCwgYXR0
YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yKTsKIAogICAgIHsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBjbGlwU2F2ZXIoY29udGV4dCk7CkBAIC0yODg1LDEzICsy
ODg1LDEzIEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFByb2dyZXNzKGNvbnMKICAgICAg
ICAgcHJvZ3Jlc3NSZWN0LnNldFdpZHRoKHByb2dyZXNzUmVjdC53aWR0aCgpICogcHJvZ3Jlc3Mp
OwogICAgICAgICBwcm9ncmVzc1JlY3QgPSBlbmNsb3NlUmVjdFRvRGV2aWNlUGl4ZWxzKHByb2dy
ZXNzUmVjdCwgYXR0YWNobWVudC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogCi0g
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NSZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QocHJvZ3Jlc3NSZWN0LCBh
dHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IpOwogICAgIH0KIAogICAgIFBhdGggYm9yZGVy
UGF0aDsKICAgICBmbG9hdCBib3JkZXJSYWRpdXMgPSBib3JkZXJSZWN0LmhlaWdodCgpIC8gMjsK
ICAgICBib3JkZXJQYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIEZsb2F0U2l6ZShib3Jk
ZXJSYWRpdXMsIGJvcmRlclJhZGl1cykpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0
YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VD
b2xvcihhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRT
dHJva2VUaGlja25lc3MoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyV2lkdGgpOwogICAgIGNv
bnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKIH0KQEAgLTI5MDEsNyArMjkwMSw3IEBAIHN0
YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm8KICAgICBQYXRoIGJvcmRlclBh
dGg7CiAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChsYXlvdXQuYXR0YWNobWVudFJlY3Qs
IEZsb2F0U2l6ZShhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJSYWRpdXMsIGF0dGFjaG1lbnRQ
bGFjZWhvbGRlckJvcmRlclJhZGl1cykpOwogCi0gICAgQ29sb3IgcGxhY2Vob2xkZXJCb3JkZXJD
b2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRh
Y2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcigpKTsKKyAgICBDb2xvciBwbGFjZWhvbGRlckJv
cmRlckNvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9r
ZUNvbG9yKHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnNl
dFN0cm9rZVN0eWxlKERhc2hlZFN0cm9rZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwx
OSArMjg4LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVXaW46OnN1cHBvcnRzSG92ZXIoY29uc3QKIENv
bG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgQ09MT1JSRUYg
Y29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdITElHSFQpOwotICAgIHJldHVybiBDb2xvcihH
ZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKKyAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xv
ciksIEdldEJWYWx1ZShjb2xvcikpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxhdGZv
cm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBjb2xvciBtYXRjaGVzIEZpcmVmb3guCi0g
ICAgcmV0dXJuIENvbG9yKDE3NiwgMTc2LCAxNzYpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IoMTc2LCAxNzYsIDE3Nik7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9u
cz4pIGNvbnN0CiB7CiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihDT0xPUl9ISUdI
TElHSFRURVhUKTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVl
KGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihH
ZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKIH0K
IAogQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CkBA
IC0xMDA5LDcgKzEwMDksNyBAQCBDb2xvciBSZW5kZXJUaGVtZVdpbjo6c3lzdGVtQ29sb3IoQ1NT
VmFsCiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCwg
b3B0aW9ucyk7CiAKICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKHN5c0NvbG9ySW5k
ZXgpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3Ip
LCBHZXRCVmFsdWUoY29sb3IpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdldFJWYWx1
ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQogCiAjaWYg
RU5BQkxFKFZJREVPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBwYWludEZsb3coY29uc3QgUmVuZGVy
QmxvY2tGbG93JiBmbAogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGRlYnVnU2hh
ZG93ID0gbnVsbHB0cjsKICAgICBpZiAoZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVMYXlvdXRE
ZWJ1Z0JvcmRlcnNFbmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtlVW5pcXVl
PFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpOb3JtYWws
IHRydWUsIENvbG9yKDAsIDI1NSwgMCwgMjAwKSk7CisgICAgICAgIGRlYnVnU2hhZG93ID0gbWFr
ZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6
Tm9ybWFsLCB0cnVlLCBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwLCAyMDApKTsKICAgICAgICAg
dGV4dFBhaW50ZXIuc2V0U2hhZG93KGRlYnVnU2hhZG93LmdldCgpKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
QmxvY2suY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzEx
OSw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6OnBhaW50KFBhaW50SW5mbyYKIAogICAgIGlu
Zm8uY29udGV4dCgpLnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsKICAgICBpbmZvLmNvbnRleHQo
KS5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgaW5mby5jb250ZXh0KCkuc2V0U3Ry
b2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tl
Q29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOwogCiAgICAgaW5mby5jb250ZXh0KCku
ZHJhd0xpbmUoYWRqdXN0ZWRQYWludE9mZnNldCwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNl
dC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSkpOwogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNl
dC55KCkpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0
SGVpZ2h0KCkpKTsKQEAgLTEyOCwxMyArMTI4LDEzIEBAIHZvaWQgUmVuZGVyTWF0aE1MQmxvY2s6
OnBhaW50KFBhaW50SW5mbyYKIAogICAgIGludCB0b3BTdGFydCA9IHBhZGRpbmdUb3AoKTsKIAot
ICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCkpOworICAg
IGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDAp
KTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVzdGVkUGFpbnRP
ZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSwgSW50UG9pbnQo
YWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1
c3RlZFBhaW50T2Zmc2V0LnkoKSArIHRvcFN0YXJ0KSk7CiAKICAgICBpbnQgYmFzZWxpbmUgPSBy
b3VuZFRvSW50KGJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBIb3Jp
em9udGFsTGluZSkpOwogCi0gICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3Io
MjU1LCAwLCAwKSk7CisgICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMCwgMCkpOwogCiAgICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9p
bnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFz
ZWxpbmUpLCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9m
ZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgYmFzZWxpbmUpKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNiw3ICsyMDI2LDcgQEAgQ29sb3IgUmVu
ZGVyU3R5bGU6OmNvbG9yUmVzb2x2aW5nQ3VycmVudAogICAgIGlmIChpc0N1cnJlbnRDb2xvcihy
ZXN1bHQpKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyU3R5bGUgPSBjb21wdXRlQm9yZGVyU3R5bGUo
KTsKICAgICAgICAgaWYgKCF2aXNpdGVkTGluayAmJiAoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5
bGU6Okluc2V0IHx8IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpPdXRzZXQgfHwgYm9yZGVy
U3R5bGUgPT0gQm9yZGVyU3R5bGU6OlJpZGdlIHx8IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxl
OjpHcm9vdmUpKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKDIzOCwgMjM4LCAyMzgpOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigyMzgsIDIzOCwgMjM4KTsKIAogICAgICAg
ICByZXR1cm4gdmlzaXRlZExpbmsgPyB2aXNpdGVkTGlua0NvbG9yKCkgOiBjb2xvcigpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxOSw3ICsxMzE5LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IENvbG9yJiB2aXNpdGVkTGlua1N0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9yYXJlSW5oZXJpdGVkRGF0YS0+dmlzaXRlZExpbmtTdHJva2VDb2xvcjsgfQogICAgIHZvaWQg
c2V0SGFzRXhwbGljaXRseVNldFN0cm9rZUNvbG9yKGJvb2wgdikgeyBTRVRfVkFSKG1fcmFyZUlu
aGVyaXRlZERhdGEsIGhhc1NldFN0cm9rZUNvbG9yLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odikp
OyB9CiAgICAgYm9vbCBoYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVy
biBtX3JhcmVJbmhlcml0ZWREYXRhLT5oYXNTZXRTdHJva2VDb2xvcjsgfTsKLSAgICBzdGF0aWMg
Q29sb3IgaW5pdGlhbFN0cm9rZUNvbG9yKCkgeyByZXR1cm4gQ29sb3IoQ29sb3I6OnRyYW5zcGFy
ZW50KTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJldHVybiBD
b2xvcjo6dHJhbnNwYXJlbnQ7IH0KICAgICBDb2xvciBjb21wdXRlZFN0cm9rZUNvbG9yKCkgY29u
c3Q7CiAKICAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0KCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
SW5oZXJpdGVkRGF0YS0+bWl0ZXJMaW1pdDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MywxMCArNzMsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJpbmcgaW5pdGlh
bFN0cm9rZVBhaW50VXJpKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBzdGF0aWMgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBpbml0aWFsU3Ryb2tlRGFzaEFycmF5KCkgeyByZXR1cm4geyB9OyB9
CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxTdG9wT3BhY2l0eSgpIHsgcmV0dXJuIDE7IH0KLSAg
ICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0b3BDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAp
OyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxTdG9wQ29sb3IoKSB7IHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMCk7IH0KICAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbEZsb29kT3BhY2l0
eSgpIHsgcmV0dXJuIDE7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbEZsb29kQ29sb3IoKSB7
IHJldHVybiBDb2xvcigwLCAwLCAwKTsgfQotICAgIHN0YXRpYyBDb2xvciBpbml0aWFsTGlnaHRp
bmdDb2xvcigpIHsgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CisgICAgc3RhdGljIENv
bG9yIGluaXRpYWxGbG9vZENvbG9yKCkgeyByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAp
OyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxMaWdodGluZ0NvbG9yKCkgeyByZXR1cm4gbWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpOyB9CiAgICAgc3RhdGljIFNoYWRvd0RhdGEqIGlu
aXRpYWxTaGFkb3coKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgc3RhdGljIFN0cmluZyBpbml0
aWFsTWFza2VyUmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHN0YXRpYyBTdHJp
bmcgaW5pdGlhbE1hcmtlclN0YXJ0UmVzb3VyY2UoKSB7IHJldHVybiBTdHJpbmcoKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04OCw3ICs4OCw3IEBAIGJvb2wgU1ZHU3RvcEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoY28K
IENvbG9yIFNWR1N0b3BFbGVtZW50OjpzdG9wQ29sb3JJbmNsdWRpbmdPcGFjaXR5KCkgY29uc3QK
IHsKICAgICBpZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBDb2xvcihDb2xvcjo6dHJh
bnNwYXJlbnQsIHRydWUpOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCiAg
ICAgYXV0byYgc3R5bGUgPSByZW5kZXJlcigpLT5zdHlsZSgpOwogICAgIGF1dG8mIHN2Z1N0eWxl
ID0gc3R5bGUuc3ZnU3R5bGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVz
L1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVu
Y3Rpb25JbXBsLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9wcm9w
ZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZsb2F0IGJsdWUgPSBCYXNl
OjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50
KCksIHNpbXBsZVRvLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlVG9BdEVuZE9mRHVyYXRpb24uYmx1
ZUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5ibHVlQ29tcG9uZW50KCkpOwogICAgICAgICBm
bG9hdCBhbHBoYSA9IEJhc2U6OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVG
cm9tLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRvLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZVRv
QXRFbmRPZkR1cmF0aW9uLmFscGhhQ29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmFscGhhQ29t
cG9uZW50KCkpOwogICAgICAgICAKLSAgICAgICAgYW5pbWF0ZWQgPSB7IHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiksIHJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxw
aGEpIH07CisgICAgICAgIGFuaW1hdGVkID0gbWFrZVNpbXBsZUNvbG9yKHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwocmVkKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChncmVlbiksIHJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoYmx1ZSksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoYWxw
aGEpKTsKICAgICB9CiAKICAgICBPcHRpb25hbDxmbG9hdD4gY2FsY3VsYXRlRGlzdGFuY2UoU1ZH
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgZnJvbSwgY29uc3QgU3RyaW5nJiB0bykgY29uc3Qgb3Zl
cnJpZGUKQEAgLTEyMCwxMSArMTIwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGF1dG8gc2ltcGxl
VG8gPSBtX3RvLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CiAKICAgICAgICAgLy8gSWdub3Jl
cyBhbnkgYWxwaGEgYW5kIHNldHMgYWxwaGEgb24gcmVzdWx0IHRvIDEwMCUgb3BhcXVlLgotICAg
ICAgICBtX3RvID0geworICAgICAgICBtX3RvID0gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICAg
ICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5yZWRDb21wb25lbnQoKSArIHNp
bXBsZUZyb20ucmVkQ29tcG9uZW50KCkpLAogICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9y
Q2hhbm5lbChzaW1wbGVUby5ncmVlbkNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ncmVlbkNvbXBv
bmVudCgpKSwKICAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8u
Ymx1ZUNvbXBvbmVudCgpICsgc2ltcGxlRnJvbS5ibHVlQ29tcG9uZW50KCkpCi0gICAgICAgIH07
CisgICAgICAgICk7CiAgICAgfQogCiAgICAgc3RhdGljIENvbG9yIGNvbG9yRnJvbVN0cmluZyhT
VkdFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSwxMCArMTA1LDEwIEBAIHZvaWQgTW9ja1BhZ2VPdmVybGF5Q2xpZW50Ojpk
cmF3UmVjdChQYWcKICAgICBGbG9hdFJlY3QgaW5zZXRSZWN0ID0gb3ZlcmxheS5ib3VuZHMoKTsK
IAogICAgIGlmIChvdmVybGF5Lm92ZXJsYXlUeXBlKCkgPT0gUGFnZU92ZXJsYXk6Ok92ZXJsYXlU
eXBlOjpEb2N1bWVudCkgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAs
IDI1NSwgMCkpOworICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xv
cigwLCAyNTUsIDApKTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTUwKTsKICAgICB9IGVs
c2UgewotICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSkpOwor
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUp
KTsKICAgICAgICAgaW5zZXRSZWN0LmluZmxhdGUoLTIwKTsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zlcmxh
eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2NvY29hL1dlYlZpZXdW
aXN1YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zlcmxh
eS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhXZWJWaWV3OihQbGF0Zm9yCiAgICAgX2xheWVyID0gYWRvcHROUyhbW0NBVGlsZWRMYXll
ciBhbGxvY10gaW5pdF0pOwogICAgIFtfbGF5ZXIgc2V0TmFtZTpAIldlYlZpZXdWaXN1YWxJZGVu
dGlmaWNhdGlvbk92ZXJsYXkiXTsKICAgICBbX2xheWVyIHNldEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgW192aWV3IGJvdW5kc10uc2l6ZS53aWR0aCwgW192aWV3IGJvdW5kc10uc2l6ZS5oZWlnaHQp
XTsKLSAgICBXZWJDb3JlOjpDb2xvciB2aWV3Q29sb3IgPSBpc0RlcHJlY2F0ZWQgPyBXZWJDb3Jl
OjpDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDI1NSwgMzIpOwor
ICAgIFdlYkNvcmU6OkNvbG9yIHZpZXdDb2xvciA9IGlzRGVwcmVjYXRlZCA/IFdlYkNvcmU6Om1h
a2VTaW1wbGVDb2xvcigyNTUsIDAsIDAsIDMyKSA6IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigw
LCAwLCAyNTUsIDMyKTsKICAgICBbX2xheWVyIHNldEJhY2tncm91bmRDb2xvcjpjYWNoZWRDR0Nv
bG9yKHZpZXdDb2xvcildOwogICAgIFtfbGF5ZXIgc2V0WlBvc2l0aW9uOjk5OV07CiAgICAgW19s
YXllciBzZXREZWxlZ2F0ZTpzZWxmXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBF
eHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWVyaWMg
dmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAgICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xv
cik6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06
CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3RhcEhpZ2hsaWdodENvbG9yRm9yRmFzdENsaWNr
Ol0pOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBhaW50
U25hcHNob3RBdFNpemUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENv
bnRyb2xsZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OkZpbmRJbmRpY2F0b3JPdmVybGF5Q2xp
ZW50SU9TOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OmhpZ2hsaWdodENvbG9yKTogRGVs
ZXRlZC4KKwogMjAyMC0wNS0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIERlcHJlY2F0ZSBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0JKHJldmlzaW9uIDI2MjM1MikK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tp
bmdTdG9yZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzE5LDcgKzMxOSw3IEBAIHZvaWQgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OmRyYXdJbkNvbnQKIAogI2lmbmRlZiBOREVCVUcKICAgICBpZiAo
bV9pc09wYXF1ZSkKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChzY2FsZWRMYXllckJvdW5kcywg
V2ViQ29yZTo6Q29sb3IoMjU1LCA0NywgMTQ2KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qo
c2NhbGVkTGF5ZXJCb3VuZHMsIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigyNTUsIDQ3LCAxNDYp
KTsKICNlbmRpZgogCiAgICAgY29udGV4dC5zY2FsZShtX3NjYWxlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAy
NjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9UWVBFKFdl
YktpdENvbG9yLCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENvbG9yVG9X
ZWJDb3JlQ29sb3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJDb3JlOjpD
b2xvcihzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0Pihj
b2xvci0+Z3JlZW4pLAorICAgIHJldHVybiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLT5ncmVlbiksCiAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+Ymx1ZSksIHN0
YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpKTsKIH0KIApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzI4LDcgKzQzMjgsNyBA
QCAtICh2b2lkKV9iZWNvbWVGaXJzdFJlc3BvbmRlcldpdGhTZWxlY3RpCiAtIChXZWJDb3JlOjpD
b2xvcilfdGFwSGlnaGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6KEJPT0wpZm9yRmFzdENsaWNrCiB7
CiAgICAgQVNTRVJUKF9zaG93RGVidWdUYXBIaWdobGlnaHRzRm9yRmFzdENsaWNraW5nKTsKLSAg
ICByZXR1cm4gZm9yRmFzdENsaWNrID8gV2ViQ29yZTo6Q29sb3IoMCwgMjI1LCAwLCAxMjcpIDog
V2ViQ29yZTo6Q29sb3IoMjI1LCAwLCAwLCAxMjcpOworICAgIHJldHVybiBmb3JGYXN0Q2xpY2sg
PyBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjI1LCAwLCAxMjcpIDogV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yKDIyNSwgMCwgMCwgMTI3KTsKIH0KIAogLSAodm9pZClfc2V0RG91YmxlVGFw
R2VzdHVyZXNFbmFibGVkOihCT09MKWVuYWJsZWQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHJl
dmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDcgKzE3Nyw3IEBAIHZv
aWQgV2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KGMKICAgICBwYWludExheWVyLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CiAgICAgcGFpbnRMYXllci0+c2V0UG9zaXRp
b24ocmVjdC5sb2NhdGlvbigpKTsKICAgICBwYWludExheWVyLT5zZXRTaXplKHJlY3Quc2l6ZSgp
KTsKLSAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3IoMS4wZiwgMC4wZiwg
MC4wZiwgMC4yZikpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKIAogICAgIEtleWZy
YW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwogICAg
IGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwg
MSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDks
OCArNTA5LDggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYQogewog
ICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDE7CiAKLSAgICBDb2xvciBvdmVybGF5QmFja2dy
b3VuZENvbG9yKDAuMWYsIDAuMWYsIDAuMWYsIDAuMjVmKTsKLSAgICBDb2xvciBzaGFkb3dDb2xv
cigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBhdXRvIG92ZXJsYXlCYWNrZ3JvdW5kQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMWYsIDAuMWYsIDAuMWYsIDAuMjVmKTsK
KyAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAw
LjBmLCAwLjBmLCAwLjVmKTsKIAogICAgIEludFJlY3QgYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3Qg
PSBkaXJ0eVJlY3Q7CiAgICAgYm9yZGVySW5mbGF0ZWREaXJ0eVJlY3QuaW5mbGF0ZShib3JkZXJX
aWR0aCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDIsNyArMjQwMiw3IEBAIHZvaWQg
V2ViUGFnZTo6cGFpbnRTbmFwc2hvdEF0U2l6ZShjb25zdCAKIAogICAgIGlmIChvcHRpb25zICYg
U25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25SZWN0YW5nbGUpIHsKICAgICAgICAgRmxvYXRS
ZWN0IHNlbGVjdGlvblJlY3RhbmdsZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbkJvdW5k
cygpOwotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMHhGRiwg
MCwgMCkpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDB4RkYsIDAsIDApKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnN0cm9rZVJlY3Qo
c2VsZWN0aW9uUmVjdGFuZ2xlLCAxKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1t
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvRmluZENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTUzLDEwICs1Myw3IEBA
IGNvbnN0IGludCB0b3RhbFZlcnRpY2FsTWFyZ2luID0gMTsKIAogY29uc3RleHByIE9wdGlvblNl
dDxUZXh0SW5kaWNhdG9yT3B0aW9uPiBmaW5kVGV4dEluZGljYXRvck9wdGlvbnMgeyBUZXh0SW5k
aWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24sIFRleHRJ
bmRpY2F0b3JPcHRpb246OkRvTm90Q2xpcFRvVmlzaWJsZVJlY3QgfTsKIAotc3RhdGljIENvbG9y
IGhpZ2hsaWdodENvbG9yKCkKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAyMjgsIDU2LCAyNTUp
OwotfQorY29uc3RleHByIGF1dG8gaGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1
LCAyMjgsIDU2LCAyNTUpOwogCiB2b2lkIEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpk
cmF3UmVjdChQYWdlT3ZlcmxheSYgb3ZlcmxheSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CkBAIC03OSw3ICs3Niw3IEBAIHZvaWQgRmluZElu
ZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXcKICAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0
UmVjdHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzID0gbV90ZXh0SW5kaWNhdG9yLT50ZXh0UmVj
dHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzKCk7CiAgICAgVmVjdG9yPFBhdGg+IHBhdGhzID0g
UGF0aFV0aWxpdGllczo6cGF0aHNXaXRoU2hyaW5rV3JhcHBlZFJlY3RzKHRleHRSZWN0c0luQm91
bmRpbmdSZWN0Q29vcmRpbmF0ZXMsIGNvcm5lclJhZGl1cyk7CiAKLSAgICBjb250ZXh0LnNldEZp
bGxDb2xvcihoaWdobGlnaHRDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihoaWdo
bGlnaHRDb2xvcik7CiAgICAgZm9yIChjb25zdCBhdXRvJiBwYXRoIDogcGF0aHMpCiAgICAgICAg
IGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1NCkKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIwLTA1LTMwICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFj
ZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVj
aWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RX
ZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6bWFrZUNvbG9yKToKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BERlNuYXBzaG90Lm1tOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9j
b2NvYS9UZXN0UERGRG9jdW1lbnQubW06CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0UERG
UGFnZTo6Y29sb3JBdFBvaW50IGNvbnN0KToKKwogMjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdl
aW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IEFkZGl0aW9uYWwgY29s
b3IgY2xlYW51cHMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyAr
NjcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9CbGFjaykKIAogVEVTVChDb2xvciwgUkdCVG9I
U0xfUmVkKQogewotICAgIENvbG9yIGNvbG9yKDI1NSwgMCwgMCk7CisgICAgQ29sb3IgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKIAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlv
biwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpKTsKIApAQCAtODMsNyArODMsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAK
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQogewotICAgIENvbG9yIGNvbG9yKDAsIDI1NSwg
MCk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKTsKIAogICAg
IGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29s
b3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIApAQCAtOTksNyArOTksNyBAQCBURVNUKENv
bG9yLCBSR0JUb0hTTF9HcmVlbikKIAogVEVTVChDb2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKLSAg
ICBDb2xvciBjb2xvcigwLCAwLCAyNTUpOworICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDAsIDAsIDI1NSk7CiAKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywg
YWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKQEAg
LTE3MSw3ICsxNzEsNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1RfRkFMU0Uo
b3RoZXJJbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZh
bGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAgIENvbG9yIHZhbGlkQ29sb3IoMjU1LCAwLCAw
KTsKKyAgICBDb2xvciB2YWxpZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAg
ICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2
YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKQEAgLTE3OSw3ICsxNzksNyBAQCBURVNUKENvbG9y
LCBWYWxpZGl0eSkKICAgICBFWFBFQ1RfVFJVRShvdGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICB2
YWxpZENvbG9yID0gQ29sb3IoMSwgMiwgMywgNCk7CisgICAgdmFsaWRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxLCAyLCAzLCA0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQo
KSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICBhdXRv
IHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9yLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRl
c3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
RXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBURVNUKEV4
dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5k
ZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFs
cGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25lbnRzKCk7CkBAIC01MSw3ICs1MSw3IEBAIFRF
U1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29w
eUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RS
VUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTY5LDcgKzY5LDcg
QEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVD
VF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAtODgsMjAg
Kzg4LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIFRFU1QoRXh0ZW5kZWRD
b2xvciwgRXF1YWxpdHkpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VF
eHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykg
fTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xv
ciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAg
ICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMyKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAg
IENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7Cisg
ICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVu
ZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2U6OlNSR0IpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMx
LmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX05FKGMxLCBjMik7CkBAIC0xMTEsOCAr
MTExLDggQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKICAgICBpbnQgZyA9IDEyODsK
ICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0gMTI3OwotICAgIENvbG9yIHJnYjEociAvIDI1
NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKTsK
LSAgICBDb2xvciByZ2IyKHIsIGcsIGIsIGEpOworICAgIENvbG9yIHJnYjEgeyBtYWtlRXh0ZW5k
ZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9y
U3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3IgcmdiMiA9IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBi
LCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdiMik7CiAgICAgRVhQRUNUX05FKHJnYjIsIHJn
YjEpOwogfQpAQCAtMTIwLDIwICsxMjAsMjAgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0
eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMx
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwog
Ci0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMyk7CisgICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShj
MS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2go
KSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMigx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgQ29sb3IgYzIg
eyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdC
KSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVY
UEVDVF9ORShjMS5oYXNoKCksIGMyLmhhc2goKSk7CkBAIC0xNDMsMTQgKzE0MywxNCBAQCBURVNU
KEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsK
ICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBi
IC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQik7Ci0gICAgQ29sb3IgcmdiMihy
LCBnLCBiLCBhKTsKKyAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4w
LCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9Owor
ICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQRUNU
X05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwg
TW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAg
LTE3MSw3ICsxNzEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAog
VEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBj
MiA9IFdURk1vdmUoYzEpOwpAQCAtMTkzLDcgKzE5Myw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwg
TW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3Vu
dGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcgQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciogYzEgPSBuZXcgQ29sb3IgeyBtYWtl
RXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
IH07CiAgICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciogYzIg
PSBuZXcgQ29sb3IoKmMxKTsKQEAgLTIxOSw3ICsyMTksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3Is
IEJhc2ljUmVmZXJlbmNlQ291bnRpCiAKIENvbG9yIG1ha2VDb2xvcigpCiB7Ci0gICAgQ29sb3Ig
YzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xv
ciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVY
UEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJlZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM4
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1cm5WYWx1ZXMpCiBURVNUKEV4dGVuZGVkQ29s
b3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAgICB7Ci0gICAgICAgIENvbG9yIHAzQ29sb3Io
MS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENv
bG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0
ZW5kZWQoKSk7CiAKICAgICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9IHAzQ29sb3IudG9TUkdC
QUNvbXBvbmVudHNMb3NzeSgpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgbGlu
ZWFyQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQik7Cisg
ICAgICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJHQikgfTsKICAgICAgICAgRVhQRUNUX1RSVUUo
bGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAgICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9
IGxpbmVhckNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKICAgICAgICAgRVhQRUNUX1RS
VUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNSR0JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0s
IDEuMGYpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERG
U25hcHNob3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRDb2NvYS9QREZTbmFwc2hvdC5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzUsOCArMzUsNiBAQAogI2ltcG9ydCA8V2ViS2l0L1dLUERGQ29uZmlndXJhdGlvbi5oPgog
I2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZhdGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6Q29s
b3I7Ci0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChQREZTbmFwc2hvdCwgRnVs
bENvbnRlbnQpCkBAIC02MCw3ICs1OCw3IEBAIFRFU1QoUERGU25hcHNob3QsIEZ1bGxDb250ZW50
KQogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+dGV4dCgpWzRdLCAnbycpOwogCiAgICAgICAgIC8v
IFRoZSBlbnRpcmUgcGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlk
ZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAw
LCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5j
b2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUs
IDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1dOwpAQCAtOTEs
NyArODksNyBAQCBURVNUKFBERlNuYXBzaG90LCBTdWJyZWdpb25zKQogICAgICAgICBFWFBFQ1Rf
RVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgMHUpOwogCiAgICAgICAgIC8vIFRoZSBlbnRpcmUg
cGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNr
LgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IENv
bG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQo
MjAwLCAxNTApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKIAogICAg
ICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1dOwpAQCAtMTExLDEwICsxMDksMTAg
QEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9ucykKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dS
ZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgMTIwMCwgMTIw
MCkpKTsKIAogICAgICAgICAvLyBBIHBpeGVsIHRoYXQgd2FzIGluIHRoZSB2aWV3IHNob3VsZCBi
ZSBncmVlbi4gUGljayBhIHBvaW50IGluIHRoZSBtaWRkbGUgdG8gY2hlY2suCi0gICAgICAgIEVY
UEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgyMDAsIDE1MCkgPT0gQ29sb3IoMCwgMjU1LCAw
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgyMDAsIDE1MCkgPT0g
V2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAgICAgIC8vIEEgcGl4
ZWwgdGhhdCB3YXMgb3V0c2lkZSB0aGUgdmlldyBzaG91bGQgYWxzbyBiZSBncmVlbiAod2UgZXh0
ZW5kIGJhY2tncm91bmQgY29sb3Igb3V0KS4gUGljayBhIHBvaW50IGluIHRoZSBtaWRkbGUgdG8g
Y2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg5MDAsIDcwMCkg
PT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQ
b2ludCg5MDAsIDcwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwog
CiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CiAgICAgfV07CkBAIC0xNDAsMjAgKzEz
OCwyMCBAQCBURVNUKFBERlNuYXBzaG90LCBPdmVyMjAwSW5jaGVzKQogICAgICAgICBhdXRvIHBh
Z2UgPSBkb2N1bWVudC0+cGFnZSgwKTsKICAgICAgICAgRVhQRUNUX05FKHBhZ2UsIG51bGxwdHIp
OwogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChwYWdlLT5ib3VuZHMoKSwg
Q0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdl
LT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBF
WFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3Rl
ckNvdW50KCksIDV1KTsKIAogICAgICAgICBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMSk7CiAgICAg
ICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0
RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkp
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBD
b2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50
KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAg
ICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAgICAgICBw
YWdlID0gZG9jdW1lbnQtPnBhZ2UoMik7CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRy
KTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCks
IENHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2Ut
PmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gV2ViQ29yZTo6bWFrZVNp
bXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVy
Q291bnQoKSwgMHUpOwogCiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRydWU7CkBAIC0xNzgs
NyArMTc2LDcgQEAgVEVTVChQREZTbmFwc2hvdCwgTGlua3MpCiAgICAgICAgIEVYUEVDVF9ORShw
YWdlLCBudWxscHRyKTsKIAogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChw
YWdlLT5ib3VuZHMoKSwgQ0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDI1NSwgMjU1
LCAyNTUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAw
KSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSkpOwogCiAgICAgICAg
IEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgpLCA4dSk7CiAgICAgICAgIEVYUEVDVF9F
UShwYWdlLT50ZXh0KClbMF0sICdDJyk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29h
L1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2Nv
Y29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4
ICsxNDQsOCBAQCBXZWJDb3JlOjpDb2xvciBUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50CiAgICAg
YXV0byBhID0gcGl4ZWxbaSArIDNdOwogCiAgICAgaWYgKCFhKQotICAgICAgICByZXR1cm4geyAw
LCAwLCAwLCAwIH07Ci0gICAgcmV0dXJuIHsgciAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICog
MjU1IC8gYSwgYSB9OworICAgICAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAs
IDAsIDAsIDApOworICAgIHJldHVybiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IociAqIDI1NSAv
IGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSk7CiB9CiAKIC8vIERvY3VtZW50cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400704</attachid>
            <date>2020-05-31 07:48:28 -0700</date>
            <delta_ts>2020-05-31 08:27:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200531074827.patch</filename>
            <type>text/plain</type>
            <size>122687</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9v
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1Zh
bHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEgY29uc3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2hhcGVI
aWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
b2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lv
bkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJs
YXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omxp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29s
b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmdldERl
YnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50c0xheWVyRGVi
dWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUxheWVyRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6
VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmds
ZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZvck1hcmtlckxp
bmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9QYWlu
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6Zm9yY2VkVGV4dENvbG9yIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpi
b3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsYXlzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0aXRsZVRleHRDb2xv
ckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudExheW91dDo6bGF5
T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50SWNvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91
bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJh
d1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zl
cmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjog
QWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidQogICAgIAog
ICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBnLCBiKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5p
c01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
LSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6
U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOworICAgIG1fdHJhbnNwYXJlbnRD
b2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0
YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5d29yZDsgKytpKQogICAgICAg
ICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRlbmRlZENvbG9yKGNvbG9yQ2hh
bm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5l
bHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBh
cnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5
Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBAQCBSZW5kZXJTdHlsZSBIVE1M
SW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1dG9GaWxsU3Ryb25nUGFzc3dv
cmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayk7CiAgICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwgUGVyY2VudCB9KTsKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBmLCAwLjBmLCAwLjZmIH0pOwor
ICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZs
b3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2UoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKSkpOwog
ICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVkIGZvciB0aGUgbWFzay4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGUoKS5zaGFkb3dDb2xvciku
c2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQo
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywxNyArMTMwNywxNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IoZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IociwgZywgYiwgYSkpOworICAgIHNl
dFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIHNldFNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2lt
cGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
MTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xvcikKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxw
aGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHls
ZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBtX3N0eWxl
KENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwgYywgbSwgeSwgaywgYSB9KQor
ICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zCiAKIGJvb2wgQ2FudmFzU3R5
bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHls
ZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9Owor
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgocXVhZCwgYm91
bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgoY2xpcFF1YWQsIGJvdW5k
cykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxp
Z2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5n
RnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNvbnN0IENvbG9yIHNoYXBlSGln
aGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29uc3RleHByIGF1dG8gc2hhcGVI
aWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIsIDEyNywgMjA0KTsKIAogICAg
IFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0
ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3NDCiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0
IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxQYXRoKG1hcmdp
blBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGluZykgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICAgICAgY29u
c3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAsIDE2OCk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwg
MjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihpbmRpY2F0aW5nQ29sb3Ip
OwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBwYWludFJlY3RzQ29sb3IoMS4w
ZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1dG8gcGFpbnRSZWN0c0NvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25zdCBUaW1lUmVjdFBhaXImIHBh
aXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEp
OwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC42Zik7
CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAw
LCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm91bmRzQ29sb3IpOwogCiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkgKzY3MCw5IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3Zl
cmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQogewotICAgIGNvbnN0IENvbG9y
IHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDAuNmYpOwotICAgIGNvbnN0
IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjJmKTsKLSAgICBjb25z
dCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25z
dGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0UnVsZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHByIGF1dG8gZGFya1J1bGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIEludFBvaW50IHNjcm9s
bE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0KTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwogCi0g
ICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IoMTI4LCAxMjgsIDEyOCk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0
bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CkBAIC0xMDY4
LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgK
ICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9KTsKICAgICB9OwogCi0gICAg
ZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1RleHQoZWxlbWVu
dElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVtZW50Q2xh
c3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNldWRv
VHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFtZSwgbWFrZVNpbXBs
ZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFsdWUsIG1ha2VT
aW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmll
d2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBl
LCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNr
KTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7CiAgICAgZHJhd1Rl
eHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgUGF0aCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAgICAgICB0ZXh0UG9zaXRpb25Y
ID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAgdGV4dFBvc2l0aW9uWSArPSBm
b250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBDb2xvcigxNzAsIDEzLCAx
NDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VTaW1wbGVDb2xvcigxNzAsIDEz
LCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAgICAgICAg
IGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamUKIAogICAgIGRvdWJsZSBh
ID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQotICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
ciwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgogICAg
IGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihj
b25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8aW50PihhICogMjU1
KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRvd0RhdGEqIExpbmVMYXlvdXQ6
OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQ
b2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAw
LCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1
Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7CiAgICAgcmV0dXJuICZkZWJ1
Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBi
ZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3Ig
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0LW1l
ZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpOworICAgIGNv
bnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhh
dmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41ZiwgMC4wZiwgMC4wZiwgMC40Zikp
CisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBD
b2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBh
Z2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCiAg
ICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0KIAotc3RhdGlj
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQor
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4mIHRvdWNoRXZlbnRSZWdp
b25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xNjMsOSAr
MTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdQogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQotICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5LmcsIGVudHJ5LmIsIDUwIH0p
OworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnku
ciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9KCkp
OwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2
ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewotICAgICAgICBDb2xvciBy
ZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8gcmVnaW9uQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRvIGl0ID0gdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lvbi5rZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgpKQogICAgICAgICAgICAgcmVn
aW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJuaW5nQ29sb3IpIHsKICAgICAg
ICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgZGVidWdSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwg
Q29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoZGVidWdSZWN0
LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMw
LDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAg
ICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICogKHBhZ2VTaXplSW5QaXhlbHMu
aGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIGJ5
IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUs
IDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGluZVkgPSBjdXJyZW50SGVpZ2h0
IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1
KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5lWSksIEludFBvaW50KHBhZ2VX
aWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3Rv
cmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC44ZikpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjlm
LCAwLjlmLCAwLjlmLCAxLmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjbGlwLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjlmLCAwLjlm
LCAwLjlmLCAxLmYpKTsKIAogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0geyAxMCwgMjAg
fTsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9ICAiQ1BVOiAiICsgY3B1VXNhZ2VTdHJpbmcoZ0Rh
dGEuY3B1KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5Ojpw
bGF0Zm9ybUluaXRpCiAgICAgbV9wYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG92
ZXJsYXkoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICptX292ZXJsYXlQYWludGVyKTsKICAgICBtX3BhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldFNpemUoeyBub3JtYWxXaWR0aCwg
bm9ybWFsSGVpZ2h0IH0pOwotICAgIG1fcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
OGYpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICBvdmVy
bGF5KCkubGF5ZXIoKS5hZGRDaGlsZCgqbV9wYWludExheWVyKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1
cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAg
ICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9y
KENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRl
c3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpCiAgICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1
czo6RGVjb2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21w
bGV0ZSkgfHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dy
b3VuZCkgewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVj
dGFuZ2xlIGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZp
bmlzaCBkZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsK
LSAgICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENv
bG9yKENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcElt
YWdlOjolcyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmlu
aXNoXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWRSZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBA
IENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7
CiB9CiAKLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQot
ICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVy
IGJlbG93LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0
IENvbG9yJiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEz
MywxMiBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiByICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBiICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwog
fQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xv
ciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2
KTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
YWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
QEAgLTI0NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAg
cmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhh
ID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3
MSw3ICsyNTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTI4NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0CiAKICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRp
YygpOworICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6
dG9TUkdCQUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OwogfQogCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNT
RVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRv
IGhhbmRsZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBv
bmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBv
bmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVu
dCgpLCBwcm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
CisgICAgKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29s
b3IgewogcHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAg
IENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihT
aW1wbGVDb2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwog
ICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNp
bXBsZUNvbG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRp
YygpOwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAg
ICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7Cisg
ICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNv
bG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1w
bGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5k
ZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRl
ZENvbG9yLmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQog
CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAt
MTE0LDEyICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUK
LSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBu
b3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291
cmNlLW92ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3Jz
RXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJp
dDsgfQorCisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNW
YWxpZCgpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNv
bG9yOyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIu
CiAgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4
ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1w
bGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVk
Q29sb3IqIGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMu
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0y
ODgsNiArMjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMK
ICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9
PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFj
ZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29s
b3IgeyBjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29s
b3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6
aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09
IDE7CiB9CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJu
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBA
QCBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBv
bmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bV9jb21wb25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBi
KQpAQCAtNzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVy
OjpnZXREZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0Jh
Y2tkcm9wKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8g
aGFzIGJhY2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGgg
PSAxMjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9
IENvbG9yKDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAg
ICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQg
bGF5ZXI6IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29sb3IgPSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisg
ICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1h
bCBsYXllcjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29u
dGVudHNMYXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsg
Ly8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVy
IHdpdGggY29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQor
ICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1h
c2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29u
dGFpbmVyOiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwg
MTkyKTsgLy8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRh
dGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBh
cyBhIGtleSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0
cyBhIHdhc2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlv
bi4KICAgICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkp
ICYmICFtX3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwor
ICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNp
YmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5n
KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNl
KSk7CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3Jk
ZXIoUGxhdGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGgg
PSA0Owogc3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hv
d2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwg
MTI4LCAxODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVy
RGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93
aW5nQm9yZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4g
c2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAg
LTM3NzQsNyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91
bmQKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9y
LCBmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVy
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2Fj
aGUgbGF5ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsK
ICAgICBjb25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tn
cm91bmRDb2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNj
ZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29u
c3QgQ29sb3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xv
cigwLmYsIDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIg
YXV0byBhY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihT
dHJpbmc6Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
Q292ZXJhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3Ii
KTsKICAgICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldp
ZHRoKDIpOwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBt
X3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGlj
YXRvckxheWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0
Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMCwgMTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
Ci0gICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxh
eWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwg
NTApKTsKIAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGls
ZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29s
b3I7CiAgICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2Fz
ZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9y
SW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIw
MCwgODAsIDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJv
bm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJl
Y3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJ
bmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1
LCAyNTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGll
bnRDYWlyby5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgc3RhdGljIEdyYWRpZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDbwogICAg
IGZsb2F0IGIgPSBiMSArIChiMiAtIGIxKSAqIDAuNWY7CiAgICAgZmxvYXQgYSA9IGExICsgKGEy
IC0gYTEpICogMC41ZjsKIAotICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwg
Q29sb3IociwgZywgYiwgYSkpOworICAgIHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNl
dCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7CiB9CiAKIHN0YXRpYyBj
YWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNvbmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwg
ZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQsNyArMTA0LDcgQEAgQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3IsIFNlbWFudGljVAog
ICAgIH0KIAogICAgIHNldFNpbXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKGNv
bG9yKSk7Ci0gICAgc2V0SXNTZW1hbnRpYygpOworICAgIHRhZ0FzU2VtYW50aWMoKTsKIH0KIAog
c3RhdGljIENHQ29sb3JSZWYgbGVha0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1h
Z2VDRy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5
IEBAIENvbG9yIG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGMKICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwg
aW1hZ2UuZ2V0KCkpOwogCiAgICAgaWYgKCFwaXhlbFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9y
KDAsIDAsIDAsIDApOworICAgICAgICByZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OwogCi0gICAg
cmV0dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8g
cGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICog
MjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKIH0K
IAogdm9pZCBkcmF3TmF0aXZlSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlLCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxNSArMjA1
LDE1IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGluZVN0eWwKICAgICBzd2l0
Y2ggKHN0eWxlKSB7CiAgICAgLy8gUmVkCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZTo6TW9kZTo6U3BlbGxpbmc6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtN
b2RlID8gQ29sb3IgeyAyNTUsIDE0MCwgMTQwLCAyMTcgfSA6IENvbG9yIHsgMjU1LCA1OSwgNDgs
IDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAxNDAsIDE0MCwgMjE3KSA6IG1ha2VTaW1wbGVDb2xvcigyNTUsIDU5
LCA0OCwgMTkxKSk7CiAgICAgLy8gQmx1ZQogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGU6Ok1vZGU6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKICAgICBjYXNlIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlOjpNb2RlOjpUZXh0Q2hlY2tpbmdEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOgogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkF1dG9jb3JyZWN0
aW9uUmVwbGFjZW1lbnQ6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtNb2Rl
ID8gQ29sb3IgeyA0MCwgMTQ1LCAyNTUsIDIxNyB9IDogQ29sb3IgeyAwLCAxMjIsIDI1NSwgMTkx
IH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1c2VEYXJrTW9kZSA/IG1ha2VTaW1w
bGVDb2xvcig0MCwgMTQ1LCAyNTUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMCwgMTIyLCAyNTUs
IDE5MSkpOwogICAgIC8vIEdyZWVuCiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6
TW9kZTo6R3JhbW1hcjoKLSAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUg
PyBDb2xvciB7IDUwLCAyMTUsIDc1LCAyMTcgfSA6IENvbG9yIHsgMjUsIDE3NSwgNTAsIDE5MSB9
KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBtYWtlU2ltcGxl
Q29sb3IoNTAsIDIxNSwgNzUsIDIxNykgOiBtYWtlU2ltcGxlQ29sb3IoMjUsIDE3NSwgNTAsIDE5
MSkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJPcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsMTIgKzMwNywxMiBAQCBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiBEcm9wU2hhZG93RmlsdGVyCiAgICAgICAgIHJldHVybiBEcm9w
U2hhZG93RmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoCiAgICAgICAgICAgICBXZWJDb3JlOjpibGVu
ZChtX2xvY2F0aW9uLCBJbnRQb2ludCgpLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBXZWJDb3Jl
OjpibGVuZChtX3N0ZERldmlhdGlvbiwgMCwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQobV9jb2xvciwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSwgcHJvZ3Jlc3MpKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yOjp0cmFuc3BhcmVudCwg
cHJvZ3Jlc3MpKTsKIAogICAgIGNvbnN0IERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb24qIGZyb21P
cGVyYXRpb24gPSBkb3duY2FzdDxEcm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uPihmcm9tKTsKICAg
ICBJbnRQb2ludCBmcm9tTG9jYXRpb24gPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+
bG9jYXRpb24oKSA6IEludFBvaW50KCk7CiAgICAgaW50IGZyb21TdGREZXZpYXRpb24gPSBmcm9t
T3BlcmF0aW9uID8gZnJvbU9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCkgOiAwOwotICAgIENvbG9y
IGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigpIDogQ29s
b3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0
aW9uID8gZnJvbU9wZXJhdGlvbi0+Y29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKICAgICAK
ICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tTG9jYXRpb24sIG1fbG9jYXRpb24sIHByb2dyZXNzKSwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBAQCBDb2xvciBjb2xv
ckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewogICAgIC8vIEZJWE1FOiBFeHRlbmRlZENv
bG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KIAotICAgIHJldHVybiBDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tTlNDb2xvcihjb2xvcik7CiB9CiAKIENvbG9yIHNlbWFudGljQ29sb3JGcm9tTlND
b2xvcihOU0NvbG9yICpjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OnAKICAgICAgICAgQVNTRVJUKCFtX3RleHR1cmUp
OwogICAgICAgICBpZiAobV9ob2xlUHVuY2hDbGllbnQpCiAgICAgICAgICAgICBtX2hvbGVQdW5j
aENsaWVudC0+c2V0VmlkZW9SZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChtb2RlbFZpZXdNYXRy
aXgubWFwUmVjdCh0YXJnZXRSZWN0KSkpOwotICAgICAgICB0ZXhtYXBHTC5kcmF3U29saWRDb2xv
cih0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIENvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7
CisgICAgICAgIHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01h
dHJpeCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApLCBmYWxzZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFn
ZUlPUy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0RyYWdJbWFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBAIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW0KICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQu
dHJhbnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4
dC5zY2FsZSh7IDEsIC0xIH0pOwotICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9h
dFJvdW5kZWRSZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoNCkpLCB7IDI1
NSwgMjU1LCAyNTUgfSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSg0KSksIG1ha2VTaW1w
bGVDb2xvcigyNTUsIDI1NSwgMjU1KSk7CiAgICAgICAgIHRpdGxlRm9udENhc2NhZGUuZ2V0KCku
ZHJhd1RleHQoY29udGV4dCwgVGV4dFJ1bih0cnVuY2F0ZWRUb3BTdHJpbmcpLCBGbG9hdFBvaW50
KGRyYWdJbWFnZVBhZGRpbmcsIDE4ICsgZHJhZ0ltYWdlUGFkZGluZykpOwogICAgICAgICBpZiAo
IXRydW5jYXRlZEJvdHRvbVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICB1cmxGb250Q2Fz
Y2FkZS5nZXQoKS5kcmF3VGV4dChjb250ZXh0LCBUZXh0UnVuKHRydW5jYXRlZEJvdHRvbVN0cmlu
ZyksIEZsb2F0UG9pbnQoZHJhZ0ltYWdlUGFkZGluZywgNDAgKyBkcmFnSW1hZ2VQYWRkaW5nKSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUu
bW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdh
Y3lUaWxlQ2FjaGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw5ICs0NjIsOSBAQCB1bnNpZ25l
ZCBMZWdhY3lUaWxlQ2FjaGU6OnRpbGVDYXBhY2l0eUZvCiBDb2xvciBMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoTGVnYWN5VGlsZUdyaWQqIGdyaWQpIGNvbnN0CiB7CiAg
ICAgaWYgKGdyaWQgPT0gbV96b29tZWRPdXRUaWxlR3JpZC5nZXQoKSkKLSAgICAgICAgcmV0dXJu
IENvbG9yKDAuMmYsIDEuMGYsIDAuZiwgMC41Zik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKDAuMmYsIDEuMGYsIDAuZiwgMC41Zik7CiAKLSAgICByZXR1cm4gQ29s
b3IoMC4yZiwgMC45ZiwgMC5mLCAwLjVmKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRS
ZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dSZWN0JiBkaXJ0eVJlY3QsIENHU1JlZ2lvbk9iaiBkaXJ0
eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50c1NjYWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksMTQgKzE4OSwxNCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhF
bGVtCiAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY29udGV4dFJlZik7CiAgICAgLy8gT24g
TWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAwLjh9LCBob3dldmVyIHdlIGNhbid0IGNvbnRy
b2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFnZXMgb24gd2luLCBzbyB3ZSB1c2UgMQotICAg
IHN0YXRpYyBjb25zdCBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoMTQwLCAxNDAsIDE0MCk7CisgICAg
Y29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDE0MCwgMTQw
LCAxNDApOwogICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHJhZGlpKERyYWdMYWJlbFJhZGl1cywg
RHJhZ0xhYmVsUmFkaXVzKTsKICAgICBJbnRSZWN0IHJlY3QoMCwgMCwgaW1hZ2VTaXplLndpZHRo
KCksIGltYWdlU2l6ZS5oZWlnaHQoKSk7CiAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxv
YXRSb3VuZGVkUmVjdChyZWN0LCByYWRpaSwgcmFkaWksIHJhZGlpLCByYWRpaSksIGJhY2tncm91
bmRDb2xvcik7CiAgCiAgICAgLy8gRHJhdyB0aGUgdGV4dAotICAgIHN0YXRpYyBjb25zdCBDb2xv
ciB0b3BDb2xvcigwLCAwLCAwLCAyNTUpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNzUKLSAgICBz
dGF0aWMgY29uc3QgQ29sb3IgYm90dG9tQ29sb3IoMjU1LCAyNTUsIDI1NSwgMTI3KTsgLy8gb3Jp
Z2luYWwgYWxwaGEgPSAwLjUKKyAgICBjb25zdGV4cHIgYXV0byB0b3BDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAwLCAyNTUpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNzUKKyAgICBjb25z
dGV4cHIgYXV0byBib3R0b21Db2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1LCAx
MjcpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNQogICAgIGlmIChkcmF3VVJMU3RyaW5nKSB7CiAg
ICAgICAgIGlmIChjbGlwVVJMU3RyaW5nKQogICAgICAgICAgICAgdXJsU3RyaW5nID0gU3RyaW5n
VHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKHVybFN0cmluZywgaW1hZ2VTaXplLndpZHRoKCkgLSAo
RHJhZ0xhYmVsQm9yZGVyWCAqIDIuMGYpLCAqdXJsRm9udCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1BhaW50SW5mby5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgc3Ry
dWN0IFBhaW50SW5mbyB7CiAgICAgYm9vbCBmb3JjZVRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IGZvcmNlQmxhY2tUZXh0KCkgfHwgZm9yY2VXaGl0ZVRleHQoKTsgfQogICAgIGJvb2wgZm9yY2VC
bGFja1RleHQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVo
YXZpb3I6OkZvcmNlQmxhY2tUZXh0KTsgfQogICAgIGJvb2wgZm9yY2VXaGl0ZVRleHQoKSBjb25z
dCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkZvcmNlV2hp
dGVUZXh0KTsgfQotICAgIENvbG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIChm
b3JjZUJsYWNrVGV4dCgpKSA/IENvbG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQorICAgIENv
bG9yIGZvcmNlZFRleHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGZvcmNlQmxhY2tUZXh0KCkgPyBD
b2xvcjo6YmxhY2sgOiBDb2xvcjo6d2hpdGU7IH0KIAogICAgIGJvb2wgc2tpcFJvb3RCYWNrZ3Jv
dW5kKCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9y
OjpTa2lwUm9vdEJhY2tncm91bmQpOyB9CiAgICAgYm9vbCBwYWludFJvb3RCYWNrZ3JvdW5kT25s
eSgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6
Um9vdEJhY2tncm91bmRPbmx5KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVtYmVkZGVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NCwyOSArNzQsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJy
b3dMZWZ0TQogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJyb3dQYWRkaW5nID0gNDsK
IHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyA9IDM7CiAK
LXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29s
b3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gcHJlc3NlZCgxMDUsIDEw
NSwgMTA1LCAyNDIpOwotICAgIHJldHVybiBwcmVzc2VkOwotfQotCi1zdGF0aWMgY29uc3QgQ29s
b3ImIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMTI1LCAxMjUsIDEyNSwgMjQyKTsKLSAgICByZXR1
cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Q29s
b3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjQwLCAy
NDAsIDI0MCwgMjU1KTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBD
b2xvciYgdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgyNTUsIDI1NSwgMjU1LCAyMTYpOwotICAgIHJldHVy
biBzdGFuZGFyZDsKLX0KK2NvbnN0ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0
UHJlc3NlZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEwNSwgMTA1LCAxMDUsIDI0Mik7Citjb25z
dGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDEyNSwgMTI1LCAxMjUsIDI0Mik7Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVudFRleHRD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNDAsIDI0MCwgMjQwLCAyNTUpOworY29uc3RleHByIGF1
dG8gdW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAyMTYpOwogCiBSZW5kZXJFbWJlZGRlZE9iamVjdDo6UmVuZGVyRW1iZWRkZWRPYmpl
Y3QoSFRNTEZyYW1lT3duZXJFbGVtZW50JiBlbGVtZW50LCBSZW5kZXJTdHlsZSYmIHN0eWxlKQog
ICAgIDogUmVuZGVyV2lkZ2V0KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQpAQCAtMzEyLDcgKzI5
Myw3IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBjb250ZXh0
LmNsaXAoY29udGVudFJlY3QpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5hdmFpbGFi
bGVQbHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFBy
ZXNzZWRDb2xvcigpIDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcigpKTsKKyAgICBj
b250ZXh0LnNldEZpbGxDb2xvcihtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2Vk
ID8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IgOiByZXBsYWNlbWVudFRl
eHRSb3VuZGVkUmVjdENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKGJhY2tncm91bmQpOwog
CiAgICAgUGF0aCBzdHJva2VQYXRoOwpAQCAtMzIwLDIxICszMDEsMjEgQEAgdm9pZCBSZW5kZXJF
bWJlZGRlZE9iamVjdDo6cGFpbnRSZXBsYWNlZAogICAgIHN0cm9rZVJlY3QuaW5mbGF0ZSgxKTsK
ICAgICBzdHJva2VQYXRoLmFkZFJvdW5kZWRSZWN0KHN0cm9rZVJlY3QsIEZsb2F0U2l6ZShyZXBs
YWNlbWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cyArIDEsIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRS
ZWN0UmFkaXVzICsgMSkpOwogCi0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcih1bmF2YWlsYWJs
ZVBsdWdpbkJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IodW5hdmFp
bGFibGVQbHVnaW5Cb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
Mik7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKHN0cm9rZVBhdGgpOwogCiAgICAgY29uc3QgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gZm9udC5mb250TWV0cmljcygpOwogICAgIGZsb2F0IGxh
YmVsWCA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueCgpICsgcmVwbGFj
ZW1lbnRUZXh0Um91bmRlZFJlY3RMZWZ0VGV4dE1hcmdpbik7CiAgICAgZmxvYXQgbGFiZWxZID0g
cm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3QubG9jYXRpb24oKS55KCkgKyAocmVwbGFjZW1lbnRU
ZXh0UmVjdC5zaXplKCkuaGVpZ2h0KCkgLSBmb250TWV0cmljcy5oZWlnaHQoKSkgLyAyICsgZm9u
dE1ldHJpY3MuYXNjZW50KCkgKyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFRvcFRleHRNYXJn
aW4pOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOwor
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAgICBjb250
ZXh0LmRyYXdCaWRpVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQobGFiZWxYLCBsYWJlbFkpKTsK
IAogICAgIGlmIChzaG91bGRVbmF2YWlsYWJsZVBsdWdpbk1lc3NhZ2VCZUJ1dHRvbihwYWdlKCks
IG1fcGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24pKSB7CiAgICAgICAgIGFycm93UmVjdC5pbmZs
YXRlKC1yZXBsYWNlbWVudEFycm93Q2lyY2xlUGFkZGluZyk7CiAKICAgICAgICAgY29udGV4dC5i
ZWdpblRyYW5zcGFyZW5jeUxheWVyKDEuMCk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KHJlcGxhY2VtZW50VGV4dENvbG9yKCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihy
ZXBsYWNlbWVudFRleHRDb2xvcik7CiAgICAgICAgIGNvbnRleHQuZmlsbEVsbGlwc2UoYXJyb3dS
ZWN0KTsKIAogICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvcjo6Q2xlYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRnJhbWVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwyMyArNjgsOSBAQCBS
ZW5kZXJGcmFtZVNldDo6R3JpZEF4aXM6OkdyaWRBeGlzKCkKIHsKIH0KIAotc3RhdGljIGNvbnN0
IENvbG9yJiBib3JkZXJTdGFydEVkZ2VDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENvbG9yPiBjb2xvcigxNzAsIDE3MCwgMTcwKTsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0K
LXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyRW5kRWRnZUNvbG9yKCkKLXsKLSAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yID0gQ29sb3I6OmJsYWNrOwotICAgIHJldHVybiBj
b2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJGaWxsQ29sb3IoKQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMjA4LCAyMDgsIDIwOCk7Ci0gICAg
cmV0dXJuIGNvbG9yOwotfQorY29uc3RleHByIGF1dG8gYm9yZGVyU3RhcnRFZGdlQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMTcwLCAxNzAsIDE3MCk7Citjb25zdGV4cHIgYXV0byBib3JkZXJFbmRF
ZGdlQ29sb3IgPSBDb2xvcjo6YmxhY2s7Citjb25zdGV4cHIgYXV0byBib3JkZXJGaWxsQ29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMjA4LCAyMDgsIDIwOCk7CiAKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6
OnBhaW50Q29sdW1uQm9yZGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiBib3JkZXJSZWN0KQogewpAQCAtOTUsMTMgKzgxLDEzIEBAIHZvaWQgUmVuZGVyRnJhbWVT
ZXQ6OnBhaW50Q29sdW1uQm9yZGVyKGMKICAgICAKICAgICAvLyBGaWxsIGZpcnN0LgogICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4
dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJDb2xvcigp
ID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJvcGVy
dHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCkpOworICAgIGNvbnRleHQuZmls
bFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0
eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcik7CiAgICAgCiAgICAgLy8gTm93IHN0cm9r
ZSB0aGUgZWRnZXMgYnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3Ro
IGVkZ2VzIHdpdGggYSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2lu
ZyB0aHJvdWdoLgogICAgIGlmIChib3JkZXJSZWN0LndpZHRoKCkgPj0gMykgewotICAgICAgICBj
b250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKDEs
IGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZp
bGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0
LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkpOworICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJbnRT
aXplKDEsIGhlaWdodCgpKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAgICAgY29udGV4
dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4WCgpIC0gMSwgYm9yZGVy
UmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAg
ICAgfQogfQogCkBAIC0xMTQsMTMgKzEwMCwxMyBAQCB2b2lkIFJlbmRlckZyYW1lU2V0OjpwYWlu
dFJvd0JvcmRlcihjb25zCiAgICAgCiAgICAgLy8gRmlsbCBmaXJzdC4KICAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQuZmlsbFJl
Y3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxl
KCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVyKENTU1Byb3BlcnR5Qm9yZGVy
TGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxSZWN0KGJv
cmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRD
b2xvcikgOiBib3JkZXJGaWxsQ29sb3IpOwogCiAgICAgLy8gTm93IHN0cm9rZSB0aGUgZWRnZXMg
YnV0IG9ubHkgaWYgd2UgaGF2ZSBlbm91Z2ggcm9vbSB0byBwYWludCBib3RoIGVkZ2VzIHdpdGgg
YSBsaXR0bGUKICAgICAvLyBiaXQgb2YgdGhlIGZpbGwgY29sb3Igc2hvd2luZyB0aHJvdWdoLgog
ICAgIGlmIChib3JkZXJSZWN0LmhlaWdodCgpID49IDMpIHsKLSAgICAgICAgY29udGV4dC5maWxs
UmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRpb24oKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSks
IGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJl
Y3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3QubWF4WSgpIC0gMSksIEludFNp
emUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQu
ZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUod2lkdGgoKSwg
MSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcik7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludChib3JkZXJSZWN0LngoKSwgYm9yZGVyUmVjdC5tYXhZKCkgLSAxKSwgSW50
U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xvcik7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMTgsNyArMjIxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIKICNlbmRpZgogCiAjaWZkZWYgUkVWRUFMX1RSQU5TUEFSRU5DWV9MQVlFUlMK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC41ZiwgMC4y
ZikpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuNWYsIDAuMmYpKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChw
aXhlbFNuYXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMjYyMzUy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMDEsNyArMzIwMSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludERlYnVnT3ZlcmwKICAgICAvLyBUaGUgaW50ZXJhY3RpdmUgcGFydC4KICAgICAvLyBQ
YWludCByZWN0cyBmb3IgdG91Y2ggYWN0aW9uLgogICAgIGlmICh2aXNpYmxlRGVidWdPdmVybGF5
UmVnaW9ucyAmIFRvdWNoQWN0aW9uUmVnaW9uKSB7Ci0gICAgICAgIENvbG9yIHJlZ2lvbkNvbG9y
KDAsIDAsIDI1NSwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byByZWdpb25Db2xvciA9IG1h
a2VTaW1wbGVDb2xvcigwLCAwLCAyNTUsIDUwKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IocmVnaW9uQ29sb3IpOwogICAgICAgICBmb3IgKGF1dG8gcmVjdCA6IGV2ZW50UmVnaW9uLnJl
Z2lvbigpLnJlY3RzKCkpCiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3QpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NzAsNyArNjcwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlTGlz
dEJveFNlbGVjdAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKICAg
ICAvLyBVc2UgYSBibHVlIGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRoZW1lIGRv
ZXNuJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPikgY29uc3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBSZW5kZXJU
aGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBjb2xvciBi
eSBkZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0aGluZy4K
ICAgICAvLyBUaGlzIGNvbG9yIG1hdGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9yLgotICAg
IHJldHVybiBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDE3NiwgMTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4dFNlYXJj
aEhpZ2hsaWdodENvCiAKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBDb2xvcjo6
eWVsbG93OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyArMTQ0OCw3
IEBAIHZvaWQgUmVuZGVyVGhlbWU6OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAgIGF1dG8g
bWFya2VyUmVjdCA9IEZsb2F0UmVjdCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAyNCwgcmVj
dC55KCkgKyA4LCAxNiwgMTYgfTsKICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0gRmxvYXRS
b3VuZGVkUmVjdCB7IG1hcmtlclJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgOCB9IH07
Ci0gICAgYXV0byBjb2xvciA9IENvbG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBjb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KHJvdW5kZWRNYXJrZXJSZWN0LCBjb2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyArMTQ1OSw3
IEBAIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAgICAvLyBU
aGlzIGNvbG9yIGlzIGV4cGVjdGVkIHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3BhcmVudCBv
dmVybGF5LAogICAgIC8vIG1ha2luZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRzIGFscGhh
IHZhbHVlIGluZGljYXRlcy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0
Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxh
dGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0
IHsgcmV0dXJuIENvbG9yKDAsIDAsIDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZv
Y3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1
cm4gQ29sb3I6OmJsYWNrOyB9CiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNSaW5nQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0
aCgpIHsgcmV0dXJuIDM7IH0KICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdPZmZz
ZXQoZmxvYXQgb3V0bGluZVdpZHRoKSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0bGluZVdp
ZHRoIC0gcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsNyArMTU1LDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVl
dCgpIGZpbmFsOwogI2VuZGlmCiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25z
dDsKICAgICBGbG9hdFJlY3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0
JiBib3gsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENvbG9yIHN5
c3RlbUNvbG9yKENTU1ZhbHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNywxMiArMzE3LDYgQEAgdm9pZCBS
ZW5kZXJUaGVtZUlPUzo6c2V0Q29udGVudFNpemVDYXRlZwogICAgIF9jb250ZW50U2l6ZUNhdGVn
b3J5KCkgPSBjb250ZW50U2l6ZUNhdGVnb3J5OwogfQogCi1jb25zdCBDb2xvciYgUmVuZGVyVGhl
bWVJT1M6OnNoYWRvd0NvbG9yKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Q29sb3I+IGNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuN2YpOwotICAgIHJldHVybiBjb2xvcjsK
LX0KLQogRmxvYXRSZWN0IFJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25z
dCBSZW5kZXJPYmplY3QmIGJveCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQogewogICAgIC8vIFRvIGZpeCBpbm5lciBib3JkZXIgYmxlZWRpbmcgaXNzdWVz
IDxyZGFyOi8vcHJvYmxlbS85ODEyNTA3Piwgd2UgY2xpcCB0byB0aGUgb3V0ZXIgYm9yZGVyIGFu
ZCBhc3NlcnQgdGhhdApAQCAtMzg3LDcgKzM4MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBh
aW50Q2hlY2tib3hEZWNvcmEKIAogICAgIGlmIChjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUpIHsK
ICAgICAgICAgYXV0byBib3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJl
Y3QpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIu
cGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpKSwgQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91
bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwg
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CiAKICAg
ICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29u
dGV4dCgpLCByZWN0KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQy
MywxMCArNDE3LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmEK
ICAgICAgICAgfQogCiAgICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihsaW5lV2lk
dGgsIDEpOwotICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2lu
dD4geyBXVEZNb3ZlKHNoYWRvdykgfSwga0NHTGluZUNhcFNxdWFyZSwgbGluZVdpZHRoLCBDb2xv
ciB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuN2YgfSk7CisgICAgICAgIGRyYXdKb2luZWRMaW5lcyhj
Z0NvbnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2Fw
U3F1YXJlLCBsaW5lV2lkdGgsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwg
MC4wZiwgMC43ZikpOwogCiAgICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6
Om1pbih3aWR0aCwgaGVpZ2h0KSAqIHRoaWNrbmVzc1JhdGlvLCAxKTsKLSAgICAgICAgZHJhd0pv
aW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBr
Q0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBDb2xvciB7IDEuMGYsIDEuMGYsIDEuMGYsIDI0MCAv
IDI1NS4wZiB9KTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENH
UG9pbnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBrQ0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDEuMGYsIDEuMGYsIDI0MCAvIDI1NS4wZikpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJv
eCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCk7CiAgICAgICAgIGF1dG8gd2lkdGggPSBjbGlw
LndpZHRoKCk7CkBAIC00ODQsNyArNDc4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRS
YWRpb0RlY29yYXRpbwogCiAgICAgaWYgKGlzQ2hlY2tlZChib3gpKSB7CiAgICAgICAgIGF1dG8g
Ym9yZGVyID0gYm94LnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJv
dW5kZWRSZWN0Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSks
IENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0Rm9yUGFp
bnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOwogCiAgICAgICAgIGF1dG8gY2xp
cCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCk7
CiAgICAgICAgIGRyYXdBeGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShD
b25jYXZlR3JhZGllbnQpLCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNs
aXAubWF4WSgpKSwgTGluZWFySW50ZXJwb2xhdGlvbik7CkBAIC00OTYsOCArNDkwLDkgQEAgYm9v
bCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpbwogCiAgICAgICAgIGNsaXAuaW5m
bGF0ZVgoLWNsaXAud2lkdGgoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKICAgICAgICAgY2xpcC5p
bmZsYXRlWSgtY2xpcC5oZWlnaHQoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKLQotICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwg
c2hhZG93Q29sb3IoKSk7CisgICAgICAgIAorICAgICAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dD
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAwLjdmICogMjU1KTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShjbGlwLCBDb2xvcjo6d2hpdGUsIHNo
YWRvd0NvbG9yKTsKIAogICAgICAgICBGbG9hdFNpemUgcmFkaXVzKGNsaXAud2lkdGgoKSAvIDIu
MGYsIGNsaXAuaGVpZ2h0KCkgLyAyLjBmKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5j
bGlwUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChjbGlwLCByYWRpdXMsIHJhZGl1cywgcmFk
aXVzLCByYWRpdXMpKTsKQEAgLTczMSw3ICs3MjYsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpw
YWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAgIEZsb2F0UmVjdCBlbGxpcHNlKGJ1dHRvbkNsaXAu
eCgpICsgKGJ1dHRvbkNsaXAud2lkdGgoKSAtIGNvdW50ICogKHNpemUgKyBwYWRkaW5nKSArIHBh
ZGRpbmcpIC8gMi4wLCBidXR0b25DbGlwLm1heFkoKSAtIDEwLjAsIHNpemUsIHNpemUpOwogCiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUs
IENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpKTsKICAgICAgICAgICAg
IGVsbGlwc2UubW92ZShzaXplICsgcGFkZGluZywgMCk7CiAgICAgICAgIH0KICAgICB9ICBlbHNl
IHsKQEAgLTc1MSw4ICs3NDYsOCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0
QnV0dG9uCiAgICAgICAgIH07CiAKICAgICAgICAgZmxvYXQgb3BhY2l0eSA9IGlzUmVhZE9ubHlD
b250cm9sKGJveCkgPyAwLjIgOiAwLjU7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0
U3Ryb2tlQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBv
cGFjaXR5KSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFr
ZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkpOwogICAgICAgICBwYWludEluZm8uY29u
dGV4dCgpLmRyYXdQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhzaGFkb3cpKTsKIAog
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7
CkBAIC04NDAsOSArODM1LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFj
ayhjbwogCiAgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICBpZiAocmVhZG9ubHkpCi0gICAgICAgICAg
ICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDE3OCwgMTc4LCAxNzgp
KTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNp
bXBsZUNvbG9yKDE3OCwgMTc4LCAxNzgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcig3NiwgNzYsIDc2KSk7CisgICAg
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xv
cig3NiwgNzYsIDc2KSk7CiAKICAgICAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IHJv
dW5kZWRSZWN0UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICAgICAg
Q0dQYXRoQWRkUm91bmRlZFJlY3Qocm91bmRlZFJlY3RQYXRoLmdldCgpLCAwLCB0cmFja0NsaXAs
IGNvcm5lcldpZHRoLCBjb3JuZXJIZWlnaHQpOwpAQCAtOTE5LDEzICs5MTQsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogCiAgICAgY29uc3QgZmxvYXQgdmVy
dGljYWxSZW5kZXJpbmdQb3NpdGlvbiA9IHJlY3QueSgpICsgdmVydGljYWxPZmZzZXQ7CiAgICAg
YXV0byBzdHJva2VHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRh
dGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFy
SGVpZ2h0IC0gMSkgfSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENv
bG9yKDB4OGQsIDB4OGQsIDB4OGQpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDUsIENvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRk
Q29sb3JTdG9wKDAuNTUsIENvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKLSAgICBzdHJva2VHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOworICAgIHN0
cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMHg4ZCwgMHg4
ZCwgMHg4ZCkpOworICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgbWFrZVNp
bXBsZUNvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDAuNTUsIG1ha2VTaW1wbGVDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CisgICAgc3Ry
b2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhk
LCAweDhkKSk7CiAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKHN0cm9rZUdy
YWRpZW50KSk7CiAKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDI1NSwgMjU1
KSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGgg
dHJhY2tQYXRoOwogICAgIEZsb2F0UmVjdCB0cmFja1JlY3QocmVjdC54KCkgKyAwLjI1LCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC4yNSwgcmVjdC53aWR0aCgpIC0gMC41LCBwcm9ncmVz
c0JhckhlaWdodCAtIDAuNSk7CkBAIC05MzksOCArOTM0LDggQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRQcm9ncmVzc0JhcihjbwogCiAgICAgZmxvYXQgdXBwZXJHcmFkaWVudEhlaWdodCA9
IHByb2dyZXNzQmFySGVpZ2h0IC8gMi47CiAgICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGll
bnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZl
cnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0
aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7Ci0g
ICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMzLCAxMzMsIDEzMywg
MTg4KSk7Ci0gICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMTgsIDE4
LCAxOCwgNTEpKTsKKyAgICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2lt
cGxlQ29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29s
b3JTdG9wKDEuMCwgbWFrZVNpbXBsZUNvbG9yKDE4LCAxOCwgMTgsIDUxKSk7CiAgICAgY29udGV4
dC5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZSh1cHBlckdyYWRpZW50KSk7CiAKICAgICBjb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiwg
cmVjdC53aWR0aCgpLCB1cHBlckdyYWRpZW50SGVpZ2h0KSk7CkBAIC05NTEsMTggKzk0NiwxOCBA
QCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgICAgIGRvdWJs
ZSBwb3NpdGlvbiA9IGNsYW1wVG8ocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSwgMC4wLCAxLjAp
OwogICAgICAgICBkb3VibGUgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKICAg
ICAgICAgYXV0byBiYXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVh
ckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsg
MC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHBy
b2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC4wLCBDb2xvcigxOTUsIDIxNywgMjQ3KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRD
b2xvclN0b3AoMC40NSwgQ29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNDksIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKLSAgICAgICAgYmFy
R3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjUxLCBDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAg
ICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjU1LCBDb2xvcigzNiwgMTE0LCAyMTApKTsK
LSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3LCAxNDIsIDI0
NCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNv
bG9yKDE5NSwgMjE3LCAyNDcpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjQ1LCBtYWtlU2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkpOworICAgICAgICBiYXJHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuNDksIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7Cisg
ICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41MSwgbWFrZVNpbXBsZUNvbG9yKDM2
LCAxMTQsIDIxMCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1h
a2VTaW1wbGVDb2xvcigzNiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpKTsKICAgICAgICAgY29u
dGV4dC5zZXRGaWxsR3JhZGllbnQoV1RGTW92ZShiYXJHcmFkaWVudCkpOwogCiAgICAgICAgIGF1
dG8gYmFyU3Ryb2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJE
YXRhIHsgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jh
ckhlaWdodCAtIDEpIH0pOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuMCwgQ29sb3IoOTUsIDEwNywgMTgzKSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMC41LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOwotICAgICAgICBiYXJT
dHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7Cisg
ICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29s
b3IoOTUsIDEwNywgMTgzKSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0
b3AoMC41LCBtYWtlU2ltcGxlQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKKyAgICAgICAgYmFy
U3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcigzOCwgMTA0
LCAxNjYpKTsKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKGJhclN0
cm9rZUdyYWRpZW50KSk7CiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwpAQCAtMTU2OCwxMCArMTU2
MywxMCBAQCBDb2xvciBSZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiBjb25zdCBD
R1NpemUgYXR0YWNobWVudFNpemUgPSB7IDE2MCwgMTE5IH07CiAKIGNvbnN0IENHRmxvYXQgYXR0
YWNobWVudEJvcmRlclJhZGl1cyA9IDE2Owotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRCb3JkZXJD
b2xvcigpIHsgcmV0dXJuIENvbG9yKDIwNCwgMjA0LCAyMDQpOyB9Citjb25zdGV4cHIgU2ltcGxl
Q29sb3IgYXR0YWNobWVudEJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwNCwgMjA0LCAy
MDQpOwogc3RhdGljIENHRmxvYXQgYXR0YWNobWVudEJvcmRlclRoaWNrbmVzcyA9IDE7CiAKLXN0
YXRpYyBDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NDb2xvcigpIHsgcmV0dXJuIENvbG9yKDIyMiwg
MjIyLCAyMjIpOyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMjIyLCAyMjIsIDIyMik7CiBjb25zdCBDR0Zsb2F0IGF0dGFj
aG1lbnRQcm9ncmVzc0JvcmRlclRoaWNrbmVzcyA9IDM7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNo
bWVudFByb2dyZXNzU2l6ZSA9IDM2OwpAQCAtMTg3MCw4ICsxODY1LDggQEAgc3RhdGljIHZvaWQg
cGFpbnRBdHRhY2htZW50UHJvZ3Jlc3MoR3JhcAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc2F2ZXIoY29udGV4dCk7CiAKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRh
Y2htZW50UHJvZ3Jlc3NCb3JkZXJUaGlja25lc3MpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29s
b3IoYXR0YWNobWVudFByb2dyZXNzQ29sb3IoKSk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
YXR0YWNobWVudFByb2dyZXNzQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihh
dHRhY2htZW50UHJvZ3Jlc3NDb2xvcik7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYXR0YWNo
bWVudFByb2dyZXNzQ29sb3IpOwogICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZShpbmZvLnByb2dy
ZXNzUmVjdCk7CiAKICAgICBGbG9hdFBvaW50IGNlbnRlciA9IGluZm8ucHJvZ3Jlc3NSZWN0LmNl
bnRlcigpOwpAQCAtMTg5Niw3ICsxODkxLDcgQEAgc3RhdGljIFBhdGggYXR0YWNobWVudEJvcmRl
clBhdGgoUmVuZGVyQQogCiBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRCb3JkZXIoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBQYXRoJiBib3JkZXJQYXRoKQogewotICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoYXR0YWNobWVudEJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ry
b2tlQ29sb3IoYXR0YWNobWVudEJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRo
aWNrbmVzcyhhdHRhY2htZW50Qm9yZGVyVGhpY2tuZXNzKTsKICAgICBjb250ZXh0LnN0cm9rZVBh
dGgoYm9yZGVyUGF0aCk7CiB9CkBAIC0yMDI0LDcgKzIwMTksNyBAQCB2b2lkIFJlbmRlclRoZW1l
SU9TOjpwYWludFN5c3RlbVByZXZpZXdCCiAgICAgLy8gRHJhdyBhIGRyb3Agc2hhZG93IGFyb3Vu
ZCB0aGUgY2lyY2xlLgogICAgIC8vIFVzZSB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uLCBi
ZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIGJsdXIgcmFkaXVzIGluIGNvbnRleHQgc3BhY2UsCiAg
ICAgLy8gcmF0aGVyIHRoYW4gc2NyZWVuIHNwYWNlLgotICAgIENvbG9yIHNoYWRvd0NvbG9yID0g
Q29sb3IgeyAwLmYsIDAuZiwgMC5mLCAwLjFmIH07CisgICAgYXV0byBzaGFkb3dDb2xvciA9IG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC5mLCAwLmYsIDAuZiwgMC4xZik7CiAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldFNoYWRvdyhGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IpOwogCiAg
ICAgLy8gVGhlIGNpcmNsZSBtdXN0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCB2YWx1ZSBvZiAxIGZv
ciB0aGUgc2hhZG93IGNvbG9yIHRvIGFwcGVhci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY0OSw4
ICsxNjQ5LDggQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAg
IH07CiAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUGF0aChQYXRoOjpwb2x5Z29uUGF0aEZy
b21Qb2ludHMoYXJyb3cyKSk7CiAKLSAgICBDb2xvciBsZWZ0U2VwYXJhdG9yQ29sb3IoMCwgMCwg
MCwgNDApOwotICAgIENvbG9yIHJpZ2h0U2VwYXJhdG9yQ29sb3IoMjU1LCAyNTUsIDI1NSwgNDAp
OworICAgIGNvbnN0ZXhwciBhdXRvIGxlZnRTZXBhcmF0b3JDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigwLCAwLCAwLCA0MCk7CisgICAgY29uc3RleHByIGF1dG8gcmlnaHRTZXBhcmF0b3JDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7CiAKICAgICAvLyBGSVhNRTogU2hv
dWxkIHRoZSBzZXBhcmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9u
dFNjYWxlPwogICAgIGludCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25v
cmVzIHpvb20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KQEAgLTI0NzIs
OCArMjQ3Miw4IEBAIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudEljb25TZWxlY3Rpb25Cb3IKIGNv
bnN0IENHRmxvYXQgYXR0YWNobWVudEljb25CYWNrZ3JvdW5kUmFkaXVzID0gMzsKIGNvbnN0IENH
RmxvYXQgYXR0YWNobWVudEljb25Ub1RpdGxlTWFyZ2luID0gMjsKIAotc3RhdGljIENvbG9yIGF0
dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMzAp
OyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudEljb25Cb3JkZXJDb2xvcigpIHsgcmV0dXJuIENv
bG9yKDI1NSwgMjU1LCAyNTUsIDEyNSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2ht
ZW50SWNvbkJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAzMCk7Citj
b25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudEljb25Cb3JkZXJDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigyNTUsIDI1NSwgMjU1LCAxMjUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRU
aXRsZUZvbnRTaXplID0gMTI7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZUJhY2tncm91
bmRSYWRpdXMgPSAzOwpAQCAtMjQ4MSwyMyArMjQ4MSwyMyBAQCBjb25zdCBDR0Zsb2F0IGF0dGFj
aG1lbnRUaXRsZUJhY2tncm91bmRQCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZU1heGlt
dW1XaWR0aCA9IDEwMCAtIChhdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kUGFkZGluZyAqIDIpOwog
Y29uc3QgQ0ZJbmRleCBhdHRhY2htZW50VGl0bGVNYXhpbXVtTGluZUNvdW50ID0gMjsKIAotc3Rh
dGljIENvbG9yIGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKCkgeyByZXR1
cm4gQ29sb3IoMjA0LCAyMDQsIDIwNCwgMjU1KTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRU
aXRsZUluYWN0aXZlVGV4dENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMTAwLCAxMDAsIDEwMCwgMjU1
KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dy
b3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwNCwgMjA0LCAyMDQsIDI1NSk7Citjb25zdGV4
cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMTAwLCAxMDAsIDEwMCwgMjU1KTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50
U3VidGl0bGVGb250U2l6ZSA9IDEwOwogY29uc3QgaW50IGF0dGFjaG1lbnRTdWJ0aXRsZVdpZHRo
SW5jcmVtZW50ID0gMTA7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9y
KCkgeyByZXR1cm4gQ29sb3IoODIsIDE0NSwgMjE0LCAyNTUpOyB9Citjb25zdGV4cHIgU2ltcGxl
Q29sb3IgYXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDgyLCAx
NDUsIDIxNCwgMjU1KTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJXaWR0
aCA9IDMwOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJIZWlnaHQgPSA1Owog
Y29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJPZmZzZXQgPSAtOTsKIGNvbnN0IENH
RmxvYXQgYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyV2lkdGggPSAxOwotc3RhdGljIENvbG9y
IGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAs
IDAsIDAsIDg5KTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckZpbGxDb2xv
cigpIHsgcmV0dXJuIENvbG9yKENvbG9yOjp3aGl0ZSk7IH0KLXN0YXRpYyBDb2xvciBhdHRhY2ht
ZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDEyOCk7
IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5k
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgODkpOworY29uc3RleHByIFNpbXBsZUNv
bG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckZpbGxDb2xvciA9IENvbG9yOjp3aGl0ZTsKK2NvbnN0
ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCAxMjgpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlclJhZGl1cyA9IDU7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFBsYWNlaG9s
ZGVyQm9yZGVyQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCA1Nik7IH0KK2NvbnN0ZXhw
ciBTaW1wbGVDb2xvciBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAwLCA1Nik7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQbGFjZWhvbGRl
ckJvcmRlcldpZHRoID0gMjsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9y
ZGVyRGFzaExlbmd0aCA9IDY7CiAKQEAgLTI1NDEsNyArMjU0MSw3IEBAIHN0YXRpYyBDb2xvciB0
aXRsZVRleHRDb2xvckZvckF0dGFjaG1lbnQKICAgICAgICAgaWYgKGF0dGFjaG1lbnQuZnJhbWUo
KS5zZWxlY3Rpb24oKS5pc0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9
IGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgYWx0ZXJuYXRlU2VsZWN0ZWRDb250cm9sVGV4dENv
bG9yXSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRs
ZUluYWN0aXZlVGV4dENvbG9yKCk7CisgICAgICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VGl0
bGVJbmFjdGl2ZVRleHRDb2xvcjsKICAgICB9CiAKICAgICByZXR1cm4gYXR0YWNobWVudC5zdHls
ZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKHJlc3VsdCk7CkBAIC0yNjQ3LDcgKzI2NDcs
NyBAQCB2b2lkIEF0dGFjaG1lbnRMYXlvdXQ6OmxheU91dFN1YnRpdGxlKGNvCiAgICAgaWYgKHN1
YnRpdGxlVGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbG9yIHN1YnRp
dGxlQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKCkpOworICAgIENvbG9yIHN1YnRpdGxlQ29sb3Ig
PSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVu
dFN1YnRpdGxlVGV4dENvbG9yKTsKICAgICBDRlN0cmluZ1JlZiBsYW5ndWFnZSA9IDA7IC8vIEJ5
IG5vdCBzcGVjaWZ5aW5nIGEgbGFuZ3VhZ2Ugd2UgdXNlIHRoZSBzeXN0ZW0gbGFuZ3VhZ2UuCiAg
ICAgUmV0YWluUHRyPENURm9udFJlZj4gZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250
Rm9yTGFuZ3VhZ2Uoa0NURm9udFVJRm9udFN5c3RlbSwgYXR0YWNobWVudFN1YnRpdGxlRm9udFNp
emUsIGxhbmd1YWdlKSk7CiAgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7CkBA
IC0yNzIxLDcgKzI3MjEsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRJY29uQmFja2dy
b3VuCiAgICAgaWYgKHBhaW50Qm9yZGVyKQogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbmZsYXRl
KC1hdHRhY2htZW50SWNvblNlbGVjdGlvbkJvcmRlclRoaWNrbmVzcyk7CiAKLSAgICBDb2xvciBi
YWNrZ3JvdW5kQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoYXR0YWNobWVudEljb25CYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgQ29sb3IgYmFja2dy
b3VuZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSb3VuZGVk
UmVjdChGbG9hdFJvdW5kZWRSZWN0KGJhY2tncm91bmRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpS
YWRpaShhdHRhY2htZW50SWNvbkJhY2tncm91bmRSYWRpdXMpKSwgYmFja2dyb3VuZENvbG9yKTsK
IAogICAgIGlmIChwYWludEJvcmRlcikgewpAQCAtMjczMiw3ICsyNzMyLDcgQEAgc3RhdGljIHZv
aWQgcGFpbnRBdHRhY2htZW50SWNvbkJhY2tncm91bgogICAgICAgICBQYXRoIGJvcmRlclBhdGg7
CiAgICAgICAgIGJvcmRlclBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgaWNvbkJhY2tn
cm91bmRSYWRpdXNTaXplKTsKIAotICAgICAgICBDb2xvciBib3JkZXJDb2xvciA9IGF0dGFjaG1l
bnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50SWNvbkJvcmRl
ckNvbG9yKCkpOworICAgICAgICBDb2xvciBib3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUo
KS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKTsK
ICAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvcik7CiAgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9yZGVyVGhp
Y2tuZXNzKTsKICAgICAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwpAQCAtMjgz
MCw3ICsyODMwLDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdQog
ICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGFsdGVy
bmF0ZVNlbGVjdGVkQ29udHJvbENvbG9yXSk7CiAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAogICAgIH0gZWxzZQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBhdHRh
Y2htZW50VGl0bGVJbmFjdGl2ZUJhY2tncm91bmRDb2xvcigpOworICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IgPSBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZUJhY2tncm91bmRDb2xvcjsKIAogICAgIGJh
Y2tncm91bmRDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihiYWNrZ3JvdW5kQ29sb3IpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91
bmRDb2xvcik7CkBAIC0yODc1LDcgKzI4NzUsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1l
bnRQcm9ncmVzcyhjb25zCiAgICAgYmFja2dyb3VuZFJlY3QuaW5mbGF0ZSgtYXR0YWNobWVudFBy
b2dyZXNzQmFyQm9yZGVyV2lkdGggLyAyKTsKIAogICAgIEZsb2F0Um91bmRlZFJlY3QgYmFja2dy
b3VuZFJvdW5kZWRSZWN0KGJhY2tncm91bmRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaShi
YWNrZ3JvdW5kUmVjdC5oZWlnaHQoKSAvIDIpKTsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVj
dChiYWNrZ3JvdW5kUm91bmRlZFJlY3QsIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRD
b2xvcigpKTsKKyAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChiYWNrZ3JvdW5kUm91bmRlZFJl
Y3QsIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRDb2xvcik7CiAKICAgICB7CiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgY2xpcFNhdmVyKGNvbnRleHQpOwpAQCAtMjg4
NSwxMyArMjg4NSwxMyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQcm9ncmVzcyhjb25z
CiAgICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHBy
b2dyZXNzKTsKICAgICAgICAgcHJvZ3Jlc3NSZWN0ID0gZW5jbG9zZVJlY3RUb0RldmljZVBpeGVs
cyhwcm9ncmVzc1JlY3QsIGF0dGFjaG1lbnQuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
KTsKIAotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHByb2dyZXNzUmVjdCwgYXR0YWNobWVudFBy
b2dyZXNzQmFyRmlsbENvbG9yKCkpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHByb2dyZXNz
UmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENvbG9yKTsKICAgICB9CiAKICAgICBQYXRo
IGJvcmRlclBhdGg7CiAgICAgZmxvYXQgYm9yZGVyUmFkaXVzID0gYm9yZGVyUmVjdC5oZWlnaHQo
KSAvIDI7CiAgICAgYm9yZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBGbG9hdFNp
emUoYm9yZGVyUmFkaXVzLCBib3JkZXJSYWRpdXMpKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0
U3Ryb2tlQ29sb3IoYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRl
eHQuc2V0U3Ryb2tlVGhpY2tuZXNzKGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlcldpZHRoKTsK
ICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CkBAIC0yOTAxLDcgKzI5MDEs
NyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvCiAgICAgUGF0aCBi
b3JkZXJQYXRoOwogICAgIGJvcmRlclBhdGguYWRkUm91bmRlZFJlY3QobGF5b3V0LmF0dGFjaG1l
bnRSZWN0LCBGbG9hdFNpemUoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyUmFkaXVzLCBhdHRh
Y2htZW50UGxhY2Vob2xkZXJCb3JkZXJSYWRpdXMpKTsKIAotICAgIENvbG9yIHBsYWNlaG9sZGVy
Qm9yZGVyQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IoKSk7CisgICAgQ29sb3IgcGxhY2Vo
b2xkZXJCb3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihwbGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29u
dGV4dC5zZXRTdHJva2VTdHlsZShEYXNoZWRTdHJva2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yODgsMTkgKzI4OCwxOSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNv
bnN0CiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewogICAgIENP
TE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUKTsKLSAgICByZXR1cm4g
Q29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9y
KSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFs
dWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVXaW46
OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewogICAgIC8vIFRoaXMgY29sb3IgbWF0Y2hlcyBGaXJl
Zm94LgotICAgIHJldHVybiBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNp
bXBsZUNvbG9yKDE3NiwgMTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+KSBjb25zdAogewogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09M
T1JfSElHSExJR0hUVEVYVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdl
dEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxl
Q29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9y
KSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBj
b25zdApAQCAtMTAwOSw3ICsxMDA5LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVXaW46OnN5c3RlbUNv
bG9yKENTU1ZhbAogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1Zh
bHVlSWQsIG9wdGlvbnMpOwogCiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihzeXND
b2xvckluZGV4KTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVl
KGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihH
ZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKIH0K
IAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI2MjM1MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmwKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBk
ZWJ1Z1NoYWRvdyA9IG51bGxwdHI7CiAgICAgaWYgKGZsb3cuc2V0dGluZ3MoKS5zaW1wbGVMaW5l
TGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRlYnVnU2hhZG93ID0gbWFr
ZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6
Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAyNTUsIDAsIDIwMCkpOworICAgICAgICBkZWJ1Z1NoYWRv
dyA9IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93
U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCwgMjAwKSk7CiAg
ICAgICAgIHRleHRQYWludGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdy5nZXQoKSk7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEJsb2NrLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw3ICsxMTksNyBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mCiAK
ICAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CiAgICAgaW5mby5j
b250ZXh0KCkuc2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgIGluZm8uY29udGV4dCgp
LnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSkpOworICAgIGluZm8uY29udGV4dCgpLnNl
dFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUpKTsKIAogICAgIGluZm8uY29u
dGV4dCgpLmRyYXdMaW5lKGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFp
bnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9m
ZnNldC55KCkpKTsKICAgICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFp
bnRPZmZzZXQueSgpKSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNu
YXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHBpeGVsU25hcHBl
ZE9mZnNldEhlaWdodCgpKSk7CkBAIC0xMjgsMTMgKzEyOCwxMyBAQCB2b2lkIFJlbmRlck1hdGhN
TEJsb2NrOjpwYWludChQYWludEluZm8mCiAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9w
KCk7CiAKLSAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDAp
KTsKKyAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwg
MjU1LCAwKSk7CiAKICAgICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2ludChhZGp1c3Rl
ZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCksIElu
dFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCkpOwogCiAgICAgaW50IGJhc2Vs
aW5lID0gcm91bmRUb0ludChiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1
ZSwgSG9yaXpvbnRhbExpbmUpKTsKIAotICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9y
KENvbG9yKDI1NSwgMCwgMCkpOworICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1h
a2VTaW1wbGVDb2xvcigyNTUsIDAsIDApKTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5l
KEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0Lnko
KSArIGJhc2VsaW5lKSwgSW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNu
YXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHls
ZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYsNyArMjAyNiw3IEBAIENv
bG9yIFJlbmRlclN0eWxlOjpjb2xvclJlc29sdmluZ0N1cnJlbnQKICAgICBpZiAoaXNDdXJyZW50
Q29sb3IocmVzdWx0KSkgewogICAgICAgICBhdXRvIGJvcmRlclN0eWxlID0gY29tcHV0ZUJvcmRl
clN0eWxlKCk7CiAgICAgICAgIGlmICghdmlzaXRlZExpbmsgJiYgKGJvcmRlclN0eWxlID09IEJv
cmRlclN0eWxlOjpJbnNldCB8fCBib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6T3V0c2V0IHx8
IGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpSaWRnZSB8fCBib3JkZXJTdHlsZSA9PSBCb3Jk
ZXJTdHlsZTo6R3Jvb3ZlKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigyMzgsIDIzOCwgMjM4
KTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCk7CiAK
ICAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rID8gdmlzaXRlZExpbmtDb2xvcigpIDogY29sb3Io
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuaAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTksNyArMTMxOSw3IEBAIHB1
YmxpYzoKICAgICBjb25zdCBDb2xvciYgdmlzaXRlZExpbmtTdHJva2VDb2xvcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmFyZUluaGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3I7IH0KICAg
ICB2b2lkIHNldEhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcihib29sIHYpIHsgU0VUX1ZBUiht
X3JhcmVJbmhlcml0ZWREYXRhLCBoYXNTZXRTdHJva2VDb2xvciwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHYpKTsgfQogICAgIGJvb2wgaGFzRXhwbGljaXRseVNldFN0cm9rZUNvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlSW5oZXJpdGVkRGF0YS0+aGFzU2V0U3Ryb2tlQ29sb3I7IH07Ci0gICAg
c3RhdGljIENvbG9yIGluaXRpYWxTdHJva2VDb2xvcigpIHsgcmV0dXJuIENvbG9yKENvbG9yOjp0
cmFuc3BhcmVudCk7IH0KKyAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNvbG9yKCkgeyBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50OyB9CiAgICAgQ29sb3IgY29tcHV0ZWRTdHJva2VDb2xv
cigpIGNvbnN0OwogCiAgICAgZmxvYXQgc3Ryb2tlTWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZUluaGVyaXRlZERhdGEtPm1pdGVyTGltaXQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5n
IGluaXRpYWxTdHJva2VQYWludFVyaSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgc3RhdGlj
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gaW5pdGlhbFN0cm9rZURhc2hBcnJheSgpIHsgcmV0dXJu
IHsgfTsgfQogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsU3RvcE9wYWNpdHkoKSB7IHJldHVybiAx
OyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxTdG9wQ29sb3IoKSB7IHJldHVybiBDb2xvcigw
LCAwLCAwKTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsU3RvcENvbG9yKCkgeyByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDApOyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxGbG9v
ZE9wYWNpdHkoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxGbG9vZENv
bG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCk7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlh
bExpZ2h0aW5nQ29sb3IoKSB7IHJldHVybiBDb2xvcigyNTUsIDI1NSwgMjU1KTsgfQorICAgIHN0
YXRpYyBDb2xvciBpbml0aWFsRmxvb2RDb2xvcigpIHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigw
LCAwLCAwKTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0aWFsTGlnaHRpbmdDb2xvcigpIHsgcmV0
dXJuIG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMjU1KTsgfQogICAgIHN0YXRpYyBTaGFkb3dE
YXRhKiBpbml0aWFsU2hhZG93KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHN0YXRpYyBTdHJp
bmcgaW5pdGlhbE1hc2tlclJlc291cmNlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBzdGF0
aWMgU3RyaW5nIGluaXRpYWxNYXJrZXJTdGFydFJlc291cmNlKCkgeyByZXR1cm4gU3RyaW5nKCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24gMjYy
MzUyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsNyArODgsNyBAQCBib29sIFNWR1N0b3BFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKGNvCiBDb2xvciBTVkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVu
dDsKIAogICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICBhdXRvJiBz
dmdTdHlsZSA9IHN0eWxlLnN2Z1N0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVW
YWx1ZUZ1bmN0aW9uSW1wbC5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvcHJvcGVydGllcy9TVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVl
ID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNv
bXBvbmVudCgpLCBzaW1wbGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0
aW9uLmJsdWVDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKICAg
ICAgICAgZmxvYXQgYWxwaGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwg
c2ltcGxlRnJvbS5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBz
aW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5h
bHBoYUNvbXBvbmVudCgpKTsKICAgICAgICAgCi0gICAgICAgIGFuaW1hdGVkID0geyByb3VuZEFu
ZENsYW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4p
LCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKGFscGhhKSB9OworICAgICAgICBhbmltYXRlZCA9IG1ha2VTaW1wbGVDb2xvcihyb3VuZEFu
ZENsYW1wQ29sb3JDaGFubmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4p
LCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKGFscGhhKSk7CiAgICAgfQogCiAgICAgT3B0aW9uYWw8ZmxvYXQ+IGNhbGN1bGF0ZURpc3Rh
bmNlKFNWR0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNv
bnN0IG92ZXJyaWRlCkBAIC0xMjAsMTEgKzEyMCwxMSBAQCBwcml2YXRlOgogICAgICAgICBhdXRv
IHNpbXBsZVRvID0gbV90by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogCiAgICAgICAgIC8v
IElnbm9yZXMgYW55IGFscGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1
ZS4KLSAgICAgICAgbV90byA9IHsKKyAgICAgICAgbV90byA9IG1ha2VTaW1wbGVDb2xvcigKICAg
ICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9uZW50
KCkgKyBzaW1wbGVGcm9tLnJlZENvbXBvbmVudCgpKSwKICAgICAgICAgICAgIHJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwoc2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20uZ3Jl
ZW5Db21wb25lbnQoKSksCiAgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNp
bXBsZVRvLmJsdWVDb21wb25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQotICAg
ICAgICB9OworICAgICAgICApOwogICAgIH0KIAogICAgIHN0YXRpYyBDb2xvciBjb2xvckZyb21T
dHJpbmcoU1ZHRWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
dGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAkocmV2aXNpb24gMjYyMzUy
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsMTAgKzEwNSwxMCBAQCB2b2lkIE1vY2tQYWdlT3ZlcmxheUNs
aWVudDo6ZHJhd1JlY3QoUGFnCiAgICAgRmxvYXRSZWN0IGluc2V0UmVjdCA9IG92ZXJsYXkuYm91
bmRzKCk7CiAKICAgICBpZiAob3ZlcmxheS5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6RG9jdW1lbnQpIHsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihD
b2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2lt
cGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAgICAgICAgIGluc2V0UmVjdC5pbmZsYXRlKC01MCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAy
NTUpKTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMjU1KSk7CiAgICAgICAgIGluc2V0UmVjdC5pbmZsYXRlKC0yMCk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2NvY29hL1dlYlZpZXdWaXN1YWxJZGVudGlmaWNhdGlv
bk92ZXJsYXkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9jb2NvYS9X
ZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRpb25PdmVybGF5Lm1tCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2NvY29hL1dlYlZpZXdWaXN1YWxJZGVudGlmaWNhdGlv
bk92ZXJsYXkubW0JKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgLSAoaW5zdGFuY2V0
eXBlKWluaXRXaXRoV2ViVmlldzooUGxhdGZvcgogICAgIF9sYXllciA9IGFkb3B0TlMoW1tDQVRp
bGVkTGF5ZXIgYWxsb2NdIGluaXRdKTsKICAgICBbX2xheWVyIHNldE5hbWU6QCJXZWJWaWV3Vmlz
dWFsSWRlbnRpZmljYXRpb25PdmVybGF5Il07CiAgICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RN
YWtlKDAsIDAsIFtfdmlldyBib3VuZHNdLnNpemUud2lkdGgsIFtfdmlldyBib3VuZHNdLnNpemUu
aGVpZ2h0KV07Ci0gICAgV2ViQ29yZTo6Q29sb3Igdmlld0NvbG9yID0gaXNEZXByZWNhdGVkID8g
V2ViQ29yZTo6Q29sb3IoMjU1LCAwLCAwLCAzMikgOiBXZWJDb3JlOjpDb2xvcigwLCAwLCAyNTUs
IDMyKTsKKyAgICBXZWJDb3JlOjpDb2xvciB2aWV3Q29sb3IgPSBpc0RlcHJlY2F0ZWQgPyBXZWJD
b3JlOjptYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAzMikgOiBXZWJDb3JlOjptYWtlU2ltcGxl
Q29sb3IoMCwgMCwgMjU1LCAzMik7CiAgICAgW19sYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2Fj
aGVkQ0dDb2xvcih2aWV3Q29sb3IpXTsKICAgICBbX2xheWVyIHNldFpQb3NpdGlvbjo5OTldOwog
ICAgIFtfbGF5ZXIgc2V0RGVsZWdhdGU6c2VsZl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYy
MzUyKQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyNiBAQAorMjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAg
ICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxhY2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBu
dW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3BlY2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRyYXdJbkNvbnRleHQpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcDoKKyAgICAgICAgKHdlYmtpdENvbG9yVG9XZWJD
b3JlQ29sb3IpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF90YXBIaWdobGlnaHRDb2xvckZvckZh
c3RDbGljazpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWlu
dFJlY3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwYWludFNuYXBzaG90QXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L0ZpbmRDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpGaW5kSW5kaWNhdG9yT3Zl
cmxheUNsaWVudElPUzo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpoaWdobGlnaHRDb2xv
cik6IERlbGV0ZWQuCisKIDIwMjAtMDUtMzAgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5z
ZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBEZXByZWNhdGUgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFy
ZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCShyZXZpc2lvbiAy
NjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxOSw3ICszMTksNyBAQCB2b2lk
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkcmF3SW5Db250CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgaWYgKG1faXNPcGFxdWUpCi0gICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc2NhbGVkTGF5ZXJC
b3VuZHMsIFdlYkNvcmU6OkNvbG9yKDI1NSwgNDcsIDE0NikpOworICAgICAgICBjb250ZXh0LmZp
bGxSZWN0KHNjYWxlZExheWVyQm91bmRzLCBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMjU1LCA0
NywgMTQ2KSk7CiAjZW5kaWYKIAogICAgIGNvbnRleHQuc2NhbGUobV9zY2FsZSk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRD
b2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgR19ERUZJTkVfQk9YRURf
VFlQRShXZWJLaXRDb2xvciwgd2Via2l0XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJraXRD
b2xvclRvV2ViQ29yZUNvbG9yKFdlYktpdENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6Q29sb3Ioc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxm
bG9hdD4oY29sb3ItPmdyZWVuKSwKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cyhzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci0+Z3JlZW4pLAogICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJs
dWUpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmFscGhhKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMyOCw3ICs0
MzI4LDcgQEAgLSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aQogLSAoV2Vi
Q29yZTo6Q29sb3IpX3RhcEhpZ2hsaWdodENvbG9yRm9yRmFzdENsaWNrOihCT09MKWZvckZhc3RD
bGljawogewogICAgIEFTU0VSVChfc2hvd0RlYnVnVGFwSGlnaGxpZ2h0c0ZvckZhc3RDbGlja2lu
Zyk7Ci0gICAgcmV0dXJuIGZvckZhc3RDbGljayA/IFdlYkNvcmU6OkNvbG9yKDAsIDIyNSwgMCwg
MTI3KSA6IFdlYkNvcmU6OkNvbG9yKDIyNSwgMCwgMCwgMTI3KTsKKyAgICByZXR1cm4gZm9yRmFz
dENsaWNrID8gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDIyNSwgMCwgMTI3KSA6IFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcigyMjUsIDAsIDAsIDEyNyk7CiB9CiAKIC0gKHZvaWQpX3NldERv
dWJsZVRhcEdlc3R1cmVzRW5hYmxlZDooQk9PTCllbmFibGVkCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVj
dG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcs
NyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdChjCiAgICAgcGFpbnRM
YXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogICAgIHBhaW50TGF5ZXItPnNl
dFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7CiAgICAgcGFpbnRMYXllci0+c2V0U2l6ZShyZWN0
LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yKDEuMGYs
IDAuMGYsIDAuMGYsIDAuMmYpKTsKKyAgICBwYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3Io
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7CiAKICAg
ICBLZXlmcmFtZVZhbHVlTGlzdCBmYWRlS2V5ZnJhbWVzKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5
KTsKICAgICBmYWRlS2V5ZnJhbWVzLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFs
dWU+KDAsIDEpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTA5LDggKzUwOSw4IEBAIHZvaWQgRmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KFBhZ2VPdmVy
bGEKIHsKICAgICBjb25zdCBpbnQgYm9yZGVyV2lkdGggPSAxOwogCi0gICAgQ29sb3Igb3Zlcmxh
eUJhY2tncm91bmRDb2xvcigwLjFmLCAwLjFmLCAwLjFmLCAwLjI1Zik7Ci0gICAgQ29sb3Igc2hh
ZG93Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgYXV0byBvdmVybGF5QmFja2dy
b3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjFmLCAwLjFmLCAwLjFmLCAw
LjI1Zik7CisgICAgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
MC4wZiwgMC4wZiwgMC4wZiwgMC41Zik7CiAKICAgICBJbnRSZWN0IGJvcmRlckluZmxhdGVkRGly
dHlSZWN0ID0gZGlydHlSZWN0OwogICAgIGJvcmRlckluZmxhdGVkRGlydHlSZWN0LmluZmxhdGUo
Ym9yZGVyV2lkdGgpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAyLDcgKzI0MDIsNyBA
QCB2b2lkIFdlYlBhZ2U6OnBhaW50U25hcHNob3RBdFNpemUoY29uc3QgCiAKICAgICBpZiAob3B0
aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50U2VsZWN0aW9uUmVjdGFuZ2xlKSB7CiAgICAgICAg
IEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0YW5nbGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b25Cb3VuZHMoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKENvbG9y
KDB4RkYsIDAsIDApKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1h
a2VTaW1wbGVDb2xvcigweEZGLCAwLCAwKSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zdHJv
a2VSZWN0KHNlbGVjdGlvblJlY3RhbmdsZSwgMSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxl
cklPUy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL0ZpbmRDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMCAr
NTMsNyBAQCBjb25zdCBpbnQgdG90YWxWZXJ0aWNhbE1hcmdpbiA9IDE7CiAKIGNvbnN0ZXhwciBP
cHRpb25TZXQ8VGV4dEluZGljYXRvck9wdGlvbj4gZmluZFRleHRJbmRpY2F0b3JPcHRpb25zIHsg
VGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9u
LCBUZXh0SW5kaWNhdG9yT3B0aW9uOjpEb05vdENsaXBUb1Zpc2libGVSZWN0IH07CiAKLXN0YXRp
YyBDb2xvciBoaWdobGlnaHRDb2xvcigpCi17Ci0gICAgcmV0dXJuIENvbG9yKDI1NSwgMjI4LCA1
NiwgMjU1KTsKLX0KK2NvbnN0ZXhwciBhdXRvIGhpZ2hsaWdodENvbG9yID0gbWFrZVNpbXBsZUNv
bG9yKDI1NSwgMjI4LCA1NiwgMjU1KTsKIAogdm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVu
dElPUzo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkmIG92ZXJsYXksIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewpAQCAtNzksNyArNzYsNyBAQCB2b2lk
IEZpbmRJbmRpY2F0b3JPdmVybGF5Q2xpZW50SU9TOjpkcmF3CiAgICAgVmVjdG9yPEZsb2F0UmVj
dD4gdGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcyA9IG1fdGV4dEluZGljYXRvci0+
dGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcygpOwogICAgIFZlY3RvcjxQYXRoPiBw
YXRocyA9IFBhdGhVdGlsaXRpZXM6OnBhdGhzV2l0aFNocmlua1dyYXBwZWRSZWN0cyh0ZXh0UmVj
dHNJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzLCBjb3JuZXJSYWRpdXMpOwogCi0gICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoaGlnaGxpZ2h0Q29sb3IoKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29s
b3IoaGlnaGxpZ2h0Q29sb3IpOwogICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKQog
ICAgICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyNjIzNjEpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wNS0zMSAgU2Ft
IFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJl
cGxhY2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUg
c3BlY2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJJbmRpY2F0ZUxheWVyLm1tOgorCiAyMDIw
LTA1LTI5ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXBwbGUg
UGF5XSBSZW1vdmUgY29uZGl0aW9uYWxzIGZvciBFTkFCTEVfQVBQTEVfUEFZX1NFU1NJT05fVigz
fDQpCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5
ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJ
bmRpY2F0ZUxheWVyLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTUwLDcg
KzUwLDcgQEAgLSAoaWQpaW5pdFdpdGhXZWJWaWV3OihXZWJWaWV3ICopd2ViVmlldwogICAgIHNl
bGYuY29udGVudHNTY2FsZSA9IFtbX3dlYlZpZXcgd2luZG93XSBzY3JlZW5TY2FsZV07CiAKICAg
ICAvLyBCbHVlIGhpZ2hsaWdodCBjb2xvci4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29s
b3I+IGhpZ2hsaWdodENvbG9yKDExMS4wZiAvIDI1NS4wZiwgMTY4LjBmIC8gMjU1LjBmLCAyMjAu
MGYgLyAyNTUuMGYsIDAuNjZmKTsKKyAgICBjb25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwgMjIwLCAxNjgpOwogICAgIHNlbGYuYmFja2dyb3Vu
ZENvbG9yID0gY2FjaGVkQ0dDb2xvcihoaWdobGlnaHRDb2xvcik7CiAKICAgICByZXR1cm4gc2Vs
ZjsKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDIwLTA1LTMxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5n
IG51bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDoKKyAgICAgICAgKGNvbXBvc2l0aW9uVG9VbmRlcmxpbmVzKToKKwogMjAyMC0wNS0xOSAgRnVq
aWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fp
cm9dIEFTU0VSVChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIGZhaWxzIGluIH5QbGF0
Zm9ybURpc3BsYXkoKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Mjc0LDcgKzYyNzQsNyBAQCBzdGF0aWMgdm9pZCBjb21wb3NpdGlvblRv
VW5kZXJsaW5lcyhjb25zCiAgICAgICAgIHVuZGVybGluZXNbaV0uZW5kT2Zmc2V0ID0gY2xhdXNl
c1tpICsgMV07CiAgICAgICAgIEJZVEUgYXR0cmlidXRlID0gYXR0cmlidXRlc1tjbGF1c2VzW2ld
XTsKICAgICAgICAgdW5kZXJsaW5lc1tpXS50aGljayA9IGF0dHJpYnV0ZSA9PSBBVFRSX1RBUkdF
VF9DT05WRVJURUQgfHwgYXR0cmlidXRlID09IEFUVFJfVEFSR0VUX05PVENPTlZFUlRFRDsKLSAg
ICAgICAgdW5kZXJsaW5lc1tpXS5jb2xvciA9IENvbG9yKDAsMCwwKTsKKyAgICAgICAgdW5kZXJs
aW5lc1tpXS5jb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI2MjM1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAg
ICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51
bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpU
RVNUKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xv
clRlc3RzLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6bWFrZUNvbG9yKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1BERlNuYXBzaG90Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW06CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpUZXN0UERGUGFnZTo6Y29sb3JBdFBvaW50IGNvbnN0KToKKwog
MjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRXh0
ZW5kZWQgQ29sb3I6IEFkZGl0aW9uYWwgY29sb3IgY2xlYW51cHMKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xvclRlc3RzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9C
bGFjaykKIAogVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogewotICAgIENvbG9yIGNvbG9yKDI1
NSwgMCwgMCk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsK
IAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYV0gPSBzUkdCVG9I
U0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsKIApAQCAtODMsNyArODMsNyBAQCBU
RVNUKENvbG9yLCBSR0JUb0hTTF9SZWQpCiAKIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0dyZWVuKQog
ewotICAgIENvbG9yIGNvbG9yKDAsIDI1NSwgMCk7CisgICAgQ29sb3IgY29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMCwgMjU1LCAwKTsKIAogICAgIGF1dG8gW2h1ZSwgc2F0dXJhdGlvbiwgbGlnaHRu
ZXNzLCBhbHBoYV0gPSBzUkdCVG9IU0woY29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpKTsK
IApAQCAtOTksNyArOTksNyBAQCBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIAogVEVTVChD
b2xvciwgUkdCVG9IU0xfQmx1ZSkKIHsKLSAgICBDb2xvciBjb2xvcigwLCAwLCAyNTUpOworICAg
IENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiAKICAgICBhdXRvIFto
dWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JH
QkFDb21wb25lbnRzTG9zc3koKSk7CiAKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKENvbG9yLCBW
YWxpZGl0eSkKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJJbnZhbGlkQ29sb3IuaXNFeHRlbmRlZCgpKTsKIAotICAg
IENvbG9yIHZhbGlkQ29sb3IoMjU1LCAwLCAwKTsKKyAgICBDb2xvciB2YWxpZENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1Zh
bGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKQEAg
LTE3OSw3ICsxNzksNyBAQCBURVNUKENvbG9yLCBWYWxpZGl0eSkKICAgICBFWFBFQ1RfVFJVRShv
dGhlclZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0Uob3RoZXJWYWxpZENv
bG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICB2YWxpZENvbG9yID0gQ29sb3IoMSwgMiwgMywgNCk7
CisgICAgdmFsaWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxLCAyLCAzLCA0KTsKICAgICBFWFBF
Q1RfVFJVRSh2YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHZhbGlkQ29s
b3IuaXNFeHRlbmRlZCgpKTsKICAgICBhdXRvIHNpbXBsZVZhbGlkQ29sb3IgPSB2YWxpZENvbG9y
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvclRlc3RzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVk
Q29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgewogCiBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogewot
ICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7
CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBD
b2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKIAogICAgIGF1dG8gW3IsIGcsIGIsIGFscGhhXSA9IGMxLmFzRXh0ZW5kZWQoKS5jb21wb25l
bnRzKCk7CkBAIC01MSw3ICs1MSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3Ip
CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMx
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENv
bG9yIGMyKGMxKTsKQEAgLTY5LDcgKzY5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29u
c3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xv
ciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAg
ICBDb2xvciBjMiA9IGMxOwpAQCAtODgsMjAgKzg4LDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwg
QXNzaWdubWVudCkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiB7CiAgICAgewotICAg
ICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
OworICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAx
LjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNF
eHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xv
clNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9y
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAg
RVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEsIGMy
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0IpOworICAgICAgICBDb2xvciBjMiB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OlNSR0Ip
IH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQ
RUNUX05FKGMxLCBjMik7CkBAIC0xMTEsOCArMTExLDggQEAgVEVTVChFeHRlbmRlZENvbG9yLCBF
cXVhbGl0eSkKICAgICBpbnQgZyA9IDEyODsKICAgICBpbnQgYiA9IDYzOwogICAgIGludCBhID0g
MTI3OwotICAgIENvbG9yIHJnYjEociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAv
IDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKLSAgICBDb2xvciByZ2IyKHIsIGcsIGIsIGEpOwor
ICAgIENvbG9yIHJnYjEgeyBtYWtlRXh0ZW5kZWRDb2xvcihyIC8gMjU1LjAsIGcgLyAyNTUuMCwg
YiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpIH07CisgICAgQ29sb3Igcmdi
MiA9IG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKTsKICAgICBFWFBFQ1RfTkUocmdiMSwgcmdi
Mik7CiAgICAgRVhQRUNUX05FKHJnYjIsIHJnYjEpOwogfQpAQCAtMTIwLDIwICsxMjAsMjAgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBFcXVhbGl0eSkKIFRFU1QoRXh0ZW5kZWRDb2xvciwgSGFzaCkK
IHsKICAgICB7Ci0gICAgICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCi0gICAgICAgIENvbG9yIGMyKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIGMyIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVY
UEVDVF9FUShjMS5oYXNoKCksIGMyLmhhc2goKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBD
b2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAg
ICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAotICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpTUkdCKTsKKyAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMyLmhhc2goKSk7
CkBAIC0xNDMsMTQgKzE0MywxNCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiAgICAgaW50
IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciBy
Z2IxKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFj
ZTo6U1JHQik7Ci0gICAgQ29sb3IgcmdiMihyLCBnLCBiLCBhKTsKKyAgICBDb2xvciByZ2IxIHsg
bWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1
NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29s
b3IociwgZywgYiwgYSk7CiAgICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7
CiB9CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9y
IGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29s
b3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAg
IENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIAogVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQXNzaWdu
bWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAu
MjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlz
RXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IFdURk1vdmUoYzEpOwpAQCAtMTkzLDcgKzE5
Myw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgQmFzaWNSZWZlcmVuY2VDb3VudGluZykKIHsKLSAgICBDb2xvciogYzEgPSBuZXcg
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBD
b2xvciogYzEgPSBuZXcgQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwg
MS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEtPmlzRXh0
ZW5kZWQoKSk7CiAKICAgICBDb2xvciogYzIgPSBuZXcgQ29sb3IoKmMxKTsKQEAgLTIxOSw3ICsy
MTksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpCiAKIENvbG9y
IG1ha2VDb2xvcigpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JT
cGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwg
MC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJV
RShjMS5pc0V4dGVuZGVkKCkpOwogICAgIEVYUEVDVF9FUSgxdSwgYzEuYXNFeHRlbmRlZCgpLnJl
ZkNvdW50KCkpOwogCkBAIC0yMzgsNyArMjM4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBSZXR1
cm5WYWx1ZXMpCiBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKIHsKICAg
ICB7Ci0gICAgICAgIENvbG9yIHAzQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3Bh
Y2U6OkRpc3BsYXlQMyk7CisgICAgICAgIENvbG9yIHAzQ29sb3IgeyBtYWtlRXh0ZW5kZWRDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMC43NSwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgICAg
ICBFWFBFQ1RfVFJVRShwM0NvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgYXV0byBzUkdC
Q29tcG9uZW50cyA9IHAzQ29sb3IudG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpOwpAQCAtMjQ5LDcg
KzI0OSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUDNDb252ZXJzaW9uVG9TUkdCKQogICAgIH0K
IAogICAgIHsKLSAgICAgICAgQ29sb3IgbGluZWFyQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUs
IENvbG9yU3BhY2U6OkxpbmVhclJHQik7CisgICAgICAgIENvbG9yIGxpbmVhckNvbG9yIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkxpbmVhclJH
QikgfTsKICAgICAgICAgRVhQRUNUX1RSVUUobGluZWFyQ29sb3IuaXNFeHRlbmRlZCgpKTsKICAg
ICAgICAgYXV0byBzUkdCQ29tcG9uZW50cyA9IGxpbmVhckNvbG9yLnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKICAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHNS
R0JDb21wb25lbnRzLmNvbXBvbmVudHNbMF0sIDEuMGYpKTsKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERGU25hcHNob3QubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbQkocmV2aXNp
b24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZT
bmFwc2hvdC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsNiBAQAogI2ltcG9ydCA8V2Vi
S2l0L1dLUERGQ29uZmlndXJhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0L1dLV2ViVmlld1ByaXZh
dGUuaD4KIAotdXNpbmcgV2ViQ29yZTo6Q29sb3I7Ci0KIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
IHsKIAogVEVTVChQREZTbmFwc2hvdCwgRnVsbENvbnRlbnQpCkBAIC02MCw3ICs1OCw3IEBAIFRF
U1QoUERGU25hcHNob3QsIEZ1bGxDb250ZW50KQogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+dGV4
dCgpWzRdLCAnbycpOwogCiAgICAgICAgIC8vIFRoZSBlbnRpcmUgcGFnZSBzaG91bGQgYmUgZ3Jl
ZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1Rf
VFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNo
b3QgPSB0cnVlOwogICAgIH1dOwpAQCAtOTEsNyArODksNyBAQCBURVNUKFBERlNuYXBzaG90LCBT
dWJyZWdpb25zKQogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgMHUp
OwogCiAgICAgICAgIC8vIFRoZSBlbnRpcmUgcGFnZSBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBw
b2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5j
b2xvckF0UG9pbnQoMjAwLCAxNTApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBF
Q1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwog
ICAgIH1dOwpAQCAtMTExLDEwICsxMDksMTAgQEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9u
cykKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCks
IENHUmVjdE1ha2UoMCwgMCwgMTIwMCwgMTIwMCkpKTsKIAogICAgICAgICAvLyBBIHBpeGVsIHRo
YXQgd2FzIGluIHRoZSB2aWV3IHNob3VsZCBiZSBncmVlbi4gUGljayBhIHBvaW50IGluIHRoZSBt
aWRkbGUgdG8gY2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCgy
MDAsIDE1MCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2Ut
PmNvbG9yQXRQb2ludCgyMDAsIDE1MCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1
NSwgMCkpOwogCiAgICAgICAgIC8vIEEgcGl4ZWwgdGhhdCB3YXMgb3V0c2lkZSB0aGUgdmlldyBz
aG91bGQgYWxzbyBiZSBncmVlbiAod2UgZXh0ZW5kIGJhY2tncm91bmQgY29sb3Igb3V0KS4gUGlj
ayBhIHBvaW50IGluIHRoZSBtaWRkbGUgdG8gY2hlY2suCi0gICAgICAgIEVYUEVDVF9UUlVFKHBh
Z2UtPmNvbG9yQXRQb2ludCg5MDAsIDcwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg5MDAsIDcwMCkgPT0gV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAgICAgIGRpZFRha2VTbmFwc2hvdCA9IHRy
dWU7CiAgICAgfV07CkBAIC0xNDAsMjAgKzEzOCwyMCBAQCBURVNUKFBERlNuYXBzaG90LCBPdmVy
MjAwSW5jaGVzKQogICAgICAgICBhdXRvIHBhZ2UgPSBkb2N1bWVudC0+cGFnZSgwKTsKICAgICAg
ICAgRVhQRUNUX05FKHBhZ2UsIG51bGxwdHIpOwogICAgICAgICBFWFBFQ1RfVFJVRShDR1JlY3RF
cXVhbFRvUmVjdChwYWdlLT5ib3VuZHMoKSwgQ0dSZWN0TWFrZSgwLCAwLCA4MDAsIDE0NDAwKSkp
OwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENv
bG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQo
NDAwLCAzMDApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAg
ICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDV1KTsKIAogICAgICAgICBwYWdl
ID0gZG9jdW1lbnQtPnBhZ2UoMSk7CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENH
UmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+
Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2lt
cGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3Rl
ckNvdW50KCksIDB1KTsKIAogICAgICAgICBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMik7CiAgICAg
ICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0
RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCA2MDApKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gQ29s
b3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0
MDAsIDMwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogICAgICAg
ICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgMHUpOwogCiAgICAgICAgIGRpZFRh
a2VTbmFwc2hvdCA9IHRydWU7CkBAIC0xNzgsNyArMTc2LDcgQEAgVEVTVChQREZTbmFwc2hvdCwg
TGlua3MpCiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsKIAogICAgICAgICBFWFBF
Q1RfVFJVRShDR1JlY3RFcXVhbFRvUmVjdChwYWdlLT5ib3VuZHMoKSwgQ0dSZWN0TWFrZSgwLCAw
LCA4MDAsIDE0NDAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQo
NDAwLCAzMDApID09IENvbG9yKDI1NSwgMjU1LCAyNTUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3Io
MjU1LCAyNTUsIDI1NSkpOwogCiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3Vu
dCgpLCA4dSk7CiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT50ZXh0KClbMF0sICdDJyk7CkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL2NvY29hL1Rlc3RQREZEb2N1bWVudC5tbQkocmV2aXNp
b24gMjYyMzUyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE0NCw4ICsxNDQsOCBAQCBXZWJDb3JlOjpDb2xvciBUZXN0
UERGUGFnZTo6Y29sb3JBdFBvaW50CiAgICAgYXV0byBhID0gcGl4ZWxbaSArIDNdOwogCiAgICAg
aWYgKCFhKQotICAgICAgICByZXR1cm4geyAwLCAwLCAwLCAwIH07Ci0gICAgcmV0dXJuIHsgciAq
IDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSB9OworICAgICAgICByZXR1cm4g
V2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDApOworICAgIHJldHVybiBXZWJDb3Jl
OjptYWtlU2ltcGxlQ29sb3IociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwg
YSk7CiB9CiAKIC8vIERvY3VtZW50cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400705</attachid>
            <date>2020-05-31 08:27:13 -0700</date>
            <delta_ts>2020-05-31 09:25:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200531082712.patch</filename>
            <type>text/plain</type>
            <size>123876</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAyMC0wNS0zMCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdJUAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRy
ZWUvQVhJc29sYXRlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2Jq
ZWN0Ojppbml0aWFsaXplQXR0cmlidXRlRGF0YSk6CisgICAgICAgICogY3NzL0NTU1ZhbHVlUG9v
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNDU1NWYWx1ZVBvb2w6OlN0YXRpY0NTU1Zh
bHVlUG9vbCk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNv
bG9yRnVuY3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6Y3JlYXRlSW5uZXJUZXh0
U3R5bGUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2hhZG93Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEgY29uc3QpOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRyYXdPdXRsaW5lZFF1YWRXaXRoQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3U2hhcGVI
aWdobGlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6cGFpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1BhaW50UmVjdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3UnVsZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUpOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VD
b2xvcik6CisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6ZGVidWdUZXh0U2hhZG93KToKKyAgICAgICAgKiBwYWdlL0NhcHRpb25Vc2VyUHJlZmVy
ZW5jZXNNZWRpYUFGLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhcHRpb25Vc2VyUHJlZmVyZW5j
ZXNNZWRpYUFGOjpjYXB0aW9uc0JhY2tncm91bmRDU1MgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG91Y2hFdmVudFJlZ2lv
bkNvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJs
YXk6OmRyYXdSZWN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50Q29udGVudHMpOgorICAgICAgICAqIHBhZ2UvUHJpbnRD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Omxp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkYXJrIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBo
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6ZXh0ZW5kZWRDb2xvcnNFcXVhbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dGFnQXNWYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpkZWNvZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldElzU2VtYW50aWMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZUV4dGVuZGVkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuZGVkQ29sb3I6OkV4dGVuZGVkQ29s
b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OmdldERl
YnVnQm9yZGVySW5mbyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVj
dXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50c0xheWVyRGVi
dWdCb3JkZXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpjbG9uZUxheWVyRGVidWdCb3JkZXJD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRyYW5zZm9y
bUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
OjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUNvdmVyYWdlTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6
VGlsZUNvdmVyYWdlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb3ZlcmFnZU1hcDo6dXBk
YXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvTmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZVNpbmds
ZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZvck1hcmtlckxp
bmVTdHlsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVy
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6
YmxlbmQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lUaWxlQ2FjaGU6
OmNvbG9yRm9yR3JpZFRpbGVCb3JkZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9QYWlu
dEluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhaW50SW5mbzo6Zm9yY2VkVGV4dENvbG9yIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyZXBsYWNlbWVudFRleHRDb2xvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRnJhbWVTZXQ6OnBhaW50Q29sdW1uQm9yZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZyYW1lU2V0OjpwYWludFJvd0JvcmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpib3JkZXJTdGFydEVkZ2VDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpi
b3JkZXJFbmRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXJzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsYXlzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9y
bVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWU6OnBsYXRmb3JtVGFwSGlnaGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
aGVtZUlPUy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpzaGFkb3dDb2xvciBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNv
cmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jh
cik6CisgICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmF0dGFjaG1lbnRCb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjp0aXRsZVRleHRDb2xv
ckZvckF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXR0YWNobWVudExheW91dDo6bGF5
T3V0U3VidGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50SWNvbkJhY2tn
cm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91
bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NC
YXJGaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxp
bmVMYXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09w
YWNpdHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0
aXZlVmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNv
bG9yRnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJh
d1JlY3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0
aW9uT3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zl
cmxheSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMwICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRlbmRlZCBDb2xvcjog
QWRkaXRpb25hbCBjb2xvciBjbGVhbnVwcwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZE9iamVjdC5j
cHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNv
bGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0aWFsaXplQXR0cmlidQogICAgIAog
ICAgIGludCByLCBnLCBiOwogICAgIG9iamVjdC5jb2xvclZhbHVlKHIsIGcsIGIpOwotICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBDb2xvcihyLCBnLCBiKSk7Cisg
ICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbG9yVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cihyLCBnLCBiKSk7CiAgICAgCiAgICAgaWYgKGJvb2wgaXNNYXRoRWxlbWVudCA9IG9iamVjdC5p
c01hdGhFbGVtZW50KCkpIHsKICAgICAgICAgc2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Oklz
TWF0aEVsZW1lbnQsIGlzTWF0aEVsZW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVl
UG9vbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIFN0YXRpY0NTU1ZhbHVl
UG9vbDo6U3RhdGljQ1NTVmFsdWVQb29sKCkKICAgICBtX3Vuc2V0VmFsdWUuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSk7CiAgICAgbV9yZXZlcnRWYWx1ZS5jb25zdHJ1Y3QoQ1NT
VmFsdWU6OlN0YXRpY0NTU1ZhbHVlKTsKIAotICAgIG1fdHJhbnNwYXJlbnRDb2xvci5jb25zdHJ1
Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpKTsK
LSAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3IoQ29sb3I6OndoaXRlKSk7Ci0gICAgbV9ibGFja0NvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6
U3RhdGljQ1NTVmFsdWUsIENvbG9yKENvbG9yOjpibGFjaykpOworICAgIG1fdHJhbnNwYXJlbnRD
b2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVlLCBDb2xvcjo6dHJhbnNwYXJl
bnQpOworICAgIG1fd2hpdGVDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRpY0NTU1ZhbHVl
LCBDb2xvcjo6d2hpdGUpOworICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0
YXRpY0NTU1ZhbHVlLCBDb2xvcjo6YmxhY2spOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gZmly
c3RDU1NWYWx1ZUtleXdvcmQ7IGkgPD0gbGFzdENTU1ZhbHVlS2V5d29yZDsgKytpKQogICAgICAg
ICBtX2lkZW50aWZpZXJWYWx1ZXNbaV0uY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTVmFsdWVJRD4oaSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODcsNyArNjg3LDcgQEAgc3RhdGljIENv
bG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcgogICAgIGlmICghYXJncy5hdEVuZCgpKQog
ICAgICAgICByZXR1cm4gQ29sb3IoKTsKICAgICAKLSAgICByZXR1cm4gQ29sb3IoY29sb3JDaGFu
bmVsc1swXSwgY29sb3JDaGFubmVsc1sxXSwgY29sb3JDaGFubmVsc1syXSwgY29sb3JDaGFubmVs
c1szXSwgY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIG1ha2VFeHRlbmRlZENvbG9yKGNvbG9yQ2hh
bm5lbHNbMF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5l
bHNbM10sIGNvbG9yU3BhY2UpOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IHBh
cnNlSGV4Q29sb3IoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIGJvb2wgYWNjZXB0UXVpcmt5
Q29sb3JzKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDkyLDcgKzIwOTIsNyBAQCBSZW5kZXJTdHlsZSBIVE1M
SW5wdXRFbGVtZW50OjpjcmVhdGVJbm5lCiAgICAgaWYgKGhhc0F1dG9GaWxsU3Ryb25nUGFzc3dv
cmRCdXR0b24oKSAmJiAhaXNEaXNhYmxlZE9yUmVhZE9ubHkoKSkgewogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXREaXNwbGF5KERpc3BsYXlUeXBlOjpJbmxpbmVCbG9jayk7CiAgICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldE1heFdpZHRoKExlbmd0aCB7IDEwMCwgUGVyY2VudCB9KTsKLSAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IoeyAwLjBmLCAwLjBmLCAwLjBmLCAwLjZmIH0pOwor
ICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MTUzKSk7CiAgICAgICAgIHRleHRCbG9ja1N0eWxlLnNldFRleHRPdmVyZmxvdyhUZXh0T3ZlcmZs
b3c6OkNsaXApOwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRNYXNrSW1hZ2UoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGF1dG9GaWxsU3Ryb25nUGFzc3dvcmRNYXNrSW1hZ2UoKSkpOwog
ICAgICAgICAvLyBBIHN0YWNraW5nIGNvbnRleHQgaXMgbmVlZGVkIGZvciB0aGUgbWFzay4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0U2gKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNoYWRv
d0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ29sb3Ioc3RhdGUoKS5zaGFkb3dDb2xvciku
c2VyaWFsaXplZCgpOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0NvbG9yLnNlcmlhbGl6ZWQo
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaGFkb3dDb2xv
cihjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQpAQCAtMTMwNywxNyArMTMwNywxNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoCiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZs
b2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IoZ3JheUxldmVsLCBncmF5TGV2
ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIs
IGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZs
b2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3IociwgZywgYiwgYSkpOworICAgIHNl
dFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQogewotICAgIHNldFNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2lt
cGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNsZWFyU2hhZG93KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
MTcgKzkzLDE3IEBAIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShDb2xvciBjb2xvcikKIH0KIAog
Q2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCi0g
ICAgOiBtX3N0eWxlKENvbG9yIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxw
aGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWws
IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52
YXNTdHlsZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHls
ZShDb2xvciB7IHIsIGcsIGIsIGEgfSkKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhyLCBnLCBiLCBhKSkKIHsKIH0KIAogQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAgOiBtX3N0eWxl
KENNWUtBQ29sb3IgeyBDb2xvciB7IGMsIG0sIHksIGssIGEgfSwgYywgbSwgeSwgaywgYSB9KQor
ICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0s
IHksIGssIGEpLCBjLCBtLCB5LCBrLCBhIH0pCiB7CiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zCiAKIGJvb2wgQ2FudmFzU3R5
bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHls
ZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9Owor
ICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBi
LCBhKTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JPdmVybGF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIGRyYXdPdXRsaW5lZFF1
YWRXaXRoQ2xpcChHcmEKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgocXVhZCwgYm91
bmRzKSk7CiAKICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6RGVzdGluYXRpb25PdXQpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1
NSwgMCwgMCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDAsIDApKTsKICAgICBjb250ZXh0LmZpbGxQYXRoKHF1YWRUb1BhdGgoY2xpcFF1YWQsIGJvdW5k
cykpOwogfQogCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYXBlSGlnaGxp
Z2h0KEdyYXBoaWNzQwogICAgIEZyYW1lVmlldyogY29udGFpbmluZ1ZpZXcgPSBjb250YWluaW5n
RnJhbWUtPnZpZXcoKTsKICAgICBGcmFtZVZpZXcqIG1haW5WaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKTsKIAotICAgIGNvbnN0IENvbG9yIHNoYXBlSGln
aGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CisgICAgY29uc3RleHByIGF1dG8gc2hhcGVI
aWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig5NiwgODIsIDEyNywgMjA0KTsKIAogICAg
IFNoYXBlOjpEaXNwbGF5UGF0aHMgcGF0aHM7CiAgICAgc2hhcGVPdXRzaWRlSW5mby0+Y29tcHV0
ZWRTaGFwZSgpLmJ1aWxkRGlzcGxheVBhdGhzKHBhdGhzKTsKQEAgLTM0NSw3ICszNDUsNyBAQCBz
dGF0aWMgdm9pZCBkcmF3U2hhcGVIaWdobGlnaHQoR3JhcGhpY3NDCiAKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0
IENvbG9yIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CisgICAg
ICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoOTYsIDgyLCAxMjcsIDE1Myk7CiAgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKHNo
YXBlTWFyZ2luSGlnaGxpZ2h0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZpbGxQYXRoKG1hcmdp
blBhdGgpOwogICAgIH0KQEAgLTM4Miw3ICszODIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KEdyYXBoaWNzQ29uCiAgICAgaWYgKG1faW5kaWNhdGluZykgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICAgICAgY29u
c3QgQ29sb3IgaW5kaWNhdGluZ0NvbG9yKDExMSwgMTY4LCAyMjAsIDE2OCk7CisgICAgICAgIGNv
bnN0ZXhwciBhdXRvIGluZGljYXRpbmdDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMTEsIDE2OCwg
MjIwLCAxNjgpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihpbmRpY2F0aW5nQ29sb3Ip
OwogICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHsgRmxvYXRQb2ludDo6emVybygpLCB2aWV3cG9y
dFNpemUgfSk7CiAgICAgfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd1BhaW50UmVjdHMoR3IKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKLSAgICBjb25zdCBDb2xvciBwYWludFJlY3RzQ29sb3IoMS4w
ZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHByIGF1dG8gcGFpbnRSZWN0c0NvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMTI4KTsKICAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihwYWludFJlY3RzQ29sb3IpOwogCiAgICAgZm9yIChjb25zdCBUaW1lUmVjdFBhaXImIHBh
aXIgOiBwYWludFJlY3RzKQpAQCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgSW5zcGVjdG9yT3Zlcmxh
eTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKDEp
OwogCi0gICAgY29uc3QgQ29sb3IgYm91bmRzQ29sb3IoMS4wZiwgMC4wZiwgMC4wZiwgMC42Zik7
CisgICAgY29uc3RleHByIGF1dG8gYm91bmRzQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAw
LCAwLCAxNTMpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm91bmRzQ29sb3IpOwogCiAg
ICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtNjcwLDkgKzY3MCw5IEBAIHZvaWQgSW5z
cGVjdG9yT3ZlcmxheTo6ZHJhd0JvdW5kcyhHcmFwaGkKIAogdm9pZCBJbnNwZWN0b3JPdmVybGF5
OjpkcmF3UnVsZXJzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW5zcGVjdG9yT3Zl
cmxheTo6UnVsZXJFeGNsdXNpb24mIHJ1bGVyRXhjbHVzaW9uKQogewotICAgIGNvbnN0IENvbG9y
IHJ1bGVyQmFja2dyb3VuZENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDAuNmYpOwotICAgIGNvbnN0
IENvbG9yIGxpZ2h0UnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjJmKTsKLSAgICBjb25z
dCBDb2xvciBkYXJrUnVsZXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25z
dGV4cHIgYXV0byBydWxlckJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxNTMpOworICAgIGNvbnN0ZXhwciBhdXRvIGxpZ2h0UnVsZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCA1MSk7CisgICAgY29uc3RleHByIGF1dG8gZGFya1J1bGVyQ29s
b3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMTI4KTsKIAogICAgIEludFBvaW50IHNjcm9s
bE9mZnNldDsKIApAQCAtMTA0NiwxNCArMTA0NiwxNCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6
OmRyYXdFbGVtZW50VGl0bGUoCiAKICAgICBjb250ZXh0LnRyYW5zbGF0ZShlbGVtZW50RGF0YUJv
cmRlclNpemUgLyAyLjBmLCBlbGVtZW50RGF0YUJvcmRlclNpemUgLyAyLjBmKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJhY2tncm91bmRDb2xvcigyNTUsIDI1NSwgMTk0KTsKKyAg
ICBjb25zdGV4cHIgYXV0byBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjU1LCAyNTUsIDE5NCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZWxlbWVudFRp
dGxlQmFja2dyb3VuZENvbG9yKTsKIAogICAgIGNvbnRleHQuZmlsbFBhdGgocGF0aCk7CiAKICAg
ICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhlbGVtZW50RGF0YUJvcmRlclNpemUpOwogCi0g
ICAgY29uc3QgQ29sb3IgZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IoMTI4LCAxMjgsIDEyOCk7Cisg
ICAgY29uc3RleHByIGF1dG8gZWxlbWVudFRpdGxlQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMTI4LCAxMjgsIDEyOCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihlbGVtZW50VGl0
bGVCb3JkZXJDb2xvcik7CiAKICAgICBjb250ZXh0LnN0cm9rZVBhdGgocGF0aCk7CkBAIC0xMDY4
LDEwICsxMDY4LDEwIEBAIFBhdGggSW5zcGVjdG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgK
ICAgICAgICAgdGV4dFBvc2l0aW9uWCArPSBjb250ZXh0LmRyYXdUZXh0KGZvbnQsIFRleHRSdW4o
dGV4dCksIHsgdGV4dFBvc2l0aW9uWCwgdGV4dFBvc2l0aW9uWSB9KTsKICAgICB9OwogCi0gICAg
ZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRo
aXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3MgKC50YWcpCi0gICAgZHJhd1RleHQoZWxlbWVu
dElEVmFsdWUsIENvbG9yKDI2LCAyNiwgMTY2KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
WE1MVmlld2VyLmNzcyAoLmF0dHJpYnV0ZS12YWx1ZSkKLSAgICBkcmF3VGV4dChlbGVtZW50Q2xh
c3NWYWx1ZSwgQ29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC5hdHRyaWJ1dGUtbmFtZSkKLSAgICBkcmF3VGV4dChlbGVtZW50UHNldWRv
VHlwZSwgQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1M
Vmlld2VyLmNzcyAoLnRhZykKKyAgICBkcmF3VGV4dChlbGVtZW50VGFnTmFtZSwgbWFrZVNpbXBs
ZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudElEVmFsdWUsIG1ha2VTaW1wbGVDb2xv
cigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5jc3Mg
KC5hdHRyaWJ1dGUtdmFsdWUpCisgICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFsdWUsIG1ha2VT
aW1wbGVDb2xvcigxNTMsIDY5LCAwKSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggWE1MVmll
d2VyLmNzcyAoLmF0dHJpYnV0ZS1uYW1lKQorICAgIGRyYXdUZXh0KGVsZW1lbnRQc2V1ZG9UeXBl
LCBtYWtlU2ltcGxlQ29sb3IoMTM2LCAxOCwgMTI4KSk7IC8vIEtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggWE1MVmlld2VyLmNzcyAoLnRhZykKICAgICBkcmF3VGV4dCgiICJfcywgQ29sb3I6OmJsYWNr
KTsKICAgICBkcmF3VGV4dChlbGVtZW50V2lkdGgsIENvbG9yOjpibGFjayk7CiAgICAgZHJhd1Rl
eHQoInB4Il9zLCBDb2xvcjo6ZGFya0dyYXkpOwpAQCAtMTA4NSw3ICsxMDg1LDcgQEAgUGF0aCBJ
bnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKAogICAgICAgICB0ZXh0UG9zaXRpb25Y
ID0gYm94WCArIGVsZW1lbnREYXRhU3BhY2luZzsKICAgICAgICAgdGV4dFBvc2l0aW9uWSArPSBm
b250SGVpZ2h0OwogCi0gICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBDb2xvcigxNzAsIDEzLCAx
NDUpKTsKKyAgICAgICAgZHJhd1RleHQoIlJvbGUiX3MsIG1ha2VTaW1wbGVDb2xvcigxNzAsIDEz
LCAxNDUpKTsKICAgICAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAgICAgICAg
IGRyYXdUZXh0KGVsZW1lbnRSb2xlLCBDb2xvcjo6YmxhY2spOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamUKIAogICAgIGRvdWJsZSBh
ID0gMS4wOwogICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgiYSIsIGEpKQotICAgICAg
ICByZXR1cm4gQ29sb3IociwgZywgYik7CisgICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3Io
ciwgZywgYik7CiAKICAgICAvLyBDbGFtcCBhbHBoYSB0byB0aGUgWzAuLjFdIHJhbmdlLgogICAg
IGlmIChhIDwgMCkKQEAgLTE0OSw3ICsxNDksNyBAQCBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihj
b25zdCBKU09OOjpPYmplCiAgICAgZWxzZSBpZiAoYSA+IDEpCiAgICAgICAgIGEgPSAxOwogCi0g
ICAgcmV0dXJuIENvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwgc3RhdGljX2Nhc3Q8aW50PihhICogMjU1
KSk7CiB9CiAKIHN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVjdCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJ
bnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIFNoYWRvd0RhdGEqIExpbmVMYXlvdXQ6
OmRlYnVnVGV4dFNoYWRvdygKICAgICBpZiAoIW1fZmxvdy5zZXR0aW5ncygpLnNpbXBsZUxpbmVM
YXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlYnVnVGV4dFNoYWRvdyhJbnRQ
b2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcigwLCAw
LCAxNTAsIDE1MCkpOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1
Z1RleHRTaGFkb3coSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDE1MCwgMTUwKSk7CiAgICAgcmV0dXJuICZkZWJ1
Z1RleHRTaGFkb3cuZ2V0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2FwdGlv
blVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2FwdGlvblVzZXJQcmVmZXJlbmNlc01lZGlhQUYuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDcgKzI4OCw3IEBAIFN0cmluZyBDYXB0aW9uVXNlclBy
ZWZlcmVuY2VzTWVkaWFBRjo6Y2EKIHsKICAgICAvLyBUaGlzIGRlZmF1bHQgdmFsdWUgbXVzdCBi
ZSB0aGUgc2FtZSBhcyB0aGUgb25lIHNwZWNpZmllZCBpbiBtZWRpYUNvbnRyb2xzLmNzcyBmb3Ig
LXdlYmtpdC1tZWRpYS10ZXh0LXRyYWNrLXBhc3Qtbm9kZXMKICAgICAvLyBhbmQgd2Via2l0LW1l
ZGlhLXRleHQtdHJhY2stZnV0dXJlLW5vZGVzLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
b2xvcj4gZGVmYXVsdEJhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwLjggKiAyNTUpOworICAgIGNv
bnN0ZXhwciBhdXRvIGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMC44ICogMjU1KTsKIAogICAgIE1BQ2FwdGlvbkFwcGVhcmFuY2VCZWhhdmlvciBiZWhh
dmlvcjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBleHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3IoMC41ZiwgMC4wZiwgMC4wZiwgMC40Zikp
CisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQogICAgIHsKICAgICB9CiAKQEAgLTExOCw3ICsxMTgs
NyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBD
b2xvcigxLjBmLCAwLjVmLCAwLjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBh
Z2UsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCiAg
ICAgewogICAgIH0KIApAQCAtMTQ0LDcgKzE0NCw3IEBAIGJvb2wgTm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5Ojp1cGQKICAgICByZXR1cm4gcmVnaW9uQ2hhbmdlZDsKIH0KIAotc3RhdGlj
IGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKQor
c3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4mIHRvdWNoRXZlbnRSZWdp
b25Db2xvcnMoKQogewogICAgIHN0YXRpYyBjb25zdCBhdXRvIHJlZ2lvbkNvbG9ycyA9IG1ha2VO
ZXZlckRlc3Ryb3llZChbXSB7CiAgICAgICAgIHN0cnVjdCBNYXBFbnRyeSB7CkBAIC0xNjMsOSAr
MTYzLDkgQEAgc3RhdGljIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBDb2xvcj4mIHRvdQogICAgICAg
ICAgICAgeyAibW91c2Vtb3ZlIl9zLCAyNDUsIDI0NSwgODAgfSwKICAgICAgICAgICAgIHsgIm1v
dXNldXAiX3MsIDgwLCAyNDUsIDE3NiB9LAogICAgICAgICB9OwotICAgICAgICBIYXNoTWFwPFN0
cmluZywgQ29sb3I+IG1hcDsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFNpbXBsZUNvbG9yPiBt
YXA7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBlbnRyaWVzKQotICAgICAgICAgICAgbWFw
LmFkZChlbnRyeS5uYW1lLCBDb2xvciB7IGVudHJ5LnIsIGVudHJ5LmcsIGVudHJ5LmIsIDUwIH0p
OworICAgICAgICAgICAgbWFwLmFkZChlbnRyeS5uYW1lLCBtYWtlU2ltcGxlQ29sb3IoZW50cnku
ciwgZW50cnkuZywgZW50cnkuYiwgNTApKTsKICAgICAgICAgcmV0dXJuIG1hcDsKICAgICB9KCkp
OwogICAgIHJldHVybiByZWdpb25Db2xvcnM7CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBOb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbk92ZXJsYXk6OmRyYQogI2VuZGlmCiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHN5bmNocm9ub3VzRXZlbnRSZWdpb24gOiBtX2V2ZW50VHJhY2tpbmdSZWdpb25zLmV2
ZW50U3BlY2lmaWNTeW5jaHJvbm91c0Rpc3BhdGNoUmVnaW9ucykgewotICAgICAgICBDb2xvciBy
ZWdpb25Db2xvcigwLCAwLCAwLCA2NCk7CisgICAgICAgIGF1dG8gcmVnaW9uQ29sb3IgPSBtYWtl
U2ltcGxlQ29sb3IoMCwgMCwgMCwgNjQpOwogICAgICAgICBhdXRvIGl0ID0gdG91Y2hFdmVudFJl
Z2lvbkNvbG9ycygpLmZpbmQoc3luY2hyb25vdXNFdmVudFJlZ2lvbi5rZXkpOwogICAgICAgICBp
ZiAoaXQgIT0gdG91Y2hFdmVudFJlZ2lvbkNvbG9ycygpLmVuZCgpKQogICAgICAgICAgICAgcmVn
aW9uQ29sb3IgPSBpdC0+dmFsdWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNDMsNyArNDI0Myw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENv
bnRlbnRzKEdyYXBoaWNzQ28KICAgICBpZiAoZmlsbFdpdGhXYXJuaW5nQ29sb3IpIHsKICAgICAg
ICAgSW50UmVjdCBkZWJ1Z1JlY3QgPSBmcmFtZVJlY3QoKTsKICAgICAgICAgZGVidWdSZWN0Lmlu
dGVyc2VjdChkaXJ0eVJlY3QpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwg
Q29sb3IoMjU1LCA2NCwgMjU1KSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoZGVidWdSZWN0
LCBtYWtlU2ltcGxlQ29sb3IoMjU1LCA2NCwgMjU1KSk7CiAgICAgfQogI2VuZGlmCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMw
LDcgKzQzMCw3IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW4KICAg
ICBpbnQgdG90YWxIZWlnaHQgPSBwYWdlUmVjdHMuc2l6ZSgpICogKHBhZ2VTaXplSW5QaXhlbHMu
aGVpZ2h0KCkgKyAxKSAtIDE7CiAKICAgICAvLyBGaWxsIHRoZSB3aG9sZSBiYWNrZ3JvdW5kIGJ5
IHdoaXRlLgotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUs
IDI1NSkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAyNTUpKTsKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0
KDAsIDAsIHBhZ2VXaWR0aCwgdG90YWxIZWlnaHQpKTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5z
YXZlKCk7CkBAIC00NDUsOCArNDQ1LDggQEAgdm9pZCBQcmludENvbnRleHQ6OnNwb29sQWxsUGFn
ZXNXaXRoQm91bgogICAgICAgICAgICAgaW50IGJvdW5kYXJ5TGluZVkgPSBjdXJyZW50SGVpZ2h0
IC0gMTsKICNlbmRpZgogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsK
LSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwgMjU1
KSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDI1NSkpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0xpbmUoSW50UG9pbnQoMCwgYm91bmRhcnlMaW5lWSksIEludFBvaW50KHBhZ2VX
aWR0aCwgYm91bmRhcnlMaW5lWSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3Rv
cmUoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWlu
dENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJy
aWRlCiAgICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
Y29udGV4dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgQ29sb3IoMC4wZiwgMC4w
ZiwgMC4wZiwgMC44ZikpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigwLjlm
LCAwLjlmLCAwLjlmLCAxLmYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChjbGlwLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjlmLCAwLjlm
LCAwLjlmLCAxLmYpKTsKIAogICAgICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0geyAxMCwgMjAg
fTsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9ICAiQ1BVOiAiICsgY3B1VXNhZ2VTdHJpbmcoZ0Rh
dGEuY3B1KTsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJlc291cmNlVXNhZ2VPdmVybGF5Ojpw
bGF0Zm9ybUluaXRpCiAgICAgbV9wYWludExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKG92
ZXJsYXkoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCks
ICptX292ZXJsYXlQYWludGVyKTsKICAgICBtX3BhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldFNpemUoeyBub3JtYWxXaWR0aCwg
bm9ybWFsSGVpZ2h0IH0pOwotICAgIG1fcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tn
cm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
OGYpKTsKICAgICBtX3BhaW50TGF5ZXItPnNldERyYXdzQ29udGVudCh0cnVlKTsKICAgICBvdmVy
bGF5KCkubGF5ZXIoKS5hZGRDaGlsZCgqbV9wYWludExheWVyKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaQogCiAgICAgICAgIGlmICghZnJhbWVIYXNEZWNvZGVkTmF0
aXZlSW1hZ2VDb21wYXRpYmxlV2l0aE9wdGlvbnNBdEluZGV4KG1fY3VycmVudEZyYW1lLCBtX2N1
cnJlbnRTdWJzYW1wbGluZ0xldmVsLCBEZWNvZGluZ09wdGlvbnMoRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMpKSkgewogICAgICAgICAgICAgaWYgKG1fc2hvd0RlYnVnQmFja2dyb3VuZCkKLSAg
ICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENvbG9y
KENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRl
c3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAK
QEAgLTI0OCw3ICsyNDgsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpCiAgICAgICAgIEFTU0VSVF9JTVBMSUVTKHN0YXR1cyA9PSBTdGFydEFuaW1hdGlvblN0YXR1
czo6RGVjb2RpbmdBY3RpdmUsICghbV9jdXJyZW50RnJhbWUgJiYgIW1fcmVwZXRpdGlvbnNDb21w
bGV0ZSkgfHwgZnJhbWVIYXNGdWxsU2l6ZU5hdGl2ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFt
ZSwgbV9jdXJyZW50U3Vic2FtcGxpbmdMZXZlbCkpOwogCiAgICAgICAgIGlmIChzdGF0dXMgPT0g
U3RhcnRBbmltYXRpb25TdGF0dXM6OkRlY29kaW5nQWN0aXZlICYmIG1fc2hvd0RlYnVnQmFja2dy
b3VuZCkgewotICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0
LCBDb2xvcihDb2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCkpOworICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjY2LDcgKzI2Niw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGkKICAgICAgICAgfSBlbHNlIGlmIChmcmFtZUlzQmVpbmdEZWNvZGVkKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogaW5zdGVhZCBvZiBzaG93aW5nIHRoZSB5ZWxsb3cgcmVj
dGFuZ2xlIGFuZCByZXR1cm5pbmcgd2UgbmVlZCB0byB3YWl0IGZvciB0aGlzIGZyYW1lIHRvIGZp
bmlzaCBkZWNvZGluZy4KICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpIHsK
LSAgICAgICAgICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIENv
bG9yKENvbG9yOjp5ZWxsb3cpLmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSk7CisgICAgICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQs
IGRlc3RSZWN0LCBDb2xvcjo6eWVsbG93LmNvbG9yV2l0aEFscGhhKDAuNSksIG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcElt
YWdlOjolcyAtICVwIC0gdXJsOiAlcyBbd2FpdGluZyBmb3IgYXN5bmMgZGVjb2RpbmcgdG8gZmlu
aXNoXSIsIF9fRlVOQ1RJT05fXywgdGhpcywgc291cmNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWRSZXF1ZXN0RGVjb2Rpbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDIwICs2Niw2IEBA
IENvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQogICAgICp0aGlzID0gV1RGTW92ZShvdGhlcik7
CiB9CiAKLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMzLCBmbG9hdCBh
bHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotICAgIDogQ29sb3IoRXh0ZW5kZWRDb2xvcjo6
Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSkKLXsKLX0KLQotQ29sb3I6OkNv
bG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCi17Ci0gICAgLy8gWmVybyB0
aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25zIHRoZQot
ICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5kZWRDb2xvciBwb2ludGVy
IGJlbG93LgotICAgIG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgPSAwOwotICAgIG1f
Y29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xvci5sZWFrUmVmKCk7Ci0gICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7Ci19Ci0KIENvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KGNvbnN0
IENvbG9yJiBvdGhlcikKIHsKICAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCkBAIC0xNDcsMTIgKzEz
MywxMiBAQCBDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAogCiAgICAgZmxvYXQgbXVsdGlwbGll
ciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0gICAgcmV0dXJuIHsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yKAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiByICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAogICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBiICogc2NhbGVGYWN0b3IpLAogICAgICAgICBhbHBoYSgpCi0gICAgfTsKKyAgICApOwog
fQogCiBDb2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0CkBAIC0xNjgsMTIgKzE1NCwxMiBAQCBDb2xv
ciBDb2xvcjo6ZGFyaygpIGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9
KTsKICAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2
KTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAg
YWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAogYm9vbCBDb2xvcjo6aXNEYXJrKCkgY29uc3QK
QEAgLTI0NSwxOSArMjMxLDE5IEBAIENvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
CiAKICAgICAvLyBGSVhNRTogV2h5IGlzIHByZXNlcnZpbmcgdGhlIHNlbWFudGljIGJpdCBkZXNp
cmVkIGFuZC9vciBjb3JyZWN0IGhlcmU/CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAg
cmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnkoZmxvYXQgYW1vdW50KSBjb25zdAogewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIGZsb2F0IG5ld0FscGhh
ID0gYW1vdW50ICogYWxwaGFBc0Zsb2F0KCk7CiAgICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5l
d0FscGhhKTsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBu
ZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7CiB9CiAKQEAgLTI3
MSw3ICsyNTcsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpCiAK
ICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsK
ICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwor
ICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
QEAgLTI4NSw3ICsyNzEsNyBAQCBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVy
bmF0CiAKICAgICBDb2xvciByZXN1bHQgPSBhc1NpbXBsZSgpLmNvbG9yV2l0aEFscGhhKG5ld0Fs
cGhhKTsKICAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRp
YygpOworICAgICAgICByZXN1bHQudGFnQXNTZW1hbnRpYygpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKQEAgLTMyNSwxNSArMzExLDYgQEAgQ29sb3JDb21wb25lbnRzPGZsb2F0PiBDb2xvcjo6
dG9TUkdCQUNvbQogICAgIHJldHVybiBhc1NpbXBsZSgpLmFzU1JHQkZsb2F0Q29tcG9uZW50cygp
OwogfQogCi1ib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENv
bG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSAmJiBiLmlzRXh0ZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuIGEuYXNFeHRlbmRlZCgpID09IGIuYXNFeHRlbmRlZCgpOwotCi0gICAgQVNT
RVJUKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKTsKLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKIHsKICAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRv
IGhhbmRsZSBjb2xvciBzcGFjZXMuCkBAIC0zNjUsMTcgKzM0MiwxMiBAQCBDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNp
bXBsZUNvbG9yTG9zc3koKTsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJlZENvbXBv
bmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29y
ZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29tcG9uZW50
KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1ZUNvbXBv
bmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNv
cmU6OmJsZW5kKGZyb21TUkdCLmFscGhhQ29tcG9uZW50KCksIHRvU1JHQi5hbHBoYUNvbXBvbmVu
dCgpLCBwcm9ncmVzcykKLSAgICB9OwotfQotCi12b2lkIENvbG9yOjp0YWdBc1ZhbGlkKCkKLXsK
LSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IHZhbGlkU2ltcGxlQ29sb3I7
CisgICAgKTsKIH0KIAogVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw0MCArNTYsMjUgQEAgY2xhc3MgQ29s
b3IgewogcHVibGljOgogICAgIENvbG9yKCkgeyB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KLQotICAg
IENvbG9yKFNpbXBsZUNvbG9yIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICBDb2xvcihT
aW1wbGVDb2xvciBjb2xvcikKICAgICB7Ci0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAg
IHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgc2V0U2ltcGxlQ29sb3IoY29sb3IpOwog
ICAgIH0KIAogICAgIGVudW0gU2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OwogICAgIENvbG9yKFNp
bXBsZUNvbG9yIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICAgICAgOiBDb2xvcihjb2xvcikKICAg
ICB7Ci0gICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRp
YygpOwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAg
ICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29sb3IociwgZywgYikpOwotICAgIH0KLQot
ICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0
U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSk7Cisg
ICAgICAgIHRhZ0FzU2VtYW50aWMoKTsKICAgICB9CiAKLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNv
bG9yIGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIENvbG9yKFJl
ZjxFeHRlbmRlZENvbG9yPiYmIGV4dGVuZGVkQ29sb3IpCiAgICAgewotICAgICAgICBzZXRTaW1w
bGVDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSkpOworICAgICAg
ICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFz
c2lnbnMgdGhlCisgICAgICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgRXh0ZW5k
ZWRDb2xvciBwb2ludGVyIGJlbG93LgorICAgICAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFu
ZEZsYWdzID0gMDsKKyAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRlbmRl
ZENvbG9yLmxlYWtSZWYoKTsKKyAgICAgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CiAgICAgfQog
CiAgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpAQCAt
MTE0LDEyICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwog
ICAgIH0KIAotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgotICAgIC8vIEZJ
WE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUK
LSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBu
b3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZsb2F0LCBmbG9h
dCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKFJlZjxFeHRl
bmRlZENvbG9yPiYmKTsKLQogICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0IENvbG9yJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CiAKQEAgLTE2MCw3ICsxMzksNiBA
QCBwdWJsaWM6CiAgICAgQ29sb3IgZGFyaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0RhcmsoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsK
IAogICAgIC8vIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291
cmNlLW92ZXIiIGVxdWF0aW9uCkBAIC0yMjIsNyArMjAwLDcgQEAgcHVibGljOgogICAgIC8vIEV4
dGVuZGVkIGFuZCBub24tZXh0ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4K
ICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
Yik7CiAgICAgZnJpZW5kIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLQorICAgIGZyaWVuZCBib29sIGV4dGVuZGVkQ29sb3Jz
RXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogICAgIGZyaWVuZCBpbnQgZGlmZmVy
ZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCiAgICAgc3RhdGljIGJv
b2wgaXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJik7CkBAIC0yMzUsNyArMjEzLDkgQEAgcHJpdmF0
ZToKICAgICBjb25zdCBTaW1wbGVDb2xvciBhc1NpbXBsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBz
ZXRTaW1wbGVDb2xvcihTaW1wbGVDb2xvcik7Ci0gICAgdm9pZCBzZXRJc1NlbWFudGljKCkgeyBt
X2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJp
dDsgfQorCisgICAgdm9pZCB0YWdBc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5zaW1wbGVDb2xv
ckFuZEZsYWdzIHw9IGlzU2VtYW50aWNTaW1wbGVDb2xvckJpdDsgfQorICAgIHZvaWQgdGFnQXNW
YWxpZCgpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNv
bG9yOyB9CiAKICAgICAvLyAweF9fX19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIu
CiAgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBTaW1wbGVDb2xvci4KQEAgLTI0OSw4
ICsyMjksNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwogICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOwotCiAgICAgdW5pb24gewogICAgICAgICB1aW50NjRfdCBzaW1w
bGVDb2xvckFuZEZsYWdzIHsgaW52YWxpZFNpbXBsZUNvbG9yIH07CiAgICAgICAgIEV4dGVuZGVk
Q29sb3IqIGV4dGVuZGVkQ29sb3I7CkBAIC0yNjEsNyArMjM5LDcgQEAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sbwogYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKTsKIAogLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMu
Ci1XRUJDT1JFX0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBj
b25zdCBDb2xvciYpOworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKIAogQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKTsKIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CkBAIC0y
ODgsNiArMjY2LDE1IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGMK
ICAgICByZXR1cm4gIShhID09IGIpOwogfQogCitpbmxpbmUgYm9vbCBleHRlbmRlZENvbG9yc0Vx
dWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVu
ZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9
PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0
ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBlcXVhbElnbm9y
aW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCiB7CiAgICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQpAQCAtMzk2LDcgKzM4Myw3IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFj
ZSkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1cm4gQ29s
b3IgeyBjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSB9OworICAgICAgICByZXR1cm4gQ29s
b3IgeyBFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2Up
IH07CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlkOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgogCisjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtMTA1LDQgKzEwNiw5IEBAIGJvb2wgRXh0ZW5kZWRDb2xvcjo6
aXNCbGFjaygpIGNvbnN0CiAgICAgcmV0dXJuICFjMSAmJiAhYzIgJiYgIWMzICYmIGFscGhhID09
IDE7CiB9CiAKK0NvbG9yIG1ha2VFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxv
YXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgcmV0dXJu
IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRl
bmRlZENvbG9yLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOSArMzMsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDb2xvcjsKKwogY2xhc3MgRXh0ZW5k
ZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCBhbHBoYSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlKTsKIAogICAgIGZsb2F0IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9jb21wb25lbnRzWzNdOyB9CiAKQEAgLTU4LDEwICs2MCwxMSBA
QCBwcml2YXRlOgogICAgIEV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MywgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKICAgICAgICAgOiBtX2NvbXBv
bmVudHMoYzEsIGMyLCBjMywgYWxwaGEpCiAgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCi0gICAgeyB9CisgICAgeworICAgIH0KIAogICAgIENvbG9yQ29tcG9uZW50czxmbG9hdD4g
bV9jb21wb25lbnRzOwotICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6
U1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOwogfTsKIAogaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFeHRlbmRlZENvbG9yJiBhLCBjb25zdCBFeHRlbmRlZENvbG9yJiBi
KQpAQCAtNzQsNCArNzcsOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEV4dGVuZGVk
Q29sCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAorLy8gRklYTUU6IElmIHRoZSBDb2xvclNw
YWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBiZQorLy8gY29udmVydGVkIGV4YWN0
bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgU2ltcGxlQ29sb3IuCitXRUJDT1JFX0VY
UE9SVCBDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDM0ICs1OTgsMzQgQEAgdm9pZCBHcmFwaGljc0xheWVy
OjpnZXREZWJ1Z0JvcmRlckluZm8oQwogICAgIHdpZHRoID0gMjsKIAogICAgIGlmIChuZWVkc0Jh
Y2tkcm9wKCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigyNTUsIDAsIDI1NSwgMTI4KTsgLy8g
aGFzIGJhY2tkcm9wOiBtYWdlbnRhCisgICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMjU1LCAxMjgpOyAvLyBoYXMgYmFja2Ryb3A6IG1hZ2VudGEKICAgICAgICAgd2lkdGgg
PSAxMjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZHJhd3NDb250ZW50
KCkpIHsKICAgICAgICAgaWYgKHRpbGVkQmFja2luZygpKSB7Ci0gICAgICAgICAgICBjb2xvciA9
IENvbG9yKDI1NSwgMTI4LCAwLCAxMjgpOyAvLyB0aWxlZCBsYXllcjogb3JhbmdlCisgICAgICAg
ICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQg
bGF5ZXI6IG9yYW5nZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Y29sb3IgPSBDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5ZXI6IGdyZWVuCisg
ICAgICAgIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDEyOCwgMzIsIDEyOCk7IC8vIG5vcm1h
bCBsYXllcjogZ3JlZW4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICh1c2VzQ29u
dGVudHNMYXllcigpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsg
Ly8gbm9uLXBhaW50aW5nIGxheWVyIHdpdGggY29udGVudHM6IGJsdWUKKyAgICAgICAgY29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3IoMCwgNjQsIDEyOCwgMTUwKTsgLy8gbm9uLXBhaW50aW5nIGxheWVy
IHdpdGggY29udGVudHM6IGJsdWUKICAgICAgICAgd2lkdGggPSA4OwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIGlmIChtYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgY29sb3Ig
PSBDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1hc2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQor
ICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMjgsIDI1NSwgMjU1LCA0OCk7IC8vIG1h
c2tpbmcgbGF5ZXI6IHBhbGUgYmx1ZQogICAgICAgICB3aWR0aCA9IDE2OwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgY29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCwgMTkyKTsgLy8gY29u
dGFpbmVyOiB5ZWxsb3cKKyAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1NSwgMCwg
MTkyKTsgLy8gY29udGFpbmVyOiB5ZWxsb3cKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyOjp1cGRh
dGVEZWJ1Z0luZGljYXRvcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDggKzE1ODgsOCBAQCB2b2lkIEdyYXBoaWNzTGF5
ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhCiAgICAgLy8gVXNlIGhhdmluZyBhIHRyYW5zZm9ybSBh
cyBhIGtleSB0byBtYWtpbmcgdGhlIHRpbGUgd2FzaCBsYXllci4gSWYgZXZlcnkgbGF5ZXIgZ2V0
cyBhIHdhc2gsCiAgICAgLy8gdGhleSBzdGFydCB0byBvYnNjdXJlIHVzZWZ1bCBpbmZvcm1hdGlv
bi4KICAgICBpZiAoKCFtX3RyYW5zZm9ybS5pc0lkZW50aXR5KCkgfHwgdGlsZWRCYWNraW5nKCkp
ICYmICFtX3Zpc2libGVUaWxlV2FzaExheWVyKSB7Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxDb2xvcj4gd2FzaEZpbGxDb2xvcigyNTUsIDAsIDAsIDUwKTsKLSAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPENvbG9yPiB3YXNoQm9yZGVyQ29sb3IoMjU1LCAwLCAwLCAxMDApOwor
ICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1
NSwgMCwgMCwgNTApOworICAgICAgICBjb25zdGV4cHIgYXV0byB3YXNoQm9yZGVyQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwLCAxMDApOwogICAgICAgICAKICAgICAgICAgbV92aXNp
YmxlVGlsZVdhc2hMYXllciA9IGNyZWF0ZVBsYXRmb3JtQ0FMYXllcihQbGF0Zm9ybUNBTGF5ZXI6
OkxheWVyVHlwZUxheWVyLCB0aGlzKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBtYWtlU3RyaW5n
KCJWaXNpYmxlIFRpbGUgV2FzaCBMYXllciAweCIsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obV92aXNpYmxlVGlsZVdhc2hMYXllci0+cGxhdGZvcm1MYXllcigpKSwgTG93ZXJjYXNl
KSk7CkBAIC0yNTQ2LDEzICsyNTQ2LDEzIEBAIHN0YXRpYyB2b2lkIHNldExheWVyRGVidWdCb3Jk
ZXIoUGxhdGZvcm0KIHN0YXRpYyBjb25zdCBmbG9hdCBjb250ZW50c0xheWVyQm9yZGVyV2lkdGgg
PSA0Owogc3RhdGljIENvbG9yIGNvbnRlbnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKGJvb2wgc2hv
d2luZ0JvcmRlcnMpCiB7Ci0gICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gQ29sb3IoMCwgMCwg
MTI4LCAxODApIDogQ29sb3IoKTsKKyAgICByZXR1cm4gc2hvd2luZ0JvcmRlcnMgPyBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMTI4LCAxODApIDogQ29sb3IgeyB9OwogfQogCiBzdGF0aWMgY29uc3Qg
ZmxvYXQgY2xvbmVMYXllckJvcmRlcldpZHRoID0gMjsKIHN0YXRpYyBDb2xvciBjbG9uZUxheWVy
RGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdCb3JkZXJzKQogewotICAgIHJldHVybiBzaG93
aW5nQm9yZGVycyA/IENvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKKyAgICByZXR1cm4g
c2hvd2luZ0JvcmRlcnMgPyBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjIsIDI1MSkgOiBDb2xvcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlRGVidWdJbmRpY2F0b3JzKCkKQEAg
LTM3NzQsNyArMzc3NCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXREZWJ1Z0JhY2tncm91
bmQKIHZvaWQgR3JhcGhpY3NMYXllckNBOjpnZXREZWJ1Z0JvcmRlckluZm8oQ29sb3ImIGNvbG9y
LCBmbG9hdCYgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKGlzUGFnZVRpbGVkQmFja2luZ0xheWVy
KCkpIHsKLSAgICAgICAgY29sb3IgPSBDb2xvcigwLCAwLCAxMjgsIDEyOCk7IC8vIHRpbGUgY2Fj
aGUgbGF5ZXI6IGRhcmsgYmx1ZQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAxMjgsIDEyOCk7IC8vIHRpbGUgY2FjaGUgbGF5ZXI6IGRhcmsgYmx1ZQogI2lmIE9TKFdJTkRP
V1MpCiAgICAgICAgIHdpZHRoID0gMS4wOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsMTEgKzg0LDExIEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXQKICAgICBjb25zdCBmbG9hdCB2ZXJ0
aWNhbE1hcmdpbiA9IDIuNTsKICAgICBjb25zdCBmbG9hdCBob3Jpem9udGFsTWFyZ2luID0gNTsK
ICAgICBjb25zdCB1bnNpZ25lZCBmb250U2l6ZSA9IDIyOwotICAgIGNvbnN0IENvbG9yIGJhY2tn
cm91bmRDb2xvcigwLjVmLCAwLjI1ZiwgMS4wZiwgMS4wZik7Ci0gICAgY29uc3QgQ29sb3IgYWNj
ZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAwLmYsIDAuZiwgMS4wZik7Ci0gICAgY29u
c3QgQ29sb3IgdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yKDEuMGYsIDEuMGYsIDEuMGYs
IDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGxpbmVhckdseXBoTWFza091dGxpbmVDb2xvcigwLmYs
IDAuZiwgMC5mLCAwLjc1Zik7Ci0gICAgY29uc3QgQ29sb3IgZGlzcGxheUxpc3RCb3JkZXJDb2xv
cigwLmYsIDAuZiwgMC5mLCAwLjY1Zik7CisgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENv
bG9yID0gbWFrZVNpbXBsZUNvbG9yKDEyOCwgNjQsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4cHIg
YXV0byBhY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICBjb25zdGV4cHIgYXV0byB1bmFjY2VsZXJhdGVkQ29udGV4dExhYmVs
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwg
MCwgMCwgMTkyKTsKKyAgICBjb25zdGV4cHIgYXV0byBkaXNwbGF5TGlzdEJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuNjVmKTsKIAogICAgIFRleHRSdW4gdGV4dFJ1bihT
dHJpbmc6Om51bWJlcihyZXBhaW50Q291bnQpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUNvdmVyYWdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxl
Q292ZXJhZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiArNTEsMTYgQEAgVGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXAoY29uc3QgVAogICAgIG1fdmlzaWJsZVZpZXdwb3J0
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0TmFtZSgidmlzaWJsZSB2aWV3cG9ydCBpbmRpY2F0b3Ii
KTsKICAgICBtX3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlcldp
ZHRoKDIpOwogICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5j
aG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwotICAgIG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwLCAyMDApKTsKKyAgICBt
X3Zpc2libGVWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VT
aW1wbGVDb2xvcigyNTUsIDAsIDAsIDIwMCkpOwogCiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGlj
YXRvckxheWVyLmdldCgpLnNldE5hbWUoImxheW91dCB2aWV3cG9ydCBpbmRpY2F0b3IiKTsKICAg
ICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV9sYXlvdXRWaWV3cG9ydEluZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50
KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0Qm9yZGVyQ29sb3IoQ29sb3IoMCwgMTI4LCAxMjgsIDIwMCkpOworICAgIG1fbGF5b3V0
Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJDb2xvcihtYWtlU2ltcGxlQ29s
b3IoMCwgMTI4LCAxMjgsIDIwMCkpOwogICAgIAogICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9y
TGF5ZXIuZ2V0KCkuc2V0TmFtZSgiY292ZXJhZ2UgaW5kaWNhdG9yIik7CiAgICAgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
Ci0gICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCYWNrZ3JvdW5kQ29s
b3IoQ29sb3IoNjQsIDY0LCA2NCwgNTApKTsKKyAgICBtX2NvdmVyYWdlUmVjdEluZGljYXRvckxh
eWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoNjQsIDY0LCA2NCwg
NTApKTsKIAogICAgIG1fbGF5ZXIuZ2V0KCkuYXBwZW5kU3VibGF5ZXIobV9jb3ZlcmFnZVJlY3RJ
bmRpY2F0b3JMYXllcik7CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX3Zpc2li
bGVWaWV3cG9ydEluZGljYXRvckxheWVyKTsKQEAgLTEzNiwxNiArMTM2LDE2IEBAIHZvaWQgVGls
ZUNvdmVyYWdlTWFwOjp1cGRhdGUoKQogICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29s
b3I7CiAgICAgc3dpdGNoIChtX2NvbnRyb2xsZXIuaW5kaWNhdG9yTW9kZSgpKSB7CiAgICAgY2Fz
ZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkxhY2tPZlNjcm9sbGluZ0Nvb3JkaW5hdG9y
SW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDIw
MCwgODAsIDI1NSk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjAwLCA4MCwgMjU1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTeW5jaHJv
bm91c1Njcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJl
Y3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0
SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTeW5jaHJvbm91c1Njcm9sbGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJ
bmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1
LCAyNTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBc3luY1Njcm9s
bGluZ0luZGljYXRpb246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9p
ZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJhd1JlcAogICAgIGlmIChib3JkZXJXaWR0
aCA+IDApCiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IENBQ0ZMYXllckdldEJvcmRlckNvbG9y
KGNhTGF5ZXIpOwogICAgIGVsc2UKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dD
b2xvcihDb2xvcigyNTUsIDAsIDApKTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVk
Q0dDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAwKSk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1Jl
cGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tn
cm91bmRDb2xvcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw3ICsxNDQsNyBAQCBzdGF0aWMgR3JhZGllbnQ6OkNvbG9y
U3RvcCBpbnRlcnBvbGF0ZUNvCiAgICAgZmxvYXQgYiA9IGIxICsgKGIyIC0gYjEpICogMC41ZjsK
ICAgICBmbG9hdCBhID0gYTEgKyAoYTIgLSBhMSkgKiAwLjVmOwogCi0gICAgcmV0dXJuIEdyYWRp
ZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBDb2xvcihyLCBnLCBiLCBhKSk7CisgICAgcmV0dXJuIEdy
YWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcs
IGIsIGEpKTsKIH0KIAogc3RhdGljIGNhaXJvX3BhdHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQg
eG8sIGZsb2F0IHlvLCBmbG9hdCByLCBmbG9hdCBhbmdsZVJhZGlhbnMsCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCBDb2xvcjo6Q29sb3IoQ0dDb2xv
clJlZiBjb2xvciwgU2VtYW50aWNUCiAgICAgfQogCiAgICAgc2V0U2ltcGxlQ29sb3IobWFrZVNp
bXBsZUNvbG9yRnJvbUNHQ29sb3IoY29sb3IpKTsKLSAgICBzZXRJc1NlbWFudGljKCk7CisgICAg
dGFnQXNTZW1hbnRpYygpOwogfQogCiBzdGF0aWMgQ0dDb2xvclJlZiBsZWFrQ0dDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDkgKzY0LDkgQEAgQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhlbFNv
bGlkQ29sb3IoYwogICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7CiAKICAgICBpZiAoIXBpeGVsWzNd
KQotICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgIHJldHVybiBDb2xv
cjo6dHJhbnNwYXJlbnQ7CiAKLSAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhl
bFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFsz
XSwgcGl4ZWxbM10pOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IocGl4ZWxbMF0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbM10pOwogfQogCiB2b2lkIGRyYXdOYXRpdmVJbWFnZShjb25zdCBOYXRp
dmVJbWFnZVB0ciYgaW1hZ2UsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dENvY29hLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjA1LDE1ICsyMDUsMTUgQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JN
YXJrZXJMaW5lU3R5bAogICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAvLyBSZWQKICAgICBjYXNl
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZzoKLSAgICAgICAgcmV0dXJu
IGNhY2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBDb2xvciB7IDI1NSwgMTQwLCAxNDAsIDIxNyB9
IDogQ29sb3IgeyAyNTUsIDU5LCA0OCwgMTkxIH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dD
b2xvcih1c2VEYXJrTW9kZSA/IG1ha2VTaW1wbGVDb2xvcigyNTUsIDE0MCwgMTQwLCAyMTcpIDog
bWFrZVNpbXBsZUNvbG9yKDI1NSwgNTksIDQ4LCAxOTEpKTsKICAgICAvLyBCbHVlCiAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgog
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlRleHRDaGVja2luZ0RpY3Rh
dGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZTo6TW9kZTo6QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudDoKLSAgICAgICAgcmV0dXJuIGNh
Y2hlZENHQ29sb3IodXNlRGFya01vZGUgPyBDb2xvciB7IDQwLCAxNDUsIDI1NSwgMjE3IH0gOiBD
b2xvciB7IDAsIDEyMiwgMjU1LCAxOTEgfSk7CisgICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9y
KHVzZURhcmtNb2RlID8gbWFrZVNpbXBsZUNvbG9yKDQwLCAxNDUsIDI1NSwgMjE3KSA6IG1ha2VT
aW1wbGVDb2xvcigwLCAxMjIsIDI1NSwgMTkxKSk7CiAgICAgLy8gR3JlZW4KICAgICBjYXNlIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyOgotICAgICAgICByZXR1cm4gY2Fj
aGVkQ0dDb2xvcih1c2VEYXJrTW9kZSA/IENvbG9yIHsgNTAsIDIxNSwgNzUsIDIxNyB9IDogQ29s
b3IgeyAyNSwgMTc1LCA1MCwgMTkxIH0pOworICAgICAgICByZXR1cm4gY2FjaGVkQ0dDb2xvcih1
c2VEYXJrTW9kZSA/IG1ha2VTaW1wbGVDb2xvcig1MCwgMjE1LCA3NSwgMjE3KSA6IG1ha2VTaW1w
bGVDb2xvcigyNSwgMTc1LCA1MCwgMTkxKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJP
cGVyYXRpb24uY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNywxMiArMzA3LDEyIEBAIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IERyb3BTaGFkb3dGaWx0
ZXIKICAgICAgICAgcmV0dXJuIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgKICAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fbG9jYXRpb24sIEludFBvaW50KCksIHByb2dyZXNz
KSwKICAgICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fc3RkRGV2aWF0aW9uLCAwLCBwcm9ncmVz
cyksCi0gICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2NvbG9yLCBDb2xvcihDb2xvcjo6dHJh
bnNwYXJlbnQpLCBwcm9ncmVzcykpOworICAgICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9jb2xv
ciwgQ29sb3I6OnRyYW5zcGFyZW50LCBwcm9ncmVzcykpOwogCiAgICAgY29uc3QgRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbiogZnJvbU9wZXJhdGlvbiA9IGRvd25jYXN0PERyb3BTaGFkb3dGaWx0
ZXJPcGVyYXRpb24+KGZyb20pOwogICAgIEludFBvaW50IGZyb21Mb2NhdGlvbiA9IGZyb21PcGVy
YXRpb24gPyBmcm9tT3BlcmF0aW9uLT5sb2NhdGlvbigpIDogSW50UG9pbnQoKTsKICAgICBpbnQg
ZnJvbVN0ZERldmlhdGlvbiA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5zdGREZXZp
YXRpb24oKSA6IDA7Ci0gICAgQ29sb3IgZnJvbUNvbG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21P
cGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIENvbG9y
IGZyb21Db2xvciA9IGZyb21PcGVyYXRpb24gPyBmcm9tT3BlcmF0aW9uLT5jb2xvcigpIDogQ29s
b3I6OnRyYW5zcGFyZW50OwogICAgIAogICAgIHJldHVybiBEcm9wU2hhZG93RmlsdGVyT3BlcmF0
aW9uOjpjcmVhdGUoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21Mb2NhdGlvbiwgbV9sb2Nh
dGlvbiwgcHJvZ3Jlc3MpLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw3ICs5Niw3IEBAIENvbG9yIGNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7CiAg
ICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2Vz
LgogCi0gICAgcmV0dXJuIENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKSk7
CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKGNvbG9yKTsKIH0KIAogQ29s
b3Igc2VtYW50aWNDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMs
NyArMTEzLDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcjo6cAogICAg
ICAgICBBU1NFUlQoIW1fdGV4dHVyZSk7CiAgICAgICAgIGlmIChtX2hvbGVQdW5jaENsaWVudCkK
ICAgICAgICAgICAgIG1faG9sZVB1bmNoQ2xpZW50LT5zZXRWaWRlb1JlY3RhbmdsZShlbmNsb3Np
bmdJbnRSZWN0KG1vZGVsVmlld01hdHJpeC5tYXBSZWN0KHRhcmdldFJlY3QpKSk7Ci0gICAgICAg
IHRleG1hcEdMLmRyYXdTb2xpZENvbG9yKHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgQ29s
b3IoMCwgMCwgMCwgMCksIGZhbHNlKTsKKyAgICAgICAgdGV4bWFwR0wuZHJhd1NvbGlkQ29sb3Io
dGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMCks
IGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzksNyArMTM5LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxl
bQogICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdl
UmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7Ci0gICAgICAgIGNvbnRl
eHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaSg0KSksIHsgMjU1LCAyNTUsIDI1NSB9KTsKKyAgICAgICAgY29udGV4dC5m
aWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJl
Y3Q6OlJhZGlpKDQpKSwgbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpKTsKICAgICAgICAg
dGl0bGVGb250Q2FzY2FkZS5nZXQoKS5kcmF3VGV4dChjb250ZXh0LCBUZXh0UnVuKHRydW5jYXRl
ZFRvcFN0cmluZyksIEZsb2F0UG9pbnQoZHJhZ0ltYWdlUGFkZGluZywgMTggKyBkcmFnSW1hZ2VQ
YWRkaW5nKSk7CiAgICAgICAgIGlmICghdHJ1bmNhdGVkQm90dG9tU3RyaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHVybEZvbnRDYXNjYWRlLmdldCgpLmRyYXdUZXh0KGNvbnRleHQsIFRleHRS
dW4odHJ1bmNhdGVkQm90dG9tU3RyaW5nKSwgRmxvYXRQb2ludChkcmFnSW1hZ2VQYWRkaW5nLCA0
MCArIGRyYWdJbWFnZVBhZGRpbmcpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDYyLDkgKzQ2Miw5IEBAIHVuc2lnbmVkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm8K
IENvbG9yIExlZ2FjeVRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihMZWdhY3lUaWxl
R3JpZCogZ3JpZCkgY29uc3QKIHsKICAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlk
LmdldCgpKQotICAgICAgICByZXR1cm4gQ29sb3IoMC4yZiwgMS4wZiwgMC5mLCAwLjVmKTsKKyAg
ICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMS4wZiwgMC5mLCAw
LjVmKTsKIAotICAgIHJldHVybiBDb2xvcigwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOworICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMmYsIDAuOWYsIDAuZiwgMC41Zik7CiB9
CiAKIHN0YXRpYyBib29sIHNob3VsZFJlcGFpbnRJblBpZWNlcyhjb25zdCBDR1JlY3QmIGRpcnR5
UmVjdCwgQ0dTUmVnaW9uT2JqIGRpcnR5UmVnaW9uLCBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxNCArMTg5LDE0IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW0KICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChj
b250ZXh0UmVmKTsKICAgICAvLyBPbiBNYWMgYWxwaGEgaXMgezAuNywgMC43LCAwLjcsIDAuOH0s
IGhvd2V2ZXIgd2UgY2FuJ3QgY29udHJvbCBhbHBoYQogICAgIC8vIGZvciBkcmFnIGltYWdlcyBv
biB3aW4sIHNvIHdlIHVzZSAxCi0gICAgc3RhdGljIGNvbnN0IENvbG9yIGJhY2tncm91bmRDb2xv
cigxNDAsIDE0MCwgMTQwKTsKKyAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMTQwLCAxNDAsIDE0MCk7CiAgICAgc3RhdGljIGNvbnN0IEludFNpemUg
cmFkaWkoRHJhZ0xhYmVsUmFkaXVzLCBEcmFnTGFiZWxSYWRpdXMpOwogICAgIEludFJlY3QgcmVj
dCgwLCAwLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgpKTsKICAgICBjb250
ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KHJlY3QsIHJhZGlpLCByYWRpaSwg
cmFkaWksIHJhZGlpKSwgYmFja2dyb3VuZENvbG9yKTsKICAKICAgICAvLyBEcmF3IHRoZSB0ZXh0
Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIHRvcENvbG9yKDAsIDAsIDAsIDI1NSk7IC8vIG9yaWdp
bmFsIGFscGhhID0gMC43NQotICAgIHN0YXRpYyBjb25zdCBDb2xvciBib3R0b21Db2xvcigyNTUs
IDI1NSwgMjU1LCAxMjcpOyAvLyBvcmlnaW5hbCBhbHBoYSA9IDAuNQorICAgIGNvbnN0ZXhwciBh
dXRvIHRvcENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDI1NSk7IC8vIG9yaWdpbmFs
IGFscGhhID0gMC43NQorICAgIGNvbnN0ZXhwciBhdXRvIGJvdHRvbUNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDEyNyk7IC8vIG9yaWdpbmFsIGFscGhhID0gMC41CiAgICAg
aWYgKGRyYXdVUkxTdHJpbmcpIHsKICAgICAgICAgaWYgKGNsaXBVUkxTdHJpbmcpCiAgICAgICAg
ICAgICB1cmxTdHJpbmcgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNhdGUodXJsU3RyaW5n
LCBpbWFnZVNpemUud2lkdGgoKSAtIChEcmFnTGFiZWxCb3JkZXJYICogMi4wZiksICp1cmxGb250
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUGFpbnRJbmZvLmgJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtOTksNyArOTksNyBAQCBzdHJ1Y3QgUGFpbnRJbmZvIHsKICAgICBib29sIGZvcmNlVGV4
dENvbG9yKCkgY29uc3QgeyByZXR1cm4gZm9yY2VCbGFja1RleHQoKSB8fCBmb3JjZVdoaXRlVGV4
dCgpOyB9CiAgICAgYm9vbCBmb3JjZUJsYWNrVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVo
YXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6Rm9yY2VCbGFja1RleHQpOyB9CiAgICAgYm9v
bCBmb3JjZVdoaXRlVGV4dCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFpbnMo
UGFpbnRCZWhhdmlvcjo6Rm9yY2VXaGl0ZVRleHQpOyB9Ci0gICAgQ29sb3IgZm9yY2VkVGV4dENv
bG9yKCkgY29uc3QgeyByZXR1cm4gKGZvcmNlQmxhY2tUZXh0KCkpID8gQ29sb3I6OmJsYWNrIDog
Q29sb3I6OndoaXRlOyB9CisgICAgQ29sb3IgZm9yY2VkVGV4dENvbG9yKCkgY29uc3QgeyByZXR1
cm4gZm9yY2VCbGFja1RleHQoKSA/IENvbG9yOjpibGFjayA6IENvbG9yOjp3aGl0ZTsgfQogCiAg
ICAgYm9vbCBza2lwUm9vdEJhY2tncm91bmQoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9y
LmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNraXBSb290QmFja2dyb3VuZCk7IH0KICAgICBib29s
IHBhaW50Um9vdEJhY2tncm91bmRPbmx5KCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5j
b250YWlucyhQYWludEJlaGF2aW9yOjpSb290QmFja2dyb3VuZE9ubHkpOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAJKHJl
dmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRl
ZE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDI5ICs3NCwxMCBAQCBzdGF0aWMgY29u
c3QgZmxvYXQgcmVwbGFjZW1lbnRBcnJvd0xlZnRNCiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFj
ZW1lbnRBcnJvd1BhZGRpbmcgPSA0Owogc3RhdGljIGNvbnN0IGZsb2F0IHJlcGxhY2VtZW50QXJy
b3dDaXJjbGVQYWRkaW5nID0gMzsKIAotc3RhdGljIGNvbnN0IENvbG9yJiByZXBsYWNlbWVudFRl
eHRSb3VuZGVkUmVjdFByZXNzZWRDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvbG9yPiBwcmVzc2VkKDEwNSwgMTA1LCAxMDUsIDI0Mik7Ci0gICAgcmV0dXJuIHByZXNzZWQ7
Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
cigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBzdGFuZGFyZCgxMjUsIDEy
NSwgMTI1LCAyNDIpOwotICAgIHJldHVybiBzdGFuZGFyZDsKLX0KLQotc3RhdGljIGNvbnN0IENv
bG9yJiByZXBsYWNlbWVudFRleHRDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENvbG9yPiBzdGFuZGFyZCgyNDAsIDI0MCwgMjQwLCAyNTUpOwotICAgIHJldHVybiBzdGFuZGFy
ZDsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiB1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9y
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IHN0YW5kYXJkKDI1NSwgMjU1
LCAyNTUsIDIxNik7Ci0gICAgcmV0dXJuIHN0YW5kYXJkOwotfQorY29uc3RleHByIGF1dG8gcmVw
bGFjZW1lbnRUZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTA1
LCAxMDUsIDEwNSwgMjQyKTsKK2NvbnN0ZXhwciBhdXRvIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRS
ZWN0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTI1LCAxMjUsIDEyNSwgMjQyKTsKK2NvbnN0ZXhw
ciBhdXRvIHJlcGxhY2VtZW50VGV4dENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI0MCwgMjQwLCAy
NDAsIDI1NSk7Citjb25zdGV4cHIgYXV0byB1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDIxNik7CiAKIFJlbmRlckVtYmVkZGVkT2Jq
ZWN0OjpSZW5kZXJFbWJlZGRlZE9iamVjdChIVE1MRnJhbWVPd25lckVsZW1lbnQmIGVsZW1lbnQs
IFJlbmRlclN0eWxlJiYgc3R5bGUpCiAgICAgOiBSZW5kZXJXaWRnZXQoZWxlbWVudCwgV1RGTW92
ZShzdHlsZSkpCkBAIC0zMTIsNyArMjkzLDcgQEAgdm9pZCBSZW5kZXJFbWJlZGRlZE9iamVjdDo6
cGFpbnRSZXBsYWNlZAogCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGNvbnRleHQpOwogICAgIGNvbnRleHQuY2xpcChjb250ZW50UmVjdCk7Ci0gICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IobV91bmF2YWlsYWJsZVBsdWdpbkluZGljYXRvcklzUHJlc3NlZCA/IHJlcGxh
Y2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKCkgOiByZXBsYWNlbWVudFRleHRSb3Vu
ZGVkUmVjdENvbG9yKCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1fdW5hdmFpbGFibGVQ
bHVnaW5JbmRpY2F0b3JJc1ByZXNzZWQgPyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdFByZXNz
ZWRDb2xvciA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IpOwogICAgIGNvbnRleHQu
ZmlsbFBhdGgoYmFja2dyb3VuZCk7CiAKICAgICBQYXRoIHN0cm9rZVBhdGg7CkBAIC0zMjAsMjEg
KzMwMSwyMSBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkCiAgICAg
c3Ryb2tlUmVjdC5pbmZsYXRlKDEpOwogICAgIHN0cm9rZVBhdGguYWRkUm91bmRlZFJlY3Qoc3Ry
b2tlUmVjdCwgRmxvYXRTaXplKHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UmFkaXVzICsgMSwg
cmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMgKyAxKSk7CiAKLSAgICBjb250ZXh0LnNl
dFN0cm9rZUNvbG9yKHVuYXZhaWxhYmxlUGx1Z2luQm9yZGVyQ29sb3IoKSk7CisgICAgY29udGV4
dC5zZXRTdHJva2VDb2xvcih1bmF2YWlsYWJsZVBsdWdpbkJvcmRlckNvbG9yKTsKICAgICBjb250
ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygyKTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgoc3Ryb2tl
UGF0aCk7CiAKICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250LmZvbnRN
ZXRyaWNzKCk7CiAgICAgZmxvYXQgbGFiZWxYID0gcm91bmRmKHJlcGxhY2VtZW50VGV4dFJlY3Qu
bG9jYXRpb24oKS54KCkgKyByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdExlZnRUZXh0TWFyZ2lu
KTsKICAgICBmbG9hdCBsYWJlbFkgPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlv
bigpLnkoKSArIChyZXBsYWNlbWVudFRleHRSZWN0LnNpemUoKS5oZWlnaHQoKSAtIGZvbnRNZXRy
aWNzLmhlaWdodCgpKSAvIDIgKyBmb250TWV0cmljcy5hc2NlbnQoKSArIHJlcGxhY2VtZW50VGV4
dFJvdW5kZWRSZWN0VG9wVGV4dE1hcmdpbik7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IocmVw
bGFjZW1lbnRUZXh0Q29sb3IoKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IocmVwbGFjZW1l
bnRUZXh0Q29sb3IpOwogICAgIGNvbnRleHQuZHJhd0JpZGlUZXh0KGZvbnQsIHJ1biwgRmxvYXRQ
b2ludChsYWJlbFgsIGxhYmVsWSkpOwogCiAgICAgaWYgKHNob3VsZFVuYXZhaWxhYmxlUGx1Z2lu
TWVzc2FnZUJlQnV0dG9uKHBhZ2UoKSwgbV9wbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbikpIHsK
ICAgICAgICAgYXJyb3dSZWN0LmluZmxhdGUoLXJlcGxhY2VtZW50QXJyb3dDaXJjbGVQYWRkaW5n
KTsKIAogICAgICAgICBjb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoMS4wKTsKLSAgICAg
ICAgY29udGV4dC5zZXRGaWxsQ29sb3IocmVwbGFjZW1lbnRUZXh0Q29sb3IoKSk7CisgICAgICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHJlcGxhY2VtZW50VGV4dENvbG9yKTsKICAgICAgICAgY29u
dGV4dC5maWxsRWxsaXBzZShhcnJvd1JlY3QpOwogCiAgICAgICAgIGNvbnRleHQuc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpDbGVhcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDIzICs2OCw5IEBAIFJlbmRlckZyYW1lU2V0OjpHcmlkQXhpczo6R3JpZEF4aXMo
KQogewogfQogCi1zdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRlclN0YXJ0RWRnZUNvbG9yKCkKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDE3MCwgMTcwLCAxNzApOwot
ICAgIHJldHVybiBjb2xvcjsKLX0KLQotc3RhdGljIGNvbnN0IENvbG9yJiBib3JkZXJFbmRFZGdl
Q29sb3IoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IgPSBDb2xv
cjo6YmxhY2s7Ci0gICAgcmV0dXJuIGNvbG9yOwotfQotCi1zdGF0aWMgY29uc3QgQ29sb3ImIGJv
cmRlckZpbGxDb2xvcigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBjb2xv
cigyMDgsIDIwOCwgMjA4KTsKLSAgICByZXR1cm4gY29sb3I7Ci19Citjb25zdGV4cHIgYXV0byBi
b3JkZXJTdGFydEVkZ2VDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxNzAsIDE3MCwgMTcwKTsKK2Nv
bnN0ZXhwciBhdXRvIGJvcmRlckVuZEVkZ2VDb2xvciA9IENvbG9yOjpibGFjazsKK2NvbnN0ZXhw
ciBhdXRvIGJvcmRlckZpbGxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMDgsIDIwOCwgMjA4KTsK
IAogdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIoY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIGJvcmRlclJlY3QpCiB7CkBAIC05NSwxMyArODEs
MTMgQEAgdm9pZCBSZW5kZXJGcmFtZVNldDo6cGFpbnRDb2x1bW5Cb3JkZXIoYwogICAgIAogICAg
IC8vIEZpbGwgZmlyc3QuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZv
LmNvbnRleHQoKTsKLSAgICBjb250ZXh0LmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxl
bWVudCgpLmhhc0JvcmRlckNvbG9yKCkgPyBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldp
dGhDb2xvckZpbHRlcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29s
b3IoKSk7CisgICAgY29udGV4dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQo
KS5oYXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29s
b3JGaWx0ZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKTsK
ICAgICAKICAgICAvLyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVu
b3VnaCByb29tIHRvIHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBv
ZiB0aGUgZmlsbCBjb2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRlclJlY3Qud2lk
dGgoKSA+PSAzKSB7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0
LmxvY2F0aW9uKCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3Io
KSk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3JkZXJSZWN0
Lm1heFgoKSAtIDEsIGJvcmRlclJlY3QueSgpKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3Jk
ZXJFbmRFZGdlQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChib3Jk
ZXJSZWN0LmxvY2F0aW9uKCksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwgYm9yZGVyU3RhcnRFZGdl
Q29sb3IpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVy
UmVjdC5tYXhYKCkgLSAxLCBib3JkZXJSZWN0LnkoKSksIEludFNpemUoMSwgaGVpZ2h0KCkpKSwg
Ym9yZGVyRW5kRWRnZUNvbG9yKTsKICAgICB9CiB9CiAKQEAgLTExNCwxMyArMTAwLDEzIEBAIHZv
aWQgUmVuZGVyRnJhbWVTZXQ6OnBhaW50Um93Qm9yZGVyKGNvbnMKICAgICAKICAgICAvLyBGaWxs
IGZpcnN0LgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
KCk7Ci0gICAgY29udGV4dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5o
YXNCb3JkZXJDb2xvcigpID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JG
aWx0ZXIoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKCkpOwor
ICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCkuaGFzQm9y
ZGVyQ29sb3IoKSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9yRmlsdGVy
KENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcik7CiAKICAgICAv
LyBOb3cgc3Ryb2tlIHRoZSBlZGdlcyBidXQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCByb29tIHRv
IHBhaW50IGJvdGggZWRnZXMgd2l0aCBhIGxpdHRsZQogICAgIC8vIGJpdCBvZiB0aGUgZmlsbCBj
b2xvciBzaG93aW5nIHRocm91Z2guCiAgICAgaWYgKGJvcmRlclJlY3QuaGVpZ2h0KCkgPj0gMykg
ewotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigp
LCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKSk7Ci0gICAgICAg
IGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3JkZXJSZWN0LngoKSwgYm9yZGVy
UmVjdC5tYXhZKCkgLSAxKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlckVuZEVkZ2VDb2xv
cigpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRp
b24oKSwgSW50U2l6ZSh3aWR0aCgpLCAxKSksIGJvcmRlclN0YXJ0RWRnZUNvbG9yKTsKKyAgICAg
ICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QueCgpLCBib3Jk
ZXJSZWN0Lm1heFkoKSAtIDEpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyRW5kRWRnZUNv
bG9yKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxOCw3ICsyMjE4LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcgogI2VuZGlmCiAKICNpZmRlZiBSRVZF
QUxfVFJBTlNQQVJFTkNZX0xBWUVSUwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xv
cigwLjBmLCAwLjBmLCAwLjVmLCAwLjJmKSk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9y
KG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC41ZiwgMC4yZikpOwogICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0KHBpeGVsU25hcHBlZENsaXBSZWN0KTsKICNlbmRpZgogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwMSw3ICszMjAxLDcgQEAg
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50RGVidWdPdmVybAogICAgIC8vIFRoZSBpbnRl
cmFjdGl2ZSBwYXJ0LgogICAgIC8vIFBhaW50IHJlY3RzIGZvciB0b3VjaCBhY3Rpb24uCiAgICAg
aWYgKHZpc2libGVEZWJ1Z092ZXJsYXlSZWdpb25zICYgVG91Y2hBY3Rpb25SZWdpb24pIHsKLSAg
ICAgICAgQ29sb3IgcmVnaW9uQ29sb3IoMCwgMCwgMjU1LCA1MCk7CisgICAgICAgIGNvbnN0ZXhw
ciBhdXRvIHJlZ2lvbkNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSwgNTApOwogICAg
ICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihyZWdpb25Db2xvcik7CiAgICAgICAgIGZvciAoYXV0
byByZWN0IDogZXZlbnRSZWdpb24ucmVnaW9uKCkucmVjdHMoKSkKICAgICAgICAgICAgIGNvbnRl
eHQuZmlsbFJlY3QocmVjdCk7CkBAIC0zMjQzLDcgKzMyNDMsNyBAQCB2b2lkIFJlbmRlckxheWVy
QmFja2luZzo6cGFpbnREZWJ1Z092ZXJsCiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAg
ICAvLyBQYWludCByZWN0cyBmb3IgZWRpdGFibGUgZWxlbWVudHMuCiAgICAgaWYgKHZpc2libGVE
ZWJ1Z092ZXJsYXlSZWdpb25zICYgRWRpdGFibGVFbGVtZW50UmVnaW9uKSB7Ci0gICAgICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHsgMTI4LCAwLCAxMjgsIDUwIH0pOworICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMTI4LCAwLCAxMjgsIDUwKSk7CiAgICAgICAg
IGZvciAoYXV0byByZWN0IDogZXZlbnRSZWdpb24ucmVjdHNGb3JFZGl0YWJsZUVsZW1lbnRzKCkp
CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHJlY3QpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjcwLDcgKzY3MCw3IEBAIENvbG9yIFJlbmRlclRoZW1lOjppbmFjdGl2ZUxpc3RCb3hTZWxl
Y3QKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgLy8gVXNl
IGEgYmx1ZSBjb2xvciBieSBkZWZhdWx0IGlmIHRoZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRl
ZmluZSBhbnl0aGluZy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMjU1KTsKKyAgICByZXR1cm4g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0CkBAIC02ODMsNyArNjgzLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnBs
YXRmb3JtSW5hY3RpdmVTZWxlYwogewogICAgIC8vIFVzZSBhIGdyZXkgY29sb3IgYnkgZGVmYXVs
dCBpZiB0aGUgcGxhdGZvcm0gdGhlbWUgZG9lc24ndCBkZWZpbmUgYW55dGhpbmcuCiAgICAgLy8g
VGhpcyBjb2xvciBtYXRjaGVzIEZpcmVmb3gncyBpbmFjdGl2ZSBjb2xvci4KLSAgICByZXR1cm4g
Q29sb3IoMTc2LCAxNzYsIDE3Nik7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigxNzYsIDE3
NiwgMTc2KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdApA
QCAtMTM1Nyw3ICsxMzU3LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnRleHRTZWFyY2hIaWdobGln
aHRDbwogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVybiBD
b2xvcigyNTUsIDI1NSwgMCk7IC8vIFllbGxvdy4KKyAgICByZXR1cm4gQ29sb3I6OnllbGxvdzsK
IH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCB2b2lk
IFJlbmRlclRoZW1lOjpwYWludFN5c3RlbVByZXZpZXdCYWRnCiAKICAgICBhdXRvIG1hcmtlclJl
Y3QgPSBGbG9hdFJlY3Qge3JlY3QueCgpICsgcmVjdC53aWR0aCgpIC0gMjQsIHJlY3QueSgpICsg
OCwgMTYsIDE2IH07CiAgICAgYXV0byByb3VuZGVkTWFya2VyUmVjdCA9IEZsb2F0Um91bmRlZFJl
Y3QgeyBtYXJrZXJSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSB7IDggfSB9OwotICAgIGF1
dG8gY29sb3IgPSBDb2xvciB7IDI1NSwgMCwgMCB9OworICAgIGF1dG8gY29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAwLCAwKTsKICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChyb3VuZGVk
TWFya2VyUmVjdCwgY29sb3IpOwogfQogI2VuZGlmCkBAIC0xNDU5LDcgKzE0NTksNyBAQCBDb2xv
ciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1UYXBIaWdobGlnaHRDCiB7CiAgICAgLy8gVGhpcyBjb2xv
ciBpcyBleHBlY3RlZCB0byBiZSBkcmF3biBvbiBhIHNlbWktdHJhbnNwYXJlbnQgb3ZlcmxheSwK
ICAgICAvLyBtYWtpbmcgaXQgbW9yZSB0cmFuc3BhcmVudCB0aGFuIGl0cyBhbHBoYSB2YWx1ZSBp
bmRpY2F0ZXMuCi0gICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDEwMik7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvcigwLCAwLCAwLCAxMDIpOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcg
KzE2MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENvbG9yIGRpc2FibGVkVGV4dENvbG9yKGNv
bnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IgZm9jdXNSaW5nQ29sb3IoT3B0aW9uU2V0PFN0
eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9j
dXNSaW5nQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCB7IHJldHVy
biBDb2xvcigwLCAwLCAwKTsgfQorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdD
b2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IHsgcmV0dXJuIENvbG9y
OjpibGFjazsgfQogICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbUZvY3VzUmluZ0NvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgc3RhdGljIGZsb2F0IHBsYXRmb3JtRm9jdXNSaW5nV2lkdGgoKSB7IHJl
dHVybiAzOyB9CiAgICAgc3RhdGljIGZsb2F0IHBsYXRmb3JtRm9jdXNSaW5nT2Zmc2V0KGZsb2F0
IG91dGxpbmVXaWR0aCkgeyByZXR1cm4gc3RkOjptYXg8ZmxvYXQ+KG91dGxpbmVXaWR0aCAtIHBs
YXRmb3JtRm9jdXNSaW5nV2lkdGgoKSwgMCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1
NSw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKSBmaW5h
bDsKICNlbmRpZgogCi0gICAgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKCkgY29uc3Q7CiAgICAg
RmxvYXRSZWN0IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGNvbnN0IFJlbmRlck9iamVjdCYgYm94LCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICBDb2xvciBzeXN0ZW1Db2xv
cihDU1NWYWx1ZUlELCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJy
aWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsMTIgKzMxNyw2IEBAIHZvaWQgUmVuZGVyVGhl
bWVJT1M6OnNldENvbnRlbnRTaXplQ2F0ZWcKICAgICBfY29udGVudFNpemVDYXRlZ29yeSgpID0g
Y29udGVudFNpemVDYXRlZ29yeTsKIH0KIAotY29uc3QgQ29sb3ImIFJlbmRlclRoZW1lSU9TOjpz
aGFkb3dDb2xvcigpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBj
b2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKTsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KIEZs
b2F0UmVjdCBSZW5kZXJUaGVtZUlPUzo6YWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVy
T2JqZWN0JiBib3gsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVj
dCkKIHsKICAgICAvLyBUbyBmaXggaW5uZXIgYm9yZGVyIGJsZWVkaW5nIGlzc3VlcyA8cmRhcjov
L3Byb2JsZW0vOTgxMjUwNz4sIHdlIGNsaXAgdG8gdGhlIG91dGVyIGJvcmRlciBhbmQgYXNzZXJ0
IHRoYXQKQEAgLTM4Nyw3ICszODEsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNr
Ym94RGVjb3JhCiAKICAgICBpZiAoY2hlY2tlZCB8fCBpbmRldGVybWluYXRlKSB7CiAgICAgICAg
IGF1dG8gYm9yZGVyID0gYm94LnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKLSAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25h
cHBlZFJvdW5kZWRSZWN0Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSksIENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0
Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOwogCiAgICAgICAgIGF1
dG8gY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQoKSwg
cmVjdCk7CiAgICAgICAgIGF1dG8gd2lkdGggPSBjbGlwLndpZHRoKCk7CkBAIC00MjMsMTAgKzQx
NywxMCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94RGVjb3JhCiAgICAgICAg
IH0KIAogICAgICAgICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4obGluZVdpZHRoLCAxKTsK
LSAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RG
TW92ZShzaGFkb3cpIH0sIGtDR0xpbmVDYXBTcXVhcmUsIGxpbmVXaWR0aCwgQ29sb3IgeyAwLjBm
LCAwLjBmLCAwLjBmLCAwLjdmIH0pOworICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0
LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKHNoYWRvdykgfSwga0NHTGluZUNhcFNxdWFyZSwg
bGluZVdpZHRoLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAu
N2YpKTsKIAogICAgICAgICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW4od2lk
dGgsIGhlaWdodCkgKiB0aGlja25lc3NSYXRpbywgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRMaW5l
cyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUobGluZSkgfSwga0NHTGluZUNh
cEJ1dHQsIGxpbmVXaWR0aCwgQ29sb3IgeyAxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAyNTUuMGYg
fSk7CisgICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQsIFZlY3RvcjxDR1BvaW50PiB7
IFdURk1vdmUobGluZSkgfSwga0NHTGluZUNhcEJ1dHQsIGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNv
bG9yRnJvbUZsb2F0cygxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAyNTUuMGYpKTsKICAgICB9IGVs
c2UgewogICAgICAgICBhdXRvIGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50
SW5mby5jb250ZXh0KCksIHJlY3QpOwogICAgICAgICBhdXRvIHdpZHRoID0gY2xpcC53aWR0aCgp
OwpAQCAtNDg0LDcgKzQ3OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNv
cmF0aW8KIAogICAgIGlmIChpc0NoZWNrZWQoYm94KSkgewogICAgICAgICBhdXRvIGJvcmRlciA9
IGJveC5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVjdCk7Ci0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVj
dEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBDb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJv
eC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKIAogICAgICAgICBhdXRvIGNsaXAgPSBhZGRS
b3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0KCksIHJlY3QpOwogICAgICAg
ICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoQ29uY2F2ZUdy
YWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1heFko
KSksIExpbmVhckludGVycG9sYXRpb24pOwpAQCAtNDk2LDggKzQ5MCw5IEBAIGJvb2wgUmVuZGVy
VGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW8KIAogICAgICAgICBjbGlwLmluZmxhdGVYKC1j
bGlwLndpZHRoKCkgKiBJbm5lckludmVyc2VSYXRpbyk7CiAgICAgICAgIGNsaXAuaW5mbGF0ZVko
LWNsaXAuaGVpZ2h0KCkgKiBJbm5lckludmVyc2VSYXRpbyk7Ci0KLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5kcmF3UmFpc2VkRWxsaXBzZShjbGlwLCBDb2xvcjo6d2hpdGUsIHNoYWRvd0Nv
bG9yKCkpOworICAgICAgICAKKyAgICAgICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBt
YWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMC43ZiAqIDI1NSk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBzaGFkb3dDb2xv
cik7CiAKICAgICAgICAgRmxvYXRTaXplIHJhZGl1cyhjbGlwLndpZHRoKCkgLyAyLjBmLCBjbGlw
LmhlaWdodCgpIC8gMi4wZik7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xpcFJvdW5k
ZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoY2xpcCwgcmFkaXVzLCByYWRpdXMsIHJhZGl1cywgcmFk
aXVzKSk7CkBAIC03MzEsNyArNzI2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51
TGlzdEJ1dHRvbgogICAgICAgICBGbG9hdFJlY3QgZWxsaXBzZShidXR0b25DbGlwLngoKSArIChi
dXR0b25DbGlwLndpZHRoKCkgLSBjb3VudCAqIChzaXplICsgcGFkZGluZykgKyBwYWRkaW5nKSAv
IDIuMCwgYnV0dG9uQ2xpcC5tYXhZKCkgLSAxMC4wLCBzaXplLCBzaXplKTsKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBDb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjVmKSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgp
LmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKSk7CiAgICAgICAgICAgICBlbGxpcHNl
Lm1vdmUoc2l6ZSArIHBhZGRpbmcsIDApOwogICAgICAgICB9CiAgICAgfSAgZWxzZSB7CkBAIC03
NTEsOCArNzQ2LDggQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRvbgog
ICAgICAgICB9OwogCiAgICAgICAgIGZsb2F0IG9wYWNpdHkgPSBpc1JlYWRPbmx5Q29udHJvbChi
b3gpID8gMC4yIDogMC41OwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNv
bG9yKENvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5zZXRGaWxsQ29sb3IoQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAu
MGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5k
cmF3UGF0aChQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoc2hhZG93KSk7CiAKICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcjo6d2hpdGUpOwpAQCAtODQw
LDkgKzgzNSw5IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50U2xpZGVyVHJhY2soY28KIAog
ICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQotICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigxNzgsIDE3OCwgMTc4KSk7CisgICAg
ICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xv
cigxNzgsIDE3OCwgMTc4KSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoNzYsIDc2LCA3NikpOworICAgICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoNzYsIDc2
LCA3NikpOwogCiAgICAgICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiByb3VuZGVkUmVj
dFBhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgICAgIENHUGF0aEFk
ZFJvdW5kZWRSZWN0KHJvdW5kZWRSZWN0UGF0aC5nZXQoKSwgMCwgdHJhY2tDbGlwLCBjb3JuZXJX
aWR0aCwgY29ybmVySGVpZ2h0KTsKQEAgLTkxOSwxMyArOTE0LDEzIEBAIGJvb2wgUmVuZGVyVGhl
bWVJT1M6OnBhaW50UHJvZ3Jlc3NCYXIoY28KIAogICAgIGNvbnN0IGZsb2F0IHZlcnRpY2FsUmVu
ZGVyaW5nUG9zaXRpb24gPSByZWN0LnkoKSArIHZlcnRpY2FsT2Zmc2V0OwogICAgIGF1dG8gc3Ry
b2tlR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxv
YXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQo
cmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAt
IDEpIH0pOwotICAgIHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigweDhk
LCAweDhkLCAweDhkKSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBD
b2xvcigweGVlLCAweGVlLCAweGVlKSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3Rv
cCgwLjU1LCBDb2xvcigweGVlLCAweGVlLCAweGVlKSk7Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgxLjAsIENvbG9yKDB4OGQsIDB4OGQsIDB4OGQpKTsKKyAgICBzdHJva2VHcmFk
aWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDB4OGQsIDB4OGQsIDB4OGQp
KTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIG1ha2VTaW1wbGVDb2xv
cigweGVlLCAweGVlLCAweGVlKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgw
LjU1LCBtYWtlU2ltcGxlQ29sb3IoMHhlZSwgMHhlZSwgMHhlZSkpOworICAgIHN0cm9rZUdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkp
OwogICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShzdHJva2VHcmFkaWVudCkp
OwogCi0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMjU1LCAyNTUsIDI1NSkpOworICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAKICAgICBQYXRoIHRyYWNrUGF0
aDsKICAgICBGbG9hdFJlY3QgdHJhY2tSZWN0KHJlY3QueCgpICsgMC4yNSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIDAuMjUsIHJlY3Qud2lkdGgoKSAtIDAuNSwgcHJvZ3Jlc3NCYXJIZWln
aHQgLSAwLjUpOwpAQCAtOTM5LDggKzkzNCw4IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
UHJvZ3Jlc3NCYXIoY28KIAogICAgIGZsb2F0IHVwcGVyR3JhZGllbnRIZWlnaHQgPSBwcm9ncmVz
c0JhckhlaWdodCAvIDIuOwogICAgIGF1dG8gdXBwZXJHcmFkaWVudCA9IEdyYWRpZW50OjpjcmVh
dGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJl
bmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5k
ZXJpbmdQb3NpdGlvbiArIHVwcGVyR3JhZGllbnRIZWlnaHQgLSAxLjUpIH0pOwotICAgIHVwcGVy
R3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDEzMywgMTMzLCAxMzMsIDE4OCkpOwot
ICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDE4LCAxOCwgMTgsIDUx
KSk7CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9y
KDEzMywgMTMzLCAxMzMsIDE4OCkpOworICAgIHVwcGVyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgx
LjAsIG1ha2VTaW1wbGVDb2xvcigxOCwgMTgsIDE4LCA1MSkpOwogICAgIGNvbnRleHQuc2V0Rmls
bEdyYWRpZW50KFdURk1vdmUodXBwZXJHcmFkaWVudCkpOwogCiAgICAgY29udGV4dC5maWxsUmVj
dChGbG9hdFJlY3QocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24sIHJlY3Qud2lk
dGgoKSwgdXBwZXJHcmFkaWVudEhlaWdodCkpOwpAQCAtOTUxLDE4ICs5NDYsMTggQEAgYm9vbCBS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0JhcihjbwogICAgICAgICBkb3VibGUgcG9zaXRp
b24gPSBjbGFtcFRvKHJlbmRlclByb2dyZXNzLnBvc2l0aW9uKCksIDAuMCwgMS4wKTsKICAgICAg
ICAgZG91YmxlIGJhcldpZHRoID0gcG9zaXRpb24gKiByZWN0LndpZHRoKCk7CiAgICAgICAgIGF1
dG8gYmFyR3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsg
RmxvYXRQb2ludChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIDAuNSksIEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0Jh
ckhlaWdodCAtIDEpIH0pOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwg
Q29sb3IoMTk1LCAyMTcsIDI0NykpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDUsIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjQ5LCBDb2xvcigxMTgsIDE2NCwgMjI4KSk7Ci0gICAgICAgIGJhckdyYWRpZW50
LT5hZGRDb2xvclN0b3AoMC41MSwgQ29sb3IoMzYsIDExNCwgMjEwKSk7Ci0gICAgICAgIGJhckdy
YWRpZW50LT5hZGRDb2xvclN0b3AoMC41NSwgQ29sb3IoMzYsIDExNCwgMjEwKSk7Ci0gICAgICAg
IGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBDb2xvcig1NywgMTQyLCAyNDQpKTsKKyAg
ICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIG1ha2VTaW1wbGVDb2xvcigxOTUs
IDIxNywgMjQ3KSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgbWFr
ZVNpbXBsZUNvbG9yKDExOCwgMTY0LCAyMjgpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjQ5LCBtYWtlU2ltcGxlQ29sb3IoMTE4LCAxNjQsIDIyOCkpOworICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTEsIG1ha2VTaW1wbGVDb2xvcigzNiwgMTE0LCAy
MTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjU1LCBtYWtlU2ltcGxl
Q29sb3IoMzYsIDExNCwgMjEwKSk7CisgICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3Ao
MS4wLCBtYWtlU2ltcGxlQ29sb3IoNTcsIDE0MiwgMjQ0KSk7CiAgICAgICAgIGNvbnRleHQuc2V0
RmlsbEdyYWRpZW50KFdURk1vdmUoYmFyR3JhZGllbnQpKTsKIAogICAgICAgICBhdXRvIGJhclN0
cm9rZUdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6TGluZWFyRGF0YSB7IEZs
b2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24pLCBGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgcHJvZ3Jlc3NCYXJIZWlnaHQg
LSAxKSB9KTsKLSAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENv
bG9yKDk1LCAxMDcsIDE4MykpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKDAuNSwgQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKLSAgICAgICAgYmFyU3Ryb2tlR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDM4LCAxMDQsIDE2NikpOworICAgICAgICBi
YXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDk1LCAx
MDcsIDE4MykpOworICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNSwg
bWFrZVNpbXBsZUNvbG9yKDY2LCAxMDYsIDE3NCwgMjQwKSk7CisgICAgICAgIGJhclN0cm9rZUdy
YWRpZW50LT5hZGRDb2xvclN0b3AoMS4wLCBtYWtlU2ltcGxlQ29sb3IoMzgsIDEwNCwgMTY2KSk7
CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoV1RGTW92ZShiYXJTdHJva2VHcmFk
aWVudCkpOwogCiAgICAgICAgIFBhdGggYmFyUGF0aDsKQEAgLTE1NjgsMTAgKzE1NjMsMTAgQEAg
Q29sb3IgUmVuZGVyVGhlbWVJT1M6OnN5c3RlbUNvbG9yKENTU1ZhbAogY29uc3QgQ0dTaXplIGF0
dGFjaG1lbnRTaXplID0geyAxNjAsIDExOSB9OwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRC
b3JkZXJSYWRpdXMgPSAxNjsKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50Qm9yZGVyQ29sb3IoKSB7
IHJldHVybiBDb2xvcigyMDQsIDIwNCwgMjA0KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0
dGFjaG1lbnRCb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyMDQsIDIwNCwgMjA0KTsKIHN0
YXRpYyBDR0Zsb2F0IGF0dGFjaG1lbnRCb3JkZXJUaGlja25lc3MgPSAxOwogCi1zdGF0aWMgQ29s
b3IgYXR0YWNobWVudFByb2dyZXNzQ29sb3IoKSB7IHJldHVybiBDb2xvcigyMjIsIDIyMiwgMjIy
KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0NvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDIyMiwgMjIyLCAyMjIpOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJv
Z3Jlc3NCb3JkZXJUaGlja25lc3MgPSAzOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9n
cmVzc1NpemUgPSAzNjsKQEAgLTE4NzAsOCArMTg2NSw4IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0
YWNobWVudFByb2dyZXNzKEdyYXAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVy
KGNvbnRleHQpOwogCiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MoYXR0YWNobWVudFBy
b2dyZXNzQm9yZGVyVGhpY2tuZXNzKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0dGFj
aG1lbnRQcm9ncmVzc0NvbG9yKCkpOwotICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGF0dGFjaG1l
bnRQcm9ncmVzc0NvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0YWNobWVu
dFByb2dyZXNzQ29sb3IpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGF0dGFjaG1lbnRQcm9n
cmVzc0NvbG9yKTsKICAgICBjb250ZXh0LnN0cm9rZUVsbGlwc2UoaW5mby5wcm9ncmVzc1JlY3Qp
OwogCiAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSBpbmZvLnByb2dyZXNzUmVjdC5jZW50ZXIoKTsK
QEAgLTE4OTYsNyArMTg5MSw3IEBAIHN0YXRpYyBQYXRoIGF0dGFjaG1lbnRCb3JkZXJQYXRoKFJl
bmRlckEKIAogc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgUGF0aCYgYm9yZGVyUGF0aCkKIHsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGF0dGFjaG1lbnRCb3JkZXJDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9y
KGF0dGFjaG1lbnRCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3Mo
YXR0YWNobWVudEJvcmRlclRoaWNrbmVzcyk7CiAgICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRl
clBhdGgpOwogfQpAQCAtMjAyNCw3ICsyMDE5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6cGFp
bnRTeXN0ZW1QcmV2aWV3QgogICAgIC8vIERyYXcgYSBkcm9wIHNoYWRvdyBhcm91bmQgdGhlIGNp
cmNsZS4KICAgICAvLyBVc2UgdGhlIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbiwgYmVjYXVzZSBp
dCBjYWxjdWxhdGVzIHRoZSBibHVyIHJhZGl1cyBpbiBjb250ZXh0IHNwYWNlLAogICAgIC8vIHJh
dGhlciB0aGFuIHNjcmVlbiBzcGFjZS4KLSAgICBDb2xvciBzaGFkb3dDb2xvciA9IENvbG9yIHsg
MC5mLCAwLmYsIDAuZiwgMC4xZiB9OworICAgIGF1dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKDAuZiwgMC5mLCAwLmYsIDAuMWYpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRo
ZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNo
YWRvdyBjb2xvciB0byBhcHBlYXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NDksOCArMTY0OSw4
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICB9OwogICAg
IHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFBhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRz
KGFycm93MikpOwogCi0gICAgQ29sb3IgbGVmdFNlcGFyYXRvckNvbG9yKDAsIDAsIDAsIDQwKTsK
LSAgICBDb2xvciByaWdodFNlcGFyYXRvckNvbG9yKDI1NSwgMjU1LCAyNTUsIDQwKTsKKyAgICBj
b25zdGV4cHIgYXV0byBsZWZ0U2VwYXJhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwg
MCwgNDApOworICAgIGNvbnN0ZXhwciBhdXRvIHJpZ2h0U2VwYXJhdG9yQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgNDApOwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGUg
c2VwYXJhdG9yIHRoaWNrbmVzcyBhbmQgc3BhY2UgYmUgc2NhbGVkIHVwIGJ5IGZvbnRTY2FsZT8K
ICAgICBpbnQgc2VwYXJhdG9yU3BhY2UgPSAyOyAvLyBEZWxpYmVyYXRlbHkgaWdub3JlcyB6b29t
IHNpbmNlIGl0IGxvb2tzIG5pY2VyIGlmIGl0IHN0YXlzIHRoaW4uCkBAIC0yNDcyLDggKzI0NzIs
OCBAQCBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9yCiBjb25zdCBDR0Zs
b2F0IGF0dGFjaG1lbnRJY29uQmFja2dyb3VuZFJhZGl1cyA9IDM7CiBjb25zdCBDR0Zsb2F0IGF0
dGFjaG1lbnRJY29uVG9UaXRsZU1hcmdpbiA9IDI7CiAKLXN0YXRpYyBDb2xvciBhdHRhY2htZW50
SWNvbkJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDMwKTsgfQotc3Rh
dGljIENvbG9yIGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IoKSB7IHJldHVybiBDb2xvcigyNTUs
IDI1NSwgMjU1LCAxMjUpOyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudEljb25C
YWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMzApOworY29uc3RleHBy
IFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRJY29uQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MjU1LCAyNTUsIDI1NSwgMTI1KTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50VGl0bGVGb250
U2l6ZSA9IDEyOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kUmFkaXVz
ID0gMzsKQEAgLTI0ODEsMjMgKzI0ODEsMjMgQEAgY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50VGl0
bGVCYWNrZ3JvdW5kUAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50VGl0bGVNYXhpbXVtV2lkdGgg
PSAxMDAgLSAoYXR0YWNobWVudFRpdGxlQmFja2dyb3VuZFBhZGRpbmcgKiAyKTsKIGNvbnN0IENG
SW5kZXggYXR0YWNobWVudFRpdGxlTWF4aW11bUxpbmVDb3VudCA9IDI7CiAKLXN0YXRpYyBDb2xv
ciBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZUJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9y
KDIwNCwgMjA0LCAyMDQsIDI1NSk7IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50VGl0bGVJbmFj
dGl2ZVRleHRDb2xvcigpIHsgcmV0dXJuIENvbG9yKDEwMCwgMTAwLCAxMDAsIDI1NSk7IH0KK2Nv
bnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZUJhY2tncm91bmRDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigyMDQsIDIwNCwgMjA0LCAyNTUpOworY29uc3RleHByIFNpbXBs
ZUNvbG9yIGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlVGV4dENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDEwMCwgMTAwLCAxMDAsIDI1NSk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFN1YnRpdGxl
Rm9udFNpemUgPSAxMDsKIGNvbnN0IGludCBhdHRhY2htZW50U3VidGl0bGVXaWR0aEluY3JlbWVu
dCA9IDEwOwotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRTdWJ0aXRsZVRleHRDb2xvcigpIHsgcmV0
dXJuIENvbG9yKDgyLCAxNDUsIDIxNCwgMjU1KTsgfQorY29uc3RleHByIFNpbXBsZUNvbG9yIGF0
dGFjaG1lbnRTdWJ0aXRsZVRleHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcig4MiwgMTQ1LCAyMTQs
IDI1NSk7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFByb2dyZXNzQmFyV2lkdGggPSAzMDsK
IGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFByb2dyZXNzQmFySGVpZ2h0ID0gNTsKIGNvbnN0IENH
RmxvYXQgYXR0YWNobWVudFByb2dyZXNzQmFyT2Zmc2V0ID0gLTk7CiBjb25zdCBDR0Zsb2F0IGF0
dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlcldpZHRoID0gMTsKLXN0YXRpYyBDb2xvciBhdHRhY2ht
ZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCA4
OSk7IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IoKSB7IHJl
dHVybiBDb2xvcihDb2xvcjo6d2hpdGUpOyB9Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFByb2dy
ZXNzQmFyQm9yZGVyQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCAxMjgpOyB9Citjb25z
dGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyQmFja2dyb3VuZENvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDg5KTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRh
Y2htZW50UHJvZ3Jlc3NCYXJGaWxsQ29sb3IgPSBDb2xvcjo6d2hpdGU7Citjb25zdGV4cHIgU2lt
cGxlQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMCwgMCwgMCwgMTI4KTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJC
b3JkZXJSYWRpdXMgPSA1Owotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRl
ckNvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgNTYpOyB9Citjb25zdGV4cHIgU2ltcGxl
Q29sb3IgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MCwgMCwgMCwgNTYpOwogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJX
aWR0aCA9IDI7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlckRhc2hM
ZW5ndGggPSA2OwogCkBAIC0yNTQxLDcgKzI1NDEsNyBAQCBzdGF0aWMgQ29sb3IgdGl0bGVUZXh0
Q29sb3JGb3JBdHRhY2htZW50CiAgICAgICAgIGlmIChhdHRhY2htZW50LmZyYW1lKCkuc2VsZWN0
aW9uKCkuaXNGb2N1c2VkQW5kQWN0aXZlKCkpCiAgICAgICAgICAgICByZXN1bHQgPSBjb2xvckZy
b21OU0NvbG9yKFtOU0NvbG9yIGFsdGVybmF0ZVNlbGVjdGVkQ29udHJvbFRleHRDb2xvcl0pOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VGl0bGVJbmFjdGl2
ZVRleHRDb2xvcigpOworICAgICAgICAgICAgcmVzdWx0ID0gYXR0YWNobWVudFRpdGxlSW5hY3Rp
dmVUZXh0Q29sb3I7CiAgICAgfQogCiAgICAgcmV0dXJuIGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xv
ckJ5QXBwbHlpbmdDb2xvckZpbHRlcihyZXN1bHQpOwpAQCAtMjY0Nyw3ICsyNjQ3LDcgQEAgdm9p
ZCBBdHRhY2htZW50TGF5b3V0OjpsYXlPdXRTdWJ0aXRsZShjbwogICAgIGlmIChzdWJ0aXRsZVRl
eHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBDb2xvciBzdWJ0aXRsZUNvbG9y
ID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1l
bnRTdWJ0aXRsZVRleHRDb2xvcigpKTsKKyAgICBDb2xvciBzdWJ0aXRsZUNvbG9yID0gYXR0YWNo
bWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRTdWJ0aXRs
ZVRleHRDb2xvcik7CiAgICAgQ0ZTdHJpbmdSZWYgbGFuZ3VhZ2UgPSAwOyAvLyBCeSBub3Qgc3Bl
Y2lmeWluZyBhIGxhbmd1YWdlIHdlIHVzZSB0aGUgc3lzdGVtIGxhbmd1YWdlLgogICAgIFJldGFp
blB0cjxDVEZvbnRSZWY+IGZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVVJRm9udEZvckxhbmd1
YWdlKGtDVEZvbnRVSUZvbnRTeXN0ZW0sIGF0dGFjaG1lbnRTdWJ0aXRsZUZvbnRTaXplLCBsYW5n
dWFnZSkpOwogICAgIE5TRGljdGlvbmFyeSAqdGV4dEF0dHJpYnV0ZXMgPSBAewpAQCAtMjcyMSw3
ICsyNzIxLDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50SWNvbkJhY2tncm91bgogICAg
IGlmIChwYWludEJvcmRlcikKICAgICAgICAgYmFja2dyb3VuZFJlY3QuaW5mbGF0ZSgtYXR0YWNo
bWVudEljb25TZWxlY3Rpb25Cb3JkZXJUaGlja25lc3MpOwogCi0gICAgQ29sb3IgYmFja2dyb3Vu
ZENvbG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0
dGFjaG1lbnRJY29uQmFja2dyb3VuZENvbG9yKCkpOworICAgIENvbG9yIGJhY2tncm91bmRDb2xv
ciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2ht
ZW50SWNvbkJhY2tncm91bmRDb2xvcik7CiAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxv
YXRSb3VuZGVkUmVjdChiYWNrZ3JvdW5kUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoYXR0
YWNobWVudEljb25CYWNrZ3JvdW5kUmFkaXVzKSksIGJhY2tncm91bmRDb2xvcik7CiAKICAgICBp
ZiAocGFpbnRCb3JkZXIpIHsKQEAgLTI3MzIsNyArMjczMiw3IEBAIHN0YXRpYyB2b2lkIHBhaW50
QXR0YWNobWVudEljb25CYWNrZ3JvdW4KICAgICAgICAgUGF0aCBib3JkZXJQYXRoOwogICAgICAg
ICBib3JkZXJQYXRoLmFkZFJvdW5kZWRSZWN0KGJvcmRlclJlY3QsIGljb25CYWNrZ3JvdW5kUmFk
aXVzU2l6ZSk7CiAKLSAgICAgICAgQ29sb3IgYm9yZGVyQ29sb3IgPSBhdHRhY2htZW50LnN0eWxl
KCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudEljb25Cb3JkZXJDb2xvcigp
KTsKKyAgICAgICAgQ29sb3IgYm9yZGVyQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JC
eUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudEljb25Cb3JkZXJDb2xvcik7CiAgICAgICAg
IGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYm9yZGVyQ29sb3IpOwogICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50SWNvblNlbGVjdGlvbkJvcmRlclRoaWNrbmVzcyk7
CiAgICAgICAgIGNvbnRleHQuc3Ryb2tlUGF0aChib3JkZXJQYXRoKTsKQEAgLTI4MzAsNyArMjgz
MCw3IEBAIHN0YXRpYyB2b2lkIHBhaW50QXR0YWNobWVudFRpdGxlQmFja2dyb3UKICAgICAgICAg
YmFja2dyb3VuZENvbG9yID0gY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBhbHRlcm5hdGVTZWxl
Y3RlZENvbnRyb2xDb2xvcl0pOwogICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19FTkQKICAgICB9IGVsc2UKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gYXR0YWNobWVudFRp
dGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgYmFja2dyb3VuZENvbG9yID0g
YXR0YWNobWVudFRpdGxlSW5hY3RpdmVCYWNrZ3JvdW5kQ29sb3I7CiAKICAgICBiYWNrZ3JvdW5k
Q29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYmFj
a2dyb3VuZENvbG9yKTsKICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihiYWNrZ3JvdW5kQ29sb3Ip
OwpAQCAtMjg3NSw3ICsyODc1LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50UHJvZ3Jl
c3MoY29ucwogICAgIGJhY2tncm91bmRSZWN0LmluZmxhdGUoLWF0dGFjaG1lbnRQcm9ncmVzc0Jh
ckJvcmRlcldpZHRoIC8gMik7CiAKICAgICBGbG9hdFJvdW5kZWRSZWN0IGJhY2tncm91bmRSb3Vu
ZGVkUmVjdChiYWNrZ3JvdW5kUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoYmFja2dyb3Vu
ZFJlY3QuaGVpZ2h0KCkgLyAyKSk7Ci0gICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoYmFja2dy
b3VuZFJvdW5kZWRSZWN0LCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IoKSk7
CisgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoYmFja2dyb3VuZFJvdW5kZWRSZWN0LCBhdHRh
Y2htZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IpOwogCiAgICAgewogICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIGNsaXBTYXZlcihjb250ZXh0KTsKQEAgLTI4ODUsMTMgKzI4
ODUsMTMgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50UHJvZ3Jlc3MoY29ucwogICAgICAg
ICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgocHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiBwcm9ncmVzcyk7
CiAgICAgICAgIHByb2dyZXNzUmVjdCA9IGVuY2xvc2VSZWN0VG9EZXZpY2VQaXhlbHMocHJvZ3Jl
c3NSZWN0LCBhdHRhY2htZW50LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKLSAg
ICAgICAgY29udGV4dC5maWxsUmVjdChwcm9ncmVzc1JlY3QsIGF0dGFjaG1lbnRQcm9ncmVzc0Jh
ckZpbGxDb2xvcigpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChwcm9ncmVzc1JlY3QsIGF0
dGFjaG1lbnRQcm9ncmVzc0JhckZpbGxDb2xvcik7CiAgICAgfQogCiAgICAgUGF0aCBib3JkZXJQ
YXRoOwogICAgIGZsb2F0IGJvcmRlclJhZGl1cyA9IGJvcmRlclJlY3QuaGVpZ2h0KCkgLyAyOwog
ICAgIGJvcmRlclBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgRmxvYXRTaXplKGJvcmRl
clJhZGl1cywgYm9yZGVyUmFkaXVzKSk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRh
Y2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0cm9rZUNv
bG9yKGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0
cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJXaWR0aCk7CiAgICAgY29u
dGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwogfQpAQCAtMjkwMSw3ICsyOTAxLDcgQEAgc3Rh
dGljIHZvaWQgcGFpbnRBdHRhY2htZW50UGxhY2Vob2xkZXJCbwogICAgIFBhdGggYm9yZGVyUGF0
aDsKICAgICBib3JkZXJQYXRoLmFkZFJvdW5kZWRSZWN0KGxheW91dC5hdHRhY2htZW50UmVjdCwg
RmxvYXRTaXplKGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlclJhZGl1cywgYXR0YWNobWVudFBs
YWNlaG9sZGVyQm9yZGVyUmFkaXVzKSk7CiAKLSAgICBDb2xvciBwbGFjZWhvbGRlckJvcmRlckNv
bG9yID0gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFj
aG1lbnRQbGFjZWhvbGRlckJvcmRlckNvbG9yKCkpOworICAgIENvbG9yIHBsYWNlaG9sZGVyQm9y
ZGVyQ29sb3IgPSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIo
YXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IocGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VUaGlj
a25lc3MoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyV2lkdGgpOwogICAgIGNvbnRleHQuc2V0
U3Ryb2tlU3R5bGUoRGFzaGVkU3Ryb2tlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lV2luLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDE5
ICsyODgsMTkgQEAgYm9vbCBSZW5kZXJUaGVtZVdpbjo6c3VwcG9ydHNIb3Zlcihjb25zdAogQ29s
b3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKICAgICBDT0xPUlJFRiBj
b2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdIVCk7Ci0gICAgcmV0dXJuIENvbG9yKEdl
dFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOworICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9y
KSwgR2V0QlZhbHVlKGNvbG9yKSk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lV2luOjpwbGF0Zm9y
bUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpP
cHRpb25zPikgY29uc3QKIHsKICAgICAvLyBUaGlzIGNvbG9yIG1hdGNoZXMgRmlyZWZveC4KLSAg
ICByZXR1cm4gQ29sb3IoMTc2LCAxNzYsIDE3Nik7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cigxNzYsIDE3NiwgMTc2KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PikgY29uc3QKIHsKICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hM
SUdIVFRFWFQpOwotICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUo
Y29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKEdl
dFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvcikpOwogfQog
CiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKQEAg
LTEwMDksNyArMTAwOSw3IEBAIENvbG9yIFJlbmRlclRoZW1lV2luOjpzeXN0ZW1Db2xvcihDU1NW
YWwKICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkLCBv
cHRpb25zKTsKIAogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3Ioc3lzQ29sb3JJbmRl
eCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciks
IEdldEJWYWx1ZShjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoR2V0UlZhbHVl
KGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CiB9CiAKICNpZiBF
TkFCTEUoVklERU8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIHBhaW50Rmxvdyhjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gZGVidWdTaGFk
b3cgPSBudWxscHRyOwogICAgIGlmIChmbG93LnNldHRpbmdzKCkuc2ltcGxlTGluZUxheW91dERl
YnVnQm9yZGVyc0VuYWJsZWQoKSkgewotICAgICAgICBkZWJ1Z1NoYWRvdyA9IG1ha2VVbmlxdWU8
U2hhZG93RGF0YT4oSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgQ29sb3IoMCwgMjU1LCAwLCAyMDApKTsKKyAgICAgICAgZGVidWdTaGFkb3cgPSBtYWtl
VW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpO
b3JtYWwsIHRydWUsIG1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDAsIDIwMCkpOwogICAgICAgICB0
ZXh0UGFpbnRlci5zZXRTaGFkb3coZGVidWdTaGFkb3cuZ2V0KCkpOwogICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJgogCiAgICAgaW5m
by5jb250ZXh0KCkuc2V0U3Ryb2tlVGhpY2tuZXNzKDEuMGYpOwogICAgIGluZm8uY29udGV4dCgp
LnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJv
a2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsKKyAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VD
b2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAKICAgICBpbmZvLmNvbnRleHQoKS5k
cmF3TGluZShhZGp1c3RlZFBhaW50T2Zmc2V0LCBJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0
LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
KSk7CiAgICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0
LnkoKSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zm
c2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRI
ZWlnaHQoKSkpOwpAQCAtMTI4LDEzICsxMjgsMTMgQEAgdm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6
cGFpbnQoUGFpbnRJbmZvJgogCiAgICAgaW50IHRvcFN0YXJ0ID0gcGFkZGluZ1RvcCgpOwogCi0g
ICAgaW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwKSk7CisgICAg
aW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkp
OwogCiAgICAgaW5mby5jb250ZXh0KCkuZHJhd0xpbmUoSW50UG9pbnQoYWRqdXN0ZWRQYWludE9m
ZnNldC54KCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpLCBJbnRQb2ludChh
ZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVz
dGVkUGFpbnRPZmZzZXQueSgpICsgdG9wU3RhcnQpKTsKIAogICAgIGludCBiYXNlbGluZSA9IHJv
dW5kVG9JbnQoYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6
b250YWxMaW5lKSk7CiAKLSAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigy
NTUsIDAsIDApKTsKKyAgICBpbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxl
Q29sb3IoMjU1LCAwLCAwKSk7CiAKICAgICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2lu
dChhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNl
bGluZSksIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zm
c2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBiYXNlbGluZSkpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI2LDcgKzIwMjYsNyBAQCBDb2xvciBSZW5k
ZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50CiAgICAgaWYgKGlzQ3VycmVudENvbG9yKHJl
c3VsdCkpIHsKICAgICAgICAgYXV0byBib3JkZXJTdHlsZSA9IGNvbXB1dGVCb3JkZXJTdHlsZSgp
OwogICAgICAgICBpZiAoIXZpc2l0ZWRMaW5rICYmIChib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHls
ZTo6SW5zZXQgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6Ok91dHNldCB8fCBib3JkZXJT
dHlsZSA9PSBCb3JkZXJTdHlsZTo6UmlkZ2UgfHwgYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6
Okdyb292ZSkpCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoMjM4LCAyMzgsIDIzOCk7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDIzOCwgMjM4LCAyMzgpOwogCiAgICAgICAg
IHJldHVybiB2aXNpdGVkTGluayA/IHZpc2l0ZWRMaW5rQ29sb3IoKSA6IGNvbG9yKCk7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5k
ZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzE5LDcgKzEzMTksNyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgQ29sb3ImIHZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBt
X3JhcmVJbmhlcml0ZWREYXRhLT52aXNpdGVkTGlua1N0cm9rZUNvbG9yOyB9CiAgICAgdm9pZCBz
ZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IoYm9vbCB2KSB7IFNFVF9WQVIobV9yYXJlSW5o
ZXJpdGVkRGF0YSwgaGFzU2V0U3Ryb2tlQ29sb3IsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2KSk7
IH0KICAgICBib29sIGhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmFyZUluaGVyaXRlZERhdGEtPmhhc1NldFN0cm9rZUNvbG9yOyB9OwotICAgIHN0YXRpYyBD
b2xvciBpbml0aWFsU3Ryb2tlQ29sb3IoKSB7IHJldHVybiBDb2xvcihDb2xvcjo6dHJhbnNwYXJl
bnQpOyB9CisgICAgc3RhdGljIENvbG9yIGluaXRpYWxTdHJva2VDb2xvcigpIHsgcmV0dXJuIENv
bG9yOjp0cmFuc3BhcmVudDsgfQogICAgIENvbG9yIGNvbXB1dGVkU3Ryb2tlQ29sb3IoKSBjb25z
dDsKIAogICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQoKSBjb25zdCB7IHJldHVybiBtX3JhcmVJ
bmhlcml0ZWREYXRhLT5taXRlckxpbWl0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMjYyMzUyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1NWR1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTczLDEwICs3MywxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBpbml0aWFs
U3Ryb2tlUGFpbnRVcmkoKSB7IHJldHVybiBTdHJpbmcoKTsgfQogICAgIHN0YXRpYyBWZWN0b3I8
U1ZHTGVuZ3RoVmFsdWU+IGluaXRpYWxTdHJva2VEYXNoQXJyYXkoKSB7IHJldHVybiB7IH07IH0K
ICAgICBzdGF0aWMgZmxvYXQgaW5pdGlhbFN0b3BPcGFjaXR5KCkgeyByZXR1cm4gMTsgfQotICAg
IHN0YXRpYyBDb2xvciBpbml0aWFsU3RvcENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCk7
IH0KKyAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0b3BDb2xvcigpIHsgcmV0dXJuIG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAwKTsgfQogICAgIHN0YXRpYyBmbG9hdCBpbml0aWFsRmxvb2RPcGFjaXR5
KCkgeyByZXR1cm4gMTsgfQotICAgIHN0YXRpYyBDb2xvciBpbml0aWFsRmxvb2RDb2xvcigpIHsg
cmV0dXJuIENvbG9yKDAsIDAsIDApOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxMaWdodGlu
Z0NvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjU1LCAyNTUsIDI1NSk7IH0KKyAgICBzdGF0aWMgQ29s
b3IgaW5pdGlhbEZsb29kQ29sb3IoKSB7IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCk7
IH0KKyAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbExpZ2h0aW5nQ29sb3IoKSB7IHJldHVybiBtYWtl
U2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSk7IH0KICAgICBzdGF0aWMgU2hhZG93RGF0YSogaW5p
dGlhbFNoYWRvdygpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBzdGF0aWMgU3RyaW5nIGluaXRp
YWxNYXNrZXJSZXNvdXJjZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgc3RhdGljIFN0cmlu
ZyBpbml0aWFsTWFya2VyU3RhcnRSZXNvdXJjZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgYm9vbCBTVkdTdG9wRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjbwog
Q29sb3IgU1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNpdHkoKSBjb25zdAog
ewogICAgIGlmICghcmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKENvbG9yOjp0cmFu
c3BhcmVudCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiAKICAg
ICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyKCktPnN0eWxlKCk7CiAgICAgYXV0byYgc3ZnU3R5bGUg
PSBzdHlsZS5zdmdTdHlsZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5j
dGlvbkltcGwuaAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL3Byb3Bl
cnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgZmxvYXQgYmx1ZSA9IEJhc2U6
OmFuaW1hdGUocHJvZ3Jlc3MsIHJlcGVhdENvdW50LCBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQo
KSwgc2ltcGxlVG8uYmx1ZUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZEdXJhdGlvbi5ibHVl
Q29tcG9uZW50KCksIHNpbXBsZUFuaW1hdGVkLmJsdWVDb21wb25lbnQoKSk7CiAgICAgICAgIGZs
b2F0IGFscGhhID0gQmFzZTo6YW5pbWF0ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZy
b20uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG8uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlVG9B
dEVuZE9mRHVyYXRpb24uYWxwaGFDb21wb25lbnQoKSwgc2ltcGxlQW5pbWF0ZWQuYWxwaGFDb21w
b25lbnQoKSk7CiAgICAgICAgIAotICAgICAgICBhbmltYXRlZCA9IHsgcm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBo
YSkgfTsKKyAgICAgICAgYW5pbWF0ZWQgPSBtYWtlU2ltcGxlQ29sb3Iocm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChyZWQpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGdyZWVuKSwgcm91bmRB
bmRDbGFtcENvbG9yQ2hhbm5lbChibHVlKSwgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChhbHBo
YSkpOwogICAgIH0KIAogICAgIE9wdGlvbmFsPGZsb2F0PiBjYWxjdWxhdGVEaXN0YW5jZShTVkdF
bGVtZW50KiwgY29uc3QgU3RyaW5nJiBmcm9tLCBjb25zdCBTdHJpbmcmIHRvKSBjb25zdCBvdmVy
cmlkZQpAQCAtMTIwLDExICsxMjAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgYXV0byBzaW1wbGVU
byA9IG1fdG8udG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKIAogICAgICAgICAvLyBJZ25vcmVz
IGFueSBhbHBoYSBhbmQgc2V0cyBhbHBoYSBvbiByZXN1bHQgdG8gMTAwJSBvcGFxdWUuCi0gICAg
ICAgIG1fdG8gPSB7CisgICAgICAgIG1fdG8gPSBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgICAg
ICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLnJlZENvbXBvbmVudCgpICsgc2lt
cGxlRnJvbS5yZWRDb21wb25lbnQoKSksCiAgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKHNpbXBsZVRvLmdyZWVuQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmdyZWVuQ29tcG9u
ZW50KCkpLAogICAgICAgICAgICAgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChzaW1wbGVUby5i
bHVlQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9tLmJsdWVDb21wb25lbnQoKSkKLSAgICAgICAgfTsK
KyAgICAgICAgKTsKICAgICB9CiAKICAgICBzdGF0aWMgQ29sb3IgY29sb3JGcm9tU3RyaW5nKFNW
R0VsZW1lbnQqLCBjb25zdCBTdHJpbmcmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1LDEwICsxMDUsMTAgQEAgdm9pZCBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OmRy
YXdSZWN0KFBhZwogICAgIEZsb2F0UmVjdCBpbnNldFJlY3QgPSBvdmVybGF5LmJvdW5kcygpOwog
CiAgICAgaWYgKG92ZXJsYXkub3ZlcmxheVR5cGUoKSA9PSBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5
cGU6OkRvY3VtZW50KSB7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwg
MjU1LCAwKSk7CisgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9y
KDAsIDI1NSwgMCkpOwogICAgICAgICBpbnNldFJlY3QuaW5mbGF0ZSgtNTApOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7Cisg
ICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkp
OwogICAgICAgICBpbnNldFJlY3QuaW5mbGF0ZSgtMjApOwogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9jb2NvYS9XZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRpb25PdmVybGF5
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvY29jb2EvV2ViVmlld1Zp
c3VhbElkZW50aWZpY2F0aW9uT3ZlcmxheS5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9jb2NvYS9XZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRpb25PdmVybGF5
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0
V2l0aFdlYlZpZXc6KFBsYXRmb3IKICAgICBfbGF5ZXIgPSBhZG9wdE5TKFtbQ0FUaWxlZExheWVy
IGFsbG9jXSBpbml0XSk7CiAgICAgW19sYXllciBzZXROYW1lOkAiV2ViVmlld1Zpc3VhbElkZW50
aWZpY2F0aW9uT3ZlcmxheSJdOwogICAgIFtfbGF5ZXIgc2V0RnJhbWU6Q0dSZWN0TWFrZSgwLCAw
LCBbX3ZpZXcgYm91bmRzXS5zaXplLndpZHRoLCBbX3ZpZXcgYm91bmRzXS5zaXplLmhlaWdodCld
OwotICAgIFdlYkNvcmU6OkNvbG9yIHZpZXdDb2xvciA9IGlzRGVwcmVjYXRlZCA/IFdlYkNvcmU6
OkNvbG9yKDI1NSwgMCwgMCwgMzIpIDogV2ViQ29yZTo6Q29sb3IoMCwgMCwgMjU1LCAzMik7Cisg
ICAgV2ViQ29yZTo6Q29sb3Igdmlld0NvbG9yID0gaXNEZXByZWNhdGVkID8gV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgMzIpIDogV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAs
IDAsIDI1NSwgMzIpOwogICAgIFtfbGF5ZXIgc2V0QmFja2dyb3VuZENvbG9yOmNhY2hlZENHQ29s
b3Iodmlld0NvbG9yKV07CiAgICAgW19sYXllciBzZXRaUG9zaXRpb246OTk5XTsKICAgICBbX2xh
eWVyIHNldERlbGVnYXRlOnNlbGZdOwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM1MikKKysr
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAK
KzIwMjAtMDUtMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4
dGVuZGVkIENvbG9yOiBSZXBsYWNlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2
YWx1ZXMgd2l0aCB0eXBlIHNwZWNpZmljIGZhY3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxh
eWVyQmFja2luZ1N0b3JlOjpkcmF3SW5Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRDb2xvclRvV2ViQ29yZUNvbG9y
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdGFwSGlnaGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6
XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yQ2xpZW50OjpzaG93UGFpbnRSZWN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGFpbnRT
bmFwc2hvdEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29u
dHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZEluZGljYXRvck92ZXJsYXlDbGll
bnRJT1M6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6aGlnaGxpZ2h0Q29sb3IpOiBEZWxl
dGVkLgorCiAyMDIwLTA1LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgRGVwcmVjYXRlIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVy
QmFja2luZ1N0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQkocmV2aXNpb24gMjYyMzUyKQor
KysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29udAogCiAjaWZuZGVmIE5ERUJVRwogICAgIGlmICht
X2lzT3BhcXVlKQotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHNjYWxlZExheWVyQm91bmRzLCBX
ZWJDb3JlOjpDb2xvcigyNTUsIDQ3LCAxNDYpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChz
Y2FsZWRMYXllckJvdW5kcywgV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDI1NSwgNDcsIDE0Nikp
OwogI2VuZGlmCiAKICAgICBjb250ZXh0LnNjYWxlKG1fc2NhbGUpOwpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEdfREVGSU5FX0JPWEVEX1RZUEUoV2Vi
S2l0Q29sb3IsIHdlYmtpdF8KIAogY29uc3QgV2ViQ29yZTo6Q29sb3Igd2Via2l0Q29sb3JUb1dl
YkNvcmVDb2xvcihXZWJLaXRDb2xvciogY29sb3IpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkNv
bG9yKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLT5ncmVlbiksCisgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29s
b3ItPmdyZWVuKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzMjgsNyArNDMyOCw3IEBA
IC0gKHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVjdGkKIC0gKFdlYkNvcmU6OkNv
bG9yKV90YXBIaWdobGlnaHRDb2xvckZvckZhc3RDbGljazooQk9PTClmb3JGYXN0Q2xpY2sKIHsK
ICAgICBBU1NFUlQoX3Nob3dEZWJ1Z1RhcEhpZ2hsaWdodHNGb3JGYXN0Q2xpY2tpbmcpOwotICAg
IHJldHVybiBmb3JGYXN0Q2xpY2sgPyBXZWJDb3JlOjpDb2xvcigwLCAyMjUsIDAsIDEyNykgOiBX
ZWJDb3JlOjpDb2xvcigyMjUsIDAsIDAsIDEyNyk7CisgICAgcmV0dXJuIGZvckZhc3RDbGljayA/
IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyMjUsIDAsIDEyNykgOiBXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3IoMjI1LCAwLCAwLCAxMjcpOwogfQogCiAtICh2b2lkKV9zZXREb3VibGVUYXBH
ZXN0dXJlc0VuYWJsZWQ6KEJPT0wpZW5hYmxlZApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAkocmV2
aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJ
bnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAgdm9p
ZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoYwogICAgIHBhaW50TGF5ZXItPnNl
dEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBwYWludExheWVyLT5zZXRQb3NpdGlv
bihyZWN0LmxvY2F0aW9uKCkpOwogICAgIHBhaW50TGF5ZXItPnNldFNpemUocmVjdC5zaXplKCkp
OwotICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigxLjBmLCAwLjBmLCAw
LjBmLCAwLjJmKSk7CisgICAgcGFpbnRMYXllci0+c2V0QmFja2dyb3VuZENvbG9yKG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC4wZiwgMC4wZiwgMC4yZikpOwogCiAgICAgS2V5ZnJh
bWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1lcyhBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAgICAg
ZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCAx
KSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmlu
ZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw4
ICs1MDksOCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxhCiB7CiAg
ICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0gMTsKIAotICAgIENvbG9yIG92ZXJsYXlCYWNrZ3Jv
dW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwotICAgIENvbG9yIHNoYWRvd0NvbG9y
KDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpOworICAgIGF1dG8gb3ZlcmxheUJhY2tncm91bmRDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwor
ICAgIGF1dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAu
MGYsIDAuMGYsIDAuNWYpOwogCiAgICAgSW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9
IGRpcnR5UmVjdDsKICAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGJvcmRlcldp
ZHRoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwMiw3ICsyNDAyLDcgQEAgdm9pZCBX
ZWJQYWdlOjpwYWludFNuYXBzaG90QXRTaXplKGNvbnN0IAogCiAgICAgaWYgKG9wdGlvbnMgJiBT
bmFwc2hvdE9wdGlvbnNQYWludFNlbGVjdGlvblJlY3RhbmdsZSkgewogICAgICAgICBGbG9hdFJl
Y3Qgc2VsZWN0aW9uUmVjdGFuZ2xlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uQm91bmRz
KCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigweEZGLCAw
LCAwKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxl
Q29sb3IoMHhGRiwgMCwgMCkpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc3Ryb2tlUmVjdChz
ZWxlY3Rpb25SZWN0YW5nbGUsIDEpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmluZENvbnRyb2xsZXJJT1MubW0J
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9GaW5kQ29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDcgQEAg
Y29uc3QgaW50IHRvdGFsVmVydGljYWxNYXJnaW4gPSAxOwogCiBjb25zdGV4cHIgT3B0aW9uU2V0
PFRleHRJbmRpY2F0b3JPcHRpb24+IGZpbmRUZXh0SW5kaWNhdG9yT3B0aW9ucyB7IFRleHRJbmRp
Y2F0b3JPcHRpb246OkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiwgVGV4dElu
ZGljYXRvck9wdGlvbjo6RG9Ob3RDbGlwVG9WaXNpYmxlUmVjdCB9OwogCi1zdGF0aWMgQ29sb3Ig
aGlnaGxpZ2h0Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigyNTUsIDIyOCwgNTYsIDI1NSk7
Ci19Citjb25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUs
IDIyOCwgNTYsIDI1NSk7CiAKIHZvaWQgRmluZEluZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRy
YXdSZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKQEAgLTc5LDcgKzc2LDcgQEAgdm9pZCBGaW5kSW5k
aWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJhdwogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRS
ZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJbmRpY2F0b3ItPnRleHRSZWN0
c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKTsKICAgICBWZWN0b3I8UGF0aD4gcGF0aHMgPSBQ
YXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVjdHModGV4dFJlY3RzSW5Cb3Vu
ZGluZ1JlY3RDb29yZGluYXRlcywgY29ybmVyUmFkaXVzKTsKIAotICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKGhpZ2hsaWdodENvbG9yKCkpOworICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGhpZ2hs
aWdodENvbG9yKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBwYXRocykKICAgICAgICAg
Y29udGV4dC5maWxsUGF0aChwYXRoKTsKIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjYyMzYxKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDUtMzEgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9yOiBSZXBsYWNlIENv
bG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2YWx1ZXMgd2l0aCB0eXBlIHNwZWNpZmlj
IGZhY3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5tbToKKwogMjAyMC0wNS0yOSAg
QW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW0FwcGxlIFBheV0gUmVt
b3ZlIGNvbmRpdGlvbmFscyBmb3IgRU5BQkxFX0FQUExFX1BBWV9TRVNTSU9OX1YoM3w0KQpJbmRl
eDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbmRpY2F0ZUxheWVyLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVM
YXllci5tbQkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJJbmRpY2F0ZUxheWVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IC0gKGlkKWluaXRXaXRoV2ViVmlldzooV2ViVmlldyAqKXdlYlZpZXcKICAgICBzZWxmLmNvbnRl
bnRzU2NhbGUgPSBbW193ZWJWaWV3IHdpbmRvd10gc2NyZWVuU2NhbGVdOwogCiAgICAgLy8gQmx1
ZSBoaWdobGlnaHQgY29sb3IuCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBoaWdo
bGlnaHRDb2xvcigxMTEuMGYgLyAyNTUuMGYsIDE2OC4wZiAvIDI1NS4wZiwgMjIwLjBmIC8gMjU1
LjBmLCAwLjY2Zik7CisgICAgY29uc3RleHByIGF1dG8gaGlnaGxpZ2h0Q29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMTExLCAxNjgsIDIyMCwgMTY4KTsKICAgICBzZWxmLmJhY2tncm91bmRDb2xvciA9
IGNhY2hlZENHQ29sb3IoaGlnaGxpZ2h0Q29sb3IpOwogCiAgICAgcmV0dXJuIHNlbGY7CkluZGV4
OiBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAyMC0wNS0zMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAg
RXh0ZW5kZWQgQ29sb3I6IFJlcGxhY2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmlj
IHZhbHVlcyB3aXRoIHR5cGUgc3BlY2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChjb21wb3NpdGlvblRvVW5kZXJsaW5lcyk6CisKIDIwMjAtMDUtMTkgIEZ1amlpIEhpcm9u
b3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNhaXJvXSBBU1NF
UlQobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSBmYWlscyBpbiB+UGxhdGZvcm1EaXNw
bGF5KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiAyNjIz
NTIpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjI3NCw3ICs2Mjc0LDcgQEAgc3RhdGljIHZvaWQgY29tcG9zaXRpb25Ub1VuZGVybGlu
ZXMoY29ucwogICAgICAgICB1bmRlcmxpbmVzW2ldLmVuZE9mZnNldCA9IGNsYXVzZXNbaSArIDFd
OwogICAgICAgICBCWVRFIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbY2xhdXNlc1tpXV07CiAgICAg
ICAgIHVuZGVybGluZXNbaV0udGhpY2sgPSBhdHRyaWJ1dGUgPT0gQVRUUl9UQVJHRVRfQ09OVkVS
VEVEIHx8IGF0dHJpYnV0ZSA9PSBBVFRSX1RBUkdFVF9OT1RDT05WRVJURUQ7Ci0gICAgICAgIHVu
ZGVybGluZXNbaV0uY29sb3IgPSBDb2xvcigwLDAsMCk7CisgICAgICAgIHVuZGVybGluZXNbaV0u
Y29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCk7CiAgICAgfQogfQogCkluZGV4OiBUb29s
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjIz
NTQpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAor
MjAyMC0wNS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0
ZW5kZWQgQ29sb3I6IFJlcGxhY2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZh
bHVlcyB3aXRoIHR5cGUgc3BlY2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NvbG9yVGVzdHMuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6Om1ha2VDb2xvcik6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9QREZTbmFwc2hvdC5tbToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VGVzdFBERlBhZ2U6OmNvbG9yQXRQb2ludCBjb25zdCk6CisKIDIwMjAtMDUt
MzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENv
bG9yOiBBZGRpdGlvbmFsIGNvbG9yIGNsZWFudXBzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAK
IFRFU1QoQ29sb3IsIFJHQlRvSFNMX1JlZCkKIHsKLSAgICBDb2xvciBjb2xvcigyNTUsIDAsIDAp
OworICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAKICAgICBh
dXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKQEAgLTgzLDcgKzgzLDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfUmVkKQogCiBURVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKLSAgICBD
b2xvciBjb2xvcigwLCAyNTUsIDApOworICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDAsIDI1NSwgMCk7CiAKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxw
aGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKQEAgLTk5
LDcgKzk5LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfR3JlZW4pCiAKIFRFU1QoQ29sb3IsIFJH
QlRvSFNMX0JsdWUpCiB7Ci0gICAgQ29sb3IgY29sb3IoMCwgMCwgMjU1KTsKKyAgICBDb2xvciBj
b2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAyNTUpOwogCiAgICAgYXV0byBbaHVlLCBzYXR1
cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCkpOwogCkBAIC0xNzEsNyArMTcxLDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkp
CiAgICAgRVhQRUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQ
RUNUX0ZBTFNFKG90aGVySW52YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICBDb2xvciB2
YWxpZENvbG9yKDI1NSwgMCwgMCk7CisgICAgQ29sb3IgdmFsaWRDb2xvciA9IG1ha2VTaW1wbGVD
b2xvcigyNTUsIDAsIDApOwogICAgIEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsK
ICAgICBFWFBFQ1RfRkFMU0UodmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogCkBAIC0xNzksNyAr
MTc5LDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxp
ZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4
dGVuZGVkKCkpOwogCi0gICAgdmFsaWRDb2xvciA9IENvbG9yKDEsIDIsIDMsIDQpOworICAgIHZh
bGlkQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMSwgMiwgMywgNCk7CiAgICAgRVhQRUNUX1RSVUUo
dmFsaWRDb2xvci5pc1ZhbGlkKCkpOwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0
ZW5kZWQoKSk7CiAgICAgYXV0byBzaW1wbGVWYWxpZENvbG9yID0gdmFsaWRDb2xvci50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVz
dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIAogVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xv
ciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENv
bG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFj
ZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAg
ICBhdXRvIFtyLCBnLCBiLCBhbHBoYV0gPSBjMS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwpA
QCAtNTEsNyArNTEsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogCiBURVNU
KEV4dGVuZGVkQ29sb3IsIENvcHlDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFr
ZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihj
MSk7CkBAIC02OSw3ICs2OSw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9y
KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7
IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3Ig
YzIgPSBjMTsKQEAgLTg4LDIwICs4OCwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1l
bnQpCiBURVNUKEV4dGVuZGVkQ29sb3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29s
b3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAg
ICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xv
clNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQo
KSk7CiAKLSAgICAgICAgQ29sb3IgYzIoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6
RGlzcGxheVAzKTsKKyAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAu
NSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CiAgICAg
fQogCiAgICAgewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQ
RUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OwogICAg
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShj
MSwgYzIpOwpAQCAtMTExLDggKzExMSw4IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkp
CiAgICAgaW50IGcgPSAxMjg7CiAgICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAg
ICBDb2xvciByZ2IxKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwg
Q29sb3JTcGFjZTo6U1JHQik7Ci0gICAgQ29sb3IgcmdiMihyLCBnLCBiLCBhKTsKKyAgICBDb2xv
ciByZ2IxIHsgbWFrZUV4dGVuZGVkQ29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUu
MCwgYSAvIDI1NS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjIgPSBtYWtl
U2ltcGxlQ29sb3IociwgZywgYiwgYSk7CiAgICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwogICAg
IEVYUEVDVF9ORShyZ2IyLCByZ2IxKTsKIH0KQEAgLTEyMCwyMCArMTIwLDIwIEBAIFRFU1QoRXh0
ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiB7CiAgICAg
ewotICAgICAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpOworICAgICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUo
YzEuaXNFeHRlbmRlZCgpKTsKIAotICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEo
YzEuaGFzaCgpLCBjMi5oYXNoKCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEo
MS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAgQ29s
b3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAK
LSAgICAgICAgQ29sb3IgYzIoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQik7
CisgICAgICAgIENvbG9yIGMyIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEu
MCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAogICAgICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQz
LDE0ICsxNDMsMTQgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4
OwogICAgIGludCBiID0gNjM7CiAgICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMShyIC8g
MjU1LjAsIGcgLyAyNTUuMCwgYiAvIDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0Ip
OwotICAgIENvbG9yIHJnYjIociwgZywgYiwgYSk7CisgICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRl
bmRlZENvbG9yKHIgLyAyNTUuMCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29s
b3JTcGFjZTo6U1JHQikgfTsKKyAgICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcs
IGIsIGEpOwogICAgIEVYUEVDVF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQogCiBU
RVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxh
eVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBj
MihXVEZNb3ZlKGMxKSk7CkBAIC0xNzEsNyArMTcxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBN
b3ZlQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiB7
Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAz
KTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVk
KCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsKQEAgLTE5Myw3ICsxOTMsNyBAQCBU
RVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVuZGVkQ29sb3Is
IEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IqIGMx
ID0gbmV3IENvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVuZGVkKCkp
OwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0yMTksNyArMjE5LDcgQEAg
VEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aQogCiBDb2xvciBtYWtlQ29s
b3IoKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRp
c3BsYXlQMyk7CisgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNF
eHRlbmRlZCgpKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgp
KTsKIApAQCAtMjM4LDcgKzIzOCw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVz
KQogVEVTVChFeHRlbmRlZENvbG9yLCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgewotICAg
ICAgICBDb2xvciBwM0NvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNw
bGF5UDMpOworICAgICAgICBDb2xvciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDAuNzUsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNU
X1RSVUUocDNDb2xvci5pc0V4dGVuZGVkKCkpOwogCiAgICAgICAgIGF1dG8gc1JHQkNvbXBvbmVu
dHMgPSBwM0NvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKQEAgLTI0OSw3ICsyNDksNyBA
QCBURVNUKEV4dGVuZGVkQ29sb3IsIFAzQ29udmVyc2lvblRvU1JHQikKICAgICB9CiAKICAgICB7
Ci0gICAgICAgIENvbG9yIGxpbmVhckNvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNw
YWNlOjpMaW5lYXJSR0IpOworICAgICAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRl
ZENvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CiAg
ICAgICAgIEVYUEVDVF9UUlVFKGxpbmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7CiAgICAgICAgIGF1
dG8gc1JHQkNvbXBvbmVudHMgPSBsaW5lYXJDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7
CiAgICAgICAgIEVYUEVDVF9UUlVFKFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9u
ZW50cy5jb21wb25lbnRzWzBdLCAxLjBmKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1BERlNuYXBzaG90Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERGU25hcHNob3QubW0JKHJldmlzaW9uIDI2MjM1
MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERGU25hcHNob3Qu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1BE
RkNvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAK
LXVzaW5nIFdlYkNvcmU6OkNvbG9yOwotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRF
U1QoUERGU25hcHNob3QsIEZ1bGxDb250ZW50KQpAQCAtNjAsNyArNTgsNyBAQCBURVNUKFBERlNu
YXBzaG90LCBGdWxsQ29udGVudCkKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPnRleHQoKVs0XSwg
J28nKTsKIAogICAgICAgICAvLyBUaGUgZW50aXJlIHBhZ2Ugc2hvdWxkIGJlIGdyZWVuLiBQaWNr
IGEgcG9pbnQgaW4gdGhlIG1pZGRsZSB0byBjaGVjay4KLSAgICAgICAgRVhQRUNUX1RSVUUocGFn
ZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAgICAgZGlkVGFrZVNuYXBzaG90ID0gdHJ1
ZTsKICAgICB9XTsKQEAgLTkxLDcgKzg5LDcgQEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9u
cykKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAg
ICAgICAvLyBUaGUgZW50aXJlIHBhZ2Ugc2hvdWxkIGJlIGdyZWVuLiBQaWNrIGEgcG9pbnQgaW4g
dGhlIG1pZGRsZSB0byBjaGVjay4KLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBv
aW50KDIwMCwgMTUwKSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFnZS0+Y29sb3JBdFBvaW50KDIwMCwgMTUwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3Io
MCwgMjU1LCAwKSk7CiAKICAgICAgICAgZGlkVGFrZVNuYXBzaG90ID0gdHJ1ZTsKICAgICB9XTsK
QEAgLTExMSwxMCArMTA5LDEwIEBAIFRFU1QoUERGU25hcHNob3QsIFN1YnJlZ2lvbnMpCiAgICAg
ICAgIEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RN
YWtlKDAsIDAsIDEyMDAsIDEyMDApKSk7CiAKICAgICAgICAgLy8gQSBwaXhlbCB0aGF0IHdhcyBp
biB0aGUgdmlldyBzaG91bGQgYmUgZ3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRv
IGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTAp
ID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0
UG9pbnQoMjAwLCAxNTApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsK
IAogICAgICAgICAvLyBBIHBpeGVsIHRoYXQgd2FzIG91dHNpZGUgdGhlIHZpZXcgc2hvdWxkIGFs
c28gYmUgZ3JlZW4gKHdlIGV4dGVuZCBiYWNrZ3JvdW5kIGNvbG9yIG91dCkuIFBpY2sgYSBwb2lu
dCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xv
ckF0UG9pbnQoOTAwLCA3MDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRShwYWdlLT5jb2xvckF0UG9pbnQoOTAwLCA3MDApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVD
b2xvcigwLCAyNTUsIDApKTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAg
IH1dOwpAQCAtMTQwLDIwICsxMzgsMjAgQEAgVEVTVChQREZTbmFwc2hvdCwgT3ZlcjIwMEluY2hl
cykKICAgICAgICAgYXV0byBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoMCk7CiAgICAgICAgIEVYUEVD
VF9ORShwYWdlLCBudWxscHRyKTsKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1Jl
Y3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigwLCAy
NTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAw
KSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAgICAgICAgIEVYUEVD
VF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgpLCA1dSk7CiAKICAgICAgICAgcGFnZSA9IGRvY3Vt
ZW50LT5wYWdlKDEpOwogICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7CiAgICAgICAg
IEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RNYWtl
KDAsIDAsIDgwMCwgMTQ0MDApKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQ
b2ludCg0MDAsIDMwMCkgPT0gQ29sb3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9y
KDAsIDI1NSwgMCkpOwogCiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgp
LCAwdSk7CiAKICAgICAgICAgcGFnZSA9IGRvY3VtZW50LT5wYWdlKDIpOwogICAgICAgICBFWFBF
Q1RfTkUocGFnZSwgbnVsbHB0cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9S
ZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSkpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1
NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDAp
ID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNU
X0VRKHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAgICAgICBkaWRUYWtlU25hcHNo
b3QgPSB0cnVlOwpAQCAtMTc4LDcgKzE3Niw3IEBAIFRFU1QoUERGU25hcHNob3QsIExpbmtzKQog
ICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7CiAKICAgICAgICAgRVhQRUNUX1RSVUUo
Q0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAx
NDQwMCkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAw
KSA9PSBDb2xvcigyNTUsIDI1NSwgMjU1KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNv
bG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1
LCAyNTUpKTsKIAogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgOHUp
OwogICAgICAgICBFWFBFQ1RfRVEocGFnZS0+dGV4dCgpWzBdLCAnQycpOwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9UZXN0UERGRG9jdW1lbnQubW0JKHJldmlzaW9uIDI2MjM1
MikKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDQsOCArMTQ0LDggQEAgV2ViQ29yZTo6Q29sb3IgVGVzdFBERlBhZ2U6
OmNvbG9yQXRQb2ludAogICAgIGF1dG8gYSA9IHBpeGVsW2kgKyAzXTsKIAogICAgIGlmICghYSkK
LSAgICAgICAgcmV0dXJuIHsgMCwgMCwgMCwgMCB9OwotICAgIHJldHVybiB7IHIgKiAyNTUgLyBh
LCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEgfTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
Om1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNp
bXBsZUNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEpOwogfQog
CiAvLyBEb2N1bWVudHMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400707</attachid>
            <date>2020-05-31 09:25:27 -0700</date>
            <delta_ts>2020-06-01 07:17:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212576-20200531092526.patch</filename>
            <type>text/plain</type>
            <size>126420</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjM2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MiBAQAorMjAyMC0wNS0zMSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3I6IFJlcGxh
Y2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3aXRoIHR5cGUgc3Bl
Y2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlcGxhY2VzIGFsbCByZW1haW5pbmcgaW1wbGljaXQgYW5kIGV4cGxp
Y2l0IHVzZXMgb2YgdGhlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYworICAgICAg
ICB2YWx1ZXMgd2l0aCBleHBsaWNpdCBjYWxscyB0byBtYWtlU2ltcGxlQ29sb3IvbWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cy9tYWtlRXh0ZW5kZWRDb2xvciwKKyAgICAgICAgZ2l2aW5nIHVzIGEg
Y29uc2lzdGVudCB3YXkgdG8gY3JlYXRlIGNvbG9ycy4gQWxzbyBhZGRlcyB1c2UgY29uc3RleHBy
IFNpbXBsZUNvbG9ycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhJ
c29sYXRlZE9iamVjdDo6aW5pdGlhbGl6ZUF0dHJpYnV0ZURhdGEpOgorICAgICAgICAqIGNzcy9D
U1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljQ1NTVmFsdWVQb29sOjpT
dGF0aWNDU1NWYWx1ZVBvb2wpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VySGVscGVy
czo6cGFyc2VDb2xvckZ1bmN0aW9uUGFyYW1ldGVycyk6CisgICAgICAgICogaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmNyZWF0
ZUlubmVyVGV4dFN0eWxlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNoYWRvd0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OkNhbnZhc1N0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBIGNv
bnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkcmF3T3V0bGluZWRRdWFkV2l0aENsaXApOgorICAgICAgICAoV2ViQ29yZTo6
ZHJhd1NoYXBlSGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdQYWludFJl
Y3RzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck92ZXJsYXk6OmRyYXdCb3VuZHMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yT3ZlcmxheTo6ZHJhd1J1bGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPdmVybGF5OjpkcmF3RWxlbWVudFRpdGxlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnBhcnNlQ29sb3IpOgorICAgICAgICAqIGxheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRl
Z3JhdGlvbkxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0SW50ZWdyYXRp
b246OkxpbmVMYXlvdXQ6OmRlYnVnVGV4dFNoYWRvdyk6CisgICAgICAgICogcGFnZS9DYXB0aW9u
VXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYXB0aW9uVXNl
clByZWZlcmVuY2VzTWVkaWFBRjo6Y2FwdGlvbnNCYWNrZ3JvdW5kQ1NTIGNvbnN0KToKKyAgICAg
ICAgKiBwYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvdWNo
RXZlbnRSZWdpb25Db2xvcnMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25PdmVybGF5OjpkcmF3UmVjdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpwYWludENvbnRlbnRzKToKKyAgICAgICAgKiBw
YWdlL1ByaW50Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcmludENvbnRleHQ6OnNw
b29sQWxsUGFnZXNXaXRoQm91bmRhcmllcyk6CisgICAgICAgICogcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlVXNhZ2VP
dmVybGF5OjpwbGF0Zm9ybUluaXRpYWxpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6bGlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRhcmsgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kV2l0aFdoaXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNv
bG9yV2l0aEFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpi
bGVuZFdpdGhvdXRQcmVtdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRlZENvbG9y
c0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1Nl
bWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKToKKyAgICAgICAg
KFdlYkNvcmU6OmV4dGVuZGVkQ29sb3JzRXF1YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlRXh0ZW5kZWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6
RXh0ZW5kZWRDb2xvcik6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllcjo6Z2V0RGVidWdCb3JkZXJJbmZvIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NM
YXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRl
bnRzTGF5ZXJEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNsb25lTGF5ZXJE
ZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6Y3Jl
YXRlVHJhbnNmb3JtQW5pbWF0aW9uc0Zyb21LZXlmcmFtZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvdmVy
YWdlTWFwOjp1cGRhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6ZHJhd1JlcGFpbnRDb3VudGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0
ZUNvbG9yU3RvcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1h
Z2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGb3JN
YXJrZXJMaW5lU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyb3BTaGFkb3dGaWx0ZXJPcGVy
YXRpb246OmJsZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9T
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAg
ICogcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbToKKyAgICAgICAgKFdlYkNvcmU6Okxl
Z2FjeVRpbGVDYWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlciBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVE
cmFnSW1hZ2VGb3JMaW5rKToKKyAgICAgICAgKiByZW5kZXJpbmcvUGFpbnRJbmZvLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQYWludEluZm86OmZvcmNlZFRleHRDb2xvciBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJlcGxhY2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0Q29sb3IpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZW1lbnRUZXh0Q29sb3IpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyU3Rh
cnRFZGdlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Ym9yZGVyRW5kRWRnZUNv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJvcmRlckZpbGxDb2xvcik6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllckJhY2tpbmc6OnBhaW50RGVidWdPdmVybGF5cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGxhdGZvcm1UZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0
Zm9ybVRhcEhpZ2hsaWdodENvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAg
IChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpw
YWludEF0dGFjaG1lbnRCb3JkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJT1M6
OnBhaW50U3lzdGVtUHJldmlld0JhZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpzaGFkb3dDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRh
Y2htZW50Qm9yZGVyQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVu
dFByb2dyZXNzQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6dGl0bGVUZXh0Q29sb3JGb3JB
dHRhY2htZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF0dGFjaG1lbnRMYXlvdXQ6OmxheU91dFN1
YnRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudEljb25CYWNrZ3JvdW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QXR0YWNobWVudFRpdGxlQmFja2dyb3VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYWludEF0dGFjaG1lbnRQcm9ncmVzcyk6CisgICAgICAgIChXZWJD
b3JlOjpwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjphdHRhY2htZW50SWNvbkJhY2tncm91bmRDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjphdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRUaXRsZUluYWN0aXZlVGV4dENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRTdWJ0aXRsZVRleHRDb2xvcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjphdHRhY2htZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29s
b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0YWNobWVudFByb2dyZXNzQmFyRmls
bENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQcm9ncmVzc0Jh
ckJvcmRlckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dGFjaG1lbnRQbGFj
ZWhvbGRlckJvcmRlckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGhlbWVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXaW46OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVdpbjo6c3lzdGVtQ29sb3IgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OnBhaW50Rmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTdHlsZTo6Y29sb3JSZXNvbHZpbmdDdXJyZW50Q29sb3IgY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VDb2xvcik6CisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL1NWR1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0b3BDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJTdHlsZTo6
aW5pdGlhbEZsb29kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaWdodGluZ0NvbG9yKToKKyAgICAgICAgKiBzdmcvU1ZHU3RvcEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3RvcEVsZW1lbnQ6OnN0b3BDb2xvckluY2x1ZGluZ09wYWNp
dHkgY29uc3QpOgorICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGlvbkFkZGl0aXZl
VmFsdWVGdW5jdGlvbkltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGlvbkNvbG9y
RnVuY3Rpb246OmFuaW1hdGUpOgorICAgICAgICAqIHRlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJhd1Jl
Y3QpOgorICAgICAgICAqIHRlc3RpbmcvY29jb2EvV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9u
T3ZlcmxheS5tbToKKyAgICAgICAgKC1bV2ViVmlld1Zpc3VhbElkZW50aWZpY2F0aW9uT3Zlcmxh
eSBpbml0V2l0aFdlYlZpZXc6a2luZDpkZXByZWNhdGVkOl0pOgorCiAyMDIwLTA1LTMxICBSb2Ig
QnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IG5hbWVkIGl0ZW0g
Y29uZGl0aW9uIGZvciBpbWFnZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRPYmplY3QuY3BwCShy
ZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDcgKzM0OCw3
IEBAIHZvaWQgQVhJc29sYXRlZE9iamVjdDo6aW5pdGlhbGl6ZUF0dHJpYnUKICAgICAKICAgICBp
bnQgciwgZywgYjsKICAgICBvYmplY3QuY29sb3JWYWx1ZShyLCBnLCBiKTsKLSAgICBzZXRQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6Q29sb3JWYWx1ZSwgQ29sb3IociwgZywgYikpOworICAgIHNl
dFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xvclZhbHVlLCBtYWtlU2ltcGxlQ29sb3Iociwg
ZywgYikpOwogICAgIAogICAgIGlmIChib29sIGlzTWF0aEVsZW1lbnQgPSBvYmplY3QuaXNNYXRo
RWxlbWVudCgpKSB7CiAgICAgICAgIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpJc01hdGhF
bGVtZW50LCBpc01hdGhFbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wu
Y3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOSArNDQsOSBAQCBTdGF0aWNDU1NWYWx1ZVBvb2w6
OlN0YXRpY0NTU1ZhbHVlUG9vbCgpCiAgICAgbV91bnNldFZhbHVlLmNvbnN0cnVjdChDU1NWYWx1
ZTo6U3RhdGljQ1NTVmFsdWUpOwogICAgIG1fcmV2ZXJ0VmFsdWUuY29uc3RydWN0KENTU1ZhbHVl
OjpTdGF0aWNDU1NWYWx1ZSk7CiAKLSAgICBtX3RyYW5zcGFyZW50Q29sb3IuY29uc3RydWN0KENT
U1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KSk7Ci0gICAg
bV93aGl0ZUNvbG9yLmNvbnN0cnVjdChDU1NWYWx1ZTo6U3RhdGljQ1NTVmFsdWUsIENvbG9yKENv
bG9yOjp3aGl0ZSkpOwotICAgIG1fYmxhY2tDb2xvci5jb25zdHJ1Y3QoQ1NTVmFsdWU6OlN0YXRp
Y0NTU1ZhbHVlLCBDb2xvcihDb2xvcjo6YmxhY2spKTsKKyAgICBtX3RyYW5zcGFyZW50Q29sb3Iu
Y29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29sb3I6OnRyYW5zcGFyZW50KTsK
KyAgICBtX3doaXRlQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWNDU1NWYWx1ZSwgQ29s
b3I6OndoaXRlKTsKKyAgICBtX2JsYWNrQ29sb3IuY29uc3RydWN0KENTU1ZhbHVlOjpTdGF0aWND
U1NWYWx1ZSwgQ29sb3I6OmJsYWNrKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IGZpcnN0Q1NT
VmFsdWVLZXl3b3JkOyBpIDw9IGxhc3RDU1NWYWx1ZUtleXdvcmQ7ICsraSkKICAgICAgICAgbV9p
ZGVudGlmaWVyVmFsdWVzW2ldLmNvbnN0cnVjdChDU1NWYWx1ZTo6U3RhdGljQ1NTVmFsdWUsIHN0
YXRpY19jYXN0PENTU1ZhbHVlSUQ+KGkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxw
ZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3LDcgKzY4Nyw3IEBAIHN0YXRpYyBDb2xvciBw
YXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXIKICAgICBpZiAoIWFyZ3MuYXRFbmQoKSkKICAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CiAgICAgCi0gICAgcmV0dXJuIENvbG9yKGNvbG9yQ2hhbm5lbHNb
MF0sIGNvbG9yQ2hhbm5lbHNbMV0sIGNvbG9yQ2hhbm5lbHNbMl0sIGNvbG9yQ2hhbm5lbHNbM10s
IGNvbG9yU3BhY2UpOworICAgIHJldHVybiBtYWtlRXh0ZW5kZWRDb2xvcihjb2xvckNoYW5uZWxz
WzBdLCBjb2xvckNoYW5uZWxzWzFdLCBjb2xvckNoYW5uZWxzWzJdLCBjb2xvckNoYW5uZWxzWzNd
LCBjb2xvclNwYWNlKTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPFNpbXBsZUNvbG9yPiBwYXJzZUhl
eENvbG9yKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBib29sIGFjY2VwdFF1aXJreUNvbG9y
cykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5Miw3ICsyMDkyLDcgQEAgUmVuZGVyU3R5bGUgSFRNTElucHV0
RWxlbWVudDo6Y3JlYXRlSW5uZQogICAgIGlmIChoYXNBdXRvRmlsbFN0cm9uZ1Bhc3N3b3JkQnV0
dG9uKCkgJiYgIWlzRGlzYWJsZWRPclJlYWRPbmx5KCkpIHsKICAgICAgICAgdGV4dEJsb2NrU3R5
bGUuc2V0RGlzcGxheShEaXNwbGF5VHlwZTo6SW5saW5lQmxvY2spOwogICAgICAgICB0ZXh0Qmxv
Y2tTdHlsZS5zZXRNYXhXaWR0aChMZW5ndGggeyAxMDAsIFBlcmNlbnQgfSk7Ci0gICAgICAgIHRl
eHRCbG9ja1N0eWxlLnNldENvbG9yKHsgMC4wZiwgMC4wZiwgMC4wZiwgMC42ZiB9KTsKKyAgICAg
ICAgdGV4dEJsb2NrU3R5bGUuc2V0Q29sb3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDE1Mykp
OwogICAgICAgICB0ZXh0QmxvY2tTdHlsZS5zZXRUZXh0T3ZlcmZsb3coVGV4dE92ZXJmbG93OjpD
bGlwKTsKICAgICAgICAgdGV4dEJsb2NrU3R5bGUuc2V0TWFza0ltYWdlKFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShhdXRvRmlsbFN0cm9uZ1Bhc3N3b3JkTWFza0ltYWdlKCkpKTsKICAgICAg
ICAgLy8gQSBzdGFja2luZyBjb250ZXh0IGlzIG5lZWRlZCBmb3IgdGhlIG1hc2suCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyNiw3ICs2MjYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldFNoCiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaGFkb3dDb2xv
cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvbG9yKHN0YXRlKCkuc2hhZG93Q29sb3IpLnNlcmlh
bGl6ZWQoKTsKKyAgICByZXR1cm4gc3RhdGUoKS5zaGFkb3dDb2xvci5zZXJpYWxpemVkKCk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93Q29sb3IoY29u
c3QgU3RyaW5nJiBjb2xvclN0cmluZykKQEAgLTEzMDcsMTcgKzEzMDcsMTcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTaAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBi
bHVyLCBmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIHNldFNoYWRvdyhGbG9h
dFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBn
cmF5TGV2ZWwsIGFscGhhKSk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0
KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZlbCwg
Z3JheUxldmVsLCBhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNp
emUod2lkdGgsIGhlaWdodCksIGJsdXIsIENvbG9yKHIsIGcsIGIsIGEpKTsKKyAgICBzZXRTaGFk
b3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKHIsIGcsIGIsIGEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQg
YywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBzZXRTaGFkb3co
RmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBDb2xvcihjLCBtLCB5LCBrLCBhKSk7Cisg
ICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNv
bG9yRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDE3ICs5
MywxNyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29sb3IpCiB9CiAKIENhbnZh
c1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQotICAgIDog
bV9zdHlsZShDb2xvciB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH0p
CisgICAgOiBtX3N0eWxlKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKQogewogfQogCiBDYW52YXNTdHlsZTo6Q2FudmFzU3R5
bGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLSAgICA6IG1fc3R5bGUoQ29s
b3IgeyByLCBnLCBiLCBhIH0pCisgICAgOiBtX3N0eWxlKG1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMociwgZywgYiwgYSkpCiB7CiB9CiAKIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBj
LCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQotICAgIDogbV9zdHlsZShDTVlL
QUNvbG9yIHsgQ29sb3IgeyBjLCBtLCB5LCBrLCBhIH0sIGMsIG0sIHksIGssIGEgfSkKKyAgICA6
IG1fc3R5bGUoQ01ZS0FDb2xvciB7IG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShjLCBtLCB5LCBr
LCBhKSwgYywgbSwgeSwgaywgYSB9KQogewogfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgYm9vbCBD
YW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjpp
c0VxdWl2YWxlbnRSR0JBKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYm
IFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIsIGEgfTsKKyAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8
Q29sb3I+KG1fc3R5bGUpID09IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7
CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENNWUtBKGZsb2F0IGMsIGZsb2F0
IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck92ZXJsYXkuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yT3ZlcmxheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyMiw3ICsyMjIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3T3V0bGluZWRRdWFkV2l0
aENsaXAoR3JhCiAgICAgY29udGV4dC5maWxsUGF0aChxdWFkVG9QYXRoKHF1YWQsIGJvdW5kcykp
OwogCiAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6
OkRlc3RpbmF0aW9uT3V0KTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDAs
IDApKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjU1LCAwLCAw
KSk7CiAgICAgY29udGV4dC5maWxsUGF0aChxdWFkVG9QYXRoKGNsaXBRdWFkLCBib3VuZHMpKTsK
IH0KIApAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFwZUhpZ2hsaWdodChH
cmFwaGljc0MKICAgICBGcmFtZVZpZXcqIGNvbnRhaW5pbmdWaWV3ID0gY29udGFpbmluZ0ZyYW1l
LT52aWV3KCk7CiAgICAgRnJhbWVWaWV3KiBtYWluVmlldyA9IGNvbnRhaW5pbmdGcmFtZS0+cGFn
ZSgpLT5tYWluRnJhbWUoKS52aWV3KCk7CiAKLSAgICBjb25zdCBDb2xvciBzaGFwZUhpZ2hsaWdo
dENvbG9yKDk2LCA4MiwgMTI3LCAyMDQpOworICAgIGNvbnN0ZXhwciBhdXRvIHNoYXBlSGlnaGxp
Z2h0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoOTYsIDgyLCAxMjcsIDIwNCk7CiAKICAgICBTaGFw
ZTo6RGlzcGxheVBhdGhzIHBhdGhzOwogICAgIHNoYXBlT3V0c2lkZUluZm8tPmNvbXB1dGVkU2hh
cGUoKS5idWlsZERpc3BsYXlQYXRocyhwYXRocyk7CkBAIC0zNDUsNyArMzQ1LDcgQEAgc3RhdGlj
IHZvaWQgZHJhd1NoYXBlSGlnaGxpZ2h0KEdyYXBoaWNzQwogCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIAotICAgICAgICBjb25zdCBDb2xv
ciBzaGFwZU1hcmdpbkhpZ2hsaWdodENvbG9yKDk2LCA4MiwgMTI3LCAxNTMpOworICAgICAgICBj
b25zdGV4cHIgYXV0byBzaGFwZU1hcmdpbkhpZ2hsaWdodENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDk2LCA4MiwgMTI3LCAxNTMpOwogICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFwZU1h
cmdpbkhpZ2hsaWdodENvbG9yKTsKICAgICAgICAgY29udGV4dC5maWxsUGF0aChtYXJnaW5QYXRo
KTsKICAgICB9CkBAIC0zODIsNyArMzgyLDcgQEAgdm9pZCBJbnNwZWN0b3JPdmVybGF5OjpwYWlu
dChHcmFwaGljc0NvbgogICAgIGlmIChtX2luZGljYXRpbmcpIHsKICAgICAgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCi0gICAgICAgIGNvbnN0IENv
bG9yIGluZGljYXRpbmdDb2xvcigxMTEsIDE2OCwgMjIwLCAxNjgpOworICAgICAgICBjb25zdGV4
cHIgYXV0byBpbmRpY2F0aW5nQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTExLCAxNjgsIDIyMCwg
MTY4KTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoaW5kaWNhdGluZ0NvbG9yKTsKICAg
ICAgICAgY29udGV4dC5maWxsUmVjdCh7IEZsb2F0UG9pbnQ6Onplcm8oKSwgdmlld3BvcnRTaXpl
IH0pOwogICAgIH0KQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRy
YXdQYWludFJlY3RzKEdyCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQpOwogCi0gICAgY29uc3QgQ29sb3IgcGFpbnRSZWN0c0NvbG9yKDEuMGYsIDAu
MGYsIDAuMGYsIDAuNWYpOworICAgIGNvbnN0ZXhwciBhdXRvIHBhaW50UmVjdHNDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigyNTUsIDAsIDAsIDEyOCk7CiAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Io
cGFpbnRSZWN0c0NvbG9yKTsKIAogICAgIGZvciAoY29uc3QgVGltZVJlY3RQYWlyJiBwYWlyIDog
cGFpbnRSZWN0cykKQEAgLTY2Miw3ICs2NjIsNyBAQCB2b2lkIEluc3BlY3Rvck92ZXJsYXk6OmRy
YXdCb3VuZHMoR3JhcGhpCiAKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcygxKTsKIAot
ICAgIGNvbnN0IENvbG9yIGJvdW5kc0NvbG9yKDEuMGYsIDAuMGYsIDAuMGYsIDAuNmYpOworICAg
IGNvbnN0ZXhwciBhdXRvIGJvdW5kc0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwg
MTUzKTsKICAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGJvdW5kc0NvbG9yKTsKIAogICAgIGNv
bnRleHQuc3Ryb2tlUGF0aChwYXRoKTsKQEAgLTY3MCw5ICs2NzAsOSBAQCB2b2lkIEluc3BlY3Rv
ck92ZXJsYXk6OmRyYXdCb3VuZHMoR3JhcGhpCiAKIHZvaWQgSW5zcGVjdG9yT3ZlcmxheTo6ZHJh
d1J1bGVycyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEluc3BlY3Rvck92ZXJsYXk6
OlJ1bGVyRXhjbHVzaW9uJiBydWxlckV4Y2x1c2lvbikKIHsKLSAgICBjb25zdCBDb2xvciBydWxl
ckJhY2tncm91bmRDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAwLjZmKTsKLSAgICBjb25zdCBDb2xv
ciBsaWdodFJ1bGVyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4yZik7Ci0gICAgY29uc3QgQ29s
b3IgZGFya1J1bGVyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC41Zik7CisgICAgY29uc3RleHBy
IGF1dG8gcnVsZXJCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1
NSwgMTUzKTsKKyAgICBjb25zdGV4cHIgYXV0byBsaWdodFJ1bGVyQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMCwgMCwgMCwgNTEpOworICAgIGNvbnN0ZXhwciBhdXRvIGRhcmtSdWxlckNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKICAgICBJbnRQb2ludCBzY3JvbGxPZmZz
ZXQ7CiAKQEAgLTEwNDYsMTQgKzEwNDYsMTQgQEAgUGF0aCBJbnNwZWN0b3JPdmVybGF5OjpkcmF3
RWxlbWVudFRpdGxlKAogCiAgICAgY29udGV4dC50cmFuc2xhdGUoZWxlbWVudERhdGFCb3JkZXJT
aXplIC8gMi4wZiwgZWxlbWVudERhdGFCb3JkZXJTaXplIC8gMi4wZik7CiAKLSAgICBjb25zdCBD
b2xvciBlbGVtZW50VGl0bGVCYWNrZ3JvdW5kQ29sb3IoMjU1LCAyNTUsIDE5NCk7CisgICAgY29u
c3RleHByIGF1dG8gZWxlbWVudFRpdGxlQmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9y
KDI1NSwgMjU1LCAxOTQpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGVsZW1lbnRUaXRsZUJh
Y2tncm91bmRDb2xvcik7CiAKICAgICBjb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogCiAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MoZWxlbWVudERhdGFCb3JkZXJTaXplKTsKIAotICAgIGNv
bnN0IENvbG9yIGVsZW1lbnRUaXRsZUJvcmRlckNvbG9yKDEyOCwgMTI4LCAxMjgpOworICAgIGNv
bnN0ZXhwciBhdXRvIGVsZW1lbnRUaXRsZUJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDEy
OCwgMTI4LCAxMjgpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoZWxlbWVudFRpdGxlQm9y
ZGVyQ29sb3IpOwogCiAgICAgY29udGV4dC5zdHJva2VQYXRoKHBhdGgpOwpAQCAtMTA2OCwxMCAr
MTA2OCwxMCBAQCBQYXRoIEluc3BlY3Rvck92ZXJsYXk6OmRyYXdFbGVtZW50VGl0bGUoCiAgICAg
ICAgIHRleHRQb3NpdGlvblggKz0gY29udGV4dC5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQp
LCB7IHRleHRQb3NpdGlvblgsIHRleHRQb3NpdGlvblkgfSk7CiAgICAgfTsKIAotICAgIGRyYXdU
ZXh0KGVsZW1lbnRUYWdOYW1lLCBDb2xvcigxMzYsIDE4LCAxMjgpKTsgLy8gS2VlcCB0aGlzIGlu
IHN5bmMgd2l0aCBYTUxWaWV3ZXIuY3NzICgudGFnKQotICAgIGRyYXdUZXh0KGVsZW1lbnRJRFZh
bHVlLCBDb2xvcigyNiwgMjYsIDE2NikpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZp
ZXdlci5jc3MgKC5hdHRyaWJ1dGUtdmFsdWUpCi0gICAgZHJhd1RleHQoZWxlbWVudENsYXNzVmFs
dWUsIENvbG9yKDE1MywgNjksIDApKTsgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBYTUxWaWV3
ZXIuY3NzICguYXR0cmlidXRlLW5hbWUpCi0gICAgZHJhd1RleHQoZWxlbWVudFBzZXVkb1R5cGUs
IENvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdl
ci5jc3MgKC50YWcpCisgICAgZHJhd1RleHQoZWxlbWVudFRhZ05hbWUsIG1ha2VTaW1wbGVDb2xv
cigxMzYsIDE4LCAxMjgpKTsgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBYTUxWaWV3ZXIuY3Nz
ICgudGFnKQorICAgIGRyYXdUZXh0KGVsZW1lbnRJRFZhbHVlLCBtYWtlU2ltcGxlQ29sb3IoMjYs
IDI2LCAxNjYpKTsgLy8gS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBYTUxWaWV3ZXIuY3NzICguYXR0
cmlidXRlLXZhbHVlKQorICAgIGRyYXdUZXh0KGVsZW1lbnRDbGFzc1ZhbHVlLCBtYWtlU2ltcGxl
Q29sb3IoMTUzLCA2OSwgMCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhNTFZpZXdlci5j
c3MgKC5hdHRyaWJ1dGUtbmFtZSkKKyAgICBkcmF3VGV4dChlbGVtZW50UHNldWRvVHlwZSwgbWFr
ZVNpbXBsZUNvbG9yKDEzNiwgMTgsIDEyOCkpOyAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIFhN
TFZpZXdlci5jc3MgKC50YWcpCiAgICAgZHJhd1RleHQoIiAiX3MsIENvbG9yOjpibGFjayk7CiAg
ICAgZHJhd1RleHQoZWxlbWVudFdpZHRoLCBDb2xvcjo6YmxhY2spOwogICAgIGRyYXdUZXh0KCJw
eCJfcywgQ29sb3I6OmRhcmtHcmF5KTsKQEAgLTEwODUsNyArMTA4NSw3IEBAIFBhdGggSW5zcGVj
dG9yT3ZlcmxheTo6ZHJhd0VsZW1lbnRUaXRsZSgKICAgICAgICAgdGV4dFBvc2l0aW9uWCA9IGJv
eFggKyBlbGVtZW50RGF0YVNwYWNpbmc7CiAgICAgICAgIHRleHRQb3NpdGlvblkgKz0gZm9udEhl
aWdodDsKIAotICAgICAgICBkcmF3VGV4dCgiUm9sZSJfcywgQ29sb3IoMTcwLCAxMywgMTQ1KSk7
CisgICAgICAgIGRyYXdUZXh0KCJSb2xlIl9zLCBtYWtlU2ltcGxlQ29sb3IoMTcwLCAxMywgMTQ1
KSk7CiAgICAgICAgIGRyYXdUZXh0KCIgIl9zLCBDb2xvcjo6YmxhY2spOwogICAgICAgICBkcmF3
VGV4dChlbGVtZW50Um9sZSwgQ29sb3I6OmJsYWNrKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBzdGF0
aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmplCiAKICAgICBkb3VibGUgYSA9IDEu
MDsKICAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0
dXJuIENvbG9yKHIsIGcsIGIpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcs
IGIpOwogCiAgICAgLy8gQ2xhbXAgYWxwaGEgdG8gdGhlIFswLi4xXSByYW5nZS4KICAgICBpZiAo
YSA8IDApCkBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3Qg
SlNPTjo6T2JqZQogICAgIGVsc2UgaWYgKGEgPiAxKQogICAgICAgICBhID0gMTsKIAotICAgIHJl
dHVybiBDb2xvcihyLCBnLCBiLCBzdGF0aWNfY2FzdDxpbnQ+KGEgKiAyNTUpKTsKKyAgICByZXR1
cm4gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIHN0YXRpY19jYXN0PGludD4oYSAqIDI1NSkpOwog
fQogCiBzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFt
ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb25maWdPYmplY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdyYXRpb25MaW5lTGF5b3V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW50ZWdyYXRpb24vTGF5b3V0SW50ZWdy
YXRpb25MaW5lTGF5b3V0LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBTaGFkb3dEYXRhKiBMaW5lTGF5b3V0OjpkZWJ1
Z1RleHRTaGFkb3coCiAgICAgaWYgKCFtX2Zsb3cuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5b3V0
RGVidWdCb3JkZXJzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWJ1Z1RleHRTaGFkb3coSW50UG9pbnQo
MCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgQ29sb3IoMCwgMCwgMTUw
LCAxNTApKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVidWdUZXh0
U2hhZG93KEludFBvaW50KDAsIDApLCAxMCwgMjAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUs
IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAxNTAsIDE1MCkpOwogICAgIHJldHVybiAmZGVidWdUZXh0
U2hhZG93LmdldCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NhcHRpb25Vc2Vy
UHJlZmVyZW5jZXNNZWRpYUFGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NhcHRpb25Vc2VyUHJlZmVyZW5jZXNNZWRpYUFGLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9DYXB0aW9uVXNlclByZWZlcmVuY2VzTWVkaWFBRi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4OCw3ICsyODgsNyBAQCBTdHJpbmcgQ2FwdGlvblVzZXJQcmVmZXJl
bmNlc01lZGlhQUY6OmNhCiB7CiAgICAgLy8gVGhpcyBkZWZhdWx0IHZhbHVlIG11c3QgYmUgdGhl
IHNhbWUgYXMgdGhlIG9uZSBzcGVjaWZpZWQgaW4gbWVkaWFDb250cm9scy5jc3MgZm9yIC13ZWJr
aXQtbWVkaWEtdGV4dC10cmFjay1wYXN0LW5vZGVzCiAgICAgLy8gYW5kIHdlYmtpdC1tZWRpYS10
ZXh0LXRyYWNrLWZ1dHVyZS1ub2Rlcy4KLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+
IGRlZmF1bHRCYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMC44ICogMjU1KTsKKyAgICBjb25zdGV4
cHIgYXV0byBkZWZhdWx0QmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAs
IDAuOCAqIDI1NSk7CiAKICAgICBNQUNhcHRpb25BcHBlYXJhbmNlQmVoYXZpb3IgYmVoYXZpb3I7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCShyZXZp
c2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgZXhwbGljaXQgTW91c2VXaGVlbFJlZ2lvbk92ZXJsYXkoUGFnZSYgcGFnZSkKLSAgICAgICAg
OiBSZWdpb25PdmVybGF5KHBhZ2UsIENvbG9yKDAuNWYsIDAuMGYsIDAuMGYsIDAuNGYpKQorICAg
ICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjVm
LCAwLjBmLCAwLjBmLCAwLjRmKSkKICAgICB7CiAgICAgfQogCkBAIC0xMTgsNyArMTE4LDcgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
T3ZlcmxheShQYWdlJiBwYWdlKQotICAgICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgQ29sb3Io
MS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCisgICAgICAgIDogUmVnaW9uT3ZlcmxheShwYWdlLCBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuNWYsIDAuMGYsIDAuNGYpKQogICAgIHsK
ICAgICB9CiAKQEAgLTE0NCw3ICsxNDQsNyBAQCBib29sIE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
T3ZlcmxheTo6dXBkCiAgICAgcmV0dXJuIHJlZ2lvbkNoYW5nZWQ7CiB9CiAKLXN0YXRpYyBjb25z
dCBIYXNoTWFwPFN0cmluZywgQ29sb3I+JiB0b3VjaEV2ZW50UmVnaW9uQ29sb3JzKCkKK3N0YXRp
YyBjb25zdCBIYXNoTWFwPFN0cmluZywgU2ltcGxlQ29sb3I+JiB0b3VjaEV2ZW50UmVnaW9uQ29s
b3JzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgYXV0byByZWdpb25Db2xvcnMgPSBtYWtlTmV2ZXJE
ZXN0cm95ZWQoW10gewogICAgICAgICBzdHJ1Y3QgTWFwRW50cnkgewpAQCAtMTYzLDkgKzE2Myw5
IEBAIHN0YXRpYyBjb25zdCBIYXNoTWFwPFN0cmluZywgQ29sb3I+JiB0b3UKICAgICAgICAgICAg
IHsgIm1vdXNlbW92ZSJfcywgMjQ1LCAyNDUsIDgwIH0sCiAgICAgICAgICAgICB7ICJtb3VzZXVw
Il9zLCA4MCwgMjQ1LCAxNzYgfSwKICAgICAgICAgfTsKLSAgICAgICAgSGFzaE1hcDxTdHJpbmcs
IENvbG9yPiBtYXA7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTaW1wbGVDb2xvcj4gbWFwOwog
ICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogZW50cmllcykKLSAgICAgICAgICAgIG1hcC5hZGQo
ZW50cnkubmFtZSwgQ29sb3IgeyBlbnRyeS5yLCBlbnRyeS5nLCBlbnRyeS5iLCA1MCB9KTsKKyAg
ICAgICAgICAgIG1hcC5hZGQoZW50cnkubmFtZSwgbWFrZVNpbXBsZUNvbG9yKGVudHJ5LnIsIGVu
dHJ5LmcsIGVudHJ5LmIsIDUwKSk7CiAgICAgICAgIHJldHVybiBtYXA7CiAgICAgfSgpKTsKICAg
ICByZXR1cm4gcmVnaW9uQ29sb3JzOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgTm9uRmFzdFNj
cm9sbGFibGVSZWdpb25PdmVybGF5OjpkcmEKICNlbmRpZgogCiAgICAgZm9yIChjb25zdCBhdXRv
JiBzeW5jaHJvbm91c0V2ZW50UmVnaW9uIDogbV9ldmVudFRyYWNraW5nUmVnaW9ucy5ldmVudFNw
ZWNpZmljU3luY2hyb25vdXNEaXNwYXRjaFJlZ2lvbnMpIHsKLSAgICAgICAgQ29sb3IgcmVnaW9u
Q29sb3IoMCwgMCwgMCwgNjQpOworICAgICAgICBhdXRvIHJlZ2lvbkNvbG9yID0gbWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDAsIDY0KTsKICAgICAgICAgYXV0byBpdCA9IHRvdWNoRXZlbnRSZWdpb25D
b2xvcnMoKS5maW5kKHN5bmNocm9ub3VzRXZlbnRSZWdpb24ua2V5KTsKICAgICAgICAgaWYgKGl0
ICE9IHRvdWNoRXZlbnRSZWdpb25Db2xvcnMoKS5lbmQoKSkKICAgICAgICAgICAgIHJlZ2lvbkNv
bG9yID0gaXQtPnZhbHVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MjQzLDcgKzQyNDMsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGFpbnRDb250ZW50
cyhHcmFwaGljc0NvCiAgICAgaWYgKGZpbGxXaXRoV2FybmluZ0NvbG9yKSB7CiAgICAgICAgIElu
dFJlY3QgZGVidWdSZWN0ID0gZnJhbWVSZWN0KCk7CiAgICAgICAgIGRlYnVnUmVjdC5pbnRlcnNl
Y3QoZGlydHlSZWN0KTsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChkZWJ1Z1JlY3QsIENvbG9y
KDI1NSwgNjQsIDI1NSkpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGRlYnVnUmVjdCwgbWFr
ZVNpbXBsZUNvbG9yKDI1NSwgNjQsIDI1NSkpOwogICAgIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QcmludENvbnRleHQuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1ByaW50Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw3ICs0
MzAsNyBAQCB2b2lkIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuCiAgICAgaW50
IHRvdGFsSGVpZ2h0ID0gcGFnZVJlY3RzLnNpemUoKSAqIChwYWdlU2l6ZUluUGl4ZWxzLmhlaWdo
dCgpICsgMSkgLSAxOwogCiAgICAgLy8gRmlsbCB0aGUgd2hvbGUgYmFja2dyb3VuZCBieSB3aGl0
ZS4KLSAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDI1NSwgMjU1LCAyNTUp
KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvcigyNTUs
IDI1NSwgMjU1KSk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAw
LCBwYWdlV2lkdGgsIHRvdGFsSGVpZ2h0KSk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgp
OwpAQCAtNDQ1LDggKzQ0NSw4IEBAIHZvaWQgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0
aEJvdW4KICAgICAgICAgICAgIGludCBib3VuZGFyeUxpbmVZID0gY3VycmVudEhlaWdodCAtIDE7
CiAjZW5kaWYKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7Ci0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSk7Ci0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDAsIDAsIDI1NSkpOwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xv
cigwLCAwLCAyNTUpKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Io
bWFrZVNpbXBsZUNvbG9yKDAsIDAsIDI1NSkpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LmRyYXdMaW5lKEludFBvaW50KDAsIGJvdW5kYXJ5TGluZVkpLCBJbnRQb2ludChwYWdlV2lkdGgs
IGJvdW5kYXJ5TGluZVkpKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3JlKCk7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbGludXgvUmVzb3VyY2VVc2Fn
ZU92ZXJsYXlMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9saW51
eC9SZXNvdXJjZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGNsaXAsIEdyYXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGNsaXAsIENvbG9yKDAuMGYsIDAuMGYsIDAu
MGYsIDAuOGYpKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoQ29sb3IoMC45ZiwgMC45
ZiwgMC45ZiwgMS5mKSk7CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgbWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC45ZiwgMC45ZiwgMC45
ZiwgMS5mKSk7CiAKICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IHsgMTAsIDIwIH07CiAg
ICAgICAgIFN0cmluZyBzdHJpbmcgPSAgIkNQVTogIiArIGNwdVVzYWdlU3RyaW5nKGdEYXRhLmNw
dSk7CkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6cGxhdGZv
cm1Jbml0aQogICAgIG1fcGFpbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShvdmVybGF5
KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgpLCAqbV9v
dmVybGF5UGFpbnRlcik7CiAgICAgbV9wYWludExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50M0QoKSk7CiAgICAgbV9wYWludExheWVyLT5zZXRTaXplKHsgbm9ybWFsV2lkdGgsIG5vcm1h
bEhlaWdodCB9KTsKLSAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihDb2xvcigw
LjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgbV9wYWludExheWVyLT5zZXRCYWNrZ3JvdW5k
Q29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7
CiAgICAgbV9wYWludExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAgICAgb3ZlcmxheSgp
LmxheWVyKCkuYWRkQ2hpbGQoKm1fcGFpbnRMYXllcik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIEltYWdlRHJhd1Jlc3VsdCBCaXRtYXBJ
bWFnZTo6ZHJhdyhHcmFwaGkKIAogICAgICAgICBpZiAoIWZyYW1lSGFzRGVjb2RlZE5hdGl2ZUlt
YWdlQ29tcGF0aWJsZVdpdGhPcHRpb25zQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgbV9jdXJyZW50
U3Vic2FtcGxpbmdMZXZlbCwgRGVjb2RpbmdPcHRpb25zKERlY29kaW5nTW9kZTo6QXN5bmNocm9u
b3VzKSkpIHsKICAgICAgICAgICAgIGlmIChtX3Nob3dEZWJ1Z0JhY2tncm91bmQpCi0gICAgICAg
ICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0LCBDb2xvcihDb2xv
cjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9y
KCkpOworICAgICAgICAgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVj
dCwgQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCkBAIC0y
NDgsNyArMjQ4LDcgQEAgSW1hZ2VEcmF3UmVzdWx0IEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaQog
ICAgICAgICBBU1NFUlRfSU1QTElFUyhzdGF0dXMgPT0gU3RhcnRBbmltYXRpb25TdGF0dXM6OkRl
Y29kaW5nQWN0aXZlLCAoIW1fY3VycmVudEZyYW1lICYmICFtX3JlcGV0aXRpb25zQ29tcGxldGUp
IHx8IGZyYW1lSGFzRnVsbFNpemVOYXRpdmVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIG1f
Y3VycmVudFN1YnNhbXBsaW5nTGV2ZWwpKTsKIAogICAgICAgICBpZiAoc3RhdHVzID09IFN0YXJ0
QW5pbWF0aW9uU3RhdHVzOjpEZWNvZGluZ0FjdGl2ZSAmJiBtX3Nob3dEZWJ1Z0JhY2tncm91bmQp
IHsKLSAgICAgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0UmVjdCwgQ29s
b3IoQ29sb3I6OnllbGxvdykuY29sb3JXaXRoQWxwaGEoMC41KSwgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpKTsKKyAgICAgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0
UmVjdCwgQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0
ZU9wZXJhdG9yKCkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAg
ICAgICAKQEAgLTI2Niw3ICsyNjYsNyBAQCBJbWFnZURyYXdSZXN1bHQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpCiAgICAgICAgIH0gZWxzZSBpZiAoZnJhbWVJc0JlaW5nRGVjb2RlZCkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IGluc3RlYWQgb2Ygc2hvd2luZyB0aGUgeWVsbG93IHJlY3Rhbmds
ZSBhbmQgcmV0dXJuaW5nIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhpcyBmcmFtZSB0byBmaW5pc2gg
ZGVjb2RpbmcuCiAgICAgICAgICAgICBpZiAobV9zaG93RGVidWdCYWNrZ3JvdW5kKSB7Ci0gICAg
ICAgICAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRlc3RSZWN0LCBDb2xvcihD
b2xvcjo6eWVsbG93KS5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCkpOworICAgICAgICAgICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkZXN0
UmVjdCwgQ29sb3I6OnllbGxvdy5jb2xvcldpdGhBbHBoYSgwLjUpLCBvcHRpb25zLmNvbXBvc2l0
ZU9wZXJhdG9yKCkpOwogICAgICAgICAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZTo6
JXMgLSAlcCAtIHVybDogJXMgW3dhaXRpbmcgZm9yIGFzeW5jIGRlY29kaW5nIHRvIGZpbmlzaF0i
LCBfX0ZVTkNUSU9OX18sIHRoaXMsIHNvdXJjZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlk
UmVxdWVzdERlY29kaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NiwyMCArNjYsNiBAQCBDb2xv
cjo6Q29sb3IoQ29sb3ImJiBvdGhlcikKICAgICAqdGhpcyA9IFdURk1vdmUob3RoZXIpOwogfQog
Ci1Db2xvcjo6Q29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxvYXQgYWxwaGEs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLSAgICA6IENvbG9yKEV4dGVuZGVkQ29sb3I6OmNyZWF0
ZShjMSwgYzIsIGMzLCBhbHBoYSwgY29sb3JTcGFjZSkpCi17Ci19Ci0KLUNvbG9yOjpDb2xvcihS
ZWY8RXh0ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQotewotICAgIC8vIFplcm8gdGhlIHVu
aW9uLCBqdXN0IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWducyB0aGUKLSAgICAv
LyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29sb3IgcG9pbnRlciBiZWxv
dy4KLSAgICBtX2NvbG9yRGF0YS5zaW1wbGVDb2xvckFuZEZsYWdzID0gMDsKLSAgICBtX2NvbG9y
RGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwotICAgIEFTU0VS
VChpc0V4dGVuZGVkKCkpOwotfQotCiBDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xv
ciYgb3RoZXIpCiB7CiAgICAgaWYgKCp0aGlzID09IG90aGVyKQpAQCAtMTQ3LDEyICsxMzMsMTIg
QEAgQ29sb3IgQ29sb3I6OmxpZ2h0KCkgY29uc3QKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBz
dGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiB7CisgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ciAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
ZyAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICog
YiAqIHNjYWxlRmFjdG9yKSwKICAgICAgICAgYWxwaGEoKQotICAgIH07CisgICAgKTsKIH0KIAog
Q29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdApAQCAtMTY4LDEyICsxNTQsMTIgQEAgQ29sb3IgQ29s
b3I6OmRhcmsoKSBjb25zdAogICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7CiAg
ICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7CiAK
LSAgICByZXR1cm4geworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIHIgKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIGcgKiBzY2FsZUZhY3RvciksCiAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4obXVsdGlwbGllciAqIGIgKiBzY2FsZUZhY3RvciksCiAgICAgICAgIGFscGhh
KCkKLSAgICB9OworICAgICk7CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0CkBAIC0y
NDUsMTkgKzIzMSwxOSBAQCBDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAogCiAg
ICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBh
bmQvb3IgY29ycmVjdCBoZXJlPwogICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIHJlc3Vs
dC5zZXRJc1NlbWFudGljKCk7CisgICAgICAgIHJlc3VsdC50YWdBc1NlbWFudGljKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGll
ZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKIHsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAq
IChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgpIDogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFt
b3VudCAqIGFscGhhQXNGbG9hdCgpOwogICAgIHJldHVybiBjb2xvcldpdGhBbHBoYShuZXdBbHBo
YSk7CiB9CiAKIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbW91bnQpIGNvbnN0CiB7Ci0gICAgZmxvYXQgbmV3QWxw
aGEgPSBhbW91bnQgKiAoaXNFeHRlbmRlZCgpID8gbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
YWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSgpKSAvIDI1NSk7CisgICAgZmxvYXQg
bmV3QWxwaGEgPSBhbW91bnQgKiBhbHBoYUFzRmxvYXQoKTsKICAgICByZXR1cm4gY29sb3JXaXRo
QWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcobmV3QWxwaGEpOwogfQogCkBAIC0yNzEsNyAr
MjU3LDcgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhKGZsb2F0IGFscGhhKQogCiAgICAg
Q29sb3IgcmVzdWx0ID0gYXNTaW1wbGUoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CiAgICAg
aWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICAg
ICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0y
ODUsNyArMjcxLDcgQEAgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdAog
CiAgICAgQ29sb3IgcmVzdWx0ID0gYXNTaW1wbGUoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7
CiAgICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsK
KyAgICAgICAgcmVzdWx0LnRhZ0FzU2VtYW50aWMoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0zMjUsMTUgKzMxMSw2IEBAIENvbG9yQ29tcG9uZW50czxmbG9hdD4gQ29sb3I6OnRvU1JH
QkFDb20KICAgICByZXR1cm4gYXNTaW1wbGUoKS5hc1NSR0JGbG9hdENvbXBvbmVudHMoKTsKIH0K
IAotYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYg
YikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCi0gICAgICAg
IHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKTsKLQotICAgIEFTU0VSVChh
LmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCiB7CiAgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5k
bGUgY29sb3Igc3BhY2VzLgpAQCAtMzY1LDE3ICszNDIsMTIgQEAgQ29sb3IgYmxlbmRXaXRob3V0
UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFT
aW1wbGVDb2xvckxvc3N5KCk7CiAgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CiAKLSAgICByZXR1cm4geworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQo
KSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBw
cm9ncmVzcyksCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQo
KSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpi
bGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwg
cHJvZ3Jlc3MpCi0gICAgfTsKLX0KLQotdm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgpCi17Ci0gICAg
bV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSB2YWxpZFNpbXBsZUNvbG9yOworICAg
ICk7CiB9CiAKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bG9yJiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNDAgKzU2LDI1IEBAIGNsYXNzIENvbG9yIHsK
IHB1YmxpYzoKICAgICBDb2xvcigpIHsgfQogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
c2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9u
ZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCi0KLSAgICBDb2xv
cihTaW1wbGVDb2xvciBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCisgICAgQ29sb3IoU2ltcGxl
Q29sb3IgY29sb3IpCiAgICAgewotICAgICAgICBpZiAodmFsaWQpCi0gICAgICAgICAgICBzZXRT
aW1wbGVDb2xvcihjb2xvcik7CisgICAgICAgIHNldFNpbXBsZUNvbG9yKGNvbG9yKTsKICAgICB9
CiAKICAgICBlbnVtIFNlbWFudGljVGFnIHsgU2VtYW50aWMgfTsKICAgICBDb2xvcihTaW1wbGVD
b2xvciBjb2xvciwgU2VtYW50aWNUYWcpCisgICAgICAgIDogQ29sb3IoY29sb3IpCiAgICAgewot
ICAgICAgICBzZXRTaW1wbGVDb2xvcihjb2xvcik7Ci0gICAgICAgIHNldElzU2VtYW50aWMoKTsK
LSAgICB9Ci0KLSAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQotICAgIHsKLSAgICAgICAg
c2V0U2ltcGxlQ29sb3IobWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIpKTsKLSAgICB9Ci0KLSAgICBD
b2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKLSAgICB7Ci0gICAgICAgIHNldFNpbXBs
ZUNvbG9yKG1ha2VTaW1wbGVDb2xvcihyLCBnLCBiLCBhKSk7Ci0gICAgfQotCi0gICAgQ29sb3Io
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLSAgICB7Ci0gICAgICAgIHNldFNp
bXBsZUNvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkpOworICAgICAg
ICB0YWdBc1NlbWFudGljKCk7CiAgICAgfQogCi0gICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBm
cm9tIHRoZSBzcGVjaWZpYyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCi0gICAgQ29sb3IoZmxvYXQg
YywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKKyAgICBDb2xvcihSZWY8RXh0
ZW5kZWRDb2xvcj4mJiBleHRlbmRlZENvbG9yKQogICAgIHsKLSAgICAgICAgc2V0U2ltcGxlQ29s
b3IobWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICAgICAgLy8g
WmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3NpZ25z
IHRoZQorICAgICAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIEV4dGVuZGVkQ29s
b3IgcG9pbnRlciBiZWxvdy4KKyAgICAgICAgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFn
cyA9IDA7CisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3IgPSAmZXh0ZW5kZWRDb2xv
ci5sZWFrUmVmKCk7CisgICAgICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwogICAgIH0KIAogICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKQEAgLTExNCwx
MiArOTksNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKICAgICB9
CiAKLSAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gRXh0ZW5kZWRDb2xvci4KLSAgICAvLyBGSVhNRTog
SWYgdGhlIGNvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4gYWxsIGJlCi0gICAg
Ly8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBtYWtlIGEgbm9ybWFs
IENvbG9yLgotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZs
b2F0LCBDb2xvclNwYWNlKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihSZWY8RXh0ZW5kZWRD
b2xvcj4mJik7Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25zdCBDb2xvciYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwogCkBAIC0xNjAsNyArMTM5LDYgQEAgcHVi
bGljOgogICAgIENvbG9yIGRhcmsoKSBjb25zdDsKIAogICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7
Ci0gICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7CiAKICAg
ICAvLyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1v
dmVyIiBlcXVhdGlvbgpAQCAtMjIyLDcgKzIwMCw3IEBAIHB1YmxpYzoKICAgICAvLyBFeHRlbmRl
ZCBhbmQgbm9uLWV4dGVuZGVkIGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCiAgICAg
ZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwog
ICAgIGZyaWVuZCBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBh
LCBjb25zdCBDb2xvciYgYik7Ci0KKyAgICBmcmllbmQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFs
KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKICAgICBmcmllbmQgaW50IGRpZmZlcmVuY2VT
cXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAogICAgIHN0YXRpYyBib29sIGlz
QmxhY2tDb2xvcihjb25zdCBDb2xvciYpOwpAQCAtMjM1LDcgKzIxMyw5IEBAIHByaXZhdGU6CiAg
ICAgY29uc3QgU2ltcGxlQ29sb3IgYXNTaW1wbGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0U2lt
cGxlQ29sb3IoU2ltcGxlQ29sb3IpOwotICAgIHZvaWQgc2V0SXNTZW1hbnRpYygpIHsgbV9jb2xv
ckRhdGEuc2ltcGxlQ29sb3JBbmRGbGFncyB8PSBpc1NlbWFudGljU2ltcGxlQ29sb3JCaXQ7IH0K
KworICAgIHZvaWQgdGFnQXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEuc2ltcGxlQ29sb3JBbmRG
bGFncyB8PSBpc1NlbWFudGljU2ltcGxlQ29sb3JCaXQ7IH0KKyAgICB2b2lkIHRhZ0FzVmFsaWQo
KSB7IG1fY29sb3JEYXRhLnNpbXBsZUNvbG9yQW5kRmxhZ3MgfD0gdmFsaWRTaW1wbGVDb2xvcjsg
fQogCiAgICAgLy8gMHhfX19fX19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xvciBwb2ludGVyLgogICAg
IC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgU2ltcGxlQ29sb3IuCkBAIC0yNDksOCArMjI5
LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1
ZSA9IDB4RkZGRkZGRkZGRkZGRkZGRDsKICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZW1wdHlI
YXNoVmFsdWUgPSAweEZGRkZGRkZGRkZGRkZGRkI7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHRhZ0FzVmFsaWQoKTsKLQogICAgIHVuaW9uIHsKICAgICAgICAgdWludDY0X3Qgc2ltcGxlQ29s
b3JBbmRGbGFncyB7IGludmFsaWRTaW1wbGVDb2xvciB9OwogICAgICAgICBFeHRlbmRlZENvbG9y
KiBleHRlbmRlZENvbG9yOwpAQCAtMjYxLDcgKzIzOSw3IEBAIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2xvciYsIGNvbnN0IENvbG8KIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJik7CiAKIC8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgotV0VC
Q09SRV9FWFBPUlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3Qg
Q29sb3ImKTsKK2Jvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYsIGNvbnN0IENv
bG9yJik7CiAKIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8s
IGRvdWJsZSBwcm9ncmVzcyk7CiBDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpOwpAQCAtMjg4LDYg
KzI2NiwxNSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiBhLCBjCiAgICAg
cmV0dXJuICEoYSA9PSBiKTsKIH0KIAoraW5saW5lIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChj
b25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCit7CisgICAgaWYgKGEuaXNFeHRlbmRlZCgp
ICYmIGIuaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gYS5hc0V4dGVuZGVkKCkgPT0gYi5h
c0V4dGVuZGVkKCk7CisKKyAgICBBU1NFUlQoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVk
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ1Nl
bWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAgIGlmIChh
LmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKQEAgLTM5Niw3ICszODMsNyBAQCBPcHRp
b25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNvbG9yU3BhY2UpKQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgcmV0dXJuIENvbG9yIHsg
YzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UgfTsKKyAgICAgICAgcmV0dXJuIENvbG9yIHsg
RXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMsIGFscGhhLCBjb2xvclNwYWNlKSB9Owog
ICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkV4dGVuZGVkQ29sb3IuaCIKIAorI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KQEAgLTEwNSw0ICsxMDYsOSBAQCBib29sIEV4dGVuZGVkQ29sb3I6OmlzQmxh
Y2soKSBjb25zdAogICAgIHJldHVybiAhYzEgJiYgIWMyICYmICFjMyAmJiBhbHBoYSA9PSAxOwog
fQogCitDb2xvciBtYWtlRXh0ZW5kZWRDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIsIGZsb2F0IGMz
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIHJldHVybiBFeHRl
bmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpOworfQorCiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRD
b2xvci5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbmRlZENvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDkgKzMzLDExIEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ29sb3I7CisKIGNsYXNzIEV4dGVuZGVkQ29s
b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxFeHRlbmRlZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxFeHRlbmRlZENvbG9yPiBjcmVhdGUoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCBjMSwgZmxvYXQgYzIsIGZs
b2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSk7CiAKICAgICBmbG9hdCBhbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29tcG9uZW50c1szXTsgfQogCkBAIC01OCwxMCArNjAsMTEgQEAgcHJp
dmF0ZToKICAgICBFeHRlbmRlZENvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZs
b2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiAgICAgICAgIDogbV9jb21wb25lbnRz
KGMxLCBjMiwgYzMsIGFscGhhKQogICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQot
ICAgIHsgfQorICAgIHsKKyAgICB9CiAKICAgICBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+IG1fY29t
cG9uZW50czsKLSAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0Ig
fTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKIH07CiAKIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgRXh0ZW5kZWRDb2xvciYgYSwgY29uc3QgRXh0ZW5kZWRDb2xvciYgYikKQEAg
LTc0LDQgKzc3LDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBFeHRlbmRlZENvbAog
ICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKKy8vIEZJWE1FOiBJZiB0aGUgQ29sb3JTcGFjZSBp
cyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUKKy8vIGNvbnZlcnRlZCBleGFjdGx5IHRv
IGludGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBhIFNpbXBsZUNvbG9yLgorV0VCQ09SRV9FWFBPUlQg
Q29sb3IgbWFrZUV4dGVuZGVkQ29sb3IoZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBjMywgZmxv
YXQgYWxwaGEsIENvbG9yU3BhY2UpOworCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAkocmV2aXNpb24gMjYyMzUyKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5OCwzNCArNTk4LDM0IEBAIHZvaWQgR3JhcGhpY3NMYXllcjo6Z2V0
RGVidWdCb3JkZXJJbmZvKEMKICAgICB3aWR0aCA9IDI7CiAKICAgICBpZiAobmVlZHNCYWNrZHJv
cCgpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMjU1LCAwLCAyNTUsIDEyOCk7IC8vIGhhcyBi
YWNrZHJvcDogbWFnZW50YQorICAgICAgICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAs
IDI1NSwgMTI4KTsgLy8gaGFzIGJhY2tkcm9wOiBtYWdlbnRhCiAgICAgICAgIHdpZHRoID0gMTI7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKGRyYXdzQ29udGVudCgpKSB7
CiAgICAgICAgIGlmICh0aWxlZEJhY2tpbmcoKSkgewotICAgICAgICAgICAgY29sb3IgPSBDb2xv
cigyNTUsIDEyOCwgMCwgMTI4KTsgLy8gdGlsZWQgbGF5ZXI6IG9yYW5nZQorICAgICAgICAgICAg
Y29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjgsIDAsIDEyOCk7IC8vIHRpbGVkIGxheWVy
OiBvcmFuZ2UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbG9y
ID0gQ29sb3IoMCwgMTI4LCAzMiwgMTI4KTsgLy8gbm9ybWFsIGxheWVyOiBncmVlbgorICAgICAg
ICBjb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAxMjgsIDMyLCAxMjgpOyAvLyBub3JtYWwgbGF5
ZXI6IGdyZWVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAodXNlc0NvbnRlbnRz
TGF5ZXIoKSkgewotICAgICAgICBjb2xvciA9IENvbG9yKDAsIDY0LCAxMjgsIDE1MCk7IC8vIG5v
bi1wYWludGluZyBsYXllciB3aXRoIGNvbnRlbnRzOiBibHVlCisgICAgICAgIGNvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDAsIDY0LCAxMjgsIDE1MCk7IC8vIG5vbi1wYWludGluZyBsYXllciB3aXRo
IGNvbnRlbnRzOiBibHVlCiAgICAgICAgIHdpZHRoID0gODsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICAgICBpZiAobWFza3NUb0JvdW5kcygpKSB7Ci0gICAgICAgIGNvbG9yID0gQ29s
b3IoMTI4LCAyNTUsIDI1NSwgNDgpOyAvLyBtYXNraW5nIGxheWVyOiBwYWxlIGJsdWUKKyAgICAg
ICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTI4LCAyNTUsIDI1NSwgNDgpOyAvLyBtYXNraW5n
IGxheWVyOiBwYWxlIGJsdWUKICAgICAgICAgd2lkdGggPSAxNjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGNvbG9yID0gQ29sb3IoMjU1LCAyNTUsIDAsIDE5Mik7IC8vIGNvbnRhaW5l
cjogeWVsbG93CisgICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDAsIDE5Mik7
IC8vIGNvbnRhaW5lcjogeWVsbG93CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllcjo6dXBkYXRlRGVi
dWdJbmRpY2F0b3JzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU4OCw4ICsxNTg4LDggQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnJlY3Vyc2l2ZUNvbW1pdENoYQogICAgIC8vIFVzZSBoYXZpbmcgYSB0cmFuc2Zvcm0gYXMgYSBr
ZXkgdG8gbWFraW5nIHRoZSB0aWxlIHdhc2ggbGF5ZXIuIElmIGV2ZXJ5IGxheWVyIGdldHMgYSB3
YXNoLAogICAgIC8vIHRoZXkgc3RhcnQgdG8gb2JzY3VyZSB1c2VmdWwgaW5mb3JtYXRpb24uCiAg
ICAgaWYgKCghbV90cmFuc2Zvcm0uaXNJZGVudGl0eSgpIHx8IHRpbGVkQmFja2luZygpKSAmJiAh
bV92aXNpYmxlVGlsZVdhc2hMYXllcikgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Q29sb3I+IHdhc2hGaWxsQ29sb3IoMjU1LCAwLCAwLCA1MCk7Ci0gICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxDb2xvcj4gd2FzaEJvcmRlckNvbG9yKDI1NSwgMCwgMCwgMTAwKTsKKyAgICAg
ICAgY29uc3RleHByIGF1dG8gd2FzaEZpbGxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAs
IDAsIDUwKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8gd2FzaEJvcmRlckNvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDI1NSwgMCwgMCwgMTAwKTsKICAgICAgICAgCiAgICAgICAgIG1fdmlzaWJsZVRp
bGVXYXNoTGF5ZXIgPSBjcmVhdGVQbGF0Zm9ybUNBTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgdGhpcyk7CiAgICAgICAgIFN0cmluZyBuYW1lID0gbWFrZVN0cmluZygiVmlz
aWJsZSBUaWxlIFdhc2ggTGF5ZXIgMHgiLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1fdmlzaWJsZVRpbGVXYXNoTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSksIExvd2VyY2FzZSkpOwpA
QCAtMjU0NiwxMyArMjU0NiwxMyBAQCBzdGF0aWMgdm9pZCBzZXRMYXllckRlYnVnQm9yZGVyKFBs
YXRmb3JtCiBzdGF0aWMgY29uc3QgZmxvYXQgY29udGVudHNMYXllckJvcmRlcldpZHRoID0gNDsK
IHN0YXRpYyBDb2xvciBjb250ZW50c0xheWVyRGVidWdCb3JkZXJDb2xvcihib29sIHNob3dpbmdC
b3JkZXJzKQogewotICAgIHJldHVybiBzaG93aW5nQm9yZGVycyA/IENvbG9yKDAsIDAsIDEyOCwg
MTgwKSA6IENvbG9yKCk7CisgICAgcmV0dXJuIHNob3dpbmdCb3JkZXJzID8gbWFrZVNpbXBsZUNv
bG9yKDAsIDAsIDEyOCwgMTgwKSA6IENvbG9yIHsgfTsKIH0KIAogc3RhdGljIGNvbnN0IGZsb2F0
IGNsb25lTGF5ZXJCb3JkZXJXaWR0aCA9IDI7CiBzdGF0aWMgQ29sb3IgY2xvbmVMYXllckRlYnVn
Qm9yZGVyQ29sb3IoYm9vbCBzaG93aW5nQm9yZGVycykKIHsKLSAgICByZXR1cm4gc2hvd2luZ0Jv
cmRlcnMgPyBDb2xvcigyNTUsIDEyMiwgMjUxKSA6IENvbG9yKCk7CisgICAgcmV0dXJuIHNob3dp
bmdCb3JkZXJzID8gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMTIyLCAyNTEpIDogQ29sb3IoKTsKIH0K
IAogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZURlYnVnSW5kaWNhdG9ycygpCkBAIC0zNzc0
LDcgKzM3NzQsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0RGVidWdCYWNrZ3JvdW5kCiB2
b2lkIEdyYXBoaWNzTGF5ZXJDQTo6Z2V0RGVidWdCb3JkZXJJbmZvKENvbG9yJiBjb2xvciwgZmxv
YXQmIHdpZHRoKSBjb25zdAogewogICAgIGlmIChpc1BhZ2VUaWxlZEJhY2tpbmdMYXllcigpKSB7
Ci0gICAgICAgIGNvbG9yID0gQ29sb3IoMCwgMCwgMTI4LCAxMjgpOyAvLyB0aWxlIGNhY2hlIGxh
eWVyOiBkYXJrIGJsdWUKKyAgICAgICAgY29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMTI4
LCAxMjgpOyAvLyB0aWxlIGNhY2hlIGxheWVyOiBkYXJrIGJsdWUKICNpZiBPUyhXSU5ET1dTKQog
ICAgICAgICB3aWR0aCA9IDEuMDsKICNlbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHAJKHJldmlzaW9u
IDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3Jt
Q0FMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDExICs4NCwxMSBAQCB2b2lkIFBsYXRm
b3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0CiAgICAgY29uc3QgZmxvYXQgdmVydGljYWxN
YXJnaW4gPSAyLjU7CiAgICAgY29uc3QgZmxvYXQgaG9yaXpvbnRhbE1hcmdpbiA9IDU7CiAgICAg
Y29uc3QgdW5zaWduZWQgZm9udFNpemUgPSAyMjsKLSAgICBjb25zdCBDb2xvciBiYWNrZ3JvdW5k
Q29sb3IoMC41ZiwgMC4yNWYsIDEuMGYsIDEuMGYpOwotICAgIGNvbnN0IENvbG9yIGFjY2VsZXJh
dGVkQ29udGV4dExhYmVsQ29sb3IoMS4wZiwgMC5mLCAwLmYsIDEuMGYpOwotICAgIGNvbnN0IENv
bG9yIHVuYWNjZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBm
KTsKLSAgICBjb25zdCBDb2xvciBsaW5lYXJHbHlwaE1hc2tPdXRsaW5lQ29sb3IoMC5mLCAwLmYs
IDAuZiwgMC43NWYpOwotICAgIGNvbnN0IENvbG9yIGRpc3BsYXlMaXN0Qm9yZGVyQ29sb3IoMC5m
LCAwLmYsIDAuZiwgMC42NWYpOworICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xvciA9
IG1ha2VTaW1wbGVDb2xvcigxMjgsIDY0LCAyNTUsIDI1NSk7CisgICAgY29uc3RleHByIGF1dG8g
YWNjZWxlcmF0ZWRDb250ZXh0TGFiZWxDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDAs
IDI1NSk7CisgICAgY29uc3RleHByIGF1dG8gdW5hY2NlbGVyYXRlZENvbnRleHRMYWJlbENvbG9y
ID0gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUsIDI1NSk7CisgICAgY29uc3RleHByIGF1
dG8gbGluZWFyR2x5cGhNYXNrT3V0bGluZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAs
IDE5Mik7CisgICAgY29uc3RleHByIGF1dG8gZGlzcGxheUxpc3RCb3JkZXJDb2xvciA9IG1ha2VT
aW1wbGVDb2xvcigwLCAwLCAwLCAxNjYpOwogCiAgICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmluZzo6
bnVtYmVyKHJlcGFpbnRDb3VudCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHJldmlzaW9uIDI2
MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE2ICs1MSwxNiBAQCBUaWxlQ292ZXJhZ2VN
YXA6OlRpbGVDb3ZlcmFnZU1hcChjb25zdCBUCiAgICAgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0
b3JMYXllci5nZXQoKS5zZXROYW1lKCJ2aXNpYmxlIHZpZXdwb3J0IGluZGljYXRvciIpOwogICAg
IG1fdmlzaWJsZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyV2lkdGgoMik7
CiAgICAgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRBbmNob3JQb2lu
dChGbG9hdFBvaW50M0QoKSk7Ci0gICAgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllci5n
ZXQoKS5zZXRCb3JkZXJDb2xvcihDb2xvcigyNTUsIDAsIDAsIDIwMCkpOworICAgIG1fdmlzaWJs
ZVZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0Qm9yZGVyQ29sb3IobWFrZVNpbXBsZUNv
bG9yKDI1NSwgMCwgMCwgMjAwKSk7CiAKICAgICBtX2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5
ZXIuZ2V0KCkuc2V0TmFtZSgibGF5b3V0IHZpZXdwb3J0IGluZGljYXRvciIpOwogICAgIG1fbGF5
b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRCb3JkZXJXaWR0aCgyKTsKICAgICBt
X2xheW91dFZpZXdwb3J0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkuc2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKCkpOwotICAgIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllci5nZXQoKS5zZXRC
b3JkZXJDb2xvcihDb2xvcigwLCAxMjgsIDEyOCwgMjAwKSk7CisgICAgbV9sYXlvdXRWaWV3cG9y
dEluZGljYXRvckxheWVyLmdldCgpLnNldEJvcmRlckNvbG9yKG1ha2VTaW1wbGVDb2xvcigwLCAx
MjgsIDEyOCwgMjAwKSk7CiAgICAgCiAgICAgbV9jb3ZlcmFnZVJlY3RJbmRpY2F0b3JMYXllci5n
ZXQoKS5zZXROYW1lKCJjb3ZlcmFnZSBpbmRpY2F0b3IiKTsKICAgICBtX2NvdmVyYWdlUmVjdElu
ZGljYXRvckxheWVyLmdldCgpLnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKLSAgICBt
X2NvdmVyYWdlUmVjdEluZGljYXRvckxheWVyLmdldCgpLnNldEJhY2tncm91bmRDb2xvcihDb2xv
cig2NCwgNjQsIDY0LCA1MCkpOworICAgIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0
KCkuc2V0QmFja2dyb3VuZENvbG9yKG1ha2VTaW1wbGVDb2xvcig2NCwgNjQsIDY0LCA1MCkpOwog
CiAgICAgbV9sYXllci5nZXQoKS5hcHBlbmRTdWJsYXllcihtX2NvdmVyYWdlUmVjdEluZGljYXRv
ckxheWVyKTsKICAgICBtX2xheWVyLmdldCgpLmFwcGVuZFN1YmxheWVyKG1fdmlzaWJsZVZpZXdw
b3J0SW5kaWNhdG9yTGF5ZXIpOwpAQCAtMTM2LDE2ICsxMzYsMTYgQEAgdm9pZCBUaWxlQ292ZXJh
Z2VNYXA6OnVwZGF0ZSgpCiAgICAgQ29sb3IgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvcjsKICAg
ICBzd2l0Y2ggKG1fY29udHJvbGxlci5pbmRpY2F0b3JNb2RlKCkpIHsKICAgICBjYXNlIFN5bmNo
cm9ub3VzU2Nyb2xsaW5nQmVjYXVzZU9mTGFja09mU2Nyb2xsaW5nQ29vcmRpbmF0b3JJbmRpY2F0
aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjAwLCA4MCwg
MjU1KTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigyMDAsIDgwLCAyNTUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN5bmNocm9ub3VzU2Ny
b2xsaW5nQmVjYXVzZU9mU3R5bGVJbmRpY2F0aW9uOgotICAgICAgICB2aXNpYmxlUmVjdEluZGlj
YXRvckNvbG9yID0gQ29sb3IoMjU1LCAwLCAwKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0
b3JDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFN5bmNocm9ub3VzU2Nyb2xsaW5nQmVjYXVzZU9mRXZlbnRIYW5kbGVyc0luZGljYXRp
b246Ci0gICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDI1NSwg
MCk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MjU1LCAyNTUsIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFzeW5jU2Nyb2xsaW5nSW5k
aWNhdGlvbjoKLSAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDAsIDIw
MCwgMCk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBtYWtlU2ltcGxlQ29s
b3IoMCwgMjAwLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFBsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwCiAgICAgaWYgKGJvcmRlcldpZHRoID4gMCkK
ICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ0FDRkxheWVyR2V0Qm9yZGVyQ29sb3IoY2FMYXll
cik7CiAgICAgZWxzZQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9yKENv
bG9yKDI1NSwgMCwgMCkpOworICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9y
KG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgUGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludElu
ZGljYXRvcihncmFwaGljc0NvbnRleHQsIG93bmVyKCksIGRyYXdDb3VudCwgYmFja2dyb3VuZENv
bG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRp
ZW50Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGlu
dGVycG9sYXRlQ28KICAgICBmbG9hdCBiID0gYjEgKyAoYjIgLSBiMSkgKiAwLjVmOwogICAgIGZs
b2F0IGEgPSBhMSArIChhMiAtIGExKSAqIDAuNWY7CiAKLSAgICByZXR1cm4gR3JhZGllbnQ6OkNv
bG9yU3RvcChvZmZzZXQsIENvbG9yKHIsIGcsIGIsIGEpKTsKKyAgICByZXR1cm4gR3JhZGllbnQ6
OkNvbG9yU3RvcChvZmZzZXQsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkp
OwogfQogCiBzdGF0aWMgY2Fpcm9fcGF0dGVybl90KiBjcmVhdGVDb25pYyhmbG9hdCB4bywgZmxv
YXQgeW8sIGZsb2F0IHIsIGZsb2F0IGFuZ2xlUmFkaWFucywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCShyZXZpc2lvbiAyNjIzNTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNv
bG9yLCBTZW1hbnRpY1QKICAgICB9CiAKICAgICBzZXRTaW1wbGVDb2xvcihtYWtlU2ltcGxlQ29s
b3JGcm9tQ0dDb2xvcihjb2xvcikpOwotICAgIHNldElzU2VtYW50aWMoKTsKKyAgICB0YWdBc1Nl
bWFudGljKCk7CiB9CiAKIHN0YXRpYyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2
ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjQsOSArNjQsOSBAQCBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xv
cihjCiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKIAogICAgIGlmICghcGl4ZWxbM10pCi0gICAg
ICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFu
c3BhcmVudDsKIAotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVs
WzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNd
LCBwaXhlbFszXSk7CiB9CiAKIHZvaWQgZHJhd05hdGl2ZUltYWdlKGNvbnN0IE5hdGl2ZUltYWdl
UHRyJiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0Q29jb2EubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDUsMTUgKzIwNSwxNSBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxp
bmVTdHlsCiAgICAgc3dpdGNoIChzdHlsZSkgewogICAgIC8vIFJlZAogICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nOgotICAgICAgICByZXR1cm4gY2FjaGVk
Q0dDb2xvcih1c2VEYXJrTW9kZSA/IENvbG9yIHsgMjU1LCAxNDAsIDE0MCwgMjE3IH0gOiBDb2xv
ciB7IDI1NSwgNTksIDQ4LCAxOTEgfSk7CisgICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVz
ZURhcmtNb2RlID8gbWFrZVNpbXBsZUNvbG9yKDI1NSwgMTQwLCAxNDAsIDIxNykgOiBtYWtlU2lt
cGxlQ29sb3IoMjU1LCA1OSwgNDgsIDE5MSkpOwogICAgIC8vIEJsdWUKICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6CiAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6VGV4dENoZWNraW5nRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlczoKICAgICBjYXNlIERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpN
b2RlOjpBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50OgotICAgICAgICByZXR1cm4gY2FjaGVkQ0dD
b2xvcih1c2VEYXJrTW9kZSA/IENvbG9yIHsgNDAsIDE0NSwgMjU1LCAyMTcgfSA6IENvbG9yIHsg
MCwgMTIyLCAyNTUsIDE5MSB9KTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZENHQ29sb3IodXNlRGFy
a01vZGUgPyBtYWtlU2ltcGxlQ29sb3IoNDAsIDE0NSwgMjU1LCAyMTcpIDogbWFrZVNpbXBsZUNv
bG9yKDAsIDEyMiwgMjU1LCAxOTEpKTsKICAgICAvLyBHcmVlbgogICAgIGNhc2UgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXI6Ci0gICAgICAgIHJldHVybiBjYWNoZWRDR0Nv
bG9yKHVzZURhcmtNb2RlID8gQ29sb3IgeyA1MCwgMjE1LCA3NSwgMjE3IH0gOiBDb2xvciB7IDI1
LCAxNzUsIDUwLCAxOTEgfSk7CisgICAgICAgIHJldHVybiBjYWNoZWRDR0NvbG9yKHVzZURhcmtN
b2RlID8gbWFrZVNpbXBsZUNvbG9yKDUwLCAyMTUsIDc1LCAyMTcpIDogbWFrZVNpbXBsZUNvbG9y
KDI1LCAxNzUsIDUwLCAxOTEpKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlv
bi5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA3LDEy
ICszMDcsMTIgQEAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gRHJvcFNoYWRvd0ZpbHRlcgogICAg
ICAgICByZXR1cm4gRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKAogICAgICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQobV9sb2NhdGlvbiwgSW50UG9pbnQoKSwgcHJvZ3Jlc3MpLAogICAg
ICAgICAgICAgV2ViQ29yZTo6YmxlbmQobV9zdGREZXZpYXRpb24sIDAsIHByb2dyZXNzKSwKLSAg
ICAgICAgICAgIFdlYkNvcmU6OmJsZW5kKG1fY29sb3IsIENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCksIHByb2dyZXNzKSk7CisgICAgICAgICAgICBXZWJDb3JlOjpibGVuZChtX2NvbG9yLCBDb2xv
cjo6dHJhbnNwYXJlbnQsIHByb2dyZXNzKSk7CiAKICAgICBjb25zdCBEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3BlcmF0aW9uID0gZG93bmNhc3Q8RHJvcFNoYWRvd0ZpbHRlck9wZXJh
dGlvbj4oZnJvbSk7CiAgICAgSW50UG9pbnQgZnJvbUxvY2F0aW9uID0gZnJvbU9wZXJhdGlvbiA/
IGZyb21PcGVyYXRpb24tPmxvY2F0aW9uKCkgOiBJbnRQb2ludCgpOwogICAgIGludCBmcm9tU3Rk
RGV2aWF0aW9uID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPnN0ZERldmlhdGlvbigp
IDogMDsKLSAgICBDb2xvciBmcm9tQ29sb3IgPSBmcm9tT3BlcmF0aW9uID8gZnJvbU9wZXJhdGlv
bi0+Y29sb3IoKSA6IENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgQ29sb3IgZnJvbUNv
bG9yID0gZnJvbU9wZXJhdGlvbiA/IGZyb21PcGVyYXRpb24tPmNvbG9yKCkgOiBDb2xvcjo6dHJh
bnNwYXJlbnQ7CiAgICAgCiAgICAgcmV0dXJuIERyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbUxvY2F0aW9uLCBtX2xvY2F0aW9uLCBw
cm9ncmVzcyksCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29s
b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2
LDcgQEAgQ29sb3IgY29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKIHsKICAgICAvLyBG
SVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCiAKLSAg
ICByZXR1cm4gQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoY29sb3IpKTsKKyAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoY29sb3IpOwogfQogCiBDb2xvciBzZW1h
bnRpY0NvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAJKHJldmlzaW9uIDI2MjM1
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMs
NyBAQCB2b2lkIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyOjpwCiAgICAgICAgIEFT
U0VSVCghbV90ZXh0dXJlKTsKICAgICAgICAgaWYgKG1faG9sZVB1bmNoQ2xpZW50KQogICAgICAg
ICAgICAgbV9ob2xlUHVuY2hDbGllbnQtPnNldFZpZGVvUmVjdGFuZ2xlKGVuY2xvc2luZ0ludFJl
Y3QobW9kZWxWaWV3TWF0cml4Lm1hcFJlY3QodGFyZ2V0UmVjdCkpKTsKLSAgICAgICAgdGV4bWFw
R0wuZHJhd1NvbGlkQ29sb3IodGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4LCBDb2xvcigwLCAw
LCAwLCAwKSwgZmFsc2UpOworICAgICAgICB0ZXhtYXBHTC5kcmF3U29saWRDb2xvcih0YXJnZXRS
ZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAwKSwgZmFsc2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRHJhZ0ltYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3
ICsxMzksNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtCiAgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwog
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7
CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKLSAgICAgICAgY29udGV4dC5maWxs
Um91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6
OlJhZGlpKDQpKSwgeyAyNTUsIDI1NSwgMjU1IH0pOworICAgICAgICBjb250ZXh0LmZpbGxSb3Vu
ZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFk
aWkoNCkpLCBtYWtlU2ltcGxlQ29sb3IoMjU1LCAyNTUsIDI1NSkpOwogICAgICAgICB0aXRsZUZv
bnRDYXNjYWRlLmdldCgpLmRyYXdUZXh0KGNvbnRleHQsIFRleHRSdW4odHJ1bmNhdGVkVG9wU3Ry
aW5nKSwgRmxvYXRQb2ludChkcmFnSW1hZ2VQYWRkaW5nLCAxOCArIGRyYWdJbWFnZVBhZGRpbmcp
KTsKICAgICAgICAgaWYgKCF0cnVuY2F0ZWRCb3R0b21TdHJpbmcuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgdXJsRm9udENhc2NhZGUuZ2V0KCkuZHJhd1RleHQoY29udGV4dCwgVGV4dFJ1bih0cnVu
Y2F0ZWRCb3R0b21TdHJpbmcpLCBGbG9hdFBvaW50KGRyYWdJbWFnZVBhZGRpbmcsIDQwICsgZHJh
Z0ltYWdlUGFkZGluZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2Fj
eVRpbGVDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
TGVnYWN5VGlsZUNhY2hlLm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsOSAr
NDYyLDkgQEAgdW5zaWduZWQgTGVnYWN5VGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlGbwogQ29sb3Ig
TGVnYWN5VGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxlQm9yZGVyKExlZ2FjeVRpbGVHcmlkKiBn
cmlkKSBjb25zdAogewogICAgIGlmIChncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCkp
Ci0gICAgICAgIHJldHVybiBDb2xvcigwLjJmLCAxLjBmLCAwLmYsIDAuNWYpOworICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjJmLCAxLjBmLCAwLmYsIDAuNWYpOwog
Ci0gICAgcmV0dXJuIENvbG9yKDAuMmYsIDAuOWYsIDAuZiwgMC41Zik7CisgICAgcmV0dXJuIG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMC45ZiwgMC5mLCAwLjVmKTsKIH0KIAogc3Rh
dGljIGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYgZGlydHlSZWN0LCBD
R1NSZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2FsZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCShyZXZpc2lvbiAy
NjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg5LDE0ICsxODksMTQgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZUZvckxpbmsoRWxlbQogICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNvbnRleHRS
ZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZl
ciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwg
c28gd2UgdXNlIDEKLSAgICBzdGF0aWMgY29uc3QgQ29sb3IgYmFja2dyb3VuZENvbG9yKDE0MCwg
MTQwLCAxNDApOworICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigxNDAsIDE0MCwgMTQwKTsKICAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSByYWRpaShE
cmFnTGFiZWxSYWRpdXMsIERyYWdMYWJlbFJhZGl1cyk7CiAgICAgSW50UmVjdCByZWN0KDAsIDAs
IGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0KCkpOwogICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QocmVjdCwgcmFkaWksIHJhZGlpLCByYWRpaSwg
cmFkaWkpLCBiYWNrZ3JvdW5kQ29sb3IpOwogIAogICAgIC8vIERyYXcgdGhlIHRleHQKLSAgICBz
dGF0aWMgY29uc3QgQ29sb3IgdG9wQ29sb3IoMCwgMCwgMCwgMjU1KTsgLy8gb3JpZ2luYWwgYWxw
aGEgPSAwLjc1Ci0gICAgc3RhdGljIGNvbnN0IENvbG9yIGJvdHRvbUNvbG9yKDI1NSwgMjU1LCAy
NTUsIDEyNyk7IC8vIG9yaWdpbmFsIGFscGhhID0gMC41CisgICAgY29uc3RleHByIGF1dG8gdG9w
Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMjU1KTsgLy8gb3JpZ2luYWwgYWxwaGEg
PSAwLjc1CisgICAgY29uc3RleHByIGF1dG8gYm90dG9tQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MjU1LCAyNTUsIDI1NSwgMTI3KTsgLy8gb3JpZ2luYWwgYWxwaGEgPSAwLjUKICAgICBpZiAoZHJh
d1VSTFN0cmluZykgewogICAgICAgICBpZiAoY2xpcFVSTFN0cmluZykKICAgICAgICAgICAgIHVy
bFN0cmluZyA9IFN0cmluZ1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZSh1cmxTdHJpbmcsIGltYWdl
U2l6ZS53aWR0aCgpIC0gKERyYWdMYWJlbEJvcmRlclggKiAyLjBmKSwgKnVybEZvbnQpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9QYWludEluZm8uaAkocmV2aXNpb24gMjYyMzUyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1BhaW50SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OSw3ICs5OSw3IEBAIHN0cnVjdCBQYWludEluZm8gewogICAgIGJvb2wgZm9yY2VUZXh0Q29sb3Io
KSBjb25zdCB7IHJldHVybiBmb3JjZUJsYWNrVGV4dCgpIHx8IGZvcmNlV2hpdGVUZXh0KCk7IH0K
ICAgICBib29sIGZvcmNlQmxhY2tUZXh0KCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5j
b250YWlucyhQYWludEJlaGF2aW9yOjpGb3JjZUJsYWNrVGV4dCk7IH0KICAgICBib29sIGZvcmNl
V2hpdGVUZXh0KCkgY29uc3QgeyByZXR1cm4gcGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJl
aGF2aW9yOjpGb3JjZVdoaXRlVGV4dCk7IH0KLSAgICBDb2xvciBmb3JjZWRUZXh0Q29sb3IoKSBj
b25zdCB7IHJldHVybiAoZm9yY2VCbGFja1RleHQoKSkgPyBDb2xvcjo6YmxhY2sgOiBDb2xvcjo6
d2hpdGU7IH0KKyAgICBDb2xvciBmb3JjZWRUZXh0Q29sb3IoKSBjb25zdCB7IHJldHVybiBmb3Jj
ZUJsYWNrVGV4dCgpID8gQ29sb3I6OmJsYWNrIDogQ29sb3I6OndoaXRlOyB9CiAKICAgICBib29s
IHNraXBSb290QmFja2dyb3VuZCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50QmVoYXZpb3IuY29udGFp
bnMoUGFpbnRCZWhhdmlvcjo6U2tpcFJvb3RCYWNrZ3JvdW5kKTsgfQogICAgIGJvb2wgcGFpbnRS
b290QmFja2dyb3VuZE9ubHkoKSBjb25zdCB7IHJldHVybiBwYWludEJlaGF2aW9yLmNvbnRhaW5z
KFBhaW50QmVoYXZpb3I6OlJvb3RCYWNrZ3JvdW5kT25seSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0LmNwcAkocmV2aXNpb24g
MjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVtYmVkZGVkT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMjkgKzc0LDEwIEBAIHN0YXRpYyBjb25zdCBmbG9h
dCByZXBsYWNlbWVudEFycm93TGVmdE0KIHN0YXRpYyBjb25zdCBmbG9hdCByZXBsYWNlbWVudEFy
cm93UGFkZGluZyA9IDQ7CiBzdGF0aWMgY29uc3QgZmxvYXQgcmVwbGFjZW1lbnRBcnJvd0NpcmNs
ZVBhZGRpbmcgPSAzOwogCi1zdGF0aWMgY29uc3QgQ29sb3ImIHJlcGxhY2VtZW50VGV4dFJvdW5k
ZWRSZWN0UHJlc3NlZENvbG9yKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+
IHByZXNzZWQoMTA1LCAxMDUsIDEwNSwgMjQyKTsKLSAgICByZXR1cm4gcHJlc3NlZDsKLX0KLQot
c3RhdGljIGNvbnN0IENvbG9yJiByZXBsYWNlbWVudFRleHRSb3VuZGVkUmVjdENvbG9yKCkKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IHN0YW5kYXJkKDEyNSwgMTI1LCAxMjUs
IDI0Mik7Ci0gICAgcmV0dXJuIHN0YW5kYXJkOwotfQotCi1zdGF0aWMgY29uc3QgQ29sb3ImIHJl
cGxhY2VtZW50VGV4dENvbG9yKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+
IHN0YW5kYXJkKDI0MCwgMjQwLCAyNDAsIDI1NSk7Ci0gICAgcmV0dXJuIHN0YW5kYXJkOwotfQot
Ci1zdGF0aWMgY29uc3QgQ29sb3ImIHVuYXZhaWxhYmxlUGx1Z2luQm9yZGVyQ29sb3IoKQotewot
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gc3RhbmRhcmQoMjU1LCAyNTUsIDI1NSwg
MjE2KTsKLSAgICByZXR1cm4gc3RhbmRhcmQ7Ci19Citjb25zdGV4cHIgYXV0byByZXBsYWNlbWVu
dFRleHRSb3VuZGVkUmVjdFByZXNzZWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigxMDUsIDEwNSwg
MTA1LCAyNDIpOworY29uc3RleHByIGF1dG8gcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xv
ciA9IG1ha2VTaW1wbGVDb2xvcigxMjUsIDEyNSwgMTI1LCAyNDIpOworY29uc3RleHByIGF1dG8g
cmVwbGFjZW1lbnRUZXh0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMjQwLCAyNDAsIDI0MCwgMjU1
KTsKK2NvbnN0ZXhwciBhdXRvIHVuYXZhaWxhYmxlUGx1Z2luQm9yZGVyQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMjU1LCAyNTUsIDI1NSwgMjE2KTsKIAogUmVuZGVyRW1iZWRkZWRPYmplY3Q6OlJl
bmRlckVtYmVkZGVkT2JqZWN0KEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZWxlbWVudCwgUmVuZGVy
U3R5bGUmJiBzdHlsZSkKICAgICA6IFJlbmRlcldpZGdldChlbGVtZW50LCBXVEZNb3ZlKHN0eWxl
KSkKQEAgLTMxMiw3ICsyOTMsNyBAQCB2b2lkIFJlbmRlckVtYmVkZGVkT2JqZWN0OjpwYWludFJl
cGxhY2VkCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7CiAgICAgY29udGV4dC5jbGlwKGNvbnRlbnRSZWN0KTsKLSAgICBjb250ZXh0LnNldEZpbGxD
b2xvcihtX3VuYXZhaWxhYmxlUGx1Z2luSW5kaWNhdG9ySXNQcmVzc2VkID8gcmVwbGFjZW1lbnRU
ZXh0Um91bmRlZFJlY3RQcmVzc2VkQ29sb3IoKSA6IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0
Q29sb3IoKSk7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobV91bmF2YWlsYWJsZVBsdWdpbklu
ZGljYXRvcklzUHJlc3NlZCA/IHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0UHJlc3NlZENvbG9y
IDogcmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RDb2xvcik7CiAgICAgY29udGV4dC5maWxsUGF0
aChiYWNrZ3JvdW5kKTsKIAogICAgIFBhdGggc3Ryb2tlUGF0aDsKQEAgLTMyMCwyMSArMzAxLDIx
IEBAIHZvaWQgUmVuZGVyRW1iZWRkZWRPYmplY3Q6OnBhaW50UmVwbGFjZWQKICAgICBzdHJva2VS
ZWN0LmluZmxhdGUoMSk7CiAgICAgc3Ryb2tlUGF0aC5hZGRSb3VuZGVkUmVjdChzdHJva2VSZWN0
LCBGbG9hdFNpemUocmVwbGFjZW1lbnRUZXh0Um91bmRlZFJlY3RSYWRpdXMgKyAxLCByZXBsYWNl
bWVudFRleHRSb3VuZGVkUmVjdFJhZGl1cyArIDEpKTsKIAotICAgIGNvbnRleHQuc2V0U3Ryb2tl
Q29sb3IodW5hdmFpbGFibGVQbHVnaW5Cb3JkZXJDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldFN0
cm9rZUNvbG9yKHVuYXZhaWxhYmxlUGx1Z2luQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0
U3Ryb2tlVGhpY2tuZXNzKDIpOwogICAgIGNvbnRleHQuc3Ryb2tlUGF0aChzdHJva2VQYXRoKTsK
IAogICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnQuZm9udE1ldHJpY3Mo
KTsKICAgICBmbG9hdCBsYWJlbFggPSByb3VuZGYocmVwbGFjZW1lbnRUZXh0UmVjdC5sb2NhdGlv
bigpLngoKSArIHJlcGxhY2VtZW50VGV4dFJvdW5kZWRSZWN0TGVmdFRleHRNYXJnaW4pOwogICAg
IGZsb2F0IGxhYmVsWSA9IHJvdW5kZihyZXBsYWNlbWVudFRleHRSZWN0LmxvY2F0aW9uKCkueSgp
ICsgKHJlcGxhY2VtZW50VGV4dFJlY3Quc2l6ZSgpLmhlaWdodCgpIC0gZm9udE1ldHJpY3MuaGVp
Z2h0KCkpIC8gMiArIGZvbnRNZXRyaWNzLmFzY2VudCgpICsgcmVwbGFjZW1lbnRUZXh0Um91bmRl
ZFJlY3RUb3BUZXh0TWFyZ2luKTsKLSAgICBjb250ZXh0LnNldEZpbGxDb2xvcihyZXBsYWNlbWVu
dFRleHRDb2xvcigpKTsKKyAgICBjb250ZXh0LnNldEZpbGxDb2xvcihyZXBsYWNlbWVudFRleHRD
b2xvcik7CiAgICAgY29udGV4dC5kcmF3QmlkaVRleHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGxh
YmVsWCwgbGFiZWxZKSk7CiAKICAgICBpZiAoc2hvdWxkVW5hdmFpbGFibGVQbHVnaW5NZXNzYWdl
QmVCdXR0b24ocGFnZSgpLCBtX3BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uKSkgewogICAgICAg
ICBhcnJvd1JlY3QuaW5mbGF0ZSgtcmVwbGFjZW1lbnRBcnJvd0NpcmNsZVBhZGRpbmcpOwogCiAg
ICAgICAgIGNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxLjApOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihyZXBsYWNlbWVudFRleHRDb2xvcigpKTsKKyAgICAgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IocmVwbGFjZW1lbnRUZXh0Q29sb3IpOwogICAgICAgICBjb250ZXh0LmZp
bGxFbGxpcHNlKGFycm93UmVjdCk7CiAKICAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OkNsZWFyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjgsMjMgKzY4LDkgQEAgUmVuZGVyRnJhbWVTZXQ6OkdyaWRBeGlzOjpHcmlkQXhpcygpCiB7CiB9
CiAKLXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyU3RhcnRFZGdlQ29sb3IoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gY29sb3IoMTcwLCAxNzAsIDE3MCk7Ci0gICAgcmV0
dXJuIGNvbG9yOwotfQotCi1zdGF0aWMgY29uc3QgQ29sb3ImIGJvcmRlckVuZEVkZ2VDb2xvcigp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbG9yPiBjb2xvciA9IENvbG9yOjpibGFj
azsKLSAgICByZXR1cm4gY29sb3I7Ci19Ci0KLXN0YXRpYyBjb25zdCBDb2xvciYgYm9yZGVyRmls
bENvbG9yKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDIwOCwg
MjA4LCAyMDgpOwotICAgIHJldHVybiBjb2xvcjsKLX0KK2NvbnN0ZXhwciBhdXRvIGJvcmRlclN0
YXJ0RWRnZUNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDE3MCwgMTcwLCAxNzApOworY29uc3RleHBy
IGF1dG8gYm9yZGVyRW5kRWRnZUNvbG9yID0gQ29sb3I6OmJsYWNrOworY29uc3RleHByIGF1dG8g
Ym9yZGVyRmlsbENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwOCwgMjA4LCAyMDgpOwogCiB2b2lk
IFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgYm9yZGVyUmVjdCkKIHsKQEAgLTk1LDEzICs4MSwxMyBAQCB2
b2lkIFJlbmRlckZyYW1lU2V0OjpwYWludENvbHVtbkJvcmRlcihjCiAgICAgCiAgICAgLy8gRmls
bCBmaXJzdC4KICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dCgpOwotICAgIGNvbnRleHQuZmlsbFJlY3QoYm9yZGVyUmVjdCwgZnJhbWVTZXRFbGVtZW50KCku
aGFzQm9yZGVyQ29sb3IoKSA/IHN0eWxlKCkudmlzaXRlZERlcGVuZGVudENvbG9yV2l0aENvbG9y
RmlsdGVyKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSA6IGJvcmRlckZpbGxDb2xvcigpKTsK
KyAgICBjb250ZXh0LmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0Jv
cmRlckNvbG9yKCkgPyBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRl
cihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29sb3IpOwogICAgIAog
ICAgIC8vIE5vdyBzdHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJv
b20gdG8gcGFpbnQgYm90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBm
aWxsIGNvbG9yIHNob3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC53aWR0aCgpID49
IDMpIHsKLSAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3QubG9jYXRp
b24oKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpKTsKLSAg
ICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QubWF4WCgp
IC0gMSwgYm9yZGVyUmVjdC55KCkpLCBJbnRTaXplKDEsIGhlaWdodCgpKSksIGJvcmRlckVuZEVk
Z2VDb2xvcigpKTsKKyAgICAgICAgY29udGV4dC5maWxsUmVjdChJbnRSZWN0KGJvcmRlclJlY3Qu
bG9jYXRpb24oKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcik7
CisgICAgICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludChib3JkZXJSZWN0Lm1h
eFgoKSAtIDEsIGJvcmRlclJlY3QueSgpKSwgSW50U2l6ZSgxLCBoZWlnaHQoKSkpLCBib3JkZXJF
bmRFZGdlQ29sb3IpOwogICAgIH0KIH0KIApAQCAtMTE0LDEzICsxMDAsMTMgQEAgdm9pZCBSZW5k
ZXJGcmFtZVNldDo6cGFpbnRSb3dCb3JkZXIoY29ucwogICAgIAogICAgIC8vIEZpbGwgZmlyc3Qu
CiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQoKTsKLSAg
ICBjb250ZXh0LmZpbGxSZWN0KGJvcmRlclJlY3QsIGZyYW1lU2V0RWxlbWVudCgpLmhhc0JvcmRl
ckNvbG9yKCkgPyBzdHlsZSgpLnZpc2l0ZWREZXBlbmRlbnRDb2xvcldpdGhDb2xvckZpbHRlcihD
U1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikgOiBib3JkZXJGaWxsQ29sb3IoKSk7CisgICAgY29u
dGV4dC5maWxsUmVjdChib3JkZXJSZWN0LCBmcmFtZVNldEVsZW1lbnQoKS5oYXNCb3JkZXJDb2xv
cigpID8gc3R5bGUoKS52aXNpdGVkRGVwZW5kZW50Q29sb3JXaXRoQ29sb3JGaWx0ZXIoQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0Q29sb3IpIDogYm9yZGVyRmlsbENvbG9yKTsKIAogICAgIC8vIE5vdyBz
dHJva2UgdGhlIGVkZ2VzIGJ1dCBvbmx5IGlmIHdlIGhhdmUgZW5vdWdoIHJvb20gdG8gcGFpbnQg
Ym90aCBlZGdlcyB3aXRoIGEgbGl0dGxlCiAgICAgLy8gYml0IG9mIHRoZSBmaWxsIGNvbG9yIHNo
b3dpbmcgdGhyb3VnaC4KICAgICBpZiAoYm9yZGVyUmVjdC5oZWlnaHQoKSA+PSAzKSB7Ci0gICAg
ICAgIGNvbnRleHQuZmlsbFJlY3QoSW50UmVjdChib3JkZXJSZWN0LmxvY2F0aW9uKCksIEludFNp
emUod2lkdGgoKSwgMSkpLCBib3JkZXJTdGFydEVkZ2VDb2xvcigpKTsKLSAgICAgICAgY29udGV4
dC5maWxsUmVjdChJbnRSZWN0KEludFBvaW50KGJvcmRlclJlY3QueCgpLCBib3JkZXJSZWN0Lm1h
eFkoKSAtIDEpLCBJbnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyRW5kRWRnZUNvbG9yKCkpOwor
ICAgICAgICBjb250ZXh0LmZpbGxSZWN0KEludFJlY3QoYm9yZGVyUmVjdC5sb2NhdGlvbigpLCBJ
bnRTaXplKHdpZHRoKCksIDEpKSwgYm9yZGVyU3RhcnRFZGdlQ29sb3IpOworICAgICAgICBjb250
ZXh0LmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQoYm9yZGVyUmVjdC54KCksIGJvcmRlclJlY3Qu
bWF4WSgpIC0gMSksIEludFNpemUod2lkdGgoKSwgMSkpLCBib3JkZXJFbmRFZGdlQ29sb3IpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjE4LDcgKzIyMTgsNyBAQCB2b2lkIFJlbmRlckxh
eWVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyCiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFO
U1BBUkVOQ1lfTEFZRVJTCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKENvbG9yKDAuMGYs
IDAuMGYsIDAuNWYsIDAuMmYpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNp
bXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjVmLCAwLjJmKSk7CiAgICAgICAgIGNv
bnRleHQuZmlsbFJlY3QocGl4ZWxTbmFwcGVkQ2xpcFJlY3QpOwogI2VuZGlmCiAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAxLDcgKzMyMDEsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6cGFpbnREZWJ1Z092ZXJsCiAgICAgLy8gVGhlIGludGVyYWN0aXZl
IHBhcnQuCiAgICAgLy8gUGFpbnQgcmVjdHMgZm9yIHRvdWNoIGFjdGlvbi4KICAgICBpZiAodmlz
aWJsZURlYnVnT3ZlcmxheVJlZ2lvbnMgJiBUb3VjaEFjdGlvblJlZ2lvbikgewotICAgICAgICBD
b2xvciByZWdpb25Db2xvcigwLCAwLCAyNTUsIDUwKTsKKyAgICAgICAgY29uc3RleHByIGF1dG8g
cmVnaW9uQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1LCA1MCk7CiAgICAgICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHJlZ2lvbkNvbG9yKTsKICAgICAgICAgZm9yIChhdXRvIHJlY3Qg
OiBldmVudFJlZ2lvbi5yZWdpb24oKS5yZWN0cygpKQogICAgICAgICAgICAgY29udGV4dC5maWxs
UmVjdChyZWN0KTsKQEAgLTMyNDMsNyArMzI0Myw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5n
OjpwYWludERlYnVnT3ZlcmwKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQogICAgIC8vIFBh
aW50IHJlY3RzIGZvciBlZGl0YWJsZSBlbGVtZW50cy4KICAgICBpZiAodmlzaWJsZURlYnVnT3Zl
cmxheVJlZ2lvbnMgJiBFZGl0YWJsZUVsZW1lbnRSZWdpb24pIHsKLSAgICAgICAgY29udGV4dC5z
ZXRGaWxsQ29sb3IoeyAxMjgsIDAsIDEyOCwgNTAgfSk7CisgICAgICAgIGNvbnRleHQuc2V0Rmls
bENvbG9yKG1ha2VTaW1wbGVDb2xvcigxMjgsIDAsIDEyOCwgNTApKTsKICAgICAgICAgZm9yIChh
dXRvIHJlY3QgOiBldmVudFJlZ2lvbi5yZWN0c0ZvckVkaXRhYmxlRWxlbWVudHMoKSkKICAgICAg
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QocmVjdCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzAs
NyArNjcwLDcgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlTGlzdEJveFNlbGVjdAogQ29s
b3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKICAgICAvLyBVc2UgYSBibHVl
IGNvbG9yIGJ5IGRlZmF1bHQgaWYgdGhlIHBsYXRmb3JtIHRoZW1lIGRvZXNuJ3QgZGVmaW5lIGFu
eXRoaW5nLgotICAgIHJldHVybiBDb2xvcigwLCAwLCAyNTUpOworICAgIHJldHVybiBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMjU1KTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PikgY29uc3QKQEAgLTY4Myw3ICs2ODMsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjCiB7CiAgICAgLy8gVXNlIGEgZ3JleSBjb2xvciBieSBkZWZhdWx0IGlmIHRo
ZSBwbGF0Zm9ybSB0aGVtZSBkb2Vzbid0IGRlZmluZSBhbnl0aGluZy4KICAgICAvLyBUaGlzIGNv
bG9yIG1hdGNoZXMgRmlyZWZveCdzIGluYWN0aXZlIGNvbG9yLgotICAgIHJldHVybiBDb2xvcigx
NzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDE3NiwgMTc2LCAxNzYp
OwogfQogCiBDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CkBAIC0xMzU3
LDcgKzEzNTcsNyBAQCBDb2xvciBSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvCiAK
IENvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENvbG9yKDI1
NSwgMjU1LCAwKTsgLy8gWWVsbG93LgorICAgIHJldHVybiBDb2xvcjo6eWVsbG93OwogfQogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTE0NDgsNyArMTQ0OCw3IEBAIHZvaWQgUmVuZGVy
VGhlbWU6OnBhaW50U3lzdGVtUHJldmlld0JhZGcKIAogICAgIGF1dG8gbWFya2VyUmVjdCA9IEZs
b2F0UmVjdCB7cmVjdC54KCkgKyByZWN0LndpZHRoKCkgLSAyNCwgcmVjdC55KCkgKyA4LCAxNiwg
MTYgfTsKICAgICBhdXRvIHJvdW5kZWRNYXJrZXJSZWN0ID0gRmxvYXRSb3VuZGVkUmVjdCB7IG1h
cmtlclJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpIHsgOCB9IH07Ci0gICAgYXV0byBjb2xv
ciA9IENvbG9yIHsgMjU1LCAwLCAwIH07CisgICAgYXV0byBjb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigyNTUsIDAsIDApOwogICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHJvdW5kZWRNYXJrZXJS
ZWN0LCBjb2xvcik7CiB9CiAjZW5kaWYKQEAgLTE0NTksNyArMTQ1OSw3IEBAIENvbG9yIFJlbmRl
clRoZW1lOjpwbGF0Zm9ybVRhcEhpZ2hsaWdodEMKIHsKICAgICAvLyBUaGlzIGNvbG9yIGlzIGV4
cGVjdGVkIHRvIGJlIGRyYXduIG9uIGEgc2VtaS10cmFuc3BhcmVudCBvdmVybGF5LAogICAgIC8v
IG1ha2luZyBpdCBtb3JlIHRyYW5zcGFyZW50IHRoYW4gaXRzIGFscGhhIHZhbHVlIGluZGljYXRl
cy4KLSAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMTAyKTsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDAsIDEwMik7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNyArMTYwLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0Q29sb3IoY29uc3QgQ29s
b3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBDb2xvciBmb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdD
b2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IHsgcmV0dXJuIENvbG9y
KDAsIDAsIDApOyB9CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gQ29sb3I6OmJsYWNr
OyB9CiAgICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tRm9jdXNSaW5nQ29sb3IoY29uc3QgQ29sb3Im
KTsKICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdXaWR0aCgpIHsgcmV0dXJuIDM7
IH0KICAgICBzdGF0aWMgZmxvYXQgcGxhdGZvcm1Gb2N1c1JpbmdPZmZzZXQoZmxvYXQgb3V0bGlu
ZVdpZHRoKSB7IHJldHVybiBzdGQ6Om1heDxmbG9hdD4ob3V0bGluZVdpZHRoIC0gcGxhdGZvcm1G
b2N1c1JpbmdXaWR0aCgpLCAwKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lSU9TLmgJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUlPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDYgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpIGZpbmFsOwogI2Vu
ZGlmCiAKLSAgICBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IoKSBjb25zdDsKICAgICBGbG9hdFJl
Y3QgYWRkUm91bmRlZEJvcmRlckNsaXAoY29uc3QgUmVuZGVyT2JqZWN0JiBib3gsIEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIENvbG9yIHN5c3RlbUNvbG9yKENTU1Zh
bHVlSUQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lv
biAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTMxNywxMiArMzE3LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUlPUzo6
c2V0Q29udGVudFNpemVDYXRlZwogICAgIF9jb250ZW50U2l6ZUNhdGVnb3J5KCkgPSBjb250ZW50
U2l6ZUNhdGVnb3J5OwogfQogCi1jb25zdCBDb2xvciYgUmVuZGVyVGhlbWVJT1M6OnNoYWRvd0Nv
bG9yKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29sb3I+IGNvbG9yKDAu
MGYsIDAuMGYsIDAuMGYsIDAuN2YpOwotICAgIHJldHVybiBjb2xvcjsKLX0KLQogRmxvYXRSZWN0
IFJlbmRlclRoZW1lSU9TOjphZGRSb3VuZGVkQm9yZGVyQ2xpcChjb25zdCBSZW5kZXJPYmplY3Qm
IGJveCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQogewog
ICAgIC8vIFRvIGZpeCBpbm5lciBib3JkZXIgYmxlZWRpbmcgaXNzdWVzIDxyZGFyOi8vcHJvYmxl
bS85ODEyNTA3Piwgd2UgY2xpcCB0byB0aGUgb3V0ZXIgYm9yZGVyIGFuZCBhc3NlcnQgdGhhdApA
QCAtMzg3LDcgKzM4MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNv
cmEKIAogICAgIGlmIChjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUpIHsKICAgICAgICAgYXV0byBi
b3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91
bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwg
Q29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWlu
dGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CiAKICAgICAgICAgYXV0byBjbGlw
ID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsK
ICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQyMywxMCArNDE3LDEwIEBA
IGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmEKICAgICAgICAgfQogCiAg
ICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihsaW5lV2lkdGgsIDEpOwotICAgICAg
ICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKHNo
YWRvdykgfSwga0NHTGluZUNhcFNxdWFyZSwgbGluZVdpZHRoLCBDb2xvciB7IDAuMGYsIDAuMGYs
IDAuMGYsIDAuN2YgfSk7CisgICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQsIFZlY3Rv
cjxDR1BvaW50PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1YXJlLCBsaW5lV2lk
dGgsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC43ZikpOwog
CiAgICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1pbih3aWR0aCwgaGVp
Z2h0KSAqIHRoaWNrbmVzc1JhdGlvLCAxKTsKLSAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29u
dGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBrQ0dMaW5lQ2FwQnV0dCwg
bGluZVdpZHRoLCBDb2xvciB7IDEuMGYsIDEuMGYsIDEuMGYsIDI0MCAvIDI1NS4wZiB9KTsKKyAg
ICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92
ZShsaW5lKSB9LCBrQ0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzKDEuMGYsIDEuMGYsIDEuMGYsIDI0MCAvIDI1NS4wZikpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIGF1dG8gY2xpcCA9IGFkZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNv
bnRleHQoKSwgcmVjdCk7CiAgICAgICAgIGF1dG8gd2lkdGggPSBjbGlwLndpZHRoKCk7CkBAIC00
ODQsNyArNDc4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRSYWRpb0RlY29yYXRpbwog
CiAgICAgaWYgKGlzQ2hlY2tlZChib3gpKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyID0gYm94LnN0
eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0Rm9yUGFp
bnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIENvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRl
ZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0Rm9yUGFpbnRpbmcoYm94LmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4w
ZiwgMC4wZiwgMC4wZiwgMC44ZikpOwogCiAgICAgICAgIGF1dG8gY2xpcCA9IGFkZFJvdW5kZWRC
b3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCk7CiAgICAgICAgIGRyYXdB
eGlhbEdyYWRpZW50KGNnQ29udGV4dCwgZ3JhZGllbnRXaXRoTmFtZShDb25jYXZlR3JhZGllbnQp
LCBjbGlwLmxvY2F0aW9uKCksIEZsb2F0UG9pbnQoY2xpcC54KCksIGNsaXAubWF4WSgpKSwgTGlu
ZWFySW50ZXJwb2xhdGlvbik7CkBAIC00OTYsOCArNDkwLDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlP
Uzo6cGFpbnRSYWRpb0RlY29yYXRpbwogCiAgICAgICAgIGNsaXAuaW5mbGF0ZVgoLWNsaXAud2lk
dGgoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKICAgICAgICAgY2xpcC5pbmZsYXRlWSgtY2xpcC5o
ZWlnaHQoKSAqIElubmVySW52ZXJzZVJhdGlvKTsKLQotICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAsIENvbG9yOjp3aGl0ZSwgc2hhZG93Q29sb3IoKSk7
CisgICAgICAgIAorICAgICAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1w
bGVDb2xvcigwLCAwLCAwLCAwLjdmICogMjU1KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQo
KS5kcmF3UmFpc2VkRWxsaXBzZShjbGlwLCBDb2xvcjo6d2hpdGUsIHNoYWRvd0NvbG9yKTsKIAog
ICAgICAgICBGbG9hdFNpemUgcmFkaXVzKGNsaXAud2lkdGgoKSAvIDIuMGYsIGNsaXAuaGVpZ2h0
KCkgLyAyLjBmKTsKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwUm91bmRlZFJlY3Qo
RmxvYXRSb3VuZGVkUmVjdChjbGlwLCByYWRpdXMsIHJhZGl1cywgcmFkaXVzLCByYWRpdXMpKTsK
QEAgLTczMSw3ICs3MjYsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0
dG9uCiAgICAgICAgIEZsb2F0UmVjdCBlbGxpcHNlKGJ1dHRvbkNsaXAueCgpICsgKGJ1dHRvbkNs
aXAud2lkdGgoKSAtIGNvdW50ICogKHNpemUgKyBwYWRkaW5nKSArIHBhZGRpbmcpIC8gMi4wLCBi
dXR0b25DbGlwLm1heFkoKSAtIDEwLjAsIHNpemUsIHNpemUpOwogCiAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQo
KS5kcmF3UmFpc2VkRWxsaXBzZShlbGxpcHNlLCBDb2xvcjo6d2hpdGUsIENvbG9yKDAuMGYsIDAu
MGYsIDAuMGYsIDAuNWYpKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZHJhd1Jh
aXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpKTsKICAgICAgICAgICAgIGVsbGlwc2UubW92ZShz
aXplICsgcGFkZGluZywgMCk7CiAgICAgICAgIH0KICAgICB9ICBlbHNlIHsKQEAgLTc1MSw4ICs3
NDYsOCBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludE1lbnVMaXN0QnV0dG9uCiAgICAgICAg
IH07CiAKICAgICAgICAgZmxvYXQgb3BhY2l0eSA9IGlzUmVhZE9ubHlDb250cm9sKGJveCkgPyAw
LjIgOiAwLjU7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29s
b3IoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkpOwotICAgICAgICBwYWludEluZm8uY29udGV4
dCgpLnNldEZpbGxDb2xvcihDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCBvcGFjaXR5KSk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4w
ZiwgMC4wZiwgb3BhY2l0eSkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdQYXRo
KFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhzaGFkb3cpKTsKIAogICAgICAgICBwYWludElu
Zm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CkBAIC04NDAsOSArODM1
LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRTbGlkZXJUcmFjayhjbwogCiAgICAgICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgICAgICBpZiAocmVhZG9ubHkpCi0gICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDE3OCwgMTc4LCAxNzgpKTsKKyAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IobWFrZVNpbXBsZUNvbG9yKDE3OCwg
MTc4LCAxNzgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQo
KS5zZXRTdHJva2VDb2xvcihDb2xvcig3NiwgNzYsIDc2KSk7CisgICAgICAgICAgICBwYWludElu
Zm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcig3NiwgNzYsIDc2KSk7
CiAKICAgICAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IHJvdW5kZWRSZWN0UGF0aCA9
IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICAgICAgQ0dQYXRoQWRkUm91bmRl
ZFJlY3Qocm91bmRlZFJlY3RQYXRoLmdldCgpLCAwLCB0cmFja0NsaXAsIGNvcm5lcldpZHRoLCBj
b3JuZXJIZWlnaHQpOwpAQCAtOTE5LDEzICs5MTQsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6
cGFpbnRQcm9ncmVzc0JhcihjbwogCiAgICAgY29uc3QgZmxvYXQgdmVydGljYWxSZW5kZXJpbmdQ
b3NpdGlvbiA9IHJlY3QueSgpICsgdmVydGljYWxPZmZzZXQ7CiAgICAgYXV0byBzdHJva2VHcmFk
aWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBvaW50
KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uKSwgRmxvYXRQb2ludChyZWN0Lngo
KSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0IC0gMSkgfSk7
Ci0gICAgc3Ryb2tlR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjAsIENvbG9yKDB4OGQsIDB4OGQs
IDB4OGQpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNDUsIENvbG9yKDB4
ZWUsIDB4ZWUsIDB4ZWUpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUs
IENvbG9yKDB4ZWUsIDB4ZWUsIDB4ZWUpKTsKLSAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JT
dG9wKDEuMCwgQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOworICAgIHN0cm9rZUdyYWRpZW50LT5h
ZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMHg4ZCwgMHg4ZCwgMHg4ZCkpOworICAg
IHN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwgbWFrZVNpbXBsZUNvbG9yKDB4ZWUs
IDB4ZWUsIDB4ZWUpKTsKKyAgICBzdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1h
a2VTaW1wbGVDb2xvcigweGVlLCAweGVlLCAweGVlKSk7CisgICAgc3Ryb2tlR3JhZGllbnQtPmFk
ZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcigweDhkLCAweDhkLCAweDhkKSk7CiAgICAg
Y29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKHN0cm9rZUdyYWRpZW50KSk7CiAKLSAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihDb2xvcigyNTUsIDI1NSwgMjU1KSk7CisgICAgY29udGV4
dC5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKIAogICAgIFBhdGggdHJhY2tQYXRoOwogICAg
IEZsb2F0UmVjdCB0cmFja1JlY3QocmVjdC54KCkgKyAwLjI1LCB2ZXJ0aWNhbFJlbmRlcmluZ1Bv
c2l0aW9uICsgMC4yNSwgcmVjdC53aWR0aCgpIC0gMC41LCBwcm9ncmVzc0JhckhlaWdodCAtIDAu
NSk7CkBAIC05MzksOCArOTM0LDggQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRQcm9ncmVz
c0JhcihjbwogCiAgICAgZmxvYXQgdXBwZXJHcmFkaWVudEhlaWdodCA9IHByb2dyZXNzQmFySGVp
Z2h0IC8gMi47CiAgICAgYXV0byB1cHBlckdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFk
aWVudDo6TGluZWFyRGF0YSB7IEZsb2F0UG9pbnQocmVjdC54KCksIHZlcnRpY2FsUmVuZGVyaW5n
UG9zaXRpb24gKyAwLjUpLCBGbG9hdFBvaW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bv
c2l0aW9uICsgdXBwZXJHcmFkaWVudEhlaWdodCAtIDEuNSkgfSk7Ci0gICAgdXBwZXJHcmFkaWVu
dC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoMTMzLCAxMzMsIDEzMywgMTg4KSk7Ci0gICAgdXBw
ZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMTgsIDE4LCAxOCwgNTEpKTsKKyAg
ICB1cHBlckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoMTMzLCAx
MzMsIDEzMywgMTg4KSk7CisgICAgdXBwZXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDEuMCwgbWFr
ZVNpbXBsZUNvbG9yKDE4LCAxOCwgMTgsIDUxKSk7CiAgICAgY29udGV4dC5zZXRGaWxsR3JhZGll
bnQoV1RGTW92ZSh1cHBlckdyYWRpZW50KSk7CiAKICAgICBjb250ZXh0LmZpbGxSZWN0KEZsb2F0
UmVjdChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiwgcmVjdC53aWR0aCgpLCB1
cHBlckdyYWRpZW50SGVpZ2h0KSk7CkBAIC05NTEsMTggKzk0NiwxOCBAQCBib29sIFJlbmRlclRo
ZW1lSU9TOjpwYWludFByb2dyZXNzQmFyKGNvCiAgICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IGNs
YW1wVG8ocmVuZGVyUHJvZ3Jlc3MucG9zaXRpb24oKSwgMC4wLCAxLjApOwogICAgICAgICBkb3Vi
bGUgYmFyV2lkdGggPSBwb3NpdGlvbiAqIHJlY3Qud2lkdGgoKTsKICAgICAgICAgYXV0byBiYXJH
cmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoR3JhZGllbnQ6OkxpbmVhckRhdGEgeyBGbG9hdFBv
aW50KHJlY3QueCgpLCB2ZXJ0aWNhbFJlbmRlcmluZ1Bvc2l0aW9uICsgMC41KSwgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiArIHByb2dyZXNzQmFySGVpZ2h0
IC0gMSkgfSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBDb2xvcigx
OTUsIDIxNywgMjQ3KSk7Ci0gICAgICAgIGJhckdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC40NSwg
Q29sb3IoMTE4LCAxNjQsIDIyOCkpOwotICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDksIENvbG9yKDExOCwgMTY0LCAyMjgpKTsKLSAgICAgICAgYmFyR3JhZGllbnQtPmFkZENv
bG9yU3RvcCgwLjUxLCBDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgwLjU1LCBDb2xvcigzNiwgMTE0LCAyMTApKTsKLSAgICAgICAgYmFyR3Jh
ZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIENvbG9yKDU3LCAxNDIsIDI0NCkpOworICAgICAgICBi
YXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgbWFrZVNpbXBsZUNvbG9yKDE5NSwgMjE3LCAy
NDcpKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgwLjQ1LCBtYWtlU2ltcGxl
Q29sb3IoMTE4LCAxNjQsIDIyOCkpOworICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9w
KDAuNDksIG1ha2VTaW1wbGVDb2xvcigxMTgsIDE2NCwgMjI4KSk7CisgICAgICAgIGJhckdyYWRp
ZW50LT5hZGRDb2xvclN0b3AoMC41MSwgbWFrZVNpbXBsZUNvbG9yKDM2LCAxMTQsIDIxMCkpOwor
ICAgICAgICBiYXJHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuNTUsIG1ha2VTaW1wbGVDb2xvcigz
NiwgMTE0LCAyMTApKTsKKyAgICAgICAgYmFyR3JhZGllbnQtPmFkZENvbG9yU3RvcCgxLjAsIG1h
a2VTaW1wbGVDb2xvcig1NywgMTQyLCAyNDQpKTsKICAgICAgICAgY29udGV4dC5zZXRGaWxsR3Jh
ZGllbnQoV1RGTW92ZShiYXJHcmFkaWVudCkpOwogCiAgICAgICAgIGF1dG8gYmFyU3Ryb2tlR3Jh
ZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgRmxvYXRQb2lu
dChyZWN0LngoKSwgdmVydGljYWxSZW5kZXJpbmdQb3NpdGlvbiksIEZsb2F0UG9pbnQocmVjdC54
KCksIHZlcnRpY2FsUmVuZGVyaW5nUG9zaXRpb24gKyBwcm9ncmVzc0JhckhlaWdodCAtIDEpIH0p
OwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+YWRkQ29sb3JTdG9wKDAuMCwgQ29sb3IoOTUs
IDEwNywgMTgzKSk7Ci0gICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41
LCBDb2xvcig2NiwgMTA2LCAxNzQsIDI0MCkpOwotICAgICAgICBiYXJTdHJva2VHcmFkaWVudC0+
YWRkQ29sb3JTdG9wKDEuMCwgQ29sb3IoMzgsIDEwNCwgMTY2KSk7CisgICAgICAgIGJhclN0cm9r
ZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC4wLCBtYWtlU2ltcGxlQ29sb3IoOTUsIDEwNywgMTgz
KSk7CisgICAgICAgIGJhclN0cm9rZUdyYWRpZW50LT5hZGRDb2xvclN0b3AoMC41LCBtYWtlU2lt
cGxlQ29sb3IoNjYsIDEwNiwgMTc0LCAyNDApKTsKKyAgICAgICAgYmFyU3Ryb2tlR3JhZGllbnQt
PmFkZENvbG9yU3RvcCgxLjAsIG1ha2VTaW1wbGVDb2xvcigzOCwgMTA0LCAxNjYpKTsKICAgICAg
ICAgY29udGV4dC5zZXRTdHJva2VHcmFkaWVudChXVEZNb3ZlKGJhclN0cm9rZUdyYWRpZW50KSk7
CiAKICAgICAgICAgUGF0aCBiYXJQYXRoOwpAQCAtMTU2OCwxMCArMTU2MywxMCBAQCBDb2xvciBS
ZW5kZXJUaGVtZUlPUzo6c3lzdGVtQ29sb3IoQ1NTVmFsCiBjb25zdCBDR1NpemUgYXR0YWNobWVu
dFNpemUgPSB7IDE2MCwgMTE5IH07CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudEJvcmRlclJh
ZGl1cyA9IDE2Owotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRCb3JkZXJDb2xvcigpIHsgcmV0dXJu
IENvbG9yKDIwNCwgMjA0LCAyMDQpOyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVu
dEJvcmRlckNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDIwNCwgMjA0LCAyMDQpOwogc3RhdGljIENH
RmxvYXQgYXR0YWNobWVudEJvcmRlclRoaWNrbmVzcyA9IDE7CiAKLXN0YXRpYyBDb2xvciBhdHRh
Y2htZW50UHJvZ3Jlc3NDb2xvcigpIHsgcmV0dXJuIENvbG9yKDIyMiwgMjIyLCAyMjIpOyB9Citj
b25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVudFByb2dyZXNzQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMjIyLCAyMjIsIDIyMik7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQcm9ncmVzc0Jv
cmRlclRoaWNrbmVzcyA9IDM7CiAKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFByb2dyZXNzU2l6
ZSA9IDM2OwpAQCAtMTg3MCw4ICsxODY1LDggQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50
UHJvZ3Jlc3MoR3JhcAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZXIoY29udGV4
dCk7CiAKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRhY2htZW50UHJvZ3Jlc3NC
b3JkZXJUaGlja25lc3MpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0YWNobWVudFBy
b2dyZXNzQ29sb3IoKSk7Ci0gICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYXR0YWNobWVudFByb2dy
ZXNzQ29sb3IoKSk7CisgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihhdHRhY2htZW50UHJvZ3Jl
c3NDb2xvcik7CisgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoYXR0YWNobWVudFByb2dyZXNzQ29s
b3IpOwogICAgIGNvbnRleHQuc3Ryb2tlRWxsaXBzZShpbmZvLnByb2dyZXNzUmVjdCk7CiAKICAg
ICBGbG9hdFBvaW50IGNlbnRlciA9IGluZm8ucHJvZ3Jlc3NSZWN0LmNlbnRlcigpOwpAQCAtMTg5
Niw3ICsxODkxLDcgQEAgc3RhdGljIFBhdGggYXR0YWNobWVudEJvcmRlclBhdGgoUmVuZGVyQQog
CiBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBQYXRoJiBib3JkZXJQYXRoKQogewotICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0
YWNobWVudEJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0YWNo
bWVudEJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhhdHRhY2ht
ZW50Qm9yZGVyVGhpY2tuZXNzKTsKICAgICBjb250ZXh0LnN0cm9rZVBhdGgoYm9yZGVyUGF0aCk7
CiB9CkBAIC0yMDI0LDcgKzIwMTksNyBAQCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFN5c3Rl
bVByZXZpZXdCCiAgICAgLy8gRHJhdyBhIGRyb3Agc2hhZG93IGFyb3VuZCB0aGUgY2lyY2xlLgog
ICAgIC8vIFVzZSB0aGUgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNhbGN1
bGF0ZXMgdGhlIGJsdXIgcmFkaXVzIGluIGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVyIHRo
YW4gc2NyZWVuIHNwYWNlLgotICAgIENvbG9yIHNoYWRvd0NvbG9yID0gQ29sb3IgeyAwLmYsIDAu
ZiwgMC5mLCAwLjFmIH07CisgICAgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMoMC5mLCAwLmYsIDAuZiwgMC4xZik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNo
YWRvdyhGbG9hdFNpemUgeyB9LCAxNiwgc2hhZG93Q29sb3IpOwogCiAgICAgLy8gVGhlIGNpcmNs
ZSBtdXN0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCB2YWx1ZSBvZiAxIGZvciB0aGUgc2hhZG93IGNv
bG9yIHRvIGFwcGVhci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTY0OSw4ICsxNjQ5LDggQEAgYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIH07CiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQoKS5maWxsUGF0aChQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2ludHMoYXJyb3cy
KSk7CiAKLSAgICBDb2xvciBsZWZ0U2VwYXJhdG9yQ29sb3IoMCwgMCwgMCwgNDApOwotICAgIENv
bG9yIHJpZ2h0U2VwYXJhdG9yQ29sb3IoMjU1LCAyNTUsIDI1NSwgNDApOworICAgIGNvbnN0ZXhw
ciBhdXRvIGxlZnRTZXBhcmF0b3JDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCA0MCk7
CisgICAgY29uc3RleHByIGF1dG8gcmlnaHRTZXBhcmF0b3JDb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigyNTUsIDI1NSwgMjU1LCA0MCk7CiAKICAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0
b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBiZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPwogICAgIGlu
dCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8vIERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2luY2Ug
aXQgbG9va3MgbmljZXIgaWYgaXQgc3RheXMgdGhpbi4KQEAgLTI0NzIsOCArMjQ3Miw4IEBAIGNv
bnN0IENHRmxvYXQgYXR0YWNobWVudEljb25TZWxlY3Rpb25Cb3IKIGNvbnN0IENHRmxvYXQgYXR0
YWNobWVudEljb25CYWNrZ3JvdW5kUmFkaXVzID0gMzsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVu
dEljb25Ub1RpdGxlTWFyZ2luID0gMjsKIAotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRJY29uQmFj
a2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMzApOyB9Ci1zdGF0aWMgQ29s
b3IgYXR0YWNobWVudEljb25Cb3JkZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAy
NTUsIDEyNSk7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBhdHRhY2htZW50SWNvbkJhY2tncm91
bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAzMCk7Citjb25zdGV4cHIgU2ltcGxl
Q29sb3IgYXR0YWNobWVudEljb25Cb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDI1
NSwgMjU1LCAxMjUpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZUZvbnRTaXplID0g
MTI7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZUJhY2tncm91bmRSYWRpdXMgPSAzOwpA
QCAtMjQ4MSwyMyArMjQ4MSwyMyBAQCBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZUJhY2tn
cm91bmRQCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRUaXRsZU1heGltdW1XaWR0aCA9IDEwMCAt
IChhdHRhY2htZW50VGl0bGVCYWNrZ3JvdW5kUGFkZGluZyAqIDIpOwogY29uc3QgQ0ZJbmRleCBh
dHRhY2htZW50VGl0bGVNYXhpbXVtTGluZUNvdW50ID0gMjsKIAotc3RhdGljIENvbG9yIGF0dGFj
aG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMjA0LCAy
MDQsIDIwNCwgMjU1KTsgfQotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlVGV4
dENvbG9yKCkgeyByZXR1cm4gQ29sb3IoMTAwLCAxMDAsIDEwMCwgMjU1KTsgfQorY29uc3RleHBy
IFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlQmFja2dyb3VuZENvbG9yID0gbWFr
ZVNpbXBsZUNvbG9yKDIwNCwgMjA0LCAyMDQsIDI1NSk7Citjb25zdGV4cHIgU2ltcGxlQ29sb3Ig
YXR0YWNobWVudFRpdGxlSW5hY3RpdmVUZXh0Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMTAwLCAx
MDAsIDEwMCwgMjU1KTsKIAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50U3VidGl0bGVGb250U2l6
ZSA9IDEwOwogY29uc3QgaW50IGF0dGFjaG1lbnRTdWJ0aXRsZVdpZHRoSW5jcmVtZW50ID0gMTA7
Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFN1YnRpdGxlVGV4dENvbG9yKCkgeyByZXR1cm4gQ29s
b3IoODIsIDE0NSwgMjE0LCAyNTUpOyB9Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgYXR0YWNobWVu
dFN1YnRpdGxlVGV4dENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDgyLCAxNDUsIDIxNCwgMjU1KTsK
IAogY29uc3QgQ0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJXaWR0aCA9IDMwOwogY29uc3Qg
Q0dGbG9hdCBhdHRhY2htZW50UHJvZ3Jlc3NCYXJIZWlnaHQgPSA1OwogY29uc3QgQ0dGbG9hdCBh
dHRhY2htZW50UHJvZ3Jlc3NCYXJPZmZzZXQgPSAtOTsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVu
dFByb2dyZXNzQmFyQm9yZGVyV2lkdGggPSAxOwotc3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9n
cmVzc0JhckJhY2tncm91bmRDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDg5KTsgfQot
c3RhdGljIENvbG9yIGF0dGFjaG1lbnRQcm9ncmVzc0JhckZpbGxDb2xvcigpIHsgcmV0dXJuIENv
bG9yKENvbG9yOjp3aGl0ZSk7IH0KLXN0YXRpYyBDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJC
b3JkZXJDb2xvcigpIHsgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDEyOCk7IH0KK2NvbnN0ZXhwciBT
aW1wbGVDb2xvciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2lt
cGxlQ29sb3IoMCwgMCwgMCwgODkpOworY29uc3RleHByIFNpbXBsZUNvbG9yIGF0dGFjaG1lbnRQ
cm9ncmVzc0JhckZpbGxDb2xvciA9IENvbG9yOjp3aGl0ZTsKK2NvbnN0ZXhwciBTaW1wbGVDb2xv
ciBhdHRhY2htZW50UHJvZ3Jlc3NCYXJCb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAw
LCAwLCAxMjgpOwogCiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlclJh
ZGl1cyA9IDU7Ci1zdGF0aWMgQ29sb3IgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyQ29sb3Io
KSB7IHJldHVybiBDb2xvcigwLCAwLCAwLCA1Nik7IH0KK2NvbnN0ZXhwciBTaW1wbGVDb2xvciBh
dHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAw
LCA1Nik7CiBjb25zdCBDR0Zsb2F0IGF0dGFjaG1lbnRQbGFjZWhvbGRlckJvcmRlcldpZHRoID0g
MjsKIGNvbnN0IENHRmxvYXQgYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyRGFzaExlbmd0aCA9
IDY7CiAKQEAgLTI1NDEsNyArMjU0MSw3IEBAIHN0YXRpYyBDb2xvciB0aXRsZVRleHRDb2xvckZv
ckF0dGFjaG1lbnQKICAgICAgICAgaWYgKGF0dGFjaG1lbnQuZnJhbWUoKS5zZWxlY3Rpb24oKS5p
c0ZvY3VzZWRBbmRBY3RpdmUoKSkKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3IgYWx0ZXJuYXRlU2VsZWN0ZWRDb250cm9sVGV4dENvbG9yXSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGF0dGFjaG1lbnRUaXRsZUluYWN0aXZlVGV4dENv
bG9yKCk7CisgICAgICAgICAgICByZXN1bHQgPSBhdHRhY2htZW50VGl0bGVJbmFjdGl2ZVRleHRD
b2xvcjsKICAgICB9CiAKICAgICByZXR1cm4gYXR0YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKHJlc3VsdCk7CkBAIC0yNjQ3LDcgKzI2NDcsNyBAQCB2b2lkIEF0dGFj
aG1lbnRMYXlvdXQ6OmxheU91dFN1YnRpdGxlKGNvCiAgICAgaWYgKHN1YnRpdGxlVGV4dC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbG9yIHN1YnRpdGxlQ29sb3IgPSBhdHRh
Y2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudFN1YnRp
dGxlVGV4dENvbG9yKCkpOworICAgIENvbG9yIHN1YnRpdGxlQ29sb3IgPSBhdHRhY2htZW50LnN0
eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudFN1YnRpdGxlVGV4dENv
bG9yKTsKICAgICBDRlN0cmluZ1JlZiBsYW5ndWFnZSA9IDA7IC8vIEJ5IG5vdCBzcGVjaWZ5aW5n
IGEgbGFuZ3VhZ2Ugd2UgdXNlIHRoZSBzeXN0ZW0gbGFuZ3VhZ2UuCiAgICAgUmV0YWluUHRyPENU
Rm9udFJlZj4gZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlVUlGb250Rm9yTGFuZ3VhZ2Uoa0NU
Rm9udFVJRm9udFN5c3RlbSwgYXR0YWNobWVudFN1YnRpdGxlRm9udFNpemUsIGxhbmd1YWdlKSk7
CiAgICAgTlNEaWN0aW9uYXJ5ICp0ZXh0QXR0cmlidXRlcyA9IEB7CkBAIC0yNzIxLDcgKzI3MjEs
NyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRJY29uQmFja2dyb3VuCiAgICAgaWYgKHBh
aW50Qm9yZGVyKQogICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbmZsYXRlKC1hdHRhY2htZW50SWNv
blNlbGVjdGlvbkJvcmRlclRoaWNrbmVzcyk7CiAKLSAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3Ig
PSBhdHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVu
dEljb25CYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gYXR0
YWNobWVudC5zdHlsZSgpLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGF0dGFjaG1lbnRJY29u
QmFja2dyb3VuZENvbG9yKTsKICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5k
ZWRSZWN0KGJhY2tncm91bmRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaShhdHRhY2htZW50
SWNvbkJhY2tncm91bmRSYWRpdXMpKSwgYmFja2dyb3VuZENvbG9yKTsKIAogICAgIGlmIChwYWlu
dEJvcmRlcikgewpAQCAtMjczMiw3ICsyNzMyLDcgQEAgc3RhdGljIHZvaWQgcGFpbnRBdHRhY2ht
ZW50SWNvbkJhY2tncm91bgogICAgICAgICBQYXRoIGJvcmRlclBhdGg7CiAgICAgICAgIGJvcmRl
clBhdGguYWRkUm91bmRlZFJlY3QoYm9yZGVyUmVjdCwgaWNvbkJhY2tncm91bmRSYWRpdXNTaXpl
KTsKIAotICAgICAgICBDb2xvciBib3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xv
ckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKCkpOworICAg
ICAgICBDb2xvciBib3JkZXJDb2xvciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlp
bmdDb2xvckZpbHRlcihhdHRhY2htZW50SWNvbkJvcmRlckNvbG9yKTsKICAgICAgICAgY29udGV4
dC5zZXRTdHJva2VDb2xvcihib3JkZXJDb2xvcik7CiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tl
VGhpY2tuZXNzKGF0dGFjaG1lbnRJY29uU2VsZWN0aW9uQm9yZGVyVGhpY2tuZXNzKTsKICAgICAg
ICAgY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgpOwpAQCAtMjgzMCw3ICsyODMwLDcgQEAg
c3RhdGljIHZvaWQgcGFpbnRBdHRhY2htZW50VGl0bGVCYWNrZ3JvdQogICAgICAgICBiYWNrZ3Jv
dW5kQ29sb3IgPSBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGFsdGVybmF0ZVNlbGVjdGVkQ29u
dHJvbENvbG9yXSk7CiAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
ICAgIH0gZWxzZQotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBhdHRhY2htZW50VGl0bGVJbmFj
dGl2ZUJhY2tncm91bmRDb2xvcigpOworICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBhdHRhY2ht
ZW50VGl0bGVJbmFjdGl2ZUJhY2tncm91bmRDb2xvcjsKIAogICAgIGJhY2tncm91bmRDb2xvciA9
IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihiYWNrZ3JvdW5k
Q29sb3IpOwogICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGJhY2tncm91bmRDb2xvcik7CkBAIC0y
ODc1LDcgKzI4NzUsNyBAQCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQcm9ncmVzcyhjb25z
CiAgICAgYmFja2dyb3VuZFJlY3QuaW5mbGF0ZSgtYXR0YWNobWVudFByb2dyZXNzQmFyQm9yZGVy
V2lkdGggLyAyKTsKIAogICAgIEZsb2F0Um91bmRlZFJlY3QgYmFja2dyb3VuZFJvdW5kZWRSZWN0
KGJhY2tncm91bmRSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaShiYWNrZ3JvdW5kUmVjdC5o
ZWlnaHQoKSAvIDIpKTsKLSAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChiYWNrZ3JvdW5kUm91
bmRlZFJlY3QsIGF0dGFjaG1lbnRQcm9ncmVzc0JhckJhY2tncm91bmRDb2xvcigpKTsKKyAgICBj
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChiYWNrZ3JvdW5kUm91bmRlZFJlY3QsIGF0dGFjaG1lbnRQ
cm9ncmVzc0JhckJhY2tncm91bmRDb2xvcik7CiAKICAgICB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgY2xpcFNhdmVyKGNvbnRleHQpOwpAQCAtMjg4NSwxMyArMjg4NSwxMyBA
QCBzdGF0aWMgdm9pZCBwYWludEF0dGFjaG1lbnRQcm9ncmVzcyhjb25zCiAgICAgICAgIHByb2dy
ZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1JlY3Qud2lkdGgoKSAqIHByb2dyZXNzKTsKICAgICAg
ICAgcHJvZ3Jlc3NSZWN0ID0gZW5jbG9zZVJlY3RUb0RldmljZVBpeGVscyhwcm9ncmVzc1JlY3Qs
IGF0dGFjaG1lbnQuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKIAotICAgICAgICBj
b250ZXh0LmZpbGxSZWN0KHByb2dyZXNzUmVjdCwgYXR0YWNobWVudFByb2dyZXNzQmFyRmlsbENv
bG9yKCkpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHByb2dyZXNzUmVjdCwgYXR0YWNobWVu
dFByb2dyZXNzQmFyRmlsbENvbG9yKTsKICAgICB9CiAKICAgICBQYXRoIGJvcmRlclBhdGg7CiAg
ICAgZmxvYXQgYm9yZGVyUmFkaXVzID0gYm9yZGVyUmVjdC5oZWlnaHQoKSAvIDI7CiAgICAgYm9y
ZGVyUGF0aC5hZGRSb3VuZGVkUmVjdChib3JkZXJSZWN0LCBGbG9hdFNpemUoYm9yZGVyUmFkaXVz
LCBib3JkZXJSYWRpdXMpKTsKLSAgICBjb250ZXh0LnNldFN0cm9rZUNvbG9yKGF0dGFjaG1lbnRQ
cm9ncmVzc0JhckJvcmRlckNvbG9yKCkpOworICAgIGNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoYXR0
YWNobWVudFByb2dyZXNzQmFyQm9yZGVyQ29sb3IpOwogICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhp
Y2tuZXNzKGF0dGFjaG1lbnRQcm9ncmVzc0JhckJvcmRlcldpZHRoKTsKICAgICBjb250ZXh0LnN0
cm9rZVBhdGgoYm9yZGVyUGF0aCk7CiB9CkBAIC0yOTAxLDcgKzI5MDEsNyBAQCBzdGF0aWMgdm9p
ZCBwYWludEF0dGFjaG1lbnRQbGFjZWhvbGRlckJvCiAgICAgUGF0aCBib3JkZXJQYXRoOwogICAg
IGJvcmRlclBhdGguYWRkUm91bmRlZFJlY3QobGF5b3V0LmF0dGFjaG1lbnRSZWN0LCBGbG9hdFNp
emUoYXR0YWNobWVudFBsYWNlaG9sZGVyQm9yZGVyUmFkaXVzLCBhdHRhY2htZW50UGxhY2Vob2xk
ZXJCb3JkZXJSYWRpdXMpKTsKIAotICAgIENvbG9yIHBsYWNlaG9sZGVyQm9yZGVyQ29sb3IgPSBh
dHRhY2htZW50LnN0eWxlKCkuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYXR0YWNobWVudFBs
YWNlaG9sZGVyQm9yZGVyQ29sb3IoKSk7CisgICAgQ29sb3IgcGxhY2Vob2xkZXJCb3JkZXJDb2xv
ciA9IGF0dGFjaG1lbnQuc3R5bGUoKS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihhdHRhY2ht
ZW50UGxhY2Vob2xkZXJCb3JkZXJDb2xvcik7CiAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihw
bGFjZWhvbGRlckJvcmRlckNvbG9yKTsKICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhh
dHRhY2htZW50UGxhY2Vob2xkZXJCb3JkZXJXaWR0aCk7CiAgICAgY29udGV4dC5zZXRTdHJva2VT
dHlsZShEYXNoZWRTdHJva2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVXaW4uY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsMTkgKzI4OCwx
OSBAQCBib29sIFJlbmRlclRoZW1lV2luOjpzdXBwb3J0c0hvdmVyKGNvbnN0CiBDb2xvciBSZW5k
ZXJUaGVtZVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9u
U2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewogICAgIENPTE9SUkVGIGNvbG9yID0g
R2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUKTsKLSAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVl
KGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CisgICAgcmV0dXJu
IG1ha2VTaW1wbGVDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRC
VmFsdWUoY29sb3IpKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVXaW46OnBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdAogewogICAgIC8vIFRoaXMgY29sb3IgbWF0Y2hlcyBGaXJlZm94LgotICAgIHJldHVy
biBDb2xvcigxNzYsIDE3NiwgMTc2KTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKDE3Niwg
MTc2LCAxNzYpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dAogewogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUVEVY
VCk7Ci0gICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciks
IEdldEJWYWx1ZShjb2xvcikpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoR2V0UlZhbHVl
KGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSk7CiB9CiAKIENvbG9y
IFJlbmRlclRoZW1lV2luOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdApAQCAtMTAwOSw3
ICsxMDA5LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVXaW46OnN5c3RlbUNvbG9yKENTU1ZhbAogICAg
ICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQsIG9wdGlvbnMp
OwogCiAgICAgQ09MT1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKLSAg
ICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZh
bHVlKGNvbG9yKSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihHZXRSVmFsdWUoY29sb3Ip
LCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpKTsKIH0KIAogI2lmIEVOQUJMRShW
SURFTykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVu
Y3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgcGFpbnRGbG93KGNvbnN0IFJlbmRlckJsb2NrRmxv
dyYgZmwKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBkZWJ1Z1NoYWRvdyA9IG51
bGxwdHI7CiAgICAgaWYgKGZsb3cuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3Jk
ZXJzRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRlYnVnU2hhZG93ID0gbWFrZVVuaXF1ZTxTaGFkb3dE
YXRhPihJbnRQb2ludCgwLCAwKSwgMTAsIDIwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBD
b2xvcigwLCAyNTUsIDAsIDIwMCkpOworICAgICAgICBkZWJ1Z1NoYWRvdyA9IG1ha2VVbmlxdWU8
U2hhZG93RGF0YT4oSW50UG9pbnQoMCwgMCksIDEwLCAyMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
dHJ1ZSwgbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCwgMjAwKSk7CiAgICAgICAgIHRleHRQYWlu
dGVyLnNldFNoYWRvdyhkZWJ1Z1NoYWRvdy5nZXQoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNw
cAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCB2
b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWludEluZm8mCiAKICAgICBpbmZvLmNvbnRl
eHQoKS5zZXRTdHJva2VUaGlja25lc3MoMS4wZik7CiAgICAgaW5mby5jb250ZXh0KCkuc2V0U3Ry
b2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9y
KENvbG9yKDAsIDAsIDI1NSkpOworICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1h
a2VTaW1wbGVDb2xvcigwLCAwLCAyNTUpKTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5l
KGFkanVzdGVkUGFpbnRPZmZzZXQsIEludFBvaW50KGFkanVzdGVkUGFpbnRPZmZzZXQueCgpICsg
cGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkpKTsKICAg
ICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSArIHBpeGVsU25hcHBlZE9mZnNldFdpZHRoKCksIGFkanVzdGVkUGFpbnRPZmZzZXQueSgpKSwg
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0
aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIHBpeGVsU25hcHBlZE9mZnNldEhlaWdodCgp
KSk7CkBAIC0xMjgsMTMgKzEyOCwxMyBAQCB2b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQ
YWludEluZm8mCiAKICAgICBpbnQgdG9wU3RhcnQgPSBwYWRkaW5nVG9wKCk7CiAKLSAgICBpbmZv
LmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDApKTsKKyAgICBpbmZvLmNv
bnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAg
ICBpbmZvLmNvbnRleHQoKS5kcmF3TGluZShJbnRQb2ludChhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSwgYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyB0b3BTdGFydCksIEludFBvaW50KGFkanVzdGVk
UGFpbnRPZmZzZXQueCgpICsgcGl4ZWxTbmFwcGVkT2Zmc2V0V2lkdGgoKSwgYWRqdXN0ZWRQYWlu
dE9mZnNldC55KCkgKyB0b3BTdGFydCkpOwogCiAgICAgaW50IGJhc2VsaW5lID0gcm91bmRUb0lu
dChiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExp
bmUpKTsKIAotICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwg
MCkpOworICAgIGluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1ha2VTaW1wbGVDb2xvcigy
NTUsIDAsIDApKTsKIAogICAgIGluZm8uY29udGV4dCgpLmRyYXdMaW5lKEludFBvaW50KGFkanVz
dGVkUGFpbnRPZmZzZXQueCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSwg
SW50UG9pbnQoYWRqdXN0ZWRQYWludE9mZnNldC54KCkgKyBwaXhlbFNuYXBwZWRPZmZzZXRXaWR0
aCgpLCBhZGp1c3RlZFBhaW50T2Zmc2V0LnkoKSArIGJhc2VsaW5lKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9u
IDI2MjM1MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjYsNyArMjAyNiw3IEBAIENvbG9yIFJlbmRlclN0eWxl
Ojpjb2xvclJlc29sdmluZ0N1cnJlbnQKICAgICBpZiAoaXNDdXJyZW50Q29sb3IocmVzdWx0KSkg
ewogICAgICAgICBhdXRvIGJvcmRlclN0eWxlID0gY29tcHV0ZUJvcmRlclN0eWxlKCk7CiAgICAg
ICAgIGlmICghdmlzaXRlZExpbmsgJiYgKGJvcmRlclN0eWxlID09IEJvcmRlclN0eWxlOjpJbnNl
dCB8fCBib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6T3V0c2V0IHx8IGJvcmRlclN0eWxlID09
IEJvcmRlclN0eWxlOjpSaWRnZSB8fCBib3JkZXJTdHlsZSA9PSBCb3JkZXJTdHlsZTo6R3Jvb3Zl
KSkKLSAgICAgICAgICAgIHJldHVybiBDb2xvcigyMzgsIDIzOCwgMjM4KTsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlU2ltcGxlQ29sb3IoMjM4LCAyMzgsIDIzOCk7CiAKICAgICAgICAgcmV0dXJu
IHZpc2l0ZWRMaW5rID8gdmlzaXRlZExpbmtDb2xvcigpIDogY29sb3IoKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNp
b24gMjYyMzUyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTksNyArMTMxOSw3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBDb2xvciYgdmlzaXRlZExpbmtTdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZUlu
aGVyaXRlZERhdGEtPnZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3I7IH0KICAgICB2b2lkIHNldEhhc0V4
cGxpY2l0bHlTZXRTdHJva2VDb2xvcihib29sIHYpIHsgU0VUX1ZBUihtX3JhcmVJbmhlcml0ZWRE
YXRhLCBoYXNTZXRTdHJva2VDb2xvciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHYpKTsgfQogICAg
IGJvb2wgaGFzRXhwbGljaXRseVNldFN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
SW5oZXJpdGVkRGF0YS0+aGFzU2V0U3Ryb2tlQ29sb3I7IH07Ci0gICAgc3RhdGljIENvbG9yIGlu
aXRpYWxTdHJva2VDb2xvcigpIHsgcmV0dXJuIENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7IH0K
KyAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbFN0cm9rZUNvbG9yKCkgeyByZXR1cm4gQ29sb3I6OnRy
YW5zcGFyZW50OyB9CiAgICAgQ29sb3IgY29tcHV0ZWRTdHJva2VDb2xvcigpIGNvbnN0OwogCiAg
ICAgZmxvYXQgc3Ryb2tlTWl0ZXJMaW1pdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZUluaGVyaXRl
ZERhdGEtPm1pdGVyTGltaXQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9TVkdSZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9TVkdSZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3R5bGUvU1ZHUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzMsMTAgKzczLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgU3RyaW5nIGluaXRpYWxTdHJva2VQ
YWludFVyaSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CiAgICAgc3RhdGljIFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4gaW5pdGlhbFN0cm9rZURhc2hBcnJheSgpIHsgcmV0dXJuIHsgfTsgfQogICAgIHN0
YXRpYyBmbG9hdCBpbml0aWFsU3RvcE9wYWNpdHkoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGlj
IENvbG9yIGluaXRpYWxTdG9wQ29sb3IoKSB7IHJldHVybiBDb2xvcigwLCAwLCAwKTsgfQorICAg
IHN0YXRpYyBDb2xvciBpbml0aWFsU3RvcENvbG9yKCkgeyByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDAsIDAsIDApOyB9CiAgICAgc3RhdGljIGZsb2F0IGluaXRpYWxGbG9vZE9wYWNpdHkoKSB7IHJl
dHVybiAxOyB9Ci0gICAgc3RhdGljIENvbG9yIGluaXRpYWxGbG9vZENvbG9yKCkgeyByZXR1cm4g
Q29sb3IoMCwgMCwgMCk7IH0KLSAgICBzdGF0aWMgQ29sb3IgaW5pdGlhbExpZ2h0aW5nQ29sb3Io
KSB7IHJldHVybiBDb2xvcigyNTUsIDI1NSwgMjU1KTsgfQorICAgIHN0YXRpYyBDb2xvciBpbml0
aWFsRmxvb2RDb2xvcigpIHsgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwKTsgfQorICAg
IHN0YXRpYyBDb2xvciBpbml0aWFsTGlnaHRpbmdDb2xvcigpIHsgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcigyNTUsIDI1NSwgMjU1KTsgfQogICAgIHN0YXRpYyBTaGFkb3dEYXRhKiBpbml0aWFsU2hh
ZG93KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHN0YXRpYyBTdHJpbmcgaW5pdGlhbE1hc2tl
clJlc291cmNlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KICAgICBzdGF0aWMgU3RyaW5nIGluaXRp
YWxNYXJrZXJTdGFydFJlc291cmNlKCkgeyByZXR1cm4gU3RyaW5nKCk7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyAr
ODgsNyBAQCBib29sIFNWR1N0b3BFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvCiBDb2xvciBT
VkdTdG9wRWxlbWVudDo6c3RvcENvbG9ySW5jbHVkaW5nT3BhY2l0eSgpIGNvbnN0CiB7CiAgICAg
aWYgKCFyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
LCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudDsKIAogICAgIGF1dG8m
IHN0eWxlID0gcmVuZGVyZXIoKS0+c3R5bGUoKTsKICAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxl
LnN2Z1N0eWxlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmlt
YXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1w
bC5oCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9T
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDcgKzkxLDcgQEAgcHVibGljOgogICAgICAgICBmbG9hdCBibHVlID0gQmFzZTo6YW5pbWF0
ZShwcm9ncmVzcywgcmVwZWF0Q291bnQsIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpLCBzaW1w
bGVUby5ibHVlQ29tcG9uZW50KCksIHNpbXBsZVRvQXRFbmRPZkR1cmF0aW9uLmJsdWVDb21wb25l
bnQoKSwgc2ltcGxlQW5pbWF0ZWQuYmx1ZUNvbXBvbmVudCgpKTsKICAgICAgICAgZmxvYXQgYWxw
aGEgPSBCYXNlOjphbmltYXRlKHByb2dyZXNzLCByZXBlYXRDb3VudCwgc2ltcGxlRnJvbS5hbHBo
YUNvbXBvbmVudCgpLCBzaW1wbGVUby5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVUb0F0RW5kT2ZE
dXJhdGlvbi5hbHBoYUNvbXBvbmVudCgpLCBzaW1wbGVBbmltYXRlZC5hbHBoYUNvbXBvbmVudCgp
KTsKICAgICAgICAgCi0gICAgICAgIGFuaW1hdGVkID0geyByb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKSB9Owor
ICAgICAgICBhbmltYXRlZCA9IG1ha2VTaW1wbGVDb2xvcihyb3VuZEFuZENsYW1wQ29sb3JDaGFu
bmVsKHJlZCksIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZ3JlZW4pLCByb3VuZEFuZENsYW1w
Q29sb3JDaGFubmVsKGJsdWUpLCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGFscGhhKSk7CiAg
ICAgfQogCiAgICAgT3B0aW9uYWw8ZmxvYXQ+IGNhbGN1bGF0ZURpc3RhbmNlKFNWR0VsZW1lbnQq
LCBjb25zdCBTdHJpbmcmIGZyb20sIGNvbnN0IFN0cmluZyYgdG8pIGNvbnN0IG92ZXJyaWRlCkBA
IC0xMjAsMTEgKzEyMCwxMSBAQCBwcml2YXRlOgogICAgICAgICBhdXRvIHNpbXBsZVRvID0gbV90
by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogCiAgICAgICAgIC8vIElnbm9yZXMgYW55IGFs
cGhhIGFuZCBzZXRzIGFscGhhIG9uIHJlc3VsdCB0byAxMDAlIG9wYXF1ZS4KLSAgICAgICAgbV90
byA9IHsKKyAgICAgICAgbV90byA9IG1ha2VTaW1wbGVDb2xvcigKICAgICAgICAgICAgIHJvdW5k
QW5kQ2xhbXBDb2xvckNoYW5uZWwoc2ltcGxlVG8ucmVkQ29tcG9uZW50KCkgKyBzaW1wbGVGcm9t
LnJlZENvbXBvbmVudCgpKSwKICAgICAgICAgICAgIHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwo
c2ltcGxlVG8uZ3JlZW5Db21wb25lbnQoKSArIHNpbXBsZUZyb20uZ3JlZW5Db21wb25lbnQoKSks
CiAgICAgICAgICAgICByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKHNpbXBsZVRvLmJsdWVDb21w
b25lbnQoKSArIHNpbXBsZUZyb20uYmx1ZUNvbXBvbmVudCgpKQotICAgICAgICB9OworICAgICAg
ICApOwogICAgIH0KIAogICAgIHN0YXRpYyBDb2xvciBjb2xvckZyb21TdHJpbmcoU1ZHRWxlbWVu
dCosIGNvbnN0IFN0cmluZyYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFn
ZU92ZXJsYXlDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dl
YkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsMTAgKzEwNSwxMCBAQCB2b2lkIE1vY2tQYWdlT3ZlcmxheUNsaWVudDo6ZHJhd1JlY3Qo
UGFnCiAgICAgRmxvYXRSZWN0IGluc2V0UmVjdCA9IG92ZXJsYXkuYm91bmRzKCk7CiAKICAgICBp
ZiAob3ZlcmxheS5vdmVybGF5VHlwZSgpID09IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9j
dW1lbnQpIHsKLSAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAyNTUsIDAp
KTsKKyAgICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMjU1
LCAwKSk7CiAgICAgICAgIGluc2V0UmVjdC5pbmZsYXRlKC01MCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgY29udGV4dC5zZXRTdHJva2VDb2xvcihDb2xvcigwLCAwLCAyNTUpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1KSk7CiAgICAg
ICAgIGluc2V0UmVjdC5pbmZsYXRlKC0yMCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL2NvY29hL1dlYlZpZXdWaXN1YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9jb2NvYS9XZWJWaWV3VmlzdWFsSWRl
bnRpZmljYXRpb25PdmVybGF5Lm1tCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL2NvY29hL1dlYlZpZXdWaXN1YWxJZGVudGlmaWNhdGlvbk92ZXJsYXkubW0JKHdv
cmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoV2Vi
VmlldzooUGxhdGZvcgogICAgIF9sYXllciA9IGFkb3B0TlMoW1tDQVRpbGVkTGF5ZXIgYWxsb2Nd
IGluaXRdKTsKICAgICBbX2xheWVyIHNldE5hbWU6QCJXZWJWaWV3VmlzdWFsSWRlbnRpZmljYXRp
b25PdmVybGF5Il07CiAgICAgW19sYXllciBzZXRGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIFtfdmll
dyBib3VuZHNdLnNpemUud2lkdGgsIFtfdmlldyBib3VuZHNdLnNpemUuaGVpZ2h0KV07Ci0gICAg
V2ViQ29yZTo6Q29sb3Igdmlld0NvbG9yID0gaXNEZXByZWNhdGVkID8gV2ViQ29yZTo6Q29sb3Io
MjU1LCAwLCAwLCAzMikgOiBXZWJDb3JlOjpDb2xvcigwLCAwLCAyNTUsIDMyKTsKKyAgICBXZWJD
b3JlOjpDb2xvciB2aWV3Q29sb3IgPSBpc0RlcHJlY2F0ZWQgPyBXZWJDb3JlOjptYWtlU2ltcGxl
Q29sb3IoMjU1LCAwLCAwLCAzMikgOiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMCwgMjU1
LCAzMik7CiAgICAgW19sYXllciBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2FjaGVkQ0dDb2xvcih2aWV3
Q29sb3IpXTsKICAgICBbX2xheWVyIHNldFpQb3NpdGlvbjo5OTldOwogICAgIFtfbGF5ZXIgc2V0
RGVsZWdhdGU6c2VsZl07CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAyMC0w
NS0zMCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQg
Q29sb3I6IFJlcGxhY2UgQ29sb3IgY29uc3RydWN0b3JzIHRha2luZyBudW1lcmljIHZhbHVlcyB3
aXRoIHR5cGUgc3BlY2lmaWMgZmFjdG9yeSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjU3NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2VzIGFsbCByZW1haW5pbmcgaW1wbGlj
aXQgYW5kIGV4cGxpY2l0IHVzZXMgb2YgdGhlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVt
ZXJpYworICAgICAgICB2YWx1ZXMgd2l0aCBleHBsaWNpdCBjYWxscyB0byBtYWtlU2ltcGxlQ29s
b3IvbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy9tYWtlRXh0ZW5kZWRDb2xvciwKKyAgICAgICAg
Z2l2aW5nIHVzIGEgY29uc2lzdGVudCB3YXkgdG8gY3JlYXRlIGNvbG9ycy4gQWxzbyBhZGRlcyB1
c2UgY29uc3RleHByIFNpbXBsZUNvbG9ycyB3aGVyZSBwb3NzaWJsZS4KKworICAgICAgICAqIFNo
YXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkcmF3SW5Db250ZXh0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRD
b2xvclRvV2ViQ29yZUNvbG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdGFwSGlnaGxpZ2h0
Q29sb3JGb3JGYXN0Q2xpY2s6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yQ2xpZW50
OjpzaG93UGFpbnRSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGFpbnRTbmFwc2hvdEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6RmluZElu
ZGljYXRvck92ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYktpdDo6aGln
aGxpZ2h0Q29sb3IpOiBEZWxldGVkLgorCiAyMDIwLTA1LTMwICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRGVwcmVjYXRlIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQko
cmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMTksNyArMzE5
LDcgQEAgdm9pZCBSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZHJhd0luQ29udAogCiAjaWZuZGVm
IE5ERUJVRwogICAgIGlmIChtX2lzT3BhcXVlKQotICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHNj
YWxlZExheWVyQm91bmRzLCBXZWJDb3JlOjpDb2xvcigyNTUsIDQ3LCAxNDYpKTsKKyAgICAgICAg
Y29udGV4dC5maWxsUmVjdChzY2FsZWRMYXllckJvdW5kcywgV2ViQ29yZTo6bWFrZVNpbXBsZUNv
bG9yKDI1NSwgNDcsIDE0NikpOwogI2VuZGlmCiAKICAgICBjb250ZXh0LnNjYWxlKG1fc2NhbGUp
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xv
ci5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0Q29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIEdfREVG
SU5FX0JPWEVEX1RZUEUoV2ViS2l0Q29sb3IsIHdlYmtpdF8KIAogY29uc3QgV2ViQ29yZTo6Q29s
b3Igd2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcihXZWJLaXRDb2xvciogY29sb3IpCiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OkNvbG9yKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksCisgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VT
aW1wbGVDb2xvckZyb21GbG9hdHMoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0
aWNfY2FzdDxmbG9hdD4oY29sb3ItPmdyZWVuKSwKICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvbG9yLT5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5hbHBoYSkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRW
aWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTQzMjgsNyArNDMyOCw3IEBAIC0gKHZvaWQpX2JlY29tZUZpcnN0UmVzcG9uZGVyV2l0aFNlbGVj
dGkKIC0gKFdlYkNvcmU6OkNvbG9yKV90YXBIaWdobGlnaHRDb2xvckZvckZhc3RDbGljazooQk9P
TClmb3JGYXN0Q2xpY2sKIHsKICAgICBBU1NFUlQoX3Nob3dEZWJ1Z1RhcEhpZ2hsaWdodHNGb3JG
YXN0Q2xpY2tpbmcpOwotICAgIHJldHVybiBmb3JGYXN0Q2xpY2sgPyBXZWJDb3JlOjpDb2xvcigw
LCAyMjUsIDAsIDEyNykgOiBXZWJDb3JlOjpDb2xvcigyMjUsIDAsIDAsIDEyNyk7CisgICAgcmV0
dXJuIGZvckZhc3RDbGljayA/IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyMjUsIDAsIDEy
NykgOiBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMjI1LCAwLCAwLCAxMjcpOwogfQogCiAtICh2
b2lkKV9zZXREb3VibGVUYXBHZXN0dXJlc0VuYWJsZWQ6KEJPT0wpZW5hYmxlZApJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzcsNyArMTc3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoYwog
ICAgIHBhaW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBwYWlu
dExheWVyLT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOwogICAgIHBhaW50TGF5ZXItPnNl
dFNpemUocmVjdC5zaXplKCkpOwotICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihD
b2xvcigxLjBmLCAwLjBmLCAwLjBmLCAwLjJmKSk7CisgICAgcGFpbnRMYXllci0+c2V0QmFja2dy
b3VuZENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC4wZiwgMC4wZiwgMC4y
ZikpOwogCiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1lcyhBbmltYXRlZFByb3Bl
cnR5T3BhY2l0eSk7CiAgICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFu
aW1hdGlvblZhbHVlPigwLCAxKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwOSw4ICs1MDksOCBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjpkcmF3UmVj
dChQYWdlT3ZlcmxhCiB7CiAgICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0gMTsKIAotICAgIENv
bG9yIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwotICAg
IENvbG9yIHNoYWRvd0NvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpOworICAgIGF1dG8gb3Zl
cmxheUJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4xZiwgMC4x
ZiwgMC4xZiwgMC4yNWYpOworICAgIGF1dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpOwogCiAgICAgSW50UmVjdCBib3JkZXJJ
bmZsYXRlZERpcnR5UmVjdCA9IGRpcnR5UmVjdDsKICAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVj
dC5pbmZsYXRlKGJvcmRlcldpZHRoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwMiw3
ICsyNDAyLDcgQEAgdm9pZCBXZWJQYWdlOjpwYWludFNuYXBzaG90QXRTaXplKGNvbnN0IAogCiAg
ICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFNlbGVjdGlvblJlY3RhbmdsZSkg
ewogICAgICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdGFuZ2xlID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uQm91bmRzKCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJva2VD
b2xvcihDb2xvcigweEZGLCAwLCAwKSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTdHJv
a2VDb2xvcihtYWtlU2ltcGxlQ29sb3IoMHhGRiwgMCwgMCkpOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQuc3Ryb2tlUmVjdChzZWxlY3Rpb25SZWN0YW5nbGUsIDEpOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvRmlu
ZENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9GaW5kQ29udHJvbGxlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTAgKzUzLDcgQEAgY29uc3QgaW50IHRvdGFsVmVydGljYWxNYXJnaW4gPSAxOwogCiBj
b25zdGV4cHIgT3B0aW9uU2V0PFRleHRJbmRpY2F0b3JPcHRpb24+IGZpbmRUZXh0SW5kaWNhdG9y
T3B0aW9ucyB7IFRleHRJbmRpY2F0b3JPcHRpb246OkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hl
c1NlbGVjdGlvbiwgVGV4dEluZGljYXRvck9wdGlvbjo6RG9Ob3RDbGlwVG9WaXNpYmxlUmVjdCB9
OwogCi1zdGF0aWMgQ29sb3IgaGlnaGxpZ2h0Q29sb3IoKQotewotICAgIHJldHVybiBDb2xvcigy
NTUsIDIyOCwgNTYsIDI1NSk7Ci19Citjb25zdGV4cHIgYXV0byBoaWdobGlnaHRDb2xvciA9IG1h
a2VTaW1wbGVDb2xvcigyNTUsIDIyOCwgNTYsIDI1NSk7CiAKIHZvaWQgRmluZEluZGljYXRvck92
ZXJsYXlDbGllbnRJT1M6OmRyYXdSZWN0KFBhZ2VPdmVybGF5JiBvdmVybGF5LCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKIHsKQEAgLTc5LDcgKzc2
LDcgQEAgdm9pZCBGaW5kSW5kaWNhdG9yT3ZlcmxheUNsaWVudElPUzo6ZHJhdwogICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMgPSBtX3RleHRJ
bmRpY2F0b3ItPnRleHRSZWN0c0luQm91bmRpbmdSZWN0Q29vcmRpbmF0ZXMoKTsKICAgICBWZWN0
b3I8UGF0aD4gcGF0aHMgPSBQYXRoVXRpbGl0aWVzOjpwYXRoc1dpdGhTaHJpbmtXcmFwcGVkUmVj
dHModGV4dFJlY3RzSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlcywgY29ybmVyUmFkaXVzKTsKIAot
ICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGhpZ2hsaWdodENvbG9yKCkpOworICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGhpZ2hsaWdodENvbG9yKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGgg
OiBwYXRocykKICAgICAgICAgY29udGV4dC5maWxsUGF0aChwYXRoKTsKIApJbmRleDogU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMzYxKQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAt
MDUtMzEgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVk
IENvbG9yOiBSZXBsYWNlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2YWx1ZXMg
d2l0aCB0eXBlIHNwZWNpZmljIGZhY3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlcyBhbGwgcmVtYWluaW5nIGltcGxp
Y2l0IGFuZCBleHBsaWNpdCB1c2VzIG9mIHRoZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51
bWVyaWMKKyAgICAgICAgdmFsdWVzIHdpdGggZXhwbGljaXQgY2FsbHMgdG8gbWFrZVNpbXBsZUNv
bG9yL21ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMvbWFrZUV4dGVuZGVkQ29sb3IsCisgICAgICAg
IGdpdmluZyB1cyBhIGNvbnNpc3RlbnQgd2F5IHRvIGNyZWF0ZSBjb2xvcnMuIEFsc28gYWRkZXMg
dXNlIGNvbnN0ZXhwciBTaW1wbGVDb2xvcnMgd2hlcmUgcG9zc2libGUuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW06CisKIDIwMjAtMDUtMjkgIEFuZHkgRXN0ZXMgIDxh
ZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtBcHBsZSBQYXldIFJlbW92ZSBjb25kaXRpb25h
bHMgZm9yIEVOQUJMRV9BUFBMRV9QQVlfU0VTU0lPTl9WKDN8NCkKSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW5kaWNhdGVMYXllci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkluZGljYXRlTGF5ZXIubW0JKHJldmlz
aW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW5kaWNh
dGVMYXllci5tbQkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCAtIChpZClpbml0V2l0
aFdlYlZpZXc6KFdlYlZpZXcgKil3ZWJWaWV3CiAgICAgc2VsZi5jb250ZW50c1NjYWxlID0gW1tf
d2ViVmlldyB3aW5kb3ddIHNjcmVlblNjYWxlXTsKIAogICAgIC8vIEJsdWUgaGlnaGxpZ2h0IGNv
bG9yLgotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb2xvcj4gaGlnaGxpZ2h0Q29sb3IoMTEx
LjBmIC8gMjU1LjBmLCAxNjguMGYgLyAyNTUuMGYsIDIyMC4wZiAvIDI1NS4wZiwgMC42NmYpOwor
ICAgIGNvbnN0ZXhwciBhdXRvIGhpZ2hsaWdodENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDExMSwg
MTY4LCAyMjAsIDE2OCk7CiAgICAgc2VsZi5iYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9y
KGhpZ2hsaWdodENvbG9yKTsKIAogICAgIHJldHVybiBzZWxmOwpJbmRleDogU291cmNlL1dlYktp
dExlZ2FjeS93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyMzUyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDUtMzEg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZGVkIENvbG9y
OiBSZXBsYWNlIENvbG9yIGNvbnN0cnVjdG9ycyB0YWtpbmcgbnVtZXJpYyB2YWx1ZXMgd2l0aCB0
eXBlIHNwZWNpZmljIGZhY3RvcnkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI1NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlcyBhbGwgcmVtYWluaW5nIGltcGxpY2l0IGFu
ZCBleHBsaWNpdCB1c2VzIG9mIHRoZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5nIG51bWVyaWMK
KyAgICAgICAgdmFsdWVzIHdpdGggZXhwbGljaXQgY2FsbHMgdG8gbWFrZVNpbXBsZUNvbG9yL21h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMvbWFrZUV4dGVuZGVkQ29sb3IsCisgICAgICAgIGdpdmlu
ZyB1cyBhIGNvbnNpc3RlbnQgd2F5IHRvIGNyZWF0ZSBjb2xvcnMuIEFsc28gYWRkZXMgdXNlIGNv
bnN0ZXhwciBTaW1wbGVDb2xvcnMgd2hlcmUgcG9zc2libGUuCisKKyAgICAgICAgKiBXZWJWaWV3
LmNwcDoKKyAgICAgICAgKGNvbXBvc2l0aW9uVG9VbmRlcmxpbmVzKToKKwogMjAyMC0wNS0xOSAg
RnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2lu
Q2Fpcm9dIEFTU0VSVChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIGZhaWxzIGluIH5Q
bGF0Zm9ybURpc3BsYXkoKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDI2MjM1MikKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Mjc0LDcgKzYyNzQsNyBAQCBzdGF0aWMgdm9pZCBjb21wb3NpdGlv
blRvVW5kZXJsaW5lcyhjb25zCiAgICAgICAgIHVuZGVybGluZXNbaV0uZW5kT2Zmc2V0ID0gY2xh
dXNlc1tpICsgMV07CiAgICAgICAgIEJZVEUgYXR0cmlidXRlID0gYXR0cmlidXRlc1tjbGF1c2Vz
W2ldXTsKICAgICAgICAgdW5kZXJsaW5lc1tpXS50aGljayA9IGF0dHJpYnV0ZSA9PSBBVFRSX1RB
UkdFVF9DT05WRVJURUQgfHwgYXR0cmlidXRlID09IEFUVFJfVEFSR0VUX05PVENPTlZFUlRFRDsK
LSAgICAgICAgdW5kZXJsaW5lc1tpXS5jb2xvciA9IENvbG9yKDAsMCwwKTsKKyAgICAgICAgdW5k
ZXJsaW5lc1tpXS5jb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwKTsKICAgICB9CiB9CiAK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2MjM1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI0IEBACisyMDIwLTA1LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBFeHRlbmRlZCBDb2xvcjogUmVwbGFjZSBDb2xvciBjb25zdHJ1Y3RvcnMgdGFraW5n
IG51bWVyaWMgdmFsdWVzIHdpdGggdHlwZSBzcGVjaWZpYyBmYWN0b3J5IGZ1bmN0aW9ucworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNTc2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZXMgYWxs
IHJlbWFpbmluZyBpbXBsaWNpdCBhbmQgZXhwbGljaXQgdXNlcyBvZiB0aGUgQ29sb3IgY29uc3Ry
dWN0b3JzIHRha2luZyBudW1lcmljCisgICAgICAgIHZhbHVlcyB3aXRoIGV4cGxpY2l0IGNhbGxz
IHRvIG1ha2VTaW1wbGVDb2xvci9tYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzL21ha2VFeHRlbmRl
ZENvbG9yLAorICAgICAgICBnaXZpbmcgdXMgYSBjb25zaXN0ZW50IHdheSB0byBjcmVhdGUgY29s
b3JzLiBBbHNvIGFkZGVzIHVzZSBjb25zdGV4cHIgU2ltcGxlQ29sb3JzIHdoZXJlIHBvc3NpYmxl
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0cy5jcHA6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9QREZTbmFwc2hvdC5tbToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvY29j
b2EvVGVzdFBERkRvY3VtZW50Lm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VGVzdFBERlBh
Z2U6OmNvbG9yQXRQb2ludCBjb25zdCk6CisKIDIwMjAtMDUtMzAgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIEV4dGVuZGVkIENvbG9yOiBBZGRpdGlvbmFsIGNvbG9y
IGNsZWFudXBzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NvbG9yVGVzdHMuY3BwCShyZXZpc2lvbiAyNjIzNTIpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfQmxhY2spCiAKIFRFU1QoQ29sb3IsIFJHQlRvSFNM
X1JlZCkKIHsKLSAgICBDb2xvciBjb2xvcigyNTUsIDAsIDApOworICAgIENvbG9yIGNvbG9yID0g
bWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCk7CiAKICAgICBhdXRvIFtodWUsIHNhdHVyYXRpb24s
IGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9yLnRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSk7CiAKQEAgLTgzLDcgKzgzLDcgQEAgVEVTVChDb2xvciwgUkdCVG9IU0xfUmVkKQogCiBU
RVNUKENvbG9yLCBSR0JUb0hTTF9HcmVlbikKIHsKLSAgICBDb2xvciBjb2xvcigwLCAyNTUsIDAp
OworICAgIENvbG9yIGNvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCk7CiAKICAgICBh
dXRvIFtodWUsIHNhdHVyYXRpb24sIGxpZ2h0bmVzcywgYWxwaGFdID0gc1JHQlRvSFNMKGNvbG9y
LnRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgVEVTVChDb2xv
ciwgUkdCVG9IU0xfR3JlZW4pCiAKIFRFU1QoQ29sb3IsIFJHQlRvSFNMX0JsdWUpCiB7Ci0gICAg
Q29sb3IgY29sb3IoMCwgMCwgMjU1KTsKKyAgICBDb2xvciBjb2xvciA9IG1ha2VTaW1wbGVDb2xv
cigwLCAwLCAyNTUpOwogCiAgICAgYXV0byBbaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhXSA9IHNSR0JUb0hTTChjb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwogCkBAIC0x
NzEsNyArMTcxLDcgQEAgVEVTVChDb2xvciwgVmFsaWRpdHkpCiAgICAgRVhQRUNUX0ZBTFNFKG90
aGVySW52YWxpZENvbG9yLmlzVmFsaWQoKSk7CiAgICAgRVhQRUNUX0ZBTFNFKG90aGVySW52YWxp
ZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICBDb2xvciB2YWxpZENvbG9yKDI1NSwgMCwgMCk7
CisgICAgQ29sb3IgdmFsaWRDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigyNTUsIDAsIDApOwogICAg
IEVYUEVDVF9UUlVFKHZhbGlkQ29sb3IuaXNWYWxpZCgpKTsKICAgICBFWFBFQ1RfRkFMU0UodmFs
aWRDb2xvci5pc0V4dGVuZGVkKCkpOwogCkBAIC0xNzksNyArMTc5LDcgQEAgVEVTVChDb2xvciwg
VmFsaWRpdHkpCiAgICAgRVhQRUNUX1RSVUUob3RoZXJWYWxpZENvbG9yLmlzVmFsaWQoKSk7CiAg
ICAgRVhQRUNUX0ZBTFNFKG90aGVyVmFsaWRDb2xvci5pc0V4dGVuZGVkKCkpOwogCi0gICAgdmFs
aWRDb2xvciA9IENvbG9yKDEsIDIsIDMsIDQpOworICAgIHZhbGlkQ29sb3IgPSBtYWtlU2ltcGxl
Q29sb3IoMSwgMiwgMywgNCk7CiAgICAgRVhQRUNUX1RSVUUodmFsaWRDb2xvci5pc1ZhbGlkKCkp
OwogICAgIEVYUEVDVF9GQUxTRSh2YWxpZENvbG9yLmlzRXh0ZW5kZWQoKSk7CiAgICAgYXV0byBz
aW1wbGVWYWxpZENvbG9yID0gdmFsaWRDb2xvci50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3JUZXN0
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4
dGVuZGVkQ29sb3JUZXN0cy5jcHAJKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yVGVzdHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChFeHRl
bmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwg
MS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVk
Q29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAg
IEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBhdXRvIFtyLCBnLCBiLCBhbHBo
YV0gPSBjMS5hc0V4dGVuZGVkKCkuY29tcG9uZW50cygpOwpAQCAtNTEsNyArNTEsNyBAQCBURVNU
KEV4dGVuZGVkQ29sb3IsIENvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIENvcHlD
b25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAw
LjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9UUlVF
KGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihjMSk7CkBAIC02OSw3ICs2OSw3IEBA
IFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogCiBURVNUKEV4dGVuZGVkQ29s
b3IsIEFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29s
b3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEu
MCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICBFWFBFQ1Rf
VFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBjMTsKQEAgLTg4LDIwICs4
OCwyMCBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiBURVNUKEV4dGVuZGVkQ29s
b3IsIEVxdWFsaXR5KQogewogICAgIHsKLSAgICAgICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUs
IDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0
ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07
CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3Ig
YzIoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAg
Q29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7
CiAKICAgICAgICAgRVhQRUNUX0VRKGMxLCBjMik7CiAgICAgfQogCiAgICAgewotICAgICAgICBD
b2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAg
ICAgICBDb2xvciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRl
ZCgpKTsKIAotICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNl
OjpTUkdCKTsKKyAgICAgICAgQ29sb3IgYzIgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwg
MC4yNSwgMS4wLCBDb2xvclNwYWNlOjpTUkdCKSB9OwogICAgICAgICBFWFBFQ1RfVFJVRShjMS5p
c0V4dGVuZGVkKCkpOwogCiAgICAgICAgIEVYUEVDVF9ORShjMSwgYzIpOwpAQCAtMTExLDggKzEx
MSw4IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkpCiAgICAgaW50IGcgPSAxMjg7CiAg
ICAgaW50IGIgPSA2MzsKICAgICBpbnQgYSA9IDEyNzsKLSAgICBDb2xvciByZ2IxKHIgLyAyNTUu
MCwgZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQik7Ci0g
ICAgQ29sb3IgcmdiMihyLCBnLCBiLCBhKTsKKyAgICBDb2xvciByZ2IxIHsgbWFrZUV4dGVuZGVk
Q29sb3IociAvIDI1NS4wLCBnIC8gMjU1LjAsIGIgLyAyNTUuMCwgYSAvIDI1NS4wLCBDb2xvclNw
YWNlOjpTUkdCKSB9OworICAgIENvbG9yIHJnYjIgPSBtYWtlU2ltcGxlQ29sb3IociwgZywgYiwg
YSk7CiAgICAgRVhQRUNUX05FKHJnYjEsIHJnYjIpOwogICAgIEVYUEVDVF9ORShyZ2IyLCByZ2Ix
KTsKIH0KQEAgLTEyMCwyMCArMTIwLDIwIEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgRXF1YWxpdHkp
CiBURVNUKEV4dGVuZGVkQ29sb3IsIEhhc2gpCiB7CiAgICAgewotICAgICAgICBDb2xvciBjMSgx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xv
ciBjMSB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6
OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAot
ICAgICAgICBDb2xvciBjMigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5
UDMpOworICAgICAgICBDb2xvciBjMiB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkp
OwogICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwg
Q29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICAgICAgQ29sb3IgYzEgeyBtYWtlRXh0ZW5kZWRD
b2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpIH07CiAgICAg
ICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKLSAgICAgICAgQ29sb3IgYzIoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQik7CisgICAgICAgIENvbG9yIGMyIHsg
bWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6U1JHQikg
fTsKICAgICAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgICAgICBFWFBF
Q1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwpAQCAtMTQzLDE0ICsxNDMsMTQgQEAgVEVTVChF
eHRlbmRlZENvbG9yLCBIYXNoKQogICAgIGludCBnID0gMTI4OwogICAgIGludCBiID0gNjM7CiAg
ICAgaW50IGEgPSAxMjc7Ci0gICAgQ29sb3IgcmdiMShyIC8gMjU1LjAsIGcgLyAyNTUuMCwgYiAv
IDI1NS4wLCBhIC8gMjU1LjAsIENvbG9yU3BhY2U6OlNSR0IpOwotICAgIENvbG9yIHJnYjIociwg
ZywgYiwgYSk7CisgICAgQ29sb3IgcmdiMSB7IG1ha2VFeHRlbmRlZENvbG9yKHIgLyAyNTUuMCwg
ZyAvIDI1NS4wLCBiIC8gMjU1LjAsIGEgLyAyNTUuMCwgQ29sb3JTcGFjZTo6U1JHQikgfTsKKyAg
ICBDb2xvciByZ2IyID0gbWFrZVNpbXBsZUNvbG9yKHIsIGcsIGIsIGEpOwogICAgIEVYUEVDVF9O
RShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOwogfQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIE1v
dmVDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xv
clNwYWNlOjpEaXNwbGF5UDMpOworICAgIENvbG9yIGMxIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4w
LCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9OwogICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMihXVEZNb3ZlKGMxKSk7CkBAIC0x
NzEsNyArMTcxLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAKIFRF
U1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAw
LjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSB7IG1h
a2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MykgfTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIg
PSBXVEZNb3ZlKGMxKTsKQEAgLTE5Myw3ICsxOTMsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1v
dmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRp
bmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENv
bG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3IqIGMxID0gbmV3IENvbG9yIHsgbWFrZUV4
dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKSB9
OwogICAgIEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0g
bmV3IENvbG9yKCpjMSk7CkBAIC0yMTksNyArMjE5LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBC
YXNpY1JlZmVyZW5jZUNvdW50aQogCiBDb2xvciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMx
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CisgICAgQ29sb3Ig
YzEgeyBtYWtlRXh0ZW5kZWRDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpE
aXNwbGF5UDMpIH07CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKICAgICBFWFBF
Q1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKIApAQCAtMjM4LDcgKzIzOCw3
IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgUmV0dXJuVmFsdWVzKQogVEVTVChFeHRlbmRlZENvbG9y
LCBQM0NvbnZlcnNpb25Ub1NSR0IpCiB7CiAgICAgewotICAgICAgICBDb2xvciBwM0NvbG9yKDEu
MCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOworICAgICAgICBDb2xv
ciBwM0NvbG9yIHsgbWFrZUV4dGVuZGVkQ29sb3IoMS4wLCAwLjUsIDAuMjUsIDAuNzUsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMykgfTsKICAgICAgICAgRVhQRUNUX1RSVUUocDNDb2xvci5pc0V4dGVu
ZGVkKCkpOwogCiAgICAgICAgIGF1dG8gc1JHQkNvbXBvbmVudHMgPSBwM0NvbG9yLnRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKQEAgLTI0OSw3ICsyNDksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3Is
IFAzQ29udmVyc2lvblRvU1JHQikKICAgICB9CiAKICAgICB7Ci0gICAgICAgIENvbG9yIGxpbmVh
ckNvbG9yKDEuMCwgMC41LCAwLjI1LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpOworICAg
ICAgICBDb2xvciBsaW5lYXJDb2xvciB7IG1ha2VFeHRlbmRlZENvbG9yKDEuMCwgMC41LCAwLjI1
LCAwLjc1LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIH07CiAgICAgICAgIEVYUEVDVF9UUlVFKGxp
bmVhckNvbG9yLmlzRXh0ZW5kZWQoKSk7CiAgICAgICAgIGF1dG8gc1JHQkNvbXBvbmVudHMgPSBs
aW5lYXJDb2xvci50b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChzUkdCQ29tcG9uZW50cy5jb21wb25lbnRzWzBdLCAx
LjBmKSk7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1BERlNu
YXBzaG90Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUERGU25hcHNob3QubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUERGU25hcHNob3QubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM1LDggKzM1LDYgQEAKICNpbXBvcnQgPFdlYktpdC9XS1BERkNvbmZpZ3VyYXRpb24uaD4KICNp
bXBvcnQgPFdlYktpdC9XS1dlYlZpZXdQcml2YXRlLmg+CiAKLXVzaW5nIFdlYkNvcmU6OkNvbG9y
OwotCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoUERGU25hcHNob3QsIEZ1bGxD
b250ZW50KQpAQCAtNjAsNyArNTgsNyBAQCBURVNUKFBERlNuYXBzaG90LCBGdWxsQ29udGVudCkK
ICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPnRleHQoKVs0XSwgJ28nKTsKIAogICAgICAgICAvLyBU
aGUgZW50aXJlIHBhZ2Ugc2hvdWxkIGJlIGdyZWVuLiBQaWNrIGEgcG9pbnQgaW4gdGhlIG1pZGRs
ZSB0byBjaGVjay4KLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwg
MzAwKSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29s
b3JBdFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAw
KSk7CiAKICAgICAgICAgZGlkVGFrZVNuYXBzaG90ID0gdHJ1ZTsKICAgICB9XTsKQEAgLTkxLDcg
Kzg5LDcgQEAgVEVTVChQREZTbmFwc2hvdCwgU3VicmVnaW9ucykKICAgICAgICAgRVhQRUNUX0VR
KHBhZ2UtPmNoYXJhY3RlckNvdW50KCksIDB1KTsKIAogICAgICAgICAvLyBUaGUgZW50aXJlIHBh
Z2Ugc2hvdWxkIGJlIGdyZWVuLiBQaWNrIGEgcG9pbnQgaW4gdGhlIG1pZGRsZSB0byBjaGVjay4K
LSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDIwMCwgMTUwKSA9PSBDb2xv
cigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDIw
MCwgMTUwKSA9PSBXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAKICAgICAg
ICAgZGlkVGFrZVNuYXBzaG90ID0gdHJ1ZTsKICAgICB9XTsKQEAgLTExMSwxMCArMTA5LDEwIEBA
IFRFU1QoUERGU25hcHNob3QsIFN1YnJlZ2lvbnMpCiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVj
dEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RNYWtlKDAsIDAsIDEyMDAsIDEyMDAp
KSk7CiAKICAgICAgICAgLy8gQSBwaXhlbCB0aGF0IHdhcyBpbiB0aGUgdmlldyBzaG91bGQgYmUg
Z3JlZW4uIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNoZWNrLgotICAgICAgICBFWFBF
Q1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IENvbG9yKDAsIDI1NSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoMjAwLCAxNTApID09IFdl
YkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKIAogICAgICAgICAvLyBBIHBpeGVs
IHRoYXQgd2FzIG91dHNpZGUgdGhlIHZpZXcgc2hvdWxkIGFsc28gYmUgZ3JlZW4gKHdlIGV4dGVu
ZCBiYWNrZ3JvdW5kIGNvbG9yIG91dCkuIFBpY2sgYSBwb2ludCBpbiB0aGUgbWlkZGxlIHRvIGNo
ZWNrLgotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoOTAwLCA3MDApID09
IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5jb2xvckF0UG9p
bnQoOTAwLCA3MDApID09IFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAyNTUsIDApKTsKIAog
ICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwogICAgIH1dOwpAQCAtMTQwLDIwICsxMzgs
MjAgQEAgVEVTVChQREZTbmFwc2hvdCwgT3ZlcjIwMEluY2hlcykKICAgICAgICAgYXV0byBwYWdl
ID0gZG9jdW1lbnQtPnBhZ2UoMCk7CiAgICAgICAgIEVYUEVDVF9ORShwYWdlLCBudWxscHRyKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFnZS0+Ym91bmRzKCksIENH
UmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUocGFnZS0+
Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigwLCAyNTUsIDApKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBXZWJDb3JlOjptYWtlU2lt
cGxlQ29sb3IoMCwgMjU1LCAwKSk7CiAgICAgICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJD
b3VudCgpLCA1dSk7CiAKICAgICAgICAgcGFnZSA9IGRvY3VtZW50LT5wYWdlKDEpOwogICAgICAg
ICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7CiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVjdEVx
dWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBDR1JlY3RNYWtlKDAsIDAsIDgwMCwgMTQ0MDApKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkgPT0gQ29s
b3IoMCwgMjU1LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0
MDAsIDMwMCkgPT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDAsIDI1NSwgMCkpOwogCiAgICAg
ICAgIEVYUEVDVF9FUShwYWdlLT5jaGFyYWN0ZXJDb3VudCgpLCAwdSk7CiAKICAgICAgICAgcGFn
ZSA9IGRvY3VtZW50LT5wYWdlKDIpOwogICAgICAgICBFWFBFQ1RfTkUocGFnZSwgbnVsbHB0cik7
CiAgICAgICAgIEVYUEVDVF9UUlVFKENHUmVjdEVxdWFsVG9SZWN0KHBhZ2UtPmJvdW5kcygpLCBD
R1JlY3RNYWtlKDAsIDAsIDgwMCwgNjAwKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShwYWdlLT5j
b2xvckF0UG9pbnQoNDAwLCAzMDApID09IENvbG9yKDAsIDI1NSwgMCkpOworICAgICAgICBFWFBF
Q1RfVFJVRShwYWdlLT5jb2xvckF0UG9pbnQoNDAwLCAzMDApID09IFdlYkNvcmU6Om1ha2VTaW1w
bGVDb2xvcigwLCAyNTUsIDApKTsKICAgICAgICAgRVhQRUNUX0VRKHBhZ2UtPmNoYXJhY3RlckNv
dW50KCksIDB1KTsKIAogICAgICAgICBkaWRUYWtlU25hcHNob3QgPSB0cnVlOwpAQCAtMTc4LDcg
KzE3Niw3IEBAIFRFU1QoUERGU25hcHNob3QsIExpbmtzKQogICAgICAgICBFWFBFQ1RfTkUocGFn
ZSwgbnVsbHB0cik7CiAKICAgICAgICAgRVhQRUNUX1RSVUUoQ0dSZWN0RXF1YWxUb1JlY3QocGFn
ZS0+Ym91bmRzKCksIENHUmVjdE1ha2UoMCwgMCwgODAwLCAxNDQwMCkpKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZS0+Y29sb3JBdFBvaW50KDQwMCwgMzAwKSA9PSBDb2xvcigyNTUsIDI1NSwg
MjU1KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2UtPmNvbG9yQXRQb2ludCg0MDAsIDMwMCkg
PT0gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKDI1NSwgMjU1LCAyNTUpKTsKIAogICAgICAgICBF
WFBFQ1RfRVEocGFnZS0+Y2hhcmFjdGVyQ291bnQoKSwgOHUpOwogICAgICAgICBFWFBFQ1RfRVEo
cGFnZS0+dGV4dCgpWzBdLCAnQycpOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9U
ZXN0UERGRG9jdW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9jb2Nv
YS9UZXN0UERGRG9jdW1lbnQubW0JKHJldmlzaW9uIDI2MjM1MikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvVGVzdFBERkRvY3VtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOCAr
MTQ0LDggQEAgV2ViQ29yZTo6Q29sb3IgVGVzdFBERlBhZ2U6OmNvbG9yQXRQb2ludAogICAgIGF1
dG8gYSA9IHBpeGVsW2kgKyAzXTsKIAogICAgIGlmICghYSkKLSAgICAgICAgcmV0dXJuIHsgMCwg
MCwgMCwgMCB9OwotICAgIHJldHVybiB7IHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1
NSAvIGEsIGEgfTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6Om1ha2VTaW1wbGVDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKHIgKiAyNTUgLyBh
LCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEpOwogfQogCiAvLyBEb2N1bWVudHMK
</data>

          </attachment>
      

    </bug>

</bugzilla>