<?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>167566</bug_id>
          
          <creation_ts>2017-01-29 16:44:31 -0800</creation_ts>
          <short_desc>Use ComplexTextController on all ports</short_desc>
          <delta_ts>2020-01-13 18:44:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>167954</dependson>
    
    <dependson>167833</dependson>
    
    <dependson>167922</dependson>
    
    <dependson>167927</dependson>
    
    <dependson>167956</dependson>
    
    <dependson>204884</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dr.khaled.hosny</cc>
    
    <cc>fred.wang</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1271157</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-29 16:44:31 -0800</bug_when>
    <thetext>Use ComplexTextController on all ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271158</commentid>
    <comment_count>1</comment_count>
      <attachid>300077</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-01-29 16:46:41 -0800</bug_when>
    <thetext>Created attachment 300077
WIP</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300077</attachid>
            <date>2017-01-29 16:46:41 -0800</date>
            <delta_ts>2017-01-29 16:46:41 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-167566-20170129164433.patch</filename>
            <type>text/plain</type>
            <size>204968</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjExMzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDEyMDBhZGJmMzFlNTg3ZGU3ZDcwMDBi
OTk3NjA0ZGU2ZjBkODQyNDIuLmIwMDJlOTZmMTdkOGMxZDNjMDJmNDU1NWU4MGYwNTUxMmIwOWVl
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTctMDEtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgQ29tcGxleFRleHRDb250cm9sbGVy
IG9uIGFsbCBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxNy0wMS0yOCAgV2Vuc29uIEhzaWVoICA8d2Vu
c29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBVU0UoQVBQTEVfSU5URVJOQUxf
U0RLKSBpbnN0ZWFkIG9mIHNwZWNpZmljIGhlYWRlcnMgd2hlbiBpbXBvcnRpbmcgZnJvbSBXZWJL
aXRBZGRpdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMmU1MDk3YzU0ZDc0NDNkN2ZmY2U2ZGRhNTZmM2Fk
NTM3ZjMzNzJlLi40ZjRlMThiZTliMTQxMTVlYzIzMTgyNWZhNTU2OGM4ZTcwMGJjZGVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTctMDEtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgQ29tcGxleFRleHRDb250cm9sbGVy
IG9uIGFsbCBwb3J0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NTY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjppbmRleEF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46
OnNldElzTm9uTW9ub3RvbmljKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmFkanVzdEdseXBoc0FuZEFkdmFuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OkNvbXBsZXhUZXh0UnVuKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRS
dW46OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0UnVuOjphc2RmKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6Q29tcGxleFRleHRSdW46OmluZGV4QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6aW5kZXhFbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6ZW5kT2Zmc2V0
QXQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Z2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6
Q29tcGxleFRleHRSdW46OmluaXRpYWxBZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmJhc2VBZHZhbmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpnbHlwaE9y
aWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaE9y
aWdpbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpub1N5bnRoZXNpemFibGVGZWF0dXJlc0ZvbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGU6OmRyYXdHbHlwaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFk
dmFuY2VzRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZs
b2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRM
YXlvdXREZWxldGVyOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBo
QnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlckFkdmFuY2U6OkdseXBoQnVm
ZmVyQWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OmFkdmFuY2VBdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJ1ZmZlcjo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpzaHJp
bmspOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhCdWZmZXI6OnN3YXApOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhCdWZmZXI6Om9mZnNldEF0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxl
eFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxl
eFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmdldEdseXBo
c0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRl
eHRSdW5zRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Nv
bXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cmVzZXRDb250cm9sQW5kU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2hhcGVBbmRQbGFjZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4
VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FzY2FkZTo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29u
dHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Vu
aXNjcmliZUNvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKwogMjAxNy0wMS0yOSAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsZSBsaW5lIGxheW91dDogUGVyZm9y
bWFuY2VUZXN0cy9MYXlvdXQvc2ltcGxlLWxpbmUtbGF5b3V0LWlubmVydGV4dC5odG1sIHJlZ3Jl
c3NlZCBhdCByMjExMTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCAxMWJhNGI2Yzk1NDhkY2QwNTEwOWU2M2Zi
NzhiMjMzNmFmYTZlOTE3Li42MjkwZDMwMjUxZGFjYzYyYWVlMThhN2E2MDVmYWNkMWNmODcwZmE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgKQEAgLTEyMTQsNyArMTIxNCw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTIwMSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAotI2RlZmluZSBIQVZFX1RP
VUNIX0JBUiAxCisjZGVmaW5lIEhBVkVfVE9VQ0hfQkFSIDAKICNkZWZpbmUgSEFWRV9BRFZBTkNF
RF9TUEVMTF9DSEVDS0lORyAxCiAKICNpZiBkZWZpbmVkKF9fTFA2NF9fKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCA0NDMxNmRlY2JkNGMyZTgwZmFlZmZkNjE3MGFkMjgwZDdhNTQ2MzllLi4yNGEx
ZmE3Njk2NGExOWIwOGFjOTkwMDk2MGJmMWQ0ZDEzNWU5ZmRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMjE1Niw2ICsyMTU2LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0Nyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRl
eCAxZjBlMTAzNWFkNGFkMmUxZTNmMGIxNzI1YTJhY2VjZWUzYzgwYzk5Li5hMDM0NWM2ZmM2N2U5
ZWIzNDQxZTY4MTFlMDMxZWYzZjQxMWMxZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtMTM4LDkgKzEzOCw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCiAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9Db21wbGV4VGV4dENvbnRyb2xsZXJIYXJmQnV6ei5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6ekZhY2UuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpGYWNlQ2Fpcm8uY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1H
VEsuY21ha2UKaW5kZXggYjFjNmU2YjhjZTEzMzdlMzhjMjg0NjMxNTRiNWZhZTE3MGNkMDRmZC4u
N2JhYThhOTg3NWVhODI4ZmIwOWYxNDE3MjAzMGE5ZWMyYjBlOGEyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTExNiw5ICsxMTYsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovQ29tcGxleFRleHRDb250cm9s
bGVySGFyZkJ1enouY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpG
YWNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6RmFjZUNhaXJv
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xD
b21tb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4IGZkNDhjYzE3OGEzNTE1Mjgy
MWQyYWYxZDA0MGE0OGI1ZmUwNmU5ZmMuLjk3ZTZjY2JmNDdiODViMjE3NzAzZDAzZGNlZDk1NzY4
ZWY4ODM4Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCkBAIC04Niw2ICs4Niw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBl
L09wZW5UeXBlVXRpbGl0aWVzLmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbG9y
RGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJv
bGxlclVuaXNjcmliZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRh
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GbG9hdFBvaW50RGlyZWN0MkQuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zsb2F0UmVjdERpcmVjdDJELmNwcApAQCAtMTA0LDcg
KzEwNSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
VHJhbnNmb3JtYXRpb25NYXRyaXhEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vVHJhbnNmb3JtYXRpb25NYXRyaXhXaW4uY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3du
bG9hZEJ1bmRsZVdpbi5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9OZXR3b3JrU3RhdGVO
b3RpZmllcldpbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBhM2ViYmQxYmFiMDJhYmU3YTRhYWVhMTJlMjBjMTU3OWYxNmU1
ZGU0Li4xZDA1NjFlMzdiMjM0N2I1Njg1OGUzMzg5ZWYyMDAwNTQyODgzN2Y1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDUx
LDggKzE0NTEsNiBAQAogCQkzN0FDQ0Y2OTBEQTQxNEU3MDA4OUU2MDIgLyogRm9udERlc2NyaXB0
aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkz
N0IzMjdEMzFEMTcwOTZBMDA1NzM3RkEgLyogUElQU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0IzMjdEMjFEMTcwOTZBMDA1NzM3RkEgLyogUElQ
U1BJLmggKi87IH07CiAJCTM3QkFBRTU4MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3Bh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QkFB
RTU3MTk4MEQxREQwMDVERkU3MSAvKiBQcm90ZWN0aW9uU3BhY2UuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzN0MyMzYxMDEwOTdFRTc3MDBFRjlG
NzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QzIzNjBFMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwICovOyB9OwotCQkzN0MyMzYxMTEwOTdFRTc3MDBFRjlGNzIgLyog
Q29tcGxleFRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVU
ZXh0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdD
MjM4MjAxMDk4Qzg0MjAwRUY5RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1t
ICovOyB9OwogCQkzN0Q0NTZGRDFBOUE1MEQ4MDAzMzMwQTEgLyogTG9jYWxpemFibGVTdHJpbmdz
LnBtIGluIENvcHkgU2NyaXB0cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
N0Q0NTZGQjFBOUE1MEI2MDAzMzMwQTEgLyogTG9jYWxpemFibGVTdHJpbmdzLnBtICovOyB9Owog
CQkzN0REQ0Q5NDEzODQ0RkQ1MDAwOEI3OTMgLyogTUlNRUhlYWRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0REQ0Q5MjEzODQ0RkQ1MDAwOEI3
OTMgLyogTUlNRUhlYWRlci5jcHAgKi87IH07CkBAIC01NjM2LDYgKzU2MzQsOCBAQAogCQlDMjAx
NUMwQTFCRTZGRUIyMDA4MjIzODkgLyogRm9udFZhcmlhbnRCdWlsZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjAxNUMwOTFCRTZGRTJDMDA4MjIz
ODkgLyogRm9udFZhcmlhbnRCdWlsZGVyLmggKi87IH07CiAJCUMyMURGMkU5MUQ5RTRFOTkwMEY1
QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxREYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0Zv
bnRWYXJpYXRpb25WYWx1ZS5jcHAgKi87IH07CiAJCUMyMURGMkVBMUQ5RTRFOTkwMEY1QjI0QyAv
KiBDU1NGb250VmFyaWF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEMyMURGMkU4MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0
aW9uVmFsdWUuaCAqLzsgfTsKKwkJQzI1NEIwN0MxRTNFQTc2RDAwRTYxMTcwIC8qIENvbXBsZXhU
ZXh0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjU0QjA3QTFFM0VBNzZDMDBFNjExNzAgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcCAqLzsgfTsKKwkJQzI1NEIwN0QxRTNFQTc2RDAwRTYxMTcwIC8qIENvbXBsZXhUZXh0Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzI1NEIwN0IxRTNFQTc2QzAwRTYxMTcwIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyNjAxN0EzMUM3
MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjYwMTdBMTFDNzJEQzk5MDBGNzRBMTYgLyogQ1NT
Rm9udEZhY2VTZXQuY3BwICovOyB9OwogCQlDMjYwMTdBNDFDNzJEQzk5MDBGNzRBMTYgLyogQ1NT
Rm9udEZhY2VTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovOyB9Owog
CQlDMjgwODMzRjFDNkRDMjZGMDAxNDUxQjYgLyogSlNGb250RmFjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI4MDgzM0UxQzZEQzIyQzAwMTQ1MUI2
IC8qIEpTRm9udEZhY2UuaCAqLzsgfTsKQEAgLTg2NTQsOCArODY1NCw2IEBACiAJCTM3QUNDRTYy
MERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERlc2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzdCMzI3RDIxRDE3MDk2QTAwNTczN0ZBIC8qIFBJUFNQSS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQSVBTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzdCQUFFNTcxOTgwRDFERDAwNURGRTcxIC8qIFByb3RlY3Rpb25TcGFjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm90ZWN0aW9uU3BhY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzdDMjM2MEUxMDk3RUU3NzAwRUY5RjcyIC8qIENv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzN0MyMzYwRjEwOTdFRTc3MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBsZXhUZXh0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0MyMzgyMDEwOThDODQyMDBFRjlGNzIg
LyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBDb21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdENDU2RkIxQTlBNTBCNjAwMzMzMEExIC8qIExv
Y2FsaXphYmxlU3RyaW5ncy5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IHBhdGggPSBMb2NhbGl6YWJsZVN0cmluZ3Mu
cG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RERDRDkyMTM4NDRGRDUwMDA4Qjc5
MyAvKiBNSU1FSGVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1JTUVIZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTM1OTksNiAr
MTM1OTcsOCBAQAogCQlDMjFERjJFNzFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlv
blZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRW
YXJpYXRpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU4
MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyNDY4NTEzMUExNDhFMTgwMDgxMTc5MiAvKiBDb3JlR3JhcGhp
Y3NTUEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29yZUdyYXBoaWNzU1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyNTRCMDdBMUUzRUE3NkMwMEU2MTE3
MCAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29tcGxleFRleHRDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzI1NEIwN0IxRTNFQTc2QzAwRTYxMTcwIC8qIENvbXBsZXhUZXh0Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV4VGV4dENvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTExQzcyREM5OTAw
Rjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzI2MDE3QTIxQzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyODA4MzNDMUM2REIxOTQwMDE0NTFCNiAvKiBGb250RmFjZS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRm9udEZhY2UuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjE3MjgsOCArMjE3MjgsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRURF
M0E0RkYwQzdBNDMwNjAwOTU2QTM3IC8qIENvbG9yTWFjLmggKi8sCiAJCQkJQjI3NTM1NEEwQjA1
MzgxNDAwMkNFNjRGIC8qIENvbG9yTWFjLm1tICovLAotCQkJCTM3QzIzNjBFMTA5N0VFNzcwMEVG
OUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovLAotCQkJCTM3QzIzNjBGMTA5N0VF
NzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCAqLywKIAkJCQkzN0MyMzgyMDEw
OThDODQyMDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0gKi8sCiAJ
CQkJNDlBRjJENkIxNDQzNUQyMTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5j
cHAgKi8sCiAJCQkJMkRFNzAwMjIxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvck1hYy5oICovLApAQCAtMjE5NTksNiArMjE5NTcsOCBAQAogCQkJCTUwMUJBQUE4MTM5NTBF
MkMwMEY3QUNFQiAvKiBXaW5kUnVsZS5oICovLAogCQkJCTM3OTkxOTk0MTIwMERERjQwMEVBMDQx
QyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAwRUEwNDFD
IC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCisJCQkJQzI1NEIwN0ExRTNFQTc2QzAwRTYxMTcwIC8q
IENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCisJCQkJQzI1NEIwN0IxRTNFQTc2QzAwRTYx
MTcwIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBncmFw
aGljczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNTI1Myw3ICsyNTI1Myw2IEBA
CiAJCQkJRTFGRTEzNzUxODQwMkE2NzAwODkyRjEzIC8qIENvbW1vbkNyeXB0b1V0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MEYzMkIxREZCQjEwNzAwNDE2RDZDIC8qIENvbW1vblZN
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzkzRjM0QTFBQTZCQTVFMDBBOThCQUIgLyogQ29tcGls
ZWRDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkzN0MyMzYxMTEwOTdFRTc3
MDBFRjlGNzIgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2Vk
VHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExNjBFNkUxREE3MDBCRjYw
ODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NDQ4LDYgKzI4
NDQ3LDcgQEAKIAkJCQk0QTM4QkY1MTE0RkUxQzA5MDA2MTI1MTIgLyogV2ViU29ja2V0RGVmbGF0
ZUZyYW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJEMjExNEZBMDlENTAwNzQ1N0FFIC8q
IFdlYlNvY2tldERlZmxhdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBQkQyMzE0RkEwOUQ1
MDA3NDU3QUUgLyogV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQzI1NEIwN0QxRTNFQTc2RDAwRTYxMTcwIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEE1QTJBREMxNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tl
dEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdBQUJEMjQxNEZBMDlENTAw
NzQ1N0FFIC8qIFdlYlNvY2tldEV4dGVuc2lvblByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTdBQUJEMjUxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEZyYW1lLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5MTM4LDcgKzI5MTM4LDYgQEAKIAkJCQlFMUZFMTM3NDE4NDAyQTY3MDA4OTJG
MTMgLyogQ29tbW9uQ3J5cHRvVXRpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjBG
MzJDMURGQkIxMEIwMDQxNkQ2QyAvKiBDb21tb25WTS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzkzRjM0OTFBQTZCQTVFMDBBOThCQUIgLyogQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTM3QzIzNjEwMTA5N0VFNzcwMEVGOUY3MiAvKiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdDMjM4MjIxMDk4Qzg0MjAwRUY5
RjcyIC8qIENvbXBsZXhUZXh0Q29udHJvbGxlckNvcmVUZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTQ0RkExODcxQkNBOTE1NjAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxNkZFMTE1MEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVB
bmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDgyNiw2ICszMDgyNSw3IEBACiAJCQkJ
Qzk2RjVFQzYxQjU4NzIyNjAwOTFFQTlEIC8qIE1lZGlhU2Vzc2lvbkludGVycnVwdGlvblByb3Zp
ZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQzkwRjY1NTUxQjIyNTNCMTAwMjE2M0ExIC8q
IE1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q2NjlENjgxRDIz
MzY0QjAwNEQxODY2IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJDb2NvYS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQlDMjU0QjA3QzFFM0VBNzZEMDBFNjExNzAgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3NjM4QTlBMTg4NDQ4NzIwMEUxNUExQiAvKiBNZWRp
YVNlc3Npb25NYW5hZ2VySU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdFREMzRUUxQUFDQjc1
RDAwOTgzRUI1IC8qIE1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlDRDNBNDk1RTE3QTlEMDFCMDAyNzRFNDIgLyogTWVkaWFTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4
VGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29t
cGxleFRleHRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZTYyYzE0MmRkNmM4Y2QxODk4ZTZh
YjYwNDAyNmFjODA3NWU2M2YzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDg3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorCisjaW5jbHVkZSAiQ2hhcmFjdGVy
UHJvcGVydGllcy5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Lmgi
CisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHVuaWNvZGUvdWJyay5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L0NoYXJhY3Rlck5hbWVzLmg+CisKKyNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSA8Q29yZVRl
eHQvQ29yZVRleHQuaD4KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVGV4dExheW91dCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNOZWVkZWQoUmVuZGVyVGV4dCYg
dGV4dCwgY29uc3QgRm9udENhc2NhZGUmIGZvbnQpCisgICAgeworICAgICAgICBUZXh0UnVuIHJ1
biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIHRleHQuc3R5bGUoKSk7Cisg
ICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1bikgPT0gRm9udENhc2NhZGU6OkNvbXBsZXg7
CisgICAgfQorCisgICAgVGV4dExheW91dChSZW5kZXJUZXh0JiB0ZXh0LCBjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgZmxvYXQgeFBvcykKKyAgICAgICAgOiBtX2ZvbnQoZm9udCkKKyAgICAgICAg
LCBtX3J1bihjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIHhQb3MpKQorICAgICAgICAsIG1fY29udHJv
bGxlcihzdGQ6Om1ha2VfdW5pcXVlPENvbXBsZXhUZXh0Q29udHJvbGxlcj4obV9mb250LCBtX3J1
biwgdHJ1ZSkpCisgICAgeworICAgIH0KKworICAgIGZsb2F0IHdpZHRoKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCisgICAg
eworICAgICAgICBtX2NvbnRyb2xsZXItPmFkdmFuY2UoZnJvbSwgMCwgQnlXaG9sZUdseXBocywg
ZmFsbGJhY2tGb250cyk7CisgICAgICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gbV9jb250cm9sbGVy
LT5ydW5XaWR0aFNvRmFyKCk7CisgICAgICAgIGlmIChtX2ZvbnQud29yZFNwYWNpbmcoKSAmJiBm
cm9tICYmIEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UobV9ydW5bZnJvbV0pKQorICAgICAgICAg
ICAgYmVmb3JlV2lkdGggKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CisgICAgICAgIG1fY29udHJv
bGxlci0+YWR2YW5jZShmcm9tICsgbGVuLCAwLCBCeVdob2xlR2x5cGhzLCBmYWxsYmFja0ZvbnRz
KTsKKyAgICAgICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IG1fY29udHJvbGxlci0+cnVuV2lkdGhTb0Zh
cigpOworICAgICAgICByZXR1cm4gYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQm
IHRleHQsIGZsb2F0IHhQb3MpCisgICAgeworICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIHRleHQuc3R5bGUoKSk7CisgICAgICAgIHJ1bi5z
ZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQudGV4dExlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJUKHJ1
bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgPj0gcnVuLmxlbmd0aCgpKTsKKyAgICAgICAgcnVuLnNldFhQ
b3MoeFBvcyk7CisgICAgICAgIHJldHVybiBydW47CisgICAgfQorCisgICAgLy8gQ29tcGxleFRl
eHRDb250cm9sbGVyIGhhcyBvbmx5IHJlZmVyZW5jZXMgdG8gaXRzIEZvbnRDYXNjYWRlIGFuZCBU
ZXh0UnVuIHNvIHRoZXkgbXVzdCBiZSBrZXB0IGFsaXZlIGhlcmUuCisgICAgRm9udENhc2NhZGUg
bV9mb250OworICAgIFRleHRSdW4gbV9ydW47CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbXBsZXhU
ZXh0Q29udHJvbGxlcj4gbV9jb250cm9sbGVyOworfTsKKwordm9pZCBUZXh0TGF5b3V0RGVsZXRl
cjo6b3BlcmF0b3IoKShUZXh0TGF5b3V0KiBsYXlvdXQpIGNvbnN0Cit7CisgICAgZGVsZXRlIGxh
eW91dDsKK30KKworc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQsIFRleHRMYXlvdXREZWxldGVy
PiBGb250Q2FzY2FkZTo6Y3JlYXRlTGF5b3V0KFJlbmRlclRleHQmIHRleHQsIGZsb2F0IHhQb3Ms
IGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlKSBjb25zdAoreworICAgIGlmICghY29sbGFwc2VXaGl0
ZVNwYWNlIHx8ICFUZXh0TGF5b3V0Ojppc05lZWRlZCh0ZXh0LCAqdGhpcykpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VGV4dExheW91dCwgVGV4
dExheW91dERlbGV0ZXI+KG5ldyBUZXh0TGF5b3V0KHRleHQsICp0aGlzLCB4UG9zKSk7Cit9CisK
K2Zsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aChUZXh0TGF5b3V0JiBsYXlvdXQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMpCit7
CisgICAgcmV0dXJuIGxheW91dC53aWR0aChmcm9tLCBsZW4sIGZhbGxiYWNrRm9udHMpOworfQor
CitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBib29sIG1heVVzZU5hdHVyYWxXcml0
aW5nRGlyZWN0aW9uLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgYm9vbCBm
b3JUZXh0RW1waGFzaXMpCisgICAgOiBtX2ZhbGxiYWNrRm9udHMoZmFsbGJhY2tGb250cykKKyAg
ICAsIG1fZm9udChmb250KQorICAgICwgbV9ydW4ocnVuKQorICAgICwgbV9lbmQocnVuLmxlbmd0
aCgpKQorICAgICwgbV9leHBhbnNpb24ocnVuLmV4cGFuc2lvbigpKQorICAgICwgbV9tYXlVc2VO
YXR1cmFsV3JpdGluZ0RpcmVjdGlvbihtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbikKKyAg
ICAsIG1fZm9yVGV4dEVtcGhhc2lzKGZvclRleHRFbXBoYXNpcykKK3sKKyAgICBpZiAoIW1fZXhw
YW5zaW9uKQorICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKKyAgICBlbHNl
IHsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnRDYXNj
YWRlOjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLnRleHQoKSwgbV9ydW4ubHRyKCkg
PyBMVFIgOiBSVEwsIHJ1bi5leHBhbnNpb25CZWhhdmlvcigpKS5maXJzdDsKKworICAgICAgICBp
ZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCisgICAgICAgICAgICBtX2V4cGFuc2lvblBl
ck9wcG9ydHVuaXR5ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSA9IG1fZXhwYW5zaW9uIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsK
KyAgICB9CisKKyAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zKCk7CisKKyAgICBmaW5pc2hDb25z
dHJ1Y3Rpb24oKTsKK30KKworQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRy
b2xsZXIoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgVmVjdG9y
PFJlZjxDb21wbGV4VGV4dFJ1bj4+JiBydW5zKQorICAgIDogbV9mb250KGZvbnQpCisgICAgLCBt
X3J1bihydW4pCisgICAgLCBtX2VuZChydW4ubGVuZ3RoKCkpCit7CisgICAgZm9yIChhdXRvJiBy
dW4gOiBydW5zKQorICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQocnVuLnB0cigpKTsK
KworICAgIGZpbmlzaENvbnN0cnVjdGlvbigpOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJv
bGxlcjo6ZmluaXNoQ29uc3RydWN0aW9uKCkKK3sKKyAgICBhZGp1c3RHbHlwaHNBbmRBZHZhbmNl
cygpOworCisgICAgaWYgKCFtX2lzTFRST25seSkgeworICAgICAgICBtX3J1bkluZGljZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NvbXBsZXhUZXh0UnVucy5zaXplKCkpOworCisgICAgICAg
IG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXgucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Nv
bXBsZXhUZXh0UnVucy5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50U29GYXIg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb21wbGV4VGV4dFJ1bnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXgu
dW5jaGVja2VkQXBwZW5kKGdseXBoQ291bnRTb0Zhcik7CisgICAgICAgICAgICBnbHlwaENvdW50
U29GYXIgKz0gbV9jb21wbGV4VGV4dFJ1bnNbaV0tPmdseXBoQ291bnQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1fcnVuV2lkdGhTb0ZhciA9IG1fbGVhZGluZ0V4cGFuc2lvbjsKK30KKwor
dW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCBo
LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKQoreworICAgIGlmIChoID49IG1fdG90YWxXaWR0
aCkKKyAgICAgICAgcmV0dXJuIG1fcnVuLmx0cigpID8gbV9lbmQgOiAwOworCisgICAgaCAtPSBt
X2xlYWRpbmdFeHBhbnNpb247CisgICAgaWYgKGggPCAwKQorICAgICAgICByZXR1cm4gbV9ydW4u
bHRyKCkgPyAwIDogbV9lbmQ7CisKKyAgICBmbG9hdCB4ID0gaDsKKworICAgIHNpemVfdCBydW5D
b3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKKyAgICBzaXplX3Qgb2Zmc2V0SW50b0Fk
anVzdGVkR2x5cGhzID0gMDsKKworICAgIGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7
ICsrcikgeworICAgICAgICBjb25zdCBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAq
bV9jb21wbGV4VGV4dFJ1bnNbcl07CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBj
b21wbGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7ICsraikgeworICAgICAgICAgICAgc2l6ZV90IGlu
ZGV4ID0gb2Zmc2V0SW50b0FkanVzdGVkR2x5cGhzICsgajsKKyAgICAgICAgICAgIGZsb2F0IGFk
anVzdGVkQWR2YW5jZSA9IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXNbaW5kZXhdLndpZHRoKCk7Cisg
ICAgICAgICAgICBpZiAoIWluZGV4KQorICAgICAgICAgICAgICAgIGFkanVzdGVkQWR2YW5jZSAr
PSBjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCk7CisgICAgICAgICAgICBp
ZiAoeCA8IGFkanVzdGVkQWR2YW5jZSkgeworICAgICAgICAgICAgICAgIHNpemVfdCBoaXRHbHlw
aFN0YXJ0ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChqKTsKKyAgICAgICAgICAgICAgICBzaXpl
X3QgaGl0R2x5cGhFbmQ7CisgICAgICAgICAgICAgICAgaWYgKG1fcnVuLmx0cigpKQorICAgICAg
ICAgICAgICAgICAgICBoaXRHbHlwaEVuZCA9IHN0ZDo6bWF4KGhpdEdseXBoU3RhcnQsIGogKyAx
IDwgY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpID8gY29tcGxleFRleHRSdW4uaW5kZXhBdChq
ICsgMSkgOiBjb21wbGV4VGV4dFJ1bi5pbmRleEVuZCgpKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGhpdEdseXBoRW5kID0gc3RkOjptYXgoaGl0R2x5cGhTdGFy
dCwgaiA+IDAgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGogLSAxKSA6IGNvbXBsZXhUZXh0UnVu
LmluZGV4RW5kKCkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEluc3RlYWQgb2YgZGl2
aWRpbmcgdGhlIGdseXBoJ3MgYWR2YW5jZSBlcXVhbGx5IGJldHdlZW4gdGhlIGNoYXJhY3RlcnMs
IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjb3VsZCB1c2UgdGhlIGdseXBoJ3MgImxpZ2F0dXJl
IGNhcmV0cyIuIFRoaXMgaXMgYXZhaWxhYmxlIGluIENvcmVUZXh0IHZpYSBDVEZvbnRHZXRMaWdh
dHVyZUNhcmV0UG9zaXRpb25zKCkuCisgICAgICAgICAgICAgICAgc2l6ZV90IGhpdEluZGV4ID0g
aGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVuZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVuLmx0
cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsKKyAg
ICAgICAgICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5n
TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgVUJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0aW9u
SXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcoY29tcGxleFRleHRS
dW4uY2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
Y2x1c3RlclN0YXJ0OworICAgICAgICAgICAgICAgIGlmICh1YnJrX2lzQm91bmRhcnkoY3Vyc29y
UG9zaXRpb25JdGVyYXRvciwgaGl0SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBjbHVzdGVy
U3RhcnQgPSBoaXRJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBwcmVjZWVkaW5nID0gdWJya19wcmVjZWRpbmcoY3Vyc29yUG9zaXRpb25JdGVy
YXRvciwgaGl0SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU3RhcnQgPSBwcmVj
ZWVkaW5nID09IFVCUktfRE9ORSA/IDAgOiBwcmVjZWVkaW5nOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZVBhcnRpYWxHbHlwaHMpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpICsgY2x1c3Rl
clN0YXJ0OworCisgICAgICAgICAgICAgICAgYXV0byBmb2xsb3dpbmcgPSB1YnJrX2ZvbGxvd2lu
ZyhjdXJzb3JQb3NpdGlvbkl0ZXJhdG9yLCBoaXRJbmRleCk7CisgICAgICAgICAgICAgICAgc2l6
ZV90IGNsdXN0ZXJFbmQgPSBmb2xsb3dpbmcgPT0gVUJSS19ET05FID8gc3RyaW5nTGVuZ3RoIDog
Zm9sbG93aW5nOworCisgICAgICAgICAgICAgICAgZmxvYXQgY2x1c3RlcldpZHRoOworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGUgc2VhcmNoIHN0b3BzIGF0IHRoZSBib3VuZGFyaWVzIG9m
IGNvbXBsZXhUZXh0UnVuLiBJbiB0aGVvcnksIGl0IHNob3VsZCBnbyBvbiBpbnRvIG5laWdoYm9y
aW5nIENvbXBsZXhUZXh0UnVucworICAgICAgICAgICAgICAgIC8vIGRlcml2ZWQgZnJvbSB0aGUg
c2FtZSBDVExpbmUuIEluIHByYWN0aWNlLCB3ZSBkbyBub3QgZXhwZWN0IHRoZXJlIHRvIGJlIG1v
cmUgdGhhbiBvbmUgQ1RSdW4gaW4gYSBDVExpbmUsIGFzIG5vCisgICAgICAgICAgICAgICAgLy8g
cmVvcmRlcmluZyBhbmQgbm8gZm9udCBmYWxsYmFjayBzaG91bGQgb2NjdXIgd2l0aGluIGEgQ1RM
aW5lLgorICAgICAgICAgICAgICAgIGlmIChjbHVzdGVyRW5kID4gY2x1c3RlclN0YXJ0ICYmIGNs
dXN0ZXJFbmQgLSBjbHVzdGVyU3RhcnQgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNsdXN0
ZXJXaWR0aCA9IGFkanVzdGVkQWR2YW5jZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGZpcnN0
R2x5cGhCZWZvcmVDbHVzdGVyID0gaiAtIDE7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChm
aXJzdEdseXBoQmVmb3JlQ2x1c3RlciA+PSAwICYmIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoZmly
c3RHbHlwaEJlZm9yZUNsdXN0ZXIpID49IGNsdXN0ZXJTdGFydCAmJiBjb21wbGV4VGV4dFJ1bi5p
bmRleEF0KGZpcnN0R2x5cGhCZWZvcmVDbHVzdGVyKSA8IGNsdXN0ZXJFbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoID0gbV9hZGp1c3RlZEJhc2VBZHZhbmNlc1tvZmZz
ZXRJbnRvQWRqdXN0ZWRHbHlwaHMgKyBmaXJzdEdseXBoQmVmb3JlQ2x1c3Rlcl0ud2lkdGgoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJXaWR0aCArPSB3aWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHggKz0gd2lkdGg7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dEdseXBoQmVmb3JlQ2x1c3Rlci0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZpcnN0R2x5cGhBZnRlckNsdXN0ZXIgPSBqICsgMTsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKGZpcnN0R2x5cGhBZnRlckNsdXN0ZXIgPCBjb21wbGV4VGV4
dFJ1bi5nbHlwaENvdW50KCkgJiYgY29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJzdEdseXBoQWZ0
ZXJDbHVzdGVyKSA+PSBjbHVzdGVyU3RhcnQgJiYgY29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJz
dEdseXBoQWZ0ZXJDbHVzdGVyKSA8IGNsdXN0ZXJFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNsdXN0ZXJXaWR0aCArPSBtX2FkanVzdGVkQmFzZUFkdmFuY2VzW29mZnNldEludG9BZGp1
c3RlZEdseXBocyArIGZpcnN0R2x5cGhBZnRlckNsdXN0ZXJdLndpZHRoKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKys7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjbHVz
dGVyV2lkdGggPSBhZGp1c3RlZEFkdmFuY2UgLyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0
KTsKKyAgICAgICAgICAgICAgICAgICAgeCAtPSAgY2x1c3RlcldpZHRoICogKG1fcnVuLmx0cigp
ID8gaGl0SW5kZXggLSBoaXRHbHlwaFN0YXJ0IDogaGl0R2x5cGhFbmQgLSBoaXRJbmRleCAtIDEp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoeCA8PSBjbHVzdGVyV2lk
dGggLyAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxleFRleHRSdW4uc3RyaW5n
TG9jYXRpb24oKSArIChtX3J1bi5sdHIoKSA/IGNsdXN0ZXJTdGFydCA6IGNsdXN0ZXJFbmQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpICsg
KG1fcnVuLmx0cigpID8gY2x1c3RlckVuZCA6IGNsdXN0ZXJTdGFydCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB4IC09IGFkanVzdGVkQWR2YW5jZTsKKyAgICAgICAgfQorICAgICAgICBv
ZmZzZXRJbnRvQWRqdXN0ZWRHbHlwaHMgKz0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCisv
LyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlaW1wbGVtZW50aW5nIHRoaXMgZnVuY3Rpb24g
dXNpbmcgSUNVIHRvIGFkdmFuY2UgYnkgZ3JhcGhlbWUuCisvLyBUaGUgY3VycmVudCBpbXBsZW1l
bnRhdGlvbiBvbmx5IGNvbnNpZGVycyBleHBsaWNpdGx5IGVtb2ppIHNlcXVlbmNlcyBhbmQgZW1v
amkgdmFyaWF0aW9ucy4KK3N0YXRpYyBib29sIGFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiYgaXRlcmF0b3IsIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyMzIm
IGJhc2VDaGFyYWN0ZXIsIHVuc2lnbmVkJiBtYXJrQ291bnQpCit7CisgICAgQVNTRVJUKGl0ZXJh
dG9yIDwgZW5kKTsKKworICAgIG1hcmtDb3VudCA9IDA7CisKKyAgICB1bnNpZ25lZCBpID0gMDsK
KyAgICB1bnNpZ25lZCByZW1haW5pbmdDaGFyYWN0ZXJzID0gZW5kIC0gaXRlcmF0b3I7CisgICAg
VTE2X05FWFQoaXRlcmF0b3IsIGksIHJlbWFpbmluZ0NoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXIp
OworICAgIGl0ZXJhdG9yID0gaXRlcmF0b3IgKyBpOworICAgIGlmIChVX0lTX1NVUlJPR0FURShi
YXNlQ2hhcmFjdGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ29uc3VtZSBt
YXJrcy4KKyAgICBib29sIHNhd0Vtb2ppR3JvdXBDYW5kaWRhdGUgPSBpc0Vtb2ppR3JvdXBDYW5k
aWRhdGUoYmFzZUNoYXJhY3Rlcik7CisgICAgYm9vbCBzYXdKb2luZXIgPSBmYWxzZTsKKyAgICB3
aGlsZSAoaXRlcmF0b3IgPCBlbmQpIHsKKyAgICAgICAgVUNoYXIzMiBuZXh0Q2hhcmFjdGVyOwor
ICAgICAgICBpbnQgbWFya0xlbmd0aCA9IDA7CisgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUg
PSBmYWxzZTsKKyAgICAgICAgVTE2X05FWFQoaXRlcmF0b3IsIG1hcmtMZW5ndGgsIGVuZCAtIGl0
ZXJhdG9yLCBuZXh0Q2hhcmFjdGVyKTsKKworICAgICAgICBpZiAoaXNWYXJpYXRpb25TZWxlY3Rv
cihuZXh0Q2hhcmFjdGVyKSB8fCBpc0Vtb2ppRml0enBhdHJpY2tNb2RpZmllcihuZXh0Q2hhcmFj
dGVyKSkKKyAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKworICAgICAgICBpZiAo
c2F3Sm9pbmVyICYmIGlzRW1vamlHcm91cENhbmRpZGF0ZShuZXh0Q2hhcmFjdGVyKSkKKyAgICAg
ICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKworICAgICAgICBzYXdKb2luZXIgPSBmYWxz
ZTsKKyAgICAgICAgaWYgKHNhd0Vtb2ppR3JvdXBDYW5kaWRhdGUgJiYgbmV4dENoYXJhY3RlciA9
PSB6ZXJvV2lkdGhKb2luZXIpIHsKKyAgICAgICAgICAgIHNhd0pvaW5lciA9IHRydWU7CisgICAg
ICAgICAgICBzaG91bGRDb250aW51ZSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmICghc2hvdWxkQ29udGludWUgJiYgIShVX0dFVF9HQ19NQVNLKG5leHRDaGFyYWN0ZXIp
ICYgVV9HQ19NX01BU0spKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgbWFya0NvdW50
ICs9IG1hcmtMZW5ndGg7CisgICAgICAgIGl0ZXJhdG9yICs9IG1hcmtMZW5ndGg7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIEZJWE1FOiBDYXBpdGFsaXphdGlvbiBpcyBsYW5n
dWFnZS1kZXBlbmRlbnQgYW5kIGNvbnRleHQtZGVwZW5kZW50IGFuZCBzaG91bGQgb3BlcmF0ZSBv
biBncmFwaGVtZSBjbHVzdGVycyBpbnN0ZWFkIG9mIGNvZGVwb2ludHMuCitzdGF0aWMgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8VUNoYXIzMj4gY2FwaXRhbGl6ZWQoVUNoYXIzMiBiYXNlQ2hhcmFjdGVy
KQoreworICAgIGlmIChVX0dFVF9HQ19NQVNLKGJhc2VDaGFyYWN0ZXIpICYgVV9HQ19NX01BU0sp
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBVQ2hhcjMyIHVwcGVyY2FzZUNo
YXJhY3RlciA9IHVfdG91cHBlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICBBU1NFUlQodXBwZXJjYXNl
Q2hhcmFjdGVyID09IGJhc2VDaGFyYWN0ZXIgfHwgKFVfSVNfQk1QKGJhc2VDaGFyYWN0ZXIpID09
IFVfSVNfQk1QKHVwcGVyY2FzZUNoYXJhY3RlcikpKTsKKyAgICBpZiAodXBwZXJjYXNlQ2hhcmFj
dGVyICE9IGJhc2VDaGFyYWN0ZXIpCisgICAgICAgIHJldHVybiB1cHBlcmNhc2VDaGFyYWN0ZXI7
CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkU3ludGhl
c2l6ZShib29sIGRvbnRTeW50aGVzaXplU21hbGxDYXBzLCBjb25zdCBGb250KiBuZXh0Rm9udCwg
VUNoYXIzMiBiYXNlQ2hhcmFjdGVyLCBzdGQ6Om9wdGlvbmFsPFVDaGFyMzI+IGNhcGl0YWxpemVk
QmFzZSwgRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2FwcywgYm9vbCBlbmdhZ2VBbGxTbWFs
bENhcHNQcm9jZXNzaW5nKQoreworICAgIGlmIChkb250U3ludGhlc2l6ZVNtYWxsQ2FwcykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmV4dEZvbnQgfHwgbmV4dEZvbnQgPT0gRm9u
dDo6c3lzdGVtRmFsbGJhY2soKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChlbmdh
Z2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nICYmIGlzQVNDSUlTcGFjZShiYXNlQ2hhcmFjdGVyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vz
c2luZyAmJiAhY2FwaXRhbGl6ZWRCYXNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuICFuZXh0Rm9udC0+dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhm
b250VmFyaWFudENhcHMsIGJhc2VDaGFyYWN0ZXIpOworfQorCit2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Y29sbGVjdENvbXBsZXhUZXh0UnVucygpCit7CisgICAgaWYgKCFtX2VuZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgYnJlYWsgdXAgZ2x5cGggcnVuIGdlbmVyYXRpb24g
Zm9yIHRoZSBzdHJpbmcgYnkgRm9udC4KKyAgICBjb25zdCBVQ2hhciogY3A7CisKKyAgICBpZiAo
bV9ydW4uaXM4Qml0KCkpIHsKKyAgICAgICAgU3RyaW5nIHN0cmluZ0ZvcjhCaXRSdW4gPSBTdHJp
bmc6Om1ha2UxNkJpdEZyb204Qml0U291cmNlKG1fcnVuLmNoYXJhY3RlcnM4KCksIG1fcnVuLmxl
bmd0aCgpKTsKKyAgICAgICAgbV9zdHJpbmdzRm9yOEJpdFJ1bnMuYXBwZW5kKFdURk1vdmUoc3Ry
aW5nRm9yOEJpdFJ1bikpOworICAgICAgICBjcCA9IG1fc3RyaW5nc0ZvcjhCaXRSdW5zLmxhc3Qo
KS5jaGFyYWN0ZXJzMTYoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgY3AgPSBtX3J1bi5jaGFyYWN0
ZXJzMTYoKTsKKworICAgIGF1dG8gZm9udFZhcmlhbnRDYXBzID0gbV9mb250LmZvbnREZXNjcmlw
dGlvbigpLnZhcmlhbnRDYXBzKCk7CisgICAgYm9vbCBkb250U3ludGhlc2l6ZVNtYWxsQ2FwcyA9
ICFzdGF0aWNfY2FzdDxib29sPihtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkuZm9udFN5bnRoZXNp
cygpICYgRm9udFN5bnRoZXNpc1NtYWxsQ2Fwcyk7CisgICAgYm9vbCBlbmdhZ2VBbGxTbWFsbENh
cHNQcm9jZXNzaW5nID0gZm9udFZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGwgfHwgZm9udFZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOworICAg
IGJvb2wgZW5nYWdlU21hbGxDYXBzUHJvY2Vzc2luZyA9IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nl
c3NpbmcgfHwgZm9udFZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6U21hbGwgfHwgZm9u
dFZhcmlhbnRDYXBzID09IEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOworCisgICAgaWYgKGVuZ2Fn
ZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgfHwgZW5nYWdlU21hbGxDYXBzUHJvY2Vzc2luZykKKyAg
ICAgICAgbV9zbWFsbENhcHNCdWZmZXIucmVzaXplKG1fZW5kKTsKKworICAgIHVuc2lnbmVkIGlu
ZGV4T2ZGb250VHJhbnNpdGlvbiA9IDA7CisgICAgY29uc3QgVUNoYXIqIGN1cnIgPSBjcDsKKyAg
ICBjb25zdCBVQ2hhciogZW5kID0gY3AgKyBtX2VuZDsKKworICAgIGNvbnN0IEZvbnQqIGZvbnQ7
CisgICAgY29uc3QgRm9udCogbmV4dEZvbnQ7CisgICAgY29uc3QgRm9udCogc3ludGhlc2l6ZWRG
b250ID0gbnVsbHB0cjsKKyAgICBjb25zdCBGb250KiBzbWFsbFN5bnRoZXNpemVkRm9udCA9IG51
bGxwdHI7CisKKyAgICB1bnNpZ25lZCBtYXJrQ291bnQ7CisgICAgVUNoYXIzMiBiYXNlQ2hhcmFj
dGVyOworICAgIGlmICghYWR2YW5jZUJ5Q29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3Vyciwg
ZW5kLCBiYXNlQ2hhcmFjdGVyLCBtYXJrQ291bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBu
ZXh0Rm9udCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3AsIGN1
cnIgLSBjcCk7CisKKyAgICBib29sIGlzU21hbGxDYXBzID0gZmFsc2U7CisgICAgYm9vbCBuZXh0
SXNTbWFsbENhcHMgPSBmYWxzZTsKKworICAgIGF1dG8gY2FwaXRhbGl6ZWRCYXNlID0gY2FwaXRh
bGl6ZWQoYmFzZUNoYXJhY3Rlcik7CisgICAgaWYgKHNob3VsZFN5bnRoZXNpemUoZG9udFN5bnRo
ZXNpemVTbWFsbENhcHMsIG5leHRGb250LCBiYXNlQ2hhcmFjdGVyLCBjYXBpdGFsaXplZEJhc2Us
IGZvbnRWYXJpYW50Q2FwcywgZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZWRGb250ID0gJm5leHRGb250LT5ub1N5bnRoZXNpemFibGVGZWF0dXJlc0Zv
bnQoKTsKKyAgICAgICAgc21hbGxTeW50aGVzaXplZEZvbnQgPSBzeW50aGVzaXplZEZvbnQtPnNt
YWxsQ2Fwc0ZvbnQobV9mb250LmZvbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgVUNoYXIzMiBj
aGFyYWN0ZXJUb1dyaXRlID0gY2FwaXRhbGl6ZWRCYXNlID8gY2FwaXRhbGl6ZWRCYXNlLnZhbHVl
KCkgOiBjcFswXTsKKyAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVySW5kZXggPSAwOworICAgICAg
ICBVMTZfQVBQRU5EX1VOU0FGRShtX3NtYWxsQ2Fwc0J1ZmZlciwgY2hhcmFjdGVySW5kZXgsIGNo
YXJhY3RlclRvV3JpdGUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjaGFyYWN0ZXJJbmRl
eDsgY3AgKyBpIDwgY3VycjsgKytpKQorICAgICAgICAgICAgbV9zbWFsbENhcHNCdWZmZXJbaV0g
PSBjcFtpXTsKKyAgICAgICAgbmV4dElzU21hbGxDYXBzID0gdHJ1ZTsKKyAgICB9CisKKyAgICB3
aGlsZSAoY3VyciA8IGVuZCkgeworICAgICAgICBmb250ID0gbmV4dEZvbnQ7CisgICAgICAgIGlz
U21hbGxDYXBzID0gbmV4dElzU21hbGxDYXBzOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGN1
cnIgLSBjcDsKKworICAgICAgICBpZiAoIWFkdmFuY2VCeUNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGN1cnIsIGVuZCwgYmFzZUNoYXJhY3RlciwgbWFya0NvdW50KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoc3ludGhlc2l6ZWRGb250KSB7CisgICAgICAgICAgICBpZiAo
YXV0byBjYXBpdGFsaXplZEJhc2UgPSBjYXBpdGFsaXplZChiYXNlQ2hhcmFjdGVyKSkgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXJhY3RlckluZGV4ID0gaW5kZXg7CisgICAgICAgICAg
ICAgICAgVTE2X0FQUEVORF9VTlNBRkUobV9zbWFsbENhcHNCdWZmZXIsIGNoYXJhY3RlckluZGV4
LCBjYXBpdGFsaXplZEJhc2UudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1hcmtDb3VudDsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX3NtYWxs
Q2Fwc0J1ZmZlcltpICsgY2hhcmFjdGVySW5kZXhdID0gY3BbaSArIGNoYXJhY3RlckluZGV4XTsK
KyAgICAgICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSB0cnVlOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY3VyciAtIGNw
IC0gaW5kZXg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc21hbGxDYXBzQnVmZmVy
W2luZGV4ICsgaV0gPSBjcFtpbmRleCArIGldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNzaW5nOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPT0g
emVyb1dpZHRoSm9pbmVyKQorICAgICAgICAgICAgbmV4dEZvbnQgPSBmb250OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBuZXh0Rm9udCA9IG1fZm9udC5mb250Rm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY3AgKyBpbmRleCwgY3VyciAtIGNwIC0gaW5kZXgpOworCisgICAgICAgIGNh
cGl0YWxpemVkQmFzZSA9IGNhcGl0YWxpemVkKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAo
IXN5bnRoZXNpemVkRm9udCAmJiBzaG91bGRTeW50aGVzaXplKGRvbnRTeW50aGVzaXplU21hbGxD
YXBzLCBuZXh0Rm9udCwgYmFzZUNoYXJhY3RlciwgY2FwaXRhbGl6ZWRCYXNlLCBmb250VmFyaWFu
dENhcHMsIGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcpKSB7CisgICAgICAgICAgICAvLyBS
YXRoZXIgdGhhbiBzeW50aGVzaXplIGVhY2ggY2hhcmFjdGVyIGluZGl2aWR1YWxseSwgd2Ugc2hv
dWxkIHN5bnRoZXNpemUgdGhlIGVudGlyZSAicnVuIiBpZiBhbnkgY2hhcmFjdGVyIHJlcXVpcmVz
IHN5bnRoZXNpcy4KKyAgICAgICAgICAgIHN5bnRoZXNpemVkRm9udCA9ICZuZXh0Rm9udC0+bm9T
eW50aGVzaXphYmxlRmVhdHVyZXNGb250KCk7CisgICAgICAgICAgICBzbWFsbFN5bnRoZXNpemVk
Rm9udCA9IHN5bnRoZXNpemVkRm9udC0+c21hbGxDYXBzRm9udChtX2ZvbnQuZm9udERlc2NyaXB0
aW9uKCkpOworICAgICAgICAgICAgbmV4dElzU21hbGxDYXBzID0gdHJ1ZTsKKyAgICAgICAgICAg
IGN1cnIgPSBjcCArIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5leHRGb250ICE9IGZvbnQgfHwgbmV4dElzU21h
bGxDYXBzICE9IGlzU21hbGxDYXBzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpdGVtTGVuZ3Ro
ID0gaW5kZXggLSBpbmRleE9mRm9udFRyYW5zaXRpb247CisgICAgICAgICAgICBpZiAoaXRlbUxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGl0ZW1TdGFydCA9IGluZGV4T2ZGb250
VHJhbnNpdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoc3ludGhlc2l6ZWRGb250KSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpc1NtYWxsQ2FwcykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKG1fc21hbGxDYXBzQnVmZmVyLmRh
dGEoKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCBzbWFsbFN5bnRoZXNpemVk
Rm9udCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNwICsgaXRlbVN0YXJ0LCBpdGVt
TGVuZ3RoLCBpdGVtU3RhcnQsIHN5bnRoZXNpemVkRm9udCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0
ZXJzKGNwICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIGZvbnQpOworICAgICAg
ICAgICAgICAgIGlmIChuZXh0Rm9udCAhPSBmb250KSB7CisgICAgICAgICAgICAgICAgICAgIHN5
bnRoZXNpemVkRm9udCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIHNtYWxsU3ludGhl
c2l6ZWRGb250ID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAgICAgbmV4dElzU21hbGxDYXBz
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gaW5kZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBB
U1NFUlQobV9lbmQgPj0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uKTsKKyAgICB1bnNpZ25lZCBpdGVt
TGVuZ3RoID0gbV9lbmQgLSBpbmRleE9mRm9udFRyYW5zaXRpb247CisgICAgaWYgKGl0ZW1MZW5n
dGgpIHsKKyAgICAgICAgdW5zaWduZWQgaXRlbVN0YXJ0ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9u
OworICAgICAgICBpZiAoc3ludGhlc2l6ZWRGb250KSB7CisgICAgICAgICAgICBpZiAobmV4dElz
U21hbGxDYXBzKQorICAgICAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFy
YWN0ZXJzKG1fc21hbGxDYXBzQnVmZmVyLmRhdGEoKSArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwg
aXRlbVN0YXJ0LCBzbWFsbFN5bnRoZXNpemVkRm9udCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBpdGVt
U3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgc3ludGhlc2l6ZWRGb250KTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhj
cCArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCBuZXh0Rm9udCk7CisgICAgfQor
CisgICAgaWYgKCFtX3J1bi5sdHIoKSkKKyAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMucmV2ZXJz
ZSgpOworfQorCitzaXplX3QgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6
aW5kZXhBdChzaXplX3QgaSkgY29uc3QKK3sKKyAgICBBU1NFUlQoaSA8IG1fZ2x5cGhDb3VudCk7
CisKKyAgICByZXR1cm4gbV9jb3JlVGV4dEluZGljZXNWZWN0b3JbaV07Cit9CisKK3ZvaWQgQ29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6c2V0SXNOb25Nb25vdG9uaWMoKQor
eworICAgIEFTU0VSVChtX2lzTW9ub3RvbmljKTsKKyAgICBtX2lzTW9ub3RvbmljID0gZmFsc2U7
CisKKyAgICBWZWN0b3I8Ym9vbCwgNjQ+IG1hcHBlZEluZGljZXMobV9zdHJpbmdMZW5ndGgsIGZh
bHNlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2x5cGhDb3VudDsgKytpKSB7Cisg
ICAgICAgIEFTU0VSVChpbmRleEF0KGkpIDwgbV9zdHJpbmdMZW5ndGgpOworICAgICAgICBtYXBw
ZWRJbmRpY2VzW2luZGV4QXQoaSldID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX2dseXBoRW5kT2Zm
c2V0cy5ncm93KG1fZ2x5cGhDb3VudCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
Z2x5cGhDb3VudDsgKytpKSB7CisgICAgICAgIHNpemVfdCBuZXh0TWFwcGVkSW5kZXggPSBtX2lu
ZGV4RW5kOworICAgICAgICBmb3IgKHNpemVfdCBqID0gaW5kZXhBdChpKSArIDE7IGogPCBtX3N0
cmluZ0xlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAobWFwcGVkSW5kaWNlc1tqXSkgewor
ICAgICAgICAgICAgICAgIG5leHRNYXBwZWRJbmRleCA9IGo7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9nbHlwaEVuZE9mZnNldHNb
aV0gPSBuZXh0TWFwcGVkSW5kZXg7CisgICAgfQorfQorCit1bnNpZ25lZCBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OmluZGV4T2ZDdXJyZW50UnVuKHVuc2lnbmVkJiBsZWZ0bW9zdEdseXBoKQorewor
ICAgIGxlZnRtb3N0R2x5cGggPSAwOworICAgIAorICAgIHNpemVfdCBydW5Db3VudCA9IG1fY29t
cGxleFRleHRSdW5zLnNpemUoKTsKKyAgICBpZiAobV9jdXJyZW50UnVuID49IHJ1bkNvdW50KQor
ICAgICAgICByZXR1cm4gcnVuQ291bnQ7CisKKyAgICBpZiAobV9pc0xUUk9ubHkpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY3VycmVudFJ1bjsgKytpKQorICAgICAgICAg
ICAgbGVmdG1vc3RHbHlwaCArPSBtX2NvbXBsZXhUZXh0UnVuc1tpXS0+Z2x5cGhDb3VudCgpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50UnVuOworICAgIH0KKworICAgIGlmIChtX3J1bkluZGlj
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIGZpcnN0UnVuID0gMDsKKyAgICAgICAg
dW5zaWduZWQgZmlyc3RSdW5PZmZzZXQgPSBzdHJpbmdCZWdpbigqbV9jb21wbGV4VGV4dFJ1bnNb
MF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcnVuQ291bnQ7ICsraSkgewor
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RyaW5nQmVnaW4oKm1fY29tcGxleFRleHRS
dW5zW2ldKTsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCBmaXJzdFJ1bk9mZnNldCkgeworICAg
ICAgICAgICAgICAgIGZpcnN0UnVuID0gaTsKKyAgICAgICAgICAgICAgICBmaXJzdFJ1bk9mZnNl
dCA9IG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3J1bkluZGlj
ZXMudW5jaGVja2VkQXBwZW5kKGZpcnN0UnVuKTsKKyAgICB9CisKKyAgICB3aGlsZSAobV9ydW5J
bmRpY2VzLnNpemUoKSA8PSBtX2N1cnJlbnRSdW4pIHsKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0
ID0gc3RyaW5nRW5kKCptX2NvbXBsZXhUZXh0UnVuc1ttX3J1bkluZGljZXMubGFzdCgpXSk7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bkNvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChvZmZzZXQgPT0gc3RyaW5nQmVnaW4oKm1fY29tcGxleFRleHRSdW5zW2ldKSkg
eworICAgICAgICAgICAgICAgIG1fcnVuSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoaSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBjdXJyZW50UnVuSW5kZXggPSBtX3J1bkluZGljZXNbbV9jdXJyZW50UnVuXTsK
KyAgICBsZWZ0bW9zdEdseXBoID0gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRleFtjdXJyZW50
UnVuSW5kZXhdOworICAgIHJldHVybiBjdXJyZW50UnVuSW5kZXg7Cit9CisKK3Vuc2lnbmVkIENv
bXBsZXhUZXh0Q29udHJvbGxlcjo6aW5jcmVtZW50Q3VycmVudFJ1bih1bnNpZ25lZCYgbGVmdG1v
c3RHbHlwaCkKK3sKKyAgICBpZiAobV9pc0xUUk9ubHkpIHsKKyAgICAgICAgbGVmdG1vc3RHbHlw
aCArPSBtX2NvbXBsZXhUZXh0UnVuc1ttX2N1cnJlbnRSdW4rK10tPmdseXBoQ291bnQoKTsKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFJ1bjsKKyAgICB9CisKKyAgICBtX2N1cnJlbnRSdW4rKzsK
KyAgICBsZWZ0bW9zdEdseXBoID0gMDsKKyAgICByZXR1cm4gaW5kZXhPZkN1cnJlbnRSdW4obGVm
dG1vc3RHbHlwaCk7Cit9CisKK2Zsb2F0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6cnVuV2lkdGhT
b0ZhckZyYWN0aW9uKHVuc2lnbmVkIGdseXBoU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGdseXBoRW5k
T2Zmc2V0LCB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCwgR2x5cGhJdGVyYXRp
b25TdHlsZSBpdGVyYXRpb25TdHlsZSkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW5zdGVhZCBv
ZiBkaXZpZGluZyB0aGUgZ2x5cGgncyBhZHZhbmNlIGVxdWFsbHkgYmV0d2VlbiB0aGUgY2hhcmFj
dGVycywgdGhpcworICAgIC8vIGNvdWxkIHVzZSB0aGUgZ2x5cGgncyAibGlnYXR1cmUgY2FyZXRz
Ii4gVGhpcyBpcyBhdmFpbGFibGUgaW4gQ29yZVRleHQgdmlhIENURm9udEdldExpZ2F0dXJlQ2Fy
ZXRQb3NpdGlvbnMoKS4KKyAgICBpZiAoZ2x5cGhTdGFydE9mZnNldCA9PSBnbHlwaEVuZE9mZnNl
dCkgeworICAgICAgICAvLyBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBnbHlwaHMgcGVyIGNoYXJh
Y3RlciB3ZSBuZWVkIHRvIGFkdmFuY2UgYnkgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIGdseXBoLgor
ICAgICAgICBBU1NFUlQobV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9PSBvbGRDaGFyYWN0ZXJJ
bkN1cnJlbnRHbHlwaCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChpdGVy
YXRpb25TdHlsZSA9PSBCeVdob2xlR2x5cGhzKSB7CisgICAgICAgIGlmICghb2xkQ2hhcmFjdGVy
SW5DdXJyZW50R2x5cGgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihtX2NoYXJhY3RlckluQ3Vy
cmVudEdseXBoIC0gb2xkQ2hhcmFjdGVySW5DdXJyZW50R2x5cGgpIC8gKGdseXBoRW5kT2Zmc2V0
IC0gZ2x5cGhTdGFydE9mZnNldCk7Cit9CisKK3ZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjph
ZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBHbHlwaEl0
ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJh
Y2tGb250cykKK3sKKyAgICBpZiAob2Zmc2V0ID4gbV9lbmQpCisgICAgICAgIG9mZnNldCA9IG1f
ZW5kOworCisgICAgaWYgKG9mZnNldCA8PSBtX2N1cnJlbnRDaGFyYWN0ZXIpIHsKKyAgICAgICAg
bV9ydW5XaWR0aFNvRmFyID0gbV9sZWFkaW5nRXhwYW5zaW9uOworICAgICAgICBtX251bUdseXBo
c1NvRmFyID0gMDsKKyAgICAgICAgbV9jdXJyZW50UnVuID0gMDsKKyAgICAgICAgbV9nbHlwaElu
Q3VycmVudFJ1biA9IDA7CisgICAgICAgIG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSAwOwor
ICAgIH0KKworICAgIG1fY3VycmVudENoYXJhY3RlciA9IG9mZnNldDsKKworICAgIHNpemVfdCBy
dW5Db3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKKworICAgIHVuc2lnbmVkIGxlZnRt
b3N0R2x5cGggPSAwOworICAgIHVuc2lnbmVkIGN1cnJlbnRSdW5JbmRleCA9IGluZGV4T2ZDdXJy
ZW50UnVuKGxlZnRtb3N0R2x5cGgpOworICAgIHdoaWxlIChtX2N1cnJlbnRSdW4gPCBydW5Db3Vu
dCkgeworICAgICAgICBjb25zdCBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9j
b21wbGV4VGV4dFJ1bnNbY3VycmVudFJ1bkluZGV4XTsKKyAgICAgICAgYm9vbCBsdHIgPSBjb21w
bGV4VGV4dFJ1bi5pc0xUUigpOworICAgICAgICBzaXplX3QgZ2x5cGhDb3VudCA9IGNvbXBsZXhU
ZXh0UnVuLmdseXBoQ291bnQoKTsKKyAgICAgICAgdW5zaWduZWQgZyA9IGx0ciA/IG1fZ2x5cGhJ
bkN1cnJlbnRSdW4gOiBnbHlwaENvdW50IC0gMSAtIG1fZ2x5cGhJbkN1cnJlbnRSdW47CisgICAg
ICAgIHVuc2lnbmVkIGsgPSBsZWZ0bW9zdEdseXBoICsgZzsKKyAgICAgICAgaWYgKGZhbGxiYWNr
Rm9udHMgJiYgJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSAhPSAmbV9mb250LnByaW1hcnlGb250KCkp
CisgICAgICAgICAgICBmYWxsYmFja0ZvbnRzLT5hZGQoJmNvbXBsZXhUZXh0UnVuLmZvbnQoKSk7
CisKKyAgICAgICAgLy8gV2UgbXVzdCBzdG9yZSB0aGUgaW5pdGlhbCBhZHZhbmNlIGZvciB0aGUg
Zmlyc3QgZ2x5cGggd2UgYXJlIGdvaW5nIHRvIGRyYXcuCisgICAgICAgIC8vIFdoZW4gbGVmdG1v
c3RHbHlwaCBpcyAwLCBpdCByZXByZXNlbnRzIHRoZSBmaXJzdCBnbHlwaCB0byBkcmF3LCB0YWtp
bmcgaW50bworICAgICAgICAvLyBhY2NvdW50IHRoZSB0ZXh0IGRpcmVjdGlvbi4KKyAgICAgICAg
aWYgKGdseXBoQnVmZmVyICYmICFsZWZ0bW9zdEdseXBoKSB7CisgICAgICAgICAgICBGbG9hdFNp
emUgaW5pdGlhbEFkdmFuY2UgPSBjb21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpOworI2lm
IFVTRV9MQVlPVVRfU1BFQ0lGSUNfQURWQU5DRVMKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gbHRyID8gMCA6IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpIC0gMTsKKyAgICAgICAg
ICAgIGluaXRpYWxBZHZhbmNlLmV4cGFuZChnbHlwaE9yaWdpbihpbmRleCkueCgpLCBnbHlwaE9y
aWdpbihpbmRleCkueSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNldElu
aXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZShpbml0aWFsQWR2YW5jZS53aWR0aCgpLCBp
bml0aWFsQWR2YW5jZS5oZWlnaHQoKSkpOworCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2V0
TGVhZGluZ0V4cGFuc2lvbihtX2xlYWRpbmdFeHBhbnNpb24pOworICAgICAgICB9CisKKyAgICAg
ICAgd2hpbGUgKG1fZ2x5cGhJbkN1cnJlbnRSdW4gPCBnbHlwaENvdW50KSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBnbHlwaFN0YXJ0T2Zmc2V0ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChnKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGdseXBoRW5kT2Zmc2V0OworICAgICAgICAgICAgaWYgKGNv
bXBsZXhUZXh0UnVuLmlzTW9ub3RvbmljKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobHRyKQor
ICAgICAgICAgICAgICAgICAgICBnbHlwaEVuZE9mZnNldCA9IHN0ZDo6bWF4PHVuc2lnbmVkPihn
bHlwaFN0YXJ0T2Zmc2V0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZyArIDEgPCBnbHlwaENvdW50
ID8gY29tcGxleFRleHRSdW4uaW5kZXhBdChnICsgMSkgOiBjb21wbGV4VGV4dFJ1bi5pbmRleEVu
ZCgpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBnbHlwaEVu
ZE9mZnNldCA9IHN0ZDo6bWF4PHVuc2lnbmVkPihnbHlwaFN0YXJ0T2Zmc2V0LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZyA+IDAgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGcgLSAxKSA6IGNvbXBs
ZXhUZXh0UnVuLmluZGV4RW5kKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGdseXBoRW5kT2Zmc2V0ID0gY29tcGxleFRleHRSdW4uZW5kT2Zmc2V0QXQoZyk7CisKKyAg
ICAgICAgICAgIEZsb2F0U2l6ZSBhZGp1c3RlZEJhc2VBZHZhbmNlID0gbV9hZGp1c3RlZEJhc2VB
ZHZhbmNlc1trXTsKKworICAgICAgICAgICAgaWYgKGdseXBoU3RhcnRPZmZzZXQgKyBjb21wbGV4
VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpID49IG1fY3VycmVudENoYXJhY3RlcikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlciAmJiAhbV9jaGFy
YWN0ZXJJbkN1cnJlbnRHbHlwaCkgeworICAgICAgICAgICAgICAgIEdseXBoQnVmZmVyQWR2YW5j
ZSBwYWludEFkdmFuY2UoYWRqdXN0ZWRCYXNlQWR2YW5jZS53aWR0aCgpLCBhZGp1c3RlZEJhc2VB
ZHZhbmNlLmhlaWdodCgpKTsKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCisgICAg
ICAgICAgICAgICAgaWYgKGsgKyAxIDwgbV9hZGp1c3RlZEJhc2VBZHZhbmNlcy5zaXplKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcGFpbnRBZHZhbmNlLnNldFdpZHRoKHBhaW50QWR2YW5jZS53
aWR0aCgpICsgZ2x5cGhPcmlnaW4oayArIDEpLngoKSAtIGdseXBoT3JpZ2luKGspLngoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHBhaW50QWR2YW5jZS5zZXRIZWlnaHQocGFpbnRBZHZhbmNlLmhl
aWdodCgpIC0gZ2x5cGhPcmlnaW4oayArIDEpLnkoKSArIGdseXBoT3JpZ2luKGspLnkoKSk7Cisg
ICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFk
ZChtX2FkanVzdGVkR2x5cGhzW2tdLCAmY29tcGxleFRleHRSdW4uZm9udCgpLCBwYWludEFkdmFu
Y2UsIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQobV9nbHlwaEluQ3VycmVudFJ1bikpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB1bnNpZ25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlw
aCA9IG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGg7CisgICAgICAgICAgICBtX2NoYXJhY3Rlcklu
Q3VycmVudEdseXBoID0gc3RkOjptaW4obV9jdXJyZW50Q2hhcmFjdGVyIC0gY29tcGxleFRleHRS
dW4uc3RyaW5nTG9jYXRpb24oKSwgZ2x5cGhFbmRPZmZzZXQpIC0gZ2x5cGhTdGFydE9mZnNldDsK
KyAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhZGp1c3RlZEJhc2VBZHZhbmNlLndpZHRo
KCkgKiBydW5XaWR0aFNvRmFyRnJhY3Rpb24oZ2x5cGhTdGFydE9mZnNldCwgZ2x5cGhFbmRPZmZz
ZXQsIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoLCBpdGVyYXRpb25TdHlsZSk7CisKKyAgICAg
ICAgICAgIGlmIChnbHlwaEVuZE9mZnNldCArIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9u
KCkgPiBtX2N1cnJlbnRDaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBtX251bUdseXBoc1NvRmFyKys7CisgICAgICAgICAgICBtX2dseXBoSW5DdXJyZW50
UnVuKys7CisgICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVudEdseXBoID0gMDsKKyAgICAg
ICAgICAgIGlmIChsdHIpIHsKKyAgICAgICAgICAgICAgICBnKys7CisgICAgICAgICAgICAgICAg
aysrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBnLS07CisgICAgICAg
ICAgICAgICAgay0tOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGN1cnJlbnRS
dW5JbmRleCA9IGluY3JlbWVudEN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7CisgICAgICAgIG1f
Z2x5cGhJbkN1cnJlbnRSdW4gPSAwOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBzdGQ6OnBh
aXI8Ym9vbCwgYm9vbD4gZXhwYW5zaW9uTG9jYXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJl
YXRBc1NwYWNlLCBib29sIGx0ciwgYm9vbCBpc0FmdGVyRXhwYW5zaW9uLCBib29sIGZvcmJpZExl
YWRpbmdFeHBhbnNpb24sIGJvb2wgZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24sIGJvb2wgZm9yY2VM
ZWFkaW5nRXhwYW5zaW9uLCBib29sIGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pCit7CisgICAgYm9v
bCBleHBhbmRMZWZ0ID0gaWRlb2dyYXBoOworICAgIGJvb2wgZXhwYW5kUmlnaHQgPSBpZGVvZ3Jh
cGg7CisgICAgaWYgKHRyZWF0QXNTcGFjZSkgeworICAgICAgICBpZiAobHRyKQorICAgICAgICAg
ICAgZXhwYW5kUmlnaHQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBleHBhbmRM
ZWZ0ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24pCisgICAgICAgIGV4
cGFuZExlZnQgPSBmYWxzZTsKKyAgICBBU1NFUlQoIWZvcmJpZExlYWRpbmdFeHBhbnNpb24gfHwg
IWZvcmNlTGVhZGluZ0V4cGFuc2lvbik7CisgICAgQVNTRVJUKCFmb3JiaWRUcmFpbGluZ0V4cGFu
c2lvbiB8fCAhZm9yY2VUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgaWYgKGZvcmJpZExlYWRpbmdF
eHBhbnNpb24pCisgICAgICAgIGV4cGFuZExlZnQgPSBmYWxzZTsKKyAgICBpZiAoZm9yYmlkVHJh
aWxpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZFJpZ2h0ID0gZmFsc2U7CisgICAgaWYgKGZv
cmNlTGVhZGluZ0V4cGFuc2lvbikKKyAgICAgICAgZXhwYW5kTGVmdCA9IHRydWU7CisgICAgaWYg
KGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pCisgICAgICAgIGV4cGFuZFJpZ2h0ID0gdHJ1ZTsKKyAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQpOworfQorCit2
b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKQorewor
ICAgIGJvb2wgYWZ0ZXJFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExl
YWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uOworICAgIGZsb2F0
IHdpZHRoU2luY2VMYXN0Q29tbWl0ID0gMDsKKyAgICBzaXplX3QgcnVuQ291bnQgPSBtX2NvbXBs
ZXhUZXh0UnVucy5zaXplKCk7CisgICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSAobV9mb250Lmxl
dHRlclNwYWNpbmcoKSB8fCBtX2ZvbnQud29yZFNwYWNpbmcoKSB8fCBtX2V4cGFuc2lvbikgJiYg
IW1fcnVuLnNwYWNpbmdEaXNhYmxlZCgpOworICAgIGJvb2wgcnVuRm9yY2VzTGVhZGluZ0V4cGFu
c2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVhZGluZ0V4cGFuc2lvbk1hc2sp
ID09IEZvcmNlTGVhZGluZ0V4cGFuc2lvbjsKKyAgICBib29sIHJ1bkZvcmNlc1RyYWlsaW5nRXhw
YW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBUcmFpbGluZ0V4cGFuc2lvbk1h
c2spID09IEZvcmNlVHJhaWxpbmdFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JiaWRzTGVhZGlu
Z0V4cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhhdmlvcigpICYgTGVhZGluZ0V4cGFuc2lv
bk1hc2spID09IEZvcmJpZExlYWRpbmdFeHBhbnNpb247CisgICAgYm9vbCBydW5Gb3JiaWRzVHJh
aWxpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAmIFRyYWlsaW5nRXhw
YW5zaW9uTWFzaykgPT0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb247CisKKyAgICAvLyBXZSBhcmUg
aXRlcmF0aW5nIGluIGdseXBoIG9yZGVyLCBub3Qgc3RyaW5nIG9yZGVyLiBDb21wYXJlIHRoaXMg
dG8gV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKCkKKyAgICBmb3IgKHNpemVfdCBydW5J
bmRleCA9IDA7IHJ1bkluZGV4IDwgcnVuQ291bnQ7ICsrcnVuSW5kZXgpIHsKKyAgICAgICAgQ29t
cGxleFRleHRSdW4mIGNvbXBsZXhUZXh0UnVuID0gKm1fY29tcGxleFRleHRSdW5zW3J1bkluZGV4
XTsKKyAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudCA9IGNvbXBsZXhUZXh0UnVuLmdseXBoQ291
bnQoKTsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IGNvbXBsZXhUZXh0UnVuLmZvbnQoKTsK
KworICAgICAgICAvLyBSZXByZXNlbnQgdGhlIGluaXRpYWwgYWR2YW5jZSBmb3IgYSB0ZXh0IHJ1
biBieSBhZGp1c3RpbmcgdGhlIGFkdmFuY2UKKyAgICAgICAgLy8gb2YgdGhlIGxhc3QgZ2x5cGgg
b2YgdGhlIHByZXZpb3VzIHRleHQgcnVuIGluIHRoZSBnbHlwaCBidWZmZXIuCisgICAgICAgIGlm
ICghY29tcGxleFRleHRSdW4uZ2x5cGhPcmlnaW5zKCkgJiYgcnVuSW5kZXggJiYgbV9hZGp1c3Rl
ZEJhc2VBZHZhbmNlcy5zaXplKCkpIHsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBwcmV2aW91c0Fk
dmFuY2UgPSBtX2FkanVzdGVkQmFzZUFkdmFuY2VzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZXZp
b3VzQWR2YW5jZS5leHBhbmQoY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgp
LCAtY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBtX2FkanVzdGVkQmFzZUFkdmFuY2VzW21fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpIC0g
MV0gPSBwcmV2aW91c0FkdmFuY2U7CisgICAgICAgIH0KKyAgICAgICAgd2lkdGhTaW5jZUxhc3RD
b21taXQgKz0gY29tcGxleFRleHRSdW4uaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpOworCisgICAg
ICAgIGlmICghY29tcGxleFRleHRSdW4uaXNMVFIoKSkKKyAgICAgICAgICAgIG1faXNMVFJPbmx5
ID0gZmFsc2U7CisKKyAgICAgICAgY29uc3QgR2x5cGgqIGdseXBocyA9IGNvbXBsZXhUZXh0UnVu
LmdseXBocygpOworICAgICAgICBjb25zdCBGbG9hdFNpemUqIGFkdmFuY2VzID0gY29tcGxleFRl
eHRSdW4uYmFzZUFkdmFuY2VzKCk7CisKKyAgICAgICAgYm9vbCBsYXN0UnVuID0gcnVuSW5kZXgg
KyAxID09IHJ1bkNvdW50OworICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9udC5zcGFjZVdp
ZHRoKCkgLSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICAgICAgY29uc3QgVUNoYXIq
IGNwID0gY29tcGxleFRleHRSdW4uY2hhcmFjdGVycygpOworICAgICAgICBGbG9hdFBvaW50IGds
eXBoT3JpZ2luOworICAgICAgICBzaXplX3QgbGFzdENoYXJhY3RlckluZGV4ID0gbV9ydW4ubHRy
KCkgPyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1pbigpIDogc3RkOjpudW1lcmljX2xp
bWl0czxzaXplX3Q+OjptYXgoKTsKKyAgICAgICAgYm9vbCBpc01vbm90b25pYyA9IHRydWU7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQ291bnQ7IGkrKykgeworICAg
ICAgICAgICAgc2l6ZV90IGNoYXJhY3RlckluZGV4ID0gY29tcGxleFRleHRSdW4uaW5kZXhBdChp
KTsKKyAgICAgICAgICAgIGlmIChtX3J1bi5sdHIoKSkgeworICAgICAgICAgICAgICAgIGlmIChj
aGFyYWN0ZXJJbmRleCA8IGxhc3RDaGFyYWN0ZXJJbmRleCkKKyAgICAgICAgICAgICAgICAgICAg
aXNNb25vdG9uaWMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNoYXJhY3RlckluZGV4ID4gbGFzdENoYXJhY3RlckluZGV4KQorICAgICAgICAgICAg
ICAgICAgICBpc01vbm90b25pYyA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
VUNoYXIgY2ggPSAqKGNwICsgY2hhcmFjdGVySW5kZXgpOworICAgICAgICAgICAgYm9vbCBsYXN0
R2x5cGggPSBsYXN0UnVuICYmIGkgKyAxID09IGdseXBoQ291bnQ7CisgICAgICAgICAgICBVQ2hh
ciBuZXh0Q2g7CisgICAgICAgICAgICBpZiAobGFzdEdseXBoKQorICAgICAgICAgICAgICAgIG5l
eHRDaCA9ICcgJzsKKyAgICAgICAgICAgIGVsc2UgaWYgKGkgKyAxIDwgZ2x5cGhDb3VudCkKKyAg
ICAgICAgICAgICAgICBuZXh0Q2ggPSAqKGNwICsgY29tcGxleFRleHRSdW4uaW5kZXhBdChpICsg
MSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRDaCA9ICoobV9jb21w
bGV4VGV4dFJ1bnNbcnVuSW5kZXggKyAxXS0+Y2hhcmFjdGVycygpICsgbV9jb21wbGV4VGV4dFJ1
bnNbcnVuSW5kZXggKyAxXS0+aW5kZXhBdCgwKSk7CisKKyAgICAgICAgICAgIGJvb2wgdHJlYXRB
c1NwYWNlID0gRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaCk7CisgICAgICAgICAgICBHbHlw
aCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnQuc3BhY2VHbHlwaCgpIDogZ2x5cGhzW2ldOwor
ICAgICAgICAgICAgRmxvYXRTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBGbG9hdFNpemUo
c3BhY2VXaWR0aCwgYWR2YW5jZXNbaV0uaGVpZ2h0KCkpIDogYWR2YW5jZXNbaV07CisKKyAgICAg
ICAgICAgIGlmIChjaCA9PSAnXHQnICYmIG1fcnVuLmFsbG93VGFicygpKQorICAgICAgICAgICAg
ICAgIGFkdmFuY2UuZXhwYW5kKG1fZm9udC50YWJXaWR0aChmb250LCBtX3J1bi50YWJTaXplKCks
IG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0KSwgMCk7
CisgICAgICAgICAgICBlbHNlIGlmIChGb250Q2FzY2FkZTo6dHJlYXRBc1plcm9XaWR0aFNwYWNl
KGNoKSAmJiAhdHJlYXRBc1NwYWNlKSB7CisgICAgICAgICAgICAgICAgYWR2YW5jZS5zZXRXaWR0
aCgwKTsKKyAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnQuc3BhY2VHbHlwaCgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhZHZhbmNlLmV4cGFuZChmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSwgMCk7CisKKyAgICAgICAgICAgIGlmIChoYXNFeHRyYVNwYWNpbmcpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIGdseXBoIHdpdGggYW4gYWR2YW5jZSwgYWRkIGluIGxl
dHRlci1zcGFjaW5nLgorICAgICAgICAgICAgICAgIC8vIFRoYXQgd2F5IHdlIHdlZWQgb3V0IHpl
cm8gd2lkdGggbHVya2Vycy4gVGhpcyBiZWhhdmlvciBtYXRjaGVzIHRoZSBmYXN0IHRleHQgY29k
ZSBwYXRoLgorICAgICAgICAgICAgICAgIGlmIChhZHZhbmNlLndpZHRoKCkpCisgICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UuZXhwYW5kKG1fZm9udC5sZXR0ZXJTcGFjaW5nKCksIDApOworCisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVySW5kZXhJblJ1biA9IGNoYXJhY3Rlcklu
ZGV4ICsgY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICBi
b29sIGlzRmlyc3RDaGFyYWN0ZXIgPSAhKGNoYXJhY3RlckluZGV4ICsgY29tcGxleFRleHRSdW4u
c3RyaW5nTG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGFyYWN0ZXIg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVySW5kZXhJblJ1biArIDEpID09IG1fcnVu
Lmxlbmd0aCgpIHx8IChVMTZfSVNfTEVBRChjaCkgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNo
YXJhY3RlckluZGV4SW5SdW4gKyAyKSA9PSBtX3J1bi5sZW5ndGgoKSAmJiBVMTZfSVNfVFJBSUwo
KihjcCArIGNoYXJhY3RlckluZGV4ICsgMSkpKTsKKworICAgICAgICAgICAgICAgIGJvb2wgZm9y
Y2VMZWFkaW5nRXhwYW5zaW9uID0gZmFsc2U7IC8vIE9uIHRoZSBsZWZ0LCByZWdhcmRsZXNzIG9m
IG1fcnVuLmx0cigpCisgICAgICAgICAgICAgICAgYm9vbCBmb3JjZVRyYWlsaW5nRXhwYW5zaW9u
ID0gZmFsc2U7IC8vIE9uIHRoZSByaWdodCwgcmVnYXJkbGVzcyBvZiBtX3J1bi5sdHIoKQorICAg
ICAgICAgICAgICAgIGJvb2wgZm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGJvb2wgZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpZiAocnVuRm9yY2VzTGVhZGluZ0V4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAg
ICAgZm9yY2VMZWFkaW5nRXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBpc0ZpcnN0Q2hhcmFjdGVy
IDogaXNMYXN0Q2hhcmFjdGVyOworICAgICAgICAgICAgICAgIGlmIChydW5Gb3JjZXNUcmFpbGlu
Z0V4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgZm9yY2VUcmFpbGluZ0V4cGFuc2lvbiA9
IG1fcnVuLmx0cigpID8gaXNMYXN0Q2hhcmFjdGVyIDogaXNGaXJzdENoYXJhY3RlcjsKKyAgICAg
ICAgICAgICAgICBpZiAocnVuRm9yYmlkc0xlYWRpbmdFeHBhbnNpb24pCisgICAgICAgICAgICAg
ICAgICAgIGZvcmJpZExlYWRpbmdFeHBhbnNpb24gPSBtX3J1bi5sdHIoKSA/IGlzRmlyc3RDaGFy
YWN0ZXIgOiBpc0xhc3RDaGFyYWN0ZXI7CisgICAgICAgICAgICAgICAgaWYgKHJ1bkZvcmJpZHNU
cmFpbGluZ0V4cGFuc2lvbikKKyAgICAgICAgICAgICAgICAgICAgZm9yYmlkVHJhaWxpbmdFeHBh
bnNpb24gPSBtX3J1bi5sdHIoKSA/IGlzTGFzdENoYXJhY3RlciA6IGlzRmlyc3RDaGFyYWN0ZXI7
CisgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGp1c3RpZmljYXRpb24gYW5kIHdvcmQtc3BhY2lu
Zy4KKyAgICAgICAgICAgICAgICBib29sIGlkZW9ncmFwaCA9IEZvbnRDYXNjYWRlOjppc0NKS0lk
ZW9ncmFwaE9yU3ltYm9sKGNoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlIHx8
IGlkZW9ncmFwaCB8fCBmb3JjZUxlYWRpbmdFeHBhbnNpb24gfHwgZm9yY2VUcmFpbGluZ0V4cGFu
c2lvbikgeworICAgICAgICAgICAgICAgICAgICAvLyBEaXN0cmlidXRlIHRoZSBydW4ncyB0b3Rh
bCBleHBhbnNpb24gZXZlbmx5IG92ZXIgYWxsIGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGluIHRo
ZSBydW4uCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2V4cGFuc2lvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBleHBhbmRMZWZ0LCBleHBhbmRSaWdodDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dGllKGV4cGFuZExlZnQsIGV4cGFuZFJpZ2h0KSA9IGV4cGFuc2lv
bkxvY2F0aW9uKGlkZW9ncmFwaCwgdHJlYXRBc1NwYWNlLCBtX3J1bi5sdHIoKSwgYWZ0ZXJFeHBh
bnNpb24sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24sIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uLCBm
b3JjZUxlYWRpbmdFeHBhbnNpb24sIGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGV4cGFuZExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbmNyZWFzZSBwcmV2aW91cyB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV90b3RhbFdpZHRoICs9IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5p
dHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWRqdXN0ZWRCYXNlQWR2YW5j
ZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlYWRpbmdF
eHBhbnNpb24gPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hZGp1c3Rl
ZEJhc2VBZHZhbmNlcy5sYXN0KCkuZXhwYW5kKG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIDAp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGV4cGFuZFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24g
LT0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlLmV4cGFuZChtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAv
LyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCisgICAgICAgICAgICAgICAgICAgIGlmICh0cmVh
dEFzU3BhY2UgJiYgKGNoICE9ICdcdCcgfHwgIW1fcnVuLmFsbG93VGFicygpKSAmJiAoY2hhcmFj
dGVySW5kZXggPiAwIHx8IHJ1bkluZGV4ID4gMCkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlLmV4cGFuZChtX2ZvbnQud29yZFNwYWNpbmco
KSwgMCk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFmdGVy
RXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdpZHRoU2lu
Y2VMYXN0Q29tbWl0ICs9IGFkdmFuY2Uud2lkdGgoKTsgCisKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBDb21iaW5pbmcgbWFya3Mgc2hvdWxkIHJlY2VpdmUgYSB0ZXh0IGVtcGhhc2lzIG1hcmsgaWYg
dGhleSBhcmUgY29tYmluZSB3aXRoIGEgc3BhY2UuCisgICAgICAgICAgICBpZiAobV9mb3JUZXh0
RW1waGFzaXMgJiYgKCFGb250Q2FzY2FkZTo6Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhjaCkgfHwg
KFVfR0VUX0dDX01BU0soY2gpICYgVV9HQ19NX01BU0spKSkKKyAgICAgICAgICAgICAgICBnbHlw
aCA9IDA7CisKKyAgICAgICAgICAgIGFkdmFuY2Uuc2V0SGVpZ2h0KGFkdmFuY2UuaGVpZ2h0KCkg
KiAtMSk7CisgICAgICAgICAgICBtX2FkanVzdGVkQmFzZUFkdmFuY2VzLmFwcGVuZChhZHZhbmNl
KTsKKyNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCisgICAgICAgICAgICBpZiAoYXV0
byogb3JpZ2lucyA9IGNvbXBsZXhUZXh0UnVuLmdseXBoT3JpZ2lucygpKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA8IG1fYWRqdXN0ZWRCYXNlQWR2YW5j
ZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2dseXBoT3JpZ2lucy5ncm93KG1fYWRqdXN0
ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2dseXBoT3JpZ2luc1tt
X2dseXBoT3JpZ2lucy5zaXplKCkgLSAxXSA9IG9yaWdpbnNbaV07CisgICAgICAgICAgICAgICAg
QVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA9PSBtX2FkanVzdGVkQmFzZUFkdmFuY2VzLnNp
emUoKSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIG1fYWRqdXN0ZWRHbHlw
aHMuYXBwZW5kKGdseXBoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRmxvYXRSZWN0IGds
eXBoQm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChnbHlwaCk7CisgICAgICAgICAgICBnbHlw
aEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngoKSwgZ2x5cGhPcmlnaW4ueSgpKTsKKyAgICAgICAg
ICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFggPSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdC
b3hYLCBnbHlwaEJvdW5kcy54KCkpOworICAgICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94
WCA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLm1heFgoKSk7
CisgICAgICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hZID0gc3RkOjptaW4obV9taW5HbHlw
aEJvdW5kaW5nQm94WSwgZ2x5cGhCb3VuZHMueSgpKTsKKyAgICAgICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFkgPSBzdGQ6Om1heChtX21heEdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5k
cy5tYXhZKCkpOworICAgICAgICAgICAgZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbGFzdENoYXJhY3RlckluZGV4ID0gY2hhcmFjdGVySW5kZXg7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc01vbm90b25pYykKKyAgICAgICAgICAgIGNvbXBs
ZXhUZXh0UnVuLnNldElzTm9uTW9ub3RvbmljKCk7CisgICAgfQorCisgICAgbV90b3RhbFdpZHRo
ICs9IHdpZHRoU2luY2VMYXN0Q29tbWl0OworfQorCisvLyBNaXNzaW5nIGdseXBocyBydW4gY29u
c3RydWN0b3IuIENvcmUgVGV4dCB3aWxsIG5vdCBnZW5lcmF0ZSBhIHJ1biBvZiBtaXNzaW5nIGds
eXBocywgaW5zdGVhZCBmYWxsaW5nIGJhY2sgb24KKy8vIGdseXBocyBmcm9tIExhc3RSZXNvcnQu
IFdlIHdhbnQgdG8gdXNlIHRoZSBwcmltYXJ5IGZvbnQncyBtaXNzaW5nIGdseXBoIGluIG9yZGVy
IHRvIG1hdGNoIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgorQ29tcGxleFRleHRDb250cm9sbGVy
OjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xl
bmd0aCwgc2l6ZV90IGluZGV4QmVnaW4sIHNpemVfdCBpbmRleEVuZCwgYm9vbCBsdHIpCisgICAg
OiBtX2ZvbnQoZm9udCkKKyAgICAsIG1fY2hhcmFjdGVycyhjaGFyYWN0ZXJzKQorICAgICwgbV9z
dHJpbmdMZW5ndGgoc3RyaW5nTGVuZ3RoKQorICAgICwgbV9pbmRleEJlZ2luKGluZGV4QmVnaW4p
CisgICAgLCBtX2luZGV4RW5kKGluZGV4RW5kKQorICAgICwgbV9zdHJpbmdMb2NhdGlvbihzdHJp
bmdMb2NhdGlvbikKKyAgICAsIG1faXNMVFIobHRyKQoreworICAgIGF1dG8gcnVuTGVuZ3RoSW5D
b2RlVW5pdHMgPSBtX2luZGV4RW5kIC0gbV9pbmRleEJlZ2luOworICAgIG1fY29yZVRleHRJbmRp
Y2VzVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocnVuTGVuZ3RoSW5Db2RlVW5pdHMpOwor
ICAgIHVuc2lnbmVkIHIgPSBtX2luZGV4QmVnaW47CisgICAgd2hpbGUgKHIgPCBtX2luZGV4RW5k
KSB7CisgICAgICAgIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChyKTsK
KyAgICAgICAgVUNoYXIzMiBjaGFyYWN0ZXI7CisgICAgICAgIFUxNl9ORVhUKG1fY2hhcmFjdGVy
cywgciwgbV9zdHJpbmdMZW5ndGgsIGNoYXJhY3Rlcik7CisgICAgfQorICAgIG1fZ2x5cGhDb3Vu
dCA9IG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLnNpemUoKTsKKyAgICBpZiAoIWx0cikgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIHIgPSAwLCBlbmQgPSBtX2dseXBoQ291bnQgLSAxOyByIDwgbV9n
bHlwaENvdW50IC8gMjsgKytyLCAtLWVuZCkKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX2NvcmVU
ZXh0SW5kaWNlc1ZlY3RvcltyXSwgbV9jb3JlVGV4dEluZGljZXNWZWN0b3JbZW5kXSk7CisgICAg
fQorCisgICAgLy8gU3ludGhlc2l6ZSBhIHJ1biBvZiBtaXNzaW5nIGdseXBocy4KKyAgICBtX2ds
eXBoc1ZlY3Rvci5maWxsKDAsIG1fZ2x5cGhDb3VudCk7CisgICAgbV9iYXNlQWR2YW5jZXNWZWN0
b3IuZmlsbChGbG9hdFNpemUobV9mb250LndpZHRoRm9yR2x5cGgoMCksIDApLCBtX2dseXBoQ291
bnQpOworfQorCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpDb21wbGV4
VGV4dFJ1bihjb25zdCBWZWN0b3I8RmxvYXRTaXplPiYgYWR2YW5jZXMsIGNvbnN0IFZlY3RvcjxG
bG9hdFBvaW50PiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPEdseXBoPiYgZ2x5cGhzLCBjb25zdCBW
ZWN0b3I8c2l6ZV90PiYgc3RyaW5nSW5kaWNlcywgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlLCBj
b25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IHN0cmluZ0xv
Y2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBzaXplX3QgaW5kZXhCZWdpbiwgc2l6ZV90IGlu
ZGV4RW5kLCBib29sIGx0cikKKyAgICA6IG1fYmFzZUFkdmFuY2VzVmVjdG9yKGFkdmFuY2VzKQor
ICAgICwgbV9nbHlwaE9yaWdpbnMob3JpZ2lucykKKyAgICAsIG1fZ2x5cGhzVmVjdG9yKGdseXBo
cykKKyAgICAsIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yKHN0cmluZ0luZGljZXMpCisgICAgLCBt
X2luaXRpYWxBZHZhbmNlKGluaXRpYWxBZHZhbmNlKQorICAgICwgbV9mb250KGZvbnQpCisgICAg
LCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKKyAgICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xl
bmd0aCkKKyAgICAsIG1faW5kZXhCZWdpbihpbmRleEJlZ2luKQorICAgICwgbV9pbmRleEVuZChp
bmRleEVuZCkKKyAgICAsIG1fZ2x5cGhDb3VudChnbHlwaHMuc2l6ZSgpKQorICAgICwgbV9zdHJp
bmdMb2NhdGlvbihzdHJpbmdMb2NhdGlvbikKKyAgICAsIG1faXNMVFIobHRyKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVlMjgzZTU0
OGUxMDQzMWZjYjQzMmIxZTE5OWFjZGFkYzE2ZjRiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaApAQCAt
MCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2RlZmluZSBV
U0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTICgoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMCkgfHwgKFBMQVRGT1JNKElPUykgJiYgX19J
UEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gOTAwMDApKQorCit0eXBlZGVmIGNvbnN0
IHN0cnVjdCBfX0NUUnVuICogQ1RSdW5SZWY7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NUTGlu
ZSAqIENUTGluZVJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250Q2FzY2Fk
ZTsKK2NsYXNzIEZvbnQ7CitjbGFzcyBUZXh0UnVuOworCitlbnVtIEdseXBoSXRlcmF0aW9uU3R5
bGUgeyBJbmNsdWRlUGFydGlhbEdseXBocywgQnlXaG9sZUdseXBocyB9OworCisvLyBDb21wbGV4
VGV4dENvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyBhbmQgbWVhc3VyaW5n
IGdseXBocyBmb3IKKy8vIGNvbXBsZXggc2NyaXB0cyBvbiBtYWNPUyBhbmQgaU9TLgorY2xhc3Mg
Q29tcGxleFRleHRDb250cm9sbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2NhZGUmLCBjb25z
dCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBI
YXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhh
c2lzID0gZmFsc2UpOworCisgICAgY2xhc3MgQ29tcGxleFRleHRSdW47CisgICAgV0VCQ09SRV9F
WFBPUlQgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIFZlY3RvcjxSZWY8Q29tcGxleFRleHRSdW4+PiYpOworCisgICAgLy8gQWR2YW5jZSBh
bmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciogPSBudWxscHRy
LCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBhcnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29u
c3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gbnVsbHB0cik7CisKKyAgICAvLyBDb21wdXRlIHRo
ZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHggY29vcmRpbmF0ZS4KKyAgICB1bnNpZ25l
ZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsK
KworICAgIC8vIFJldHVybnMgdGhlIHdpZHRoIG9mIGV2ZXJ5dGhpbmcgd2UndmUgY29uc3VtZWQg
c28gZmFyLgorICAgIGZsb2F0IHJ1bldpZHRoU29GYXIoKSBjb25zdCB7IHJldHVybiBtX3J1bldp
ZHRoU29GYXI7IH0KKworICAgIGZsb2F0IHRvdGFsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Rv
dGFsV2lkdGg7IH0KKworICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdCb3hYKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WDsgfQorICAgIGZsb2F0IG1heEdseXBoQm91bmRp
bmdCb3hYKCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsgfQorICAgIGZs
b2F0IG1pbkdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyByZXR1cm4gbV9taW5HbHlwaEJvdW5k
aW5nQm94WTsgfQorICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQorCisgICAgZmxvYXQgbGVhZGluZ0V4cGFuc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbGVhZGluZ0V4cGFuc2lvbjsgfQorCisgICAgY2xhc3MgQ29t
cGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wbGV4VGV4dFJ1bj4geworICAgIHB1
YmxpYzoKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKElPUykKKyAgICAgICAgc3RhdGlj
IFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBm
b250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNp
emVfdCBzdHJpbmdMZW5ndGgsIHNpemVfdCBpbmRleEJlZ2luLCBzaXplX3QgaW5kZXhFbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVu
KGN0UnVuLCBmb250LCBjaGFyYWN0ZXJzLCBzdHJpbmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBp
bmRleEJlZ2luLCBpbmRleEVuZCkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBzdGF0
aWMgUmVmPENvbXBsZXhUZXh0UnVuPiBjcmVhdGUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVu
Z3RoLCBzaXplX3QgaW5kZXhCZWdpbiwgc2l6ZV90IGluZGV4RW5kLCBib29sIGx0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcGxleFRleHRSdW4oZm9u
dCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24sIHN0cmluZ0xlbmd0aCwgaW5kZXhCZWdpbiwg
aW5kZXhFbmQsIGx0cikpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4
VGV4dFJ1bj4gY3JlYXRlKGNvbnN0IFZlY3RvcjxGbG9hdFNpemU+JiBhZHZhbmNlcywgY29uc3Qg
VmVjdG9yPEZsb2F0UG9pbnQ+JiBvcmlnaW5zLCBjb25zdCBWZWN0b3I8R2x5cGg+JiBnbHlwaHMs
IGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBzdHJpbmdJbmRpY2VzLCBGbG9hdFNpemUgaW5pdGlhbEFk
dmFuY2UsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
c3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIHNpemVfdCBpbmRleEJlZ2luLCBz
aXplX3QgaW5kZXhFbmQsIGJvb2wgbHRyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBz
dHJpbmdJbmRpY2VzLCBpbml0aWFsQWR2YW5jZSwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9j
YXRpb24sIHN0cmluZ0xlbmd0aCwgaW5kZXhCZWdpbiwgaW5kZXhFbmQsIGx0cikpOworICAgICAg
ICB9CisgICAgICAgIHN0YXRpYyB2b2lkIGFzZGYoY29uc3QgVmVjdG9yPEZsb2F0U2l6ZT4mKSB7
IH0KKworICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9nbHlw
aENvdW50OyB9CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnQ7IH0KKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBt
X2NoYXJhY3RlcnM7IH0KKyAgICAgICAgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZ0xvY2F0aW9uOyB9CisgICAgICAgIHNpemVfdCBzdHJpbmdMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZ0xlbmd0aDsgfQorICAgICAgICBBTFdBWVNfSU5MSU5F
IHNpemVfdCBpbmRleEF0KHNpemVfdCkgY29uc3Q7CisgICAgICAgIHNpemVfdCBpbmRleEJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleEJlZ2luOyB9CisgICAgICAgIHNpemVfdCBpbmRleEVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhFbmQ7IH0KKyAgICAgICAgc2l6ZV90IGVuZE9mZnNl
dEF0KHNpemVfdCBpKSBjb25zdCB7IEFTU0VSVCghbV9pc01vbm90b25pYyk7IHJldHVybiBtX2ds
eXBoRW5kT2Zmc2V0c1tpXTsgfQorICAgICAgICBjb25zdCBHbHlwaCogZ2x5cGhzKCkgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaHNWZWN0b3IuZGF0YSgpOyB9CisKKyAgICAgICAgLyoKKyAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWCAoUGFpbnQg
Z2x5cGggcG9zaXRpb24pICAgWCAoUGFpbnQgZ2x5cGggcG9zaXRpb24pICAgWCAoUGFpbnQgZ2x5
cGggcG9zaXRpb24pCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNyAgICAgICAgICAgICAgICAgICAgICAgICAgNyAgICAgICAgICAgICAgICAg
ICAgICAgICAgNworICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLworICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvIChHbHlwaCBvcmlnaW4pICAgICAgICAgICAvIChHbHlwaCBvcmlnaW4pICAgICAgICAg
ICAvIChHbHlwaCBvcmlnaW4pCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgLworICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLworICAgICAgICAgKiAgICAgICAgICAgICAgICBYLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS1YLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1YLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Y
LS0tLT4uLi4KKyAgICAgICAgICogKHRleHQgcG9zaXRpb24gXikgIChpbml0aWFsIGFkdmFuY2Up
ICAgICAgICAgIChiYXNlIGFkdmFuY2UpICAgICAgICAgICAgIChiYXNlIGFkdmFuY2UpCisgICAg
ICAgICAqLworICAgICAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UoKSBjb25zdCB7IHJldHVy
biBtX2luaXRpYWxBZHZhbmNlOyB9CisgICAgICAgIGNvbnN0IEZsb2F0U2l6ZSogYmFzZUFkdmFu
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlQWR2YW5jZXNWZWN0b3IuZGF0YSgpOyB9CisgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQqIGdseXBoT3JpZ2lucygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhPcmlnaW5zLnNpemUoKSA9PSBnbHlwaENvdW50KCkgPyBtX2dseXBoT3JpZ2lucy5kYXRhKCkg
OiBudWxscHRyOyB9CisgICAgICAgIGJvb2wgaXNMVFIoKSBjb25zdCB7IHJldHVybiBtX2lzTFRS
OyB9CisgICAgICAgIGJvb2wgaXNNb25vdG9uaWMoKSBjb25zdCB7IHJldHVybiBtX2lzTW9ub3Rv
bmljOyB9CisgICAgICAgIHZvaWQgc2V0SXNOb25Nb25vdG9uaWMoKTsKKworICAgIHByaXZhdGU6
CisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShJT1MpCisgICAgICAgIENvbXBsZXhUZXh0
UnVuKENUUnVuUmVmLCBjb25zdCBGb250JiwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgdW5zaWduZWQgaW5kZXhCZWdp
biwgdW5zaWduZWQgaW5kZXhFbmQpOworI2VuZGlmCisgICAgICAgIENvbXBsZXhUZXh0UnVuKGNv
bnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IHN0cmluZ0xvY2F0aW9u
LCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBzaXplX3QgaW5kZXhCZWdpbiwgc2l6ZV90IGluZGV4RW5k
LCBib29sIGx0cik7CisgICAgICAgIFdFQkNPUkVfRVhQT1JUIENvbXBsZXhUZXh0UnVuKGNvbnN0
IFZlY3RvcjxGbG9hdFNpemU+JiBhZHZhbmNlcywgY29uc3QgVmVjdG9yPEZsb2F0UG9pbnQ+JiBv
cmlnaW5zLCBjb25zdCBWZWN0b3I8R2x5cGg+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBzdHJpbmdJbmRpY2VzLCBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UsIGNvbnN0IEZvbnQmLCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3Ry
aW5nTGVuZ3RoLCBzaXplX3QgaW5kZXhCZWdpbiwgc2l6ZV90IGluZGV4RW5kLCBib29sIGx0cik7
CisKKyAgICAgICAgVmVjdG9yPEZsb2F0U2l6ZSwgNjQ+IG1fYmFzZUFkdmFuY2VzVmVjdG9yOwor
ICAgICAgICBWZWN0b3I8RmxvYXRQb2ludCwgNjQ+IG1fZ2x5cGhPcmlnaW5zOworICAgICAgICBW
ZWN0b3I8R2x5cGgsIDY0PiBtX2dseXBoc1ZlY3RvcjsKKyAgICAgICAgVmVjdG9yPHNpemVfdCwg
NjQ+IG1fZ2x5cGhFbmRPZmZzZXRzOworICAgICAgICBWZWN0b3I8c2l6ZV90LCA2ND4gbV9jb3Jl
VGV4dEluZGljZXNWZWN0b3I7CisgICAgICAgIEZsb2F0U2l6ZSBtX2luaXRpYWxBZHZhbmNlOwor
ICAgICAgICBjb25zdCBGb250JiBtX2ZvbnQ7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJh
Y3RlcnM7CisgICAgICAgIHNpemVfdCBtX3N0cmluZ0xlbmd0aDsKKyAgICAgICAgc2l6ZV90IG1f
aW5kZXhCZWdpbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXhFbmQ7CisgICAgICAgIHNpemVfdCBt
X2dseXBoQ291bnQ7CisgICAgICAgIHNpemVfdCBtX3N0cmluZ0xvY2F0aW9uOworICAgICAgICBi
b29sIG1faXNMVFI7CisgICAgICAgIGJvb2wgbV9pc01vbm90b25pYyB7IHRydWUgfTsKKyAgICB9
OworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmlzaENvbnN0cnVjdGlvbigpOworICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBzdHJpbmdCZWdpbihjb25zdCBDb21wbGV4VGV4dFJ1biYgcnVuKSB7IHJl
dHVybiBydW4uc3RyaW5nTG9jYXRpb24oKSArIHJ1bi5pbmRleEJlZ2luKCk7IH0KKyAgICBzdGF0
aWMgdW5zaWduZWQgc3RyaW5nRW5kKGNvbnN0IENvbXBsZXhUZXh0UnVuJiBydW4pIHsgcmV0dXJu
IHJ1bi5zdHJpbmdMb2NhdGlvbigpICsgcnVuLmluZGV4RW5kKCk7IH0KKworICAgIHZvaWQgY29s
bGVjdENvbXBsZXhUZXh0UnVucygpOworCisgICAgdm9pZCBjb2xsZWN0Q29tcGxleFRleHRSdW5z
Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgc3Ry
aW5nTG9jYXRpb24sIGNvbnN0IEZvbnQqKTsKKyAgICB2b2lkIGFkanVzdEdseXBoc0FuZEFkdmFu
Y2VzKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleE9mQ3VycmVudFJ1bih1bnNpZ25lZCYgbGVmdG1v
c3RHbHlwaCk7CisgICAgdW5zaWduZWQgaW5jcmVtZW50Q3VycmVudFJ1bih1bnNpZ25lZCYgbGVm
dG1vc3RHbHlwaCk7CisKKyAgICBmbG9hdCBydW5XaWR0aFNvRmFyRnJhY3Rpb24odW5zaWduZWQg
Z2x5cGhTdGFydE9mZnNldCwgdW5zaWduZWQgZ2x5cGhFbmRPZmZzZXQsIHVuc2lnbmVkIG9sZENo
YXJhY3RlckluQ3VycmVudEdseXBoLCBHbHlwaEl0ZXJhdGlvblN0eWxlKSBjb25zdDsKKworICAg
IEZsb2F0UG9pbnQgZ2x5cGhPcmlnaW4odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4IDwgbV9nbHlwaE9yaWdpbnMuc2l6ZSgpID8gbV9nbHlwaE9yaWdpbnNbaW5kZXhdIDogRmxv
YXRQb2ludCgpOyB9CisKKyAgICBWZWN0b3I8RmxvYXRTaXplLCAyNTY+IG1fYWRqdXN0ZWRCYXNl
QWR2YW5jZXM7CisgICAgVmVjdG9yPEZsb2F0UG9pbnQsIDI1Nj4gbV9nbHlwaE9yaWdpbnM7Cisg
ICAgVmVjdG9yPEdseXBoLCAyNTY+IG1fYWRqdXN0ZWRHbHlwaHM7CisKKyAgICBWZWN0b3I8VUNo
YXIsIDI1Nj4gbV9zbWFsbENhcHNCdWZmZXI7CisKKyAgICAvLyBUaGVyZSBpcyBhIDMtbGV2ZWwg
aGllcmFyY2h5IGhlcmUuIEF0IHRoZSB0b3AsIHdlIGFyZSBpbnRlcmVzdGVkIGluIG1fcnVuLnN0
cmluZygpLiBXZSBwYXJ0aXRpb24gdGhhdCBzdHJpbmcKKyAgICAvLyBpbnRvIExpbmVzLCBlYWNo
IG9mIHdoaWNoIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB3aGljaCBzaG91bGQgdXNlIHRo
ZSBzYW1lIEZvbnQuIENvcmUgVGV4dCB0aGVuIHBhcnRpdGlvbnMKKyAgICAvLyB0aGUgTGluZSBp
bnRvIENvbXBsZXhUZXh0UnVucy4KKyAgICAvLyBDb21wbGV4VGV4dFJ1bjo6c3RyaW5nTG9jYXRp
b24oKSBhbmQgQ29tcGxleFRleHRSdW46OnN0cmluZ0xlbmd0aCgpIHJlZmVyIHRvIHRoZSBvZmZz
ZXQgYW5kIGxlbmd0aCBvZiB0aGUgTGluZQorICAgIC8vIHJlbGF0aXZlIHRvIG1fcnVuLnN0cmlu
ZygpLiBDb21wbGV4VGV4dFJ1bjo6aW5kZXhBdCgpIHJldHVybnMgdG8gdGhlIG9mZnNldCBvZiBh
IGNvZGVwb2ludCByZWxhdGl2ZSB0bworICAgIC8vIGl0cyBMaW5lLiBDb21wbGV4VGV4dFJ1bjo6
Z2x5cGhzKCkgYW5kIENvbXBsZXhUZXh0UnVuOjphZHZhbmNlcygpIHJlZmVyIHRvIGdseXBocyBy
ZWxhdGl2ZSB0byB0aGUgQ29tcGxleFRleHRSdW4uCisgICAgLy8gVGhlIGxlbmd0aCBvZiB0aGUg
ZW50aXJlIFRleHRSdW4gaXMgbV9ydW4ubGVuZ3RoKCkKKyAgICBWZWN0b3I8UmVmUHRyPENvbXBs
ZXhUZXh0UnVuPiwgMTY+IG1fY29tcGxleFRleHRSdW5zOworCisgICAgLy8gVGhlIGluaXRpYWwg
Y2FwYWNpdHkgb2YgdGhlc2UgdmVjdG9ycyB3YXMgc2VsZWN0ZWQgYXMgYmVpbmcgdGhlIHNtYWxs
ZXN0IHBvd2VyIG9mIHR3byBncmVhdGVyIHRoYW4KKyAgICAvLyB0aGUgYXZlcmFnZSAoMy41KSBw
bHVzIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gKDcuNSkgb2Ygbm9uemVybyBzaXplcyB1c2VkIG9u
IEFyYWJpYyBXaWtpcGVkaWEuCisgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9ydW5JbmRpY2Vz
OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IG1fZ2x5cGhDb3VudEZyb21TdGFydFRvSW5kZXg7
CisKKyAgICBWZWN0b3I8UmV0YWluUHRyPENUTGluZVJlZj4+IG1fY29yZVRleHRMaW5lczsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fc3RyaW5nc0ZvcjhCaXRSdW5zOworCisgICAgSGFzaFNldDxj
b25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250cyB7IG51bGxwdHIgfTsKKworICAgIGNvbnN0IEZv
bnRDYXNjYWRlJiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CisKKyAgICB1bnNp
Z25lZCBtX2N1cnJlbnRDaGFyYWN0ZXIgeyAwIH07CisgICAgdW5zaWduZWQgbV9lbmQgeyAwIH07
CisKKyAgICBmbG9hdCBtX3RvdGFsV2lkdGggeyAwIH07CisgICAgZmxvYXQgbV9ydW5XaWR0aFNv
RmFyIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzU29GYXIgeyAwIH07CisgICAgdW5z
aWduZWQgbV9jdXJyZW50UnVuIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZ2x5cGhJbkN1cnJlbnRS
dW4geyAwIH07CisgICAgdW5zaWduZWQgbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCB7IDAgfTsK
KyAgICBmbG9hdCBtX2V4cGFuc2lvbiB7IDAgfTsKKyAgICBmbG9hdCBtX2V4cGFuc2lvblBlck9w
cG9ydHVuaXR5IHsgMCB9OworICAgIGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbiB7IDAgfTsKKwor
ICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFggeyBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6bWF4KCkgfTsKKyAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYIHsgc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpIH07CisgICAgZmxvYXQgbV9taW5HbHlwaEJvdW5k
aW5nQm94WSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSB9OworICAgIGZsb2F0
IG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgeyBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWlu
KCkgfTsKKworICAgIGJvb2wgbV9pc0xUUk9ubHkgeyB0cnVlIH07CisgICAgYm9vbCBtX21heVVz
ZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZm9yVGV4dEVt
cGhhc2lzIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAppbmRleCBjOWFjNGRkNjE3ZGM1Nzhj
NGVlNDM5Mzc4ZjgyYTI2OWJiMTQ4MDU3Li4xZDQ2ZjNmNzdjNmI4MTM3ZWVlOTBkOGE2ZjU5YmFi
NGYzNGVhYTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcApA
QCAtNTA1LDQgKzUwNSwxNiBAQCB2b2lkIEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0Nh
Y2hlKCkKICAgICB9CiB9CiAKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQor
Y29uc3QgRm9udCYgRm9udDo6bm9TeW50aGVzaXphYmxlRmVhdHVyZXNGb250KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0No
YXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMsIFVDaGFyMzIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRl
eCA3ZTY4MzExMzhiOTc0MDY4OTVhMTc1Y2NjNmMxNTJjZDU1NGIzODEyLi5mZjQxY2Y2YTcxNDk2
YTcwYjBmNGViZjYyYjc5ZTExZjM2MzExNzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKIAogI2luY2x1ZGUgIkNoYXJhY3RlclByb3BlcnRpZXMuaCIKKyNp
bmNsdWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgpAQCAtMzk3
LDI1ICszOTgsNiBAQCBHbHlwaERhdGEgRm9udENhc2NhZGU6OmdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250VmFyaWFudAogICAgIHJldHVybiBtX2ZvbnRz
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgbV9mb250RGVzY3JpcHRpb24sIHZhcmlhbnQpOwog
fQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotCi1zdGQ6OnVuaXF1ZV9wdHI8VGV4dExheW91dCwg
VGV4dExheW91dERlbGV0ZXI+IEZvbnRDYXNjYWRlOjpjcmVhdGVMYXlvdXQoUmVuZGVyVGV4dCYs
IGZsb2F0LCBib29sKSBjb25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFRl
eHRMYXlvdXREZWxldGVyOjpvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdAotewotfQotCi1m
bG9hdCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYsIHVuc2lnbmVkLCB1bnNpZ25lZCwg
SGFzaFNldDxjb25zdCBGb250Kj4qKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiAwOwotfQotCi0jZW5kaWYKLQogc3RhdGljIGNvbnN0IGNoYXIqIGZvbnRGYW1pbGll
c1dpdGhJbnZhbGlkQ2hhcldpZHRoW10gPSB7CiAgICAgIkFtZXJpY2FuIFR5cGV3cml0ZXIiLAog
ICAgICJBcmlhbCBIZWJyZXciLApAQCAtMTI4NCw3ICsxMjY2LDYgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR2x5cGhC
dWZmZXImIGcKIHsKICAgICAvLyBEcmF3IGVhY2ggY29udGlndW91cyBydW4gb2YgZ2x5cGhzIHRo
YXQgdXNlIHRoZSBzYW1lIGZvbnQgZGF0YS4KICAgICBjb25zdCBGb250KiBmb250RGF0YSA9IGds
eXBoQnVmZmVyLmZvbnRBdCgwKTsKLSAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZ2x5cGhCdWZmZXIu
b2Zmc2V0QXQoMCk7CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSwgcG9pbnQu
eSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAgICAgZmxvYXQg
bmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgp
OwogICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZlci5hZHZhbmNl
QXQoMCkuaGVpZ2h0KCk7CkBAIC0xMjkyLDE0ICsxMjczLDEyIEBAIHZvaWQgRm9udENhc2NhZGU6
OmRyYXdHbHlwaEJ1ZmZlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnCiAgICAgdW5zaWduZWQgbmV4dEdseXBoID0gMTsKICAgICB3aGlsZSAobmV4dEdseXBo
IDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0
YSA9IGdseXBoQnVmZmVyLmZvbnRBdChuZXh0R2x5cGgpOwotICAgICAgICBGbG9hdFNpemUgbmV4
dE9mZnNldCA9IGdseXBoQnVmZmVyLm9mZnNldEF0KG5leHRHbHlwaCk7CiAKLSAgICAgICAgaWYg
KG5leHRGb250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0T2Zmc2V0ICE9IG9mZnNldCkgeworICAg
ICAgICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnREYXRhKSB7CiAgICAgICAgICAgICBjb250ZXh0
LmRyYXdHbHlwaHMoKnRoaXMsICpmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0
R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCk7CiAKICAgICAgICAgICAgIGxhc3RGcm9tID0g
bmV4dEdseXBoOwogICAgICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAgICAg
ICAgICBvZmZzZXQgPSBuZXh0T2Zmc2V0OwogICAgICAgICAgICAgc3RhcnRQb2ludC5zZXRYKG5l
eHRYKTsKICAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WShuZXh0WSk7CiAgICAgICAgIH0KQEAg
LTE0MzQsNSArMTQxMyw4NiBAQCBpbnQgRm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvbwogICAgIHJldHVybiBv
ZmZzZXQ7CiB9CiAKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKQorLy8gRklY
TUU6IFVuaWZ5IHRoaXMgd2l0aCB0aGUgbWFjT1MgYW5kIGlPUyBpbXBsZW1lbnRhdGlvbi4KK2Nv
bnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2Uo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVUNo
YXIzMiBiYXNlQ2hhcmFjdGVyOworICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsK
KyAgICBVMTZfTkVYVChjaGFyYWN0ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJh
c2VDaGFyYWN0ZXIpOworICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsK
KworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKK30KKyNl
bmRpZgorCit2b2lkIEZvbnRDYXNjYWRlOjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCB0bykgY29uc3QKK3sKKyAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICBm
bG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQo
cnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CisKKyAgICBpZiAo
Z2x5cGhCdWZmZXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkcmF3RW1waGFz
aXNNYXJrcyhjb250ZXh0LCBnbHlwaEJ1ZmZlciwgbWFyaywgRmxvYXRQb2ludChwb2ludC54KCkg
KyBpbml0aWFsQWR2YW5jZSwgcG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91
dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAor
eworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOworICAg
IGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKKyAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRy
b2xsZXIucnVuV2lkdGhTb0ZhcigpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0byk7CisgICAg
ZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOworCisgICAgaWYg
KHJ1bi5ydGwoKSkKKyAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGNvbnRyb2xsZXIudG90YWxX
aWR0aCgpIC0gYWZ0ZXJXaWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigpLCAwKTsK
KyAgICBlbHNlCisgICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwgMCk7Cisg
ICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGFmdGVy
V2lkdGggLSBiZWZvcmVXaWR0aCkpOworfQorCitmbG9hdCBGb250Q2FzY2FkZTo6Z2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNp
c09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK3sKKyAgICBmbG9hdCBpbml0aWFsQWR2YW5j
ZTsKKworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4sIGZh
bHNlLCAwLCBmb3JUZXh0RW1waGFzaXMpOworICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsK
KyAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOworICAg
IGNvbnRyb2xsZXIuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKKworICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgZmxvYXQgYWZ0ZXJXaWR0
aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOworCisgICAgaWYgKHJ1bi5ydGwoKSkgewor
ICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpIC0gYWZ0ZXJX
aWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigpOworICAgICAgICBnbHlwaEJ1ZmZl
ci5yZXZlcnNlKDAsIGdseXBoQnVmZmVyLnNpemUoKSk7CisgICAgfSBlbHNlCisgICAgICAgIGlu
aXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7CisKKyAgICByZXR1cm4gaW5pdGlhbEFkdmFuY2U7
Cit9CisKK2Zsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cywgR2x5cGhP
dmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKK3sKKyAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcigqdGhpcywgcnVuLCB0cnVlLCBmYWxsYmFja0ZvbnRzKTsKKyAgICBpZiAo
Z2x5cGhPdmVyZmxvdykgeworICAgICAgICBnbHlwaE92ZXJmbG93LT50b3AgPSBzdGQ6Om1heDxp
bnQ+KGdseXBoT3ZlcmZsb3ctPnRvcCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGlu
Z0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmlj
cygpLmFzY2VudCgpKSk7CisgICAgICAgIGdseXBoT3ZlcmZsb3ctPmJvdHRvbSA9IHN0ZDo6bWF4
PGludD4oZ2x5cGhPdmVyZmxvdy0+Ym90dG9tLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91
bmRpbmdCb3hZKCkpIC0gKGdseXBoT3ZlcmZsb3ctPmNvbXB1dGVCb3VuZHMgPyAwIDogZm9udE1l
dHJpY3MoKS5kZXNjZW50KCkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy0+bGVmdCA9IHN0ZDo6
bWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFgoKSkpOwor
ICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IHN0ZDo6bWF4PGludD4oMCwgY2VpbGYoY29u
dHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WCgpIC0gY29udHJvbGxlci50b3RhbFdpZHRoKCkp
KTsKKyAgICB9CisgICAgcmV0dXJuIGNvbnRyb2xsZXIudG90YWxXaWR0aCgpOworfQorCitpbnQg
Rm9udENhc2NhZGU6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAoreworICAg
IENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4pOworICAgIHJldHVy
biBjb250cm9sbGVyLm9mZnNldEZvclBvc2l0aW9uKHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsK
K30KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRl
LmgKaW5kZXggNzMyODQxNTJiMmRkOTYyODQwMWQ0YmVjMDI5OGMyYWYzODJlNThiZC4uNzJlOTZk
YzQ0YWQwOWU4NDgxZGM5NjYxMWQ2MDMzZTBhNmE0NjgwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCkBAIC0xODMsMTAgKzE4Myw4IEBAIHB1
YmxpYzoKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCgpIGNvbnN0OwogICAgIGNvbnN0IEZv
bnRSYW5nZXMmIGZhbGxiYWNrUmFuZ2VzQXQodW5zaWduZWQpIGNvbnN0OwogICAgIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnRWYXJpYW50
ID0gQXV0b1ZhcmlhbnQpIGNvbnN0OwotICAgIAotI2lmIFBMQVRGT1JNKENPQ09BKQorCiAgICAg
Y29uc3QgRm9udCogZm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
Kiwgc2l6ZV90IGxlbmd0aCkgY29uc3Q7Ci0jZW5kaWYKIAogICAgIHN0YXRpYyBib29sIGlzQ0pL
SWRlb2dyYXBoKFVDaGFyMzIpOwogICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoT3JTeW1i
b2woVUNoYXIzMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhC
dWZmZXIuaAppbmRleCAxY2JhYTY3ZWNiNzFmNWEwNzQzZTViMDg0NzY3MWNmNzJmMTAxMDU0Li4w
MmI2ZWFhYzUyMGRkMTEzOWM4ODk2N2MxNGE0YzE3M2MzNDg1ZDZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKQEAgLTY1LDYgKzY1LDEwIEBA
IHB1YmxpYzoKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UoQ0dTaXplIHNpemUpIDogQ0dTaXplKHNp
emUpCiAgICAgewogICAgIH0KKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UoZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCkKKyAgICAgICAgOiBDR1NpemUoQ0dTaXplTWFrZSh3aWR0aCwgaGVpZ2h0KSkK
KyAgICB7CisgICAgfQogCiAgICAgdm9pZCBzZXRXaWR0aChDR0Zsb2F0IHdpZHRoKSB7IHRoaXMt
PkNHU2l6ZTo6d2lkdGggPSB3aWR0aDsgfQogICAgIHZvaWQgc2V0SGVpZ2h0KENHRmxvYXQgaGVp
Z2h0KSB7IHRoaXMtPkNHU2l6ZTo6aGVpZ2h0ID0gaGVpZ2h0OyB9CkBAIC04Nyw5ICs5MSw2IEBA
IHB1YmxpYzoKICAgICAgICAgbV9hZHZhbmNlcy5jbGVhcigpOwogICAgICAgICBpZiAobV9vZmZz
ZXRzSW5TdHJpbmcpCiAgICAgICAgICAgICBtX29mZnNldHNJblN0cmluZy0+Y2xlYXIoKTsKLSNp
ZiBQTEFURk9STShXSU4pCi0gICAgICAgIG1fb2Zmc2V0cy5jbGVhcigpOwotI2VuZGlmCiAgICAg
fQogCiAgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzKHVuc2lnbmVkIGZyb20pIHsgcmV0dXJu
IG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KQEAgLTExOSwxOSArMTIwLDkgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fYWR2YW5jZXNbaW5kZXhdOwogICAgIH0KLQotICAgIEZs
b2F0U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICB7Ci0jaWYgUExBVEZP
Uk0oV0lOKQotICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKLSNlbmRp
ZgotICAgIH0KICAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbm9PZmZzZXQgPSBVSU5U
X01BWDsKLSAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9udCwgZmxvYXQg
d2lkdGgsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gbm9PZmZzZXQsIGNvbnN0IEZsb2F0U2l6
ZSogb2Zmc2V0ID0gMCkKKyAgICB2b2lkIGFkZChHbHlwaCBnbHlwaCwgY29uc3QgRm9udCogZm9u
dCwgZmxvYXQgd2lkdGgsIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gbm9PZmZzZXQpCiAgICAg
ewogICAgICAgICBtX2ZvbnQuYXBwZW5kKGZvbnQpOwogCkBAIC0xNDksMTUgKzE0MCw2IEBAIHB1
YmxpYzoKICNlbHNlCiAgICAgICAgIG1fYWR2YW5jZXMuYXBwZW5kKEZsb2F0U2l6ZSh3aWR0aCwg
MCkpOwogI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIGlmIChvZmZzZXQpCi0g
ICAgICAgICAgICBtX29mZnNldHMuYXBwZW5kKCpvZmZzZXQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX29mZnNldHMuYXBwZW5kKEZsb2F0U2l6ZSgpKTsKLSNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOwotI2VuZGlmCiAgICAgICAgIAogICAgICAgICBpZiAob2Zmc2V0
SW5TdHJpbmcgIT0gbm9PZmZzZXQgJiYgbV9vZmZzZXRzSW5TdHJpbmcpCiAgICAgICAgICAgICBt
X29mZnNldHNJblN0cmluZy0+YXBwZW5kKG9mZnNldEluU3RyaW5nKTsKQEAgLTIxMyw5ICsxOTUs
NiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYWR2YW5jZXMuc2hyaW5rKHRydW5jYXRpb25Qb2ludCk7
CiAgICAgICAgIGlmIChtX29mZnNldHNJblN0cmluZykKICAgICAgICAgICAgIG1fb2Zmc2V0c0lu
U3RyaW5nLT5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKLSNpZiBQTEFURk9STShXSU4pCi0gICAg
ICAgIG1fb2Zmc2V0cy5zaHJpbmsodHJ1bmNhdGlvblBvaW50KTsKLSNlbmRpZgogICAgIH0KIAog
cHJpdmF0ZToKQEAgLTIzMiwxMiArMjExLDYgQEAgcHJpdmF0ZToKICAgICAgICAgR2x5cGhCdWZm
ZXJBZHZhbmNlIHMgPSBtX2FkdmFuY2VzW2luZGV4MV07CiAgICAgICAgIG1fYWR2YW5jZXNbaW5k
ZXgxXSA9IG1fYWR2YW5jZXNbaW5kZXgyXTsKICAgICAgICAgbV9hZHZhbmNlc1tpbmRleDJdID0g
czsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IG1fb2Zm
c2V0c1tpbmRleDFdOwotICAgICAgICBtX29mZnNldHNbaW5kZXgxXSA9IG1fb2Zmc2V0c1tpbmRl
eDJdOwotICAgICAgICBtX29mZnNldHNbaW5kZXgyXSA9IG9mZnNldDsKLSNlbmRpZgogICAgIH0K
IAogICAgIFZlY3Rvcjxjb25zdCBGb250KiwgMjA0OD4gbV9mb250OwpAQCAtMjQ1LDkgKzIxOCw2
IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPEdseXBoQnVmZmVyQWR2YW5jZSwgMjA0OD4gbV9hZHZh
bmNlczsKICAgICBHbHlwaEJ1ZmZlckFkdmFuY2UgbV9pbml0aWFsQWR2YW5jZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8VmVjdG9yPHVuc2lnbmVkLCAyMDQ4Pj4gbV9vZmZzZXRzSW5TdHJpbmc7Ci0j
aWYgUExBVEZPUk0oV0lOKQotICAgIFZlY3RvcjxGbG9hdFNpemUsIDIwNDg+IG1fb2Zmc2V0czsK
LSNlbmRpZgogICAgIGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbjsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6
TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
SGFyZmJ1enpORy5jcHAKaW5kZXggMDhiYWUzODA4NDg4NDU0YWQ3Mzg2NzJjM2UyODg0NWM4NGJm
ZDAzMy4uM2JiZDAxOTFkMjE1NGExZDE5MTIxNGM4N2ExNjQ3YTU4OTBiYmUyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1
enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkZvbnQu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIYXJmQnV6elNoYXBl
ci5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKQEAgLTQwLDE4ICszOSw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCwgdW5zaWduZWQsIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgLyogZm9yVGV4dEVtcGhhc2lz
ICovKSBjb25zdAotewotICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwotICAg
IGlmICghc2hhcGVyLnNoYXBlKCZnbHlwaEJ1ZmZlcikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJT
aGFwZXIgY291bGRuJ3Qgc2hhcGUgZ2x5cGhCdWZmZXIuIik7Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLQotICAgIC8vIEZJWE1FOiBNYWMgcmV0dXJucyBhbiBpbml0aWFsIGFkdmFuY2UgaGVy
ZS4KLSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQmIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRl
eHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBG
bG9hdFBvaW50JiAvKiBwb2ludCAqLywgdW5zaWduZWQgLyogZnJvbSAqLywgdW5zaWduZWQgLyog
dG8gKi8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTY3LDM2ICs1NCw2IEBA
IGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0
KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWZsb2F0IEZvbnRDYXNjYWRlOjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZvbnQqPios
IEdseXBoT3ZlcmZsb3cqKSBjb25zdAotewotICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlz
LCBydW4pOwotICAgIGlmIChzaGFwZXIuc2hhcGUoKSkKLSAgICAgICAgcmV0dXJuIHNoYXBlci50
b3RhbFdpZHRoKCk7Ci0gICAgTE9HX0VSUk9SKCJTaGFwZXIgY291bGRuJ3Qgc2hhcGUgdGV4dCBy
dW4uIik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wpIGNv
bnN0Ci17Ci0gICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7Ci0gICAgaWYgKHNo
YXBlci5zaGFwZSgpKQotICAgICAgICByZXR1cm4gc2hhcGVyLm9mZnNldEZvclBvc2l0aW9uKHgp
OwotICAgIExPR19FUlJPUigiU2hhcGVyIGNvdWxkbid0IHNoYXBlIHRleHQgcnVuLiIpOwotICAg
IHJldHVybiAwOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKLXsKLSAgICBIYXJmQnV6elNoYXBl
ciBzaGFwZXIodGhpcywgcnVuKTsKLSAgICBpZiAoc2hhcGVyLnNoYXBlKCkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIG1pbWljIE1hYyBwb3J0LgotICAgICAgICBGbG9hdFJlY3Qg
cmVjdCA9IHNoYXBlci5zZWxlY3Rpb25SZWN0KEZsb2F0UG9pbnQoc2VsZWN0aW9uUmVjdC5sb2Nh
dGlvbigpKSwgc2VsZWN0aW9uUmVjdC5oZWlnaHQoKS50b0ludCgpLCBmcm9tLCB0byk7Ci0gICAg
ICAgIHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIExPR19FUlJPUigiU2hhcGVyIGNvdWxkbid0IHNoYXBlIHRleHQgcnVuLiIpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2Fk
ZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQppbmRleCA5M2JjYjFiY2MyMmM3YjZjM2JiNzY0MzA2OTM3NWY0OTg2MTQ2
Y2U2Li5mYjFkZGJjMjQ5NGYyMTYxNmM0OTYyNmM0NzEwMTI5NmRjYzZiYjgzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNj
YWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDYgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCiAj
aW1wb3J0ICJDb3JlR3JhcGhpY3NTUEkuaCIKICNpbXBvcnQgIkNvcmVUZXh0U1BJLmgiCiAjaW1w
b3J0ICJEYXNoQXJyYXkuaCIKQEAgLTQ4OCw3MyArNDg3LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6
cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25zdAogICAgIHJldHVybiBDVEZvbnREZXNjcmlw
dG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udERh
dGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpKS5nZXQoKSk7CiB9CiAKLXZvaWQgRm9udENhc2Nh
ZGU6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBj
b25zdAotewotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBydW4p
OwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9
IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0byk7
Ci0gICAgZmxvYXQgYWZ0ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotCi0g
ICAgaWYgKHJ1bi5ydGwoKSkKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGNvbnRyb2xsZXIu
dG90YWxXaWR0aCgpIC0gYWZ0ZXJXaWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigp
LCAwKTsKLSAgICBlbHNlCi0gICAgICAgIHNlbGVjdGlvblJlY3QubW92ZShiZWZvcmVXaWR0aCwg
MCk7Ci0gICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWls
KGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCkpOwotfQotCi1mbG9hdCBGb250Q2FzY2FkZTo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKLXsKLSAgICBmbG9hdCBpbml0aWFs
QWR2YW5jZTsKLQotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBy
dW4sIGZhbHNlLCAwLCBmb3JUZXh0RW1waGFzaXMpOwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZShm
cm9tKTsKLSAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
OwotICAgIGNvbnRyb2xsZXIuYWR2YW5jZSh0bywgJmdseXBoQnVmZmVyKTsKLQotICAgIGlmIChn
bHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZmxvYXQgYWZ0
ZXJXaWR0aCA9IGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpOwotCi0gICAgaWYgKHJ1bi5ydGwo
KSkgewotICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGNvbnRyb2xsZXIudG90YWxXaWR0aCgpIC0g
YWZ0ZXJXaWR0aCArIGNvbnRyb2xsZXIubGVhZGluZ0V4cGFuc2lvbigpOwotICAgICAgICBnbHlw
aEJ1ZmZlci5yZXZlcnNlKDAsIGdseXBoQnVmZmVyLnNpemUoKSk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGluaXRpYWxBZHZhbmNlID0gYmVmb3JlV2lkdGg7Ci0KLSAgICByZXR1cm4gaW5pdGlhbEFk
dmFuY2U7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvKSBjb25zdAotewotICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwot
ICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKLQotICAg
IGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRyYXdF
bXBoYXNpc01hcmtzKGNvbnRleHQsIGdseXBoQnVmZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50
LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55KCkpKTsKLX0KLQotZmxvYXQgRm9udENhc2Nh
ZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93
KSBjb25zdAotewotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKCp0aGlzLCBy
dW4sIHRydWUsIGZhbGxiYWNrRm9udHMpOwotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAg
ICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGludD4oZ2x5cGhPdmVyZmxvdy0+dG9w
LCBjZWlsZigtY29udHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJm
bG93LT5jb21wdXRlQm91bmRzID8gMCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKLSAgICAg
ICAgZ2x5cGhPdmVyZmxvdy0+Ym90dG9tID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT5i
b3R0b20sIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhP
dmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwot
ICAgICAgICBnbHlwaE92ZXJmbG93LT5sZWZ0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZigtY29u
dHJvbGxlci5taW5HbHlwaEJvdW5kaW5nQm94WCgpKSk7Ci0gICAgICAgIGdseXBoT3ZlcmZsb3ct
PnJpZ2h0ID0gc3RkOjptYXg8aW50PigwLCBjZWlsZihjb250cm9sbGVyLm1heEdseXBoQm91bmRp
bmdCb3hYKCkgLSBjb250cm9sbGVyLnRvdGFsV2lkdGgoKSkpOwotICAgIH0KLSAgICByZXR1cm4g
Y29udHJvbGxlci50b3RhbFdpZHRoKCk7Ci19Ci0KLWludCBGb250Q2FzY2FkZTo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wg
aW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Ci17Ci0gICAgQ29tcGxleFRleHRDb250cm9sbGVy
IGNvbnRyb2xsZXIoKnRoaXMsIHJ1bik7Ci0gICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9y
UG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwotfQotCisvLyBGSVhNRTogVXNlIHRo
aXMgb24gYWxsIHBvcnRzLgogY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0
aCkgY29uc3QKIHsKICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjEzNzc0ZGQyOWMyOWIz
MDUyMTZhMDhkMDVhNTk3Yjc3MmRlZWExLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODM3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJDb21wbGV4VGV4dENvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkNoYXJhY3RlclByb3Bl
cnRpZXMuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgotCi0jaWYgUExBVEZPUk0oSU9TKQotI2luY2x1ZGUgPENvcmVUZXh0L0Nv
cmVUZXh0Lmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFRleHRMYXlvdXQgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIHN0YXRpYyBib29sIGlzTmVlZGVkKFJlbmRlclRleHQmIHRleHQs
IGNvbnN0IEZvbnRDYXNjYWRlJiBmb250KQotICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0eWxlKCkpOwotICAgICAg
ICByZXR1cm4gZm9udC5jb2RlUGF0aChydW4pID09IEZvbnRDYXNjYWRlOjpDb21wbGV4OwotICAg
IH0KLQotICAgIFRleHRMYXlvdXQoUmVuZGVyVGV4dCYgdGV4dCwgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQsIGZsb2F0IHhQb3MpCi0gICAgICAgIDogbV9mb250KGZvbnQpCi0gICAgICAgICwgbV9y
dW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCB4UG9zKSkKLSAgICAgICAgLCBtX2NvbnRyb2xsZXIo
c3RkOjptYWtlX3VuaXF1ZTxDb21wbGV4VGV4dENvbnRyb2xsZXI+KG1fZm9udCwgbV9ydW4sIHRy
dWUpKQotICAgIHsKLSAgICB9Ci0KLSAgICBmbG9hdCB3aWR0aCh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotICAgIHsKLSAg
ICAgICAgbV9jb250cm9sbGVyLT5hZHZhbmNlKGZyb20sIDAsIEJ5V2hvbGVHbHlwaHMsIGZhbGxi
YWNrRm9udHMpOwotICAgICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IG1fY29udHJvbGxlci0+cnVu
V2lkdGhTb0ZhcigpOwotICAgICAgICBpZiAobV9mb250LndvcmRTcGFjaW5nKCkgJiYgZnJvbSAm
JiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKG1fcnVuW2Zyb21dKSkKLSAgICAgICAgICAgIGJl
Zm9yZVdpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwotICAgICAgICBtX2NvbnRyb2xsZXIt
PmFkdmFuY2UoZnJvbSArIGxlbiwgMCwgQnlXaG9sZUdseXBocywgZmFsbGJhY2tGb250cyk7Ci0g
ICAgICAgIGZsb2F0IGFmdGVyV2lkdGggPSBtX2NvbnRyb2xsZXItPnJ1bldpZHRoU29GYXIoKTsK
LSAgICAgICAgcmV0dXJuIGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aDsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJUZXh0JiB0ZXh0
LCBmbG9hdCB4UG9zKQotICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LnN0eWxlKCkpOwotICAgICAgICBydW4uc2V0Q2hh
cmFjdGVyc0xlbmd0aCh0ZXh0LnRleHRMZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVChydW4uY2hh
cmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7Ci0gICAgICAgIHJ1bi5zZXRYUG9zKHhQ
b3MpOwotICAgICAgICByZXR1cm4gcnVuOwotICAgIH0KLQotICAgIC8vIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBoYXMgb25seSByZWZlcmVuY2VzIHRvIGl0cyBGb250Q2FzY2FkZSBhbmQgVGV4dFJ1
biBzbyB0aGV5IG11c3QgYmUga2VwdCBhbGl2ZSBoZXJlLgotICAgIEZvbnRDYXNjYWRlIG1fZm9u
dDsKLSAgICBUZXh0UnVuIG1fcnVuOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDb21wbGV4VGV4dENv
bnRyb2xsZXI+IG1fY29udHJvbGxlcjsKLX07Ci0KLXZvaWQgVGV4dExheW91dERlbGV0ZXI6Om9w
ZXJhdG9yKCkoVGV4dExheW91dCogbGF5b3V0KSBjb25zdAotewotICAgIGRlbGV0ZSBsYXlvdXQ7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxUZXh0TGF5b3V0LCBUZXh0TGF5b3V0RGVsZXRlcj4gRm9u
dENhc2NhZGU6OmNyZWF0ZUxheW91dChSZW5kZXJUZXh0JiB0ZXh0LCBmbG9hdCB4UG9zLCBib29s
IGNvbGxhcHNlV2hpdGVTcGFjZSkgY29uc3QKLXsKLSAgICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFj
ZSB8fCAhVGV4dExheW91dDo6aXNOZWVkZWQodGV4dCwgKnRoaXMpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFRleHRMYXlvdXQsIFRleHRMYXlv
dXREZWxldGVyPihuZXcgVGV4dExheW91dCh0ZXh0LCAqdGhpcywgeFBvcykpOwotfQotCi1mbG9h
dCBGb250Q2FzY2FkZTo6d2lkdGgoVGV4dExheW91dCYgbGF5b3V0LCB1bnNpZ25lZCBmcm9tLCB1
bnNpZ25lZCBsZW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotewotICAg
IHJldHVybiBsYXlvdXQud2lkdGgoZnJvbSwgbGVuLCBmYWxsYmFja0ZvbnRzKTsKLX0KLQotQ29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgRm9udENhc2Nh
ZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgYm9vbCBtYXlVc2VOYXR1cmFsV3JpdGluZ0Rp
cmVjdGlvbiwgSGFzaFNldDxjb25zdCBGb250Kj4qIGZhbGxiYWNrRm9udHMsIGJvb2wgZm9yVGV4
dEVtcGhhc2lzKQotICAgIDogbV9mYWxsYmFja0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0gICAgLCBt
X2ZvbnQoZm9udCkKLSAgICAsIG1fcnVuKHJ1bikKLSAgICAsIG1fZW5kKHJ1bi5sZW5ndGgoKSkK
LSAgICAsIG1fZXhwYW5zaW9uKHJ1bi5leHBhbnNpb24oKSkKLSAgICAsIG1fbWF5VXNlTmF0dXJh
bFdyaXRpbmdEaXJlY3Rpb24obWF5VXNlTmF0dXJhbFdyaXRpbmdEaXJlY3Rpb24pCi0gICAgLCBt
X2ZvclRleHRFbXBoYXNpcyhmb3JUZXh0RW1waGFzaXMpCi17Ci0gICAgaWYgKCFtX2V4cGFuc2lv
bikKLSAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250Q2FzY2FkZTo6
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi50ZXh0KCksIG1fcnVuLmx0cigpID8gTFRS
IDogUlRMLCBydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSkuZmlyc3Q7Ci0KLSAgICAgICAgaWYgKCFl
eHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQotICAgICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eSA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bw
b3J0dW5pdHkgPSBtX2V4cGFuc2lvbiAvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAg
fQotCi0gICAgY29sbGVjdENvbXBsZXhUZXh0UnVucygpOwotCi0gICAgZmluaXNoQ29uc3RydWN0
aW9uKCk7Ci19Ci0KLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVy
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIFZlY3RvcjxSZWY8
Q29tcGxleFRleHRSdW4+PiYgcnVucykKLSAgICA6IG1fZm9udChmb250KQotICAgICwgbV9ydW4o
cnVuKQotICAgICwgbV9lbmQocnVuLmxlbmd0aCgpKQotewotICAgIGZvciAoYXV0byYgcnVuIDog
cnVucykKLSAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKHJ1bi5wdHIoKSk7Ci0KLSAg
ICBmaW5pc2hDb25zdHJ1Y3Rpb24oKTsKLX0KLQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6
OmZpbmlzaENvbnN0cnVjdGlvbigpCi17Ci0gICAgYWRqdXN0R2x5cGhzQW5kQWR2YW5jZXMoKTsK
LQotICAgIGlmICghbV9pc0xUUk9ubHkpIHsKLSAgICAgICAgbV9ydW5JbmRpY2VzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpKTsKLQotICAgICAgICBtX2ds
eXBoQ291bnRGcm9tU3RhcnRUb0luZGV4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jb21wbGV4
VGV4dFJ1bnMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgZ2x5cGhDb3VudFNvRmFyID0gMDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29tcGxleFRleHRSdW5zLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBtX2dseXBoQ291bnRGcm9tU3RhcnRUb0luZGV4LnVuY2hl
Y2tlZEFwcGVuZChnbHlwaENvdW50U29GYXIpOwotICAgICAgICAgICAgZ2x5cGhDb3VudFNvRmFy
ICs9IG1fY29tcGxleFRleHRSdW5zW2ldLT5nbHlwaENvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX3J1bldpZHRoU29GYXIgPSBtX2xlYWRpbmdFeHBhbnNpb247Ci19Ci0KLXVuc2ln
bmVkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgaCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocykKLXsKLSAgICBpZiAoaCA+PSBtX3RvdGFsV2lkdGgpCi0g
ICAgICAgIHJldHVybiBtX3J1bi5sdHIoKSA/IG1fZW5kIDogMDsKLQotICAgIGggLT0gbV9sZWFk
aW5nRXhwYW5zaW9uOwotICAgIGlmIChoIDwgMCkKLSAgICAgICAgcmV0dXJuIG1fcnVuLmx0cigp
ID8gMCA6IG1fZW5kOwotCi0gICAgQ0dGbG9hdCB4ID0gaDsKLQotICAgIHNpemVfdCBydW5Db3Vu
dCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKLSAgICBzaXplX3Qgb2Zmc2V0SW50b0FkanVz
dGVkR2x5cGhzID0gMDsKLQotICAgIGZvciAoc2l6ZV90IHIgPSAwOyByIDwgcnVuQ291bnQ7ICsr
cikgewotICAgICAgICBjb25zdCBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9j
b21wbGV4VGV4dFJ1bnNbcl07Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBjb21w
bGV4VGV4dFJ1bi5nbHlwaENvdW50KCk7ICsraikgewotICAgICAgICAgICAgc2l6ZV90IGluZGV4
ID0gb2Zmc2V0SW50b0FkanVzdGVkR2x5cGhzICsgajsKLSAgICAgICAgICAgIENHRmxvYXQgYWRq
dXN0ZWRBZHZhbmNlID0gbV9hZGp1c3RlZEJhc2VBZHZhbmNlc1tpbmRleF0ud2lkdGg7Ci0gICAg
ICAgICAgICBpZiAoIWluZGV4KQotICAgICAgICAgICAgICAgIGFkanVzdGVkQWR2YW5jZSArPSBj
b21wbGV4VGV4dFJ1bi5pbml0aWFsQWR2YW5jZSgpLndpZHRoOwotICAgICAgICAgICAgaWYgKHgg
PCBhZGp1c3RlZEFkdmFuY2UpIHsKLSAgICAgICAgICAgICAgICBDRkluZGV4IGhpdEdseXBoU3Rh
cnQgPSBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGopOwotICAgICAgICAgICAgICAgIENGSW5kZXgg
aGl0R2x5cGhFbmQ7Ci0gICAgICAgICAgICAgICAgaWYgKG1fcnVuLmx0cigpKQotICAgICAgICAg
ICAgICAgICAgICBoaXRHbHlwaEVuZCA9IHN0ZDo6bWF4PENGSW5kZXg+KGhpdEdseXBoU3RhcnQs
IGogKyAxIDwgY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpID8gY29tcGxleFRleHRSdW4uaW5k
ZXhBdChqICsgMSkgOiBzdGF0aWNfY2FzdDxDRkluZGV4Pihjb21wbGV4VGV4dFJ1bi5pbmRleEVu
ZCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBoaXRHbHlw
aEVuZCA9IHN0ZDo6bWF4PENGSW5kZXg+KGhpdEdseXBoU3RhcnQsIGogPiAwID8gY29tcGxleFRl
eHRSdW4uaW5kZXhBdChqIC0gMSkgOiBzdGF0aWNfY2FzdDxDRkluZGV4Pihjb21wbGV4VGV4dFJ1
bi5pbmRleEVuZCgpKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiBk
aXZpZGluZyB0aGUgZ2x5cGgncyBhZHZhbmNlIGVxdWFsbHkgYmV0d2VlbiB0aGUgY2hhcmFjdGVy
cywgdGhpcwotICAgICAgICAgICAgICAgIC8vIGNvdWxkIHVzZSB0aGUgZ2x5cGgncyAibGlnYXR1
cmUgY2FyZXRzIi4gVGhpcyBpcyBhdmFpbGFibGUgaW4gQ29yZVRleHQgdmlhIENURm9udEdldExp
Z2F0dXJlQ2FyZXRQb3NpdGlvbnMoKS4KLSAgICAgICAgICAgICAgICBDRkluZGV4IGhpdEluZGV4
ID0gaGl0R2x5cGhTdGFydCArIChoaXRHbHlwaEVuZCAtIGhpdEdseXBoU3RhcnQpICogKG1fcnVu
Lmx0cigpID8geCAvIGFkanVzdGVkQWR2YW5jZSA6IDEgLSB4IC8gYWRqdXN0ZWRBZHZhbmNlKTsK
LSAgICAgICAgICAgICAgICBpbnQgc3RyaW5nTGVuZ3RoID0gY29tcGxleFRleHRSdW4uc3RyaW5n
TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgVUJyZWFrSXRlcmF0b3IqIGN1cnNvclBvc2l0aW9u
SXRlcmF0b3IgPSBjdXJzb3JNb3ZlbWVudEl0ZXJhdG9yKFN0cmluZ1ZpZXcoY29tcGxleFRleHRS
dW4uY2hhcmFjdGVycygpLCBzdHJpbmdMZW5ndGgpKTsKLSAgICAgICAgICAgICAgICBpbnQgY2x1
c3RlclN0YXJ0OwotICAgICAgICAgICAgICAgIGlmICh1YnJrX2lzQm91bmRhcnkoY3Vyc29yUG9z
aXRpb25JdGVyYXRvciwgaGl0SW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU3Rh
cnQgPSBoaXRJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2x1c3RlclN0YXJ0ID0gdWJya19wcmVjZWRpbmcoY3Vyc29yUG9zaXRpb25JdGVyYXRvciwg
aGl0SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2x1c3RlclN0YXJ0ID09IFVCUktf
RE9ORSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTdGFydCA9IDA7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlUGFydGlhbEdseXBocykK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9u
KCkgKyBjbHVzdGVyU3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICBpbnQgY2x1c3RlckVuZCA9IHVi
cmtfZm9sbG93aW5nKGN1cnNvclBvc2l0aW9uSXRlcmF0b3IsIGhpdEluZGV4KTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2x1c3RlckVuZCA9PSBVQlJLX0RPTkUpCi0gICAgICAgICAgICAgICAgICAg
IGNsdXN0ZXJFbmQgPSBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgICAgICAgICBDR0Zsb2F0IGNs
dXN0ZXJXaWR0aDsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIHNlYXJjaCBzdG9wcyBh
dCB0aGUgYm91bmRhcmllcyBvZiBjb21wbGV4VGV4dFJ1bi4gSW4gdGhlb3J5LCBpdCBzaG91bGQg
Z28gb24gaW50byBuZWlnaGJvcmluZyBDb21wbGV4VGV4dFJ1bnMKLSAgICAgICAgICAgICAgICAv
LyBkZXJpdmVkIGZyb20gdGhlIHNhbWUgQ1RMaW5lLiBJbiBwcmFjdGljZSwgd2UgZG8gbm90IGV4
cGVjdCB0aGVyZSB0byBiZSBtb3JlIHRoYW4gb25lIENUUnVuIGluIGEgQ1RMaW5lLCBhcyBubwot
ICAgICAgICAgICAgICAgIC8vIHJlb3JkZXJpbmcgYW5kIG5vIGZvbnQgZmFsbGJhY2sgc2hvdWxk
IG9jY3VyIHdpdGhpbiBhIENUTGluZS4KLSAgICAgICAgICAgICAgICBpZiAoY2x1c3RlckVuZCAt
IGNsdXN0ZXJTdGFydCA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgY2x1c3RlcldpZHRoID0g
YWRqdXN0ZWRBZHZhbmNlOwotICAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RHbHlwaEJlZm9y
ZUNsdXN0ZXIgPSBqIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZpcnN0R2x5cGhC
ZWZvcmVDbHVzdGVyID49IDAgJiYgY29tcGxleFRleHRSdW4uaW5kZXhBdChmaXJzdEdseXBoQmVm
b3JlQ2x1c3RlcikgPj0gY2x1c3RlclN0YXJ0ICYmIGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoZmly
c3RHbHlwaEJlZm9yZUNsdXN0ZXIpIDwgY2x1c3RlckVuZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dGbG9hdCB3aWR0aCA9IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXNbb2Zmc2V0SW50b0Fk
anVzdGVkR2x5cGhzICsgZmlyc3RHbHlwaEJlZm9yZUNsdXN0ZXJdLndpZHRoOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY2x1c3RlcldpZHRoICs9IHdpZHRoOwotICAgICAgICAgICAgICAgICAg
ICAgICAgeCArPSB3aWR0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0R2x5cGhCZWZv
cmVDbHVzdGVyLS07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3RHbHlwaEFmdGVyQ2x1c3RlciA9IGogKyAxOwotICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoZmlyc3RHbHlwaEFmdGVyQ2x1c3RlciA8IGNvbXBsZXhUZXh0UnVuLmdseXBo
Q291bnQoKSAmJiBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGZpcnN0R2x5cGhBZnRlckNsdXN0ZXIp
ID49IGNsdXN0ZXJTdGFydCAmJiBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGZpcnN0R2x5cGhBZnRl
ckNsdXN0ZXIpIDwgY2x1c3RlckVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2x1c3Rl
cldpZHRoICs9IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXNbb2Zmc2V0SW50b0FkanVzdGVkR2x5cGhz
ICsgZmlyc3RHbHlwaEFmdGVyQ2x1c3Rlcl0ud2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdEdseXBoQWZ0ZXJDbHVzdGVyKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjbHVzdGVyV2lkdGggPSBh
ZGp1c3RlZEFkdmFuY2UgLyAoaGl0R2x5cGhFbmQgLSBoaXRHbHlwaFN0YXJ0KTsKLSAgICAgICAg
ICAgICAgICAgICAgeCAtPSAgY2x1c3RlcldpZHRoICogKG1fcnVuLmx0cigpID8gaGl0SW5kZXgg
LSBoaXRHbHlwaFN0YXJ0IDogaGl0R2x5cGhFbmQgLSBoaXRJbmRleCAtIDEpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoeCA8PSBjbHVzdGVyV2lkdGggLyAyKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxleFRleHRSdW4uc3RyaW5nTG9jYXRpb24oKSAr
IChtX3J1bi5sdHIoKSA/IGNsdXN0ZXJTdGFydCA6IGNsdXN0ZXJFbmQpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhUZXh0UnVuLnN0cmlu
Z0xvY2F0aW9uKCkgKyAobV9ydW4ubHRyKCkgPyBjbHVzdGVyRW5kIDogY2x1c3RlclN0YXJ0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggLT0gYWRqdXN0ZWRBZHZhbmNlOwotICAgICAg
ICB9Ci0gICAgICAgIG9mZnNldEludG9BZGp1c3RlZEdseXBocyArPSBjb21wbGV4VGV4dFJ1bi5n
bHlwaENvdW50KCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVpbXBsZW1lbnRpbmcg
dGhpcyBmdW5jdGlvbiB1c2luZyBJQ1UgdG8gYWR2YW5jZSBieSBncmFwaGVtZS4KLS8vIFRoZSBj
dXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkgY29uc2lkZXJzIGV4cGxpY2l0bHkgZW1vamkgc2Vx
dWVuY2VzIGFuZCBlbW9qaSB2YXJpYXRpb25zLgotc3RhdGljIGJvb2wgYWR2YW5jZUJ5Q29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqJiBpdGVyYXRvciwgY29uc3QgVUNoYXIq
IGVuZCwgVUNoYXIzMiYgYmFzZUNoYXJhY3RlciwgdW5zaWduZWQmIG1hcmtDb3VudCkKLXsKLSAg
ICBBU1NFUlQoaXRlcmF0b3IgPCBlbmQpOwotCi0gICAgbWFya0NvdW50ID0gMDsKLQotICAgIHVu
c2lnbmVkIGkgPSAwOwotICAgIHVuc2lnbmVkIHJlbWFpbmluZ0NoYXJhY3RlcnMgPSBlbmQgLSBp
dGVyYXRvcjsKLSAgICBVMTZfTkVYVChpdGVyYXRvciwgaSwgcmVtYWluaW5nQ2hhcmFjdGVycywg
YmFzZUNoYXJhY3Rlcik7Ci0gICAgaXRlcmF0b3IgPSBpdGVyYXRvciArIGk7Ci0gICAgaWYgKFVf
SVNfU1VSUk9HQVRFKGJhc2VDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBDb25zdW1lIG1hcmtzLgotICAgIGJvb2wgc2F3RW1vamlHcm91cENhbmRpZGF0ZSA9IGlz
RW1vamlHcm91cENhbmRpZGF0ZShiYXNlQ2hhcmFjdGVyKTsKLSAgICBib29sIHNhd0pvaW5lciA9
IGZhbHNlOwotICAgIHdoaWxlIChpdGVyYXRvciA8IGVuZCkgewotICAgICAgICBVQ2hhcjMyIG5l
eHRDaGFyYWN0ZXI7Ci0gICAgICAgIGludCBtYXJrTGVuZ3RoID0gMDsKLSAgICAgICAgYm9vbCBz
aG91bGRDb250aW51ZSA9IGZhbHNlOwotICAgICAgICBVMTZfTkVYVChpdGVyYXRvciwgbWFya0xl
bmd0aCwgZW5kIC0gaXRlcmF0b3IsIG5leHRDaGFyYWN0ZXIpOwotCi0gICAgICAgIGlmIChpc1Zh
cmlhdGlvblNlbGVjdG9yKG5leHRDaGFyYWN0ZXIpIHx8IGlzRW1vamlGaXR6cGF0cmlja01vZGlm
aWVyKG5leHRDaGFyYWN0ZXIpKQotICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwot
Ci0gICAgICAgIGlmIChzYXdKb2luZXIgJiYgaXNFbW9qaUdyb3VwQ2FuZGlkYXRlKG5leHRDaGFy
YWN0ZXIpKQotICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSB0cnVlOwotCi0gICAgICAgIHNh
d0pvaW5lciA9IGZhbHNlOwotICAgICAgICBpZiAoc2F3RW1vamlHcm91cENhbmRpZGF0ZSAmJiBu
ZXh0Q2hhcmFjdGVyID09IHplcm9XaWR0aEpvaW5lcikgewotICAgICAgICAgICAgc2F3Sm9pbmVy
ID0gdHJ1ZTsKLSAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSAmJiAhKFVfR0VUX0dDX01BU0so
bmV4dENoYXJhY3RlcikgJiBVX0dDX01fTUFTSykpCi0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICBtYXJrQ291bnQgKz0gbWFya0xlbmd0aDsKLSAgICAgICAgaXRlcmF0b3IgKz0gbWFya0xl
bmd0aDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gRklYTUU6IENhcGl0YWxp
emF0aW9uIGlzIGxhbmd1YWdlLWRlcGVuZGVudCBhbmQgY29udGV4dC1kZXBlbmRlbnQgYW5kIHNo
b3VsZCBvcGVyYXRlIG9uIGdyYXBoZW1lIGNsdXN0ZXJzIGluc3RlYWQgb2YgY29kZXBvaW50cy4K
LXN0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxVQ2hhcjMyPiBjYXBpdGFsaXplZChVQ2hhcjMy
IGJhc2VDaGFyYWN0ZXIpCi17Ci0gICAgaWYgKFVfR0VUX0dDX01BU0soYmFzZUNoYXJhY3Rlcikg
JiBVX0dDX01fTUFTSykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQotICAgIFVDaGFy
MzIgdXBwZXJjYXNlQ2hhcmFjdGVyID0gdV90b3VwcGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgIEFT
U0VSVCh1cHBlcmNhc2VDaGFyYWN0ZXIgPT0gYmFzZUNoYXJhY3RlciB8fCAoVV9JU19CTVAoYmFz
ZUNoYXJhY3RlcikgPT0gVV9JU19CTVAodXBwZXJjYXNlQ2hhcmFjdGVyKSkpOwotICAgIGlmICh1
cHBlcmNhc2VDaGFyYWN0ZXIgIT0gYmFzZUNoYXJhY3RlcikKLSAgICAgICAgcmV0dXJuIHVwcGVy
Y2FzZUNoYXJhY3RlcjsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotfQotCi1zdGF0aWMgYm9v
bCBzaG91bGRTeW50aGVzaXplKGJvb2wgZG9udFN5bnRoZXNpemVTbWFsbENhcHMsIGNvbnN0IEZv
bnQqIG5leHRGb250LCBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXIsIHN0ZDo6b3B0aW9uYWw8VUNoYXIz
Mj4gY2FwaXRhbGl6ZWRCYXNlLCBGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBib29s
IGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcpCi17Ci0gICAgaWYgKGRvbnRTeW50aGVzaXpl
U21hbGxDYXBzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFuZXh0Rm9udCB8fCBu
ZXh0Rm9udCA9PSBGb250OjpzeXN0ZW1GYWxsYmFjaygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGVuZ2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgJiYgaXNBU0NJSVNwYWNlKGJh
c2VDaGFyYWN0ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFlbmdhZ2VBbGxT
bWFsbENhcHNQcm9jZXNzaW5nICYmICFjYXBpdGFsaXplZEJhc2UpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gIW5leHRGb250LT52YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVy
Rm9yU3ludGhlc2lzKGZvbnRWYXJpYW50Q2FwcywgYmFzZUNoYXJhY3Rlcik7Ci19Ci0KLXZvaWQg
Q29tcGxleFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zKCkKLXsKLSAgICBp
ZiAoIW1fZW5kKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBicmVhayB1cCBnbHlwaCBy
dW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250LgotICAgIGNvbnN0IFVDaGFyKiBj
cDsKLQotICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewotICAgICAgICBTdHJpbmcgc3RyaW5nRm9y
OEJpdFJ1biA9IFN0cmluZzo6bWFrZTE2Qml0RnJvbThCaXRTb3VyY2UobV9ydW4uY2hhcmFjdGVy
czgoKSwgbV9ydW4ubGVuZ3RoKCkpOwotICAgICAgICBtX3N0cmluZ3NGb3I4Qml0UnVucy5hcHBl
bmQoV1RGTW92ZShzdHJpbmdGb3I4Qml0UnVuKSk7Ci0gICAgICAgIGNwID0gbV9zdHJpbmdzRm9y
OEJpdFJ1bnMubGFzdCgpLmNoYXJhY3RlcnMxNigpOwotICAgIH0gZWxzZQotICAgICAgICBjcCA9
IG1fcnVuLmNoYXJhY3RlcnMxNigpOwotCi0gICAgYXV0byBmb250VmFyaWFudENhcHMgPSBtX2Zv
bnQuZm9udERlc2NyaXB0aW9uKCkudmFyaWFudENhcHMoKTsKLSAgICBib29sIGRvbnRTeW50aGVz
aXplU21hbGxDYXBzID0gIXN0YXRpY19jYXN0PGJvb2w+KG1fZm9udC5mb250RGVzY3JpcHRpb24o
KS5mb250U3ludGhlc2lzKCkgJiBGb250U3ludGhlc2lzU21hbGxDYXBzKTsKLSAgICBib29sIGVu
Z2FnZUFsbFNtYWxsQ2Fwc1Byb2Nlc3NpbmcgPSBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlh
bnRDYXBzOjpBbGxTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpB
bGxQZXRpdGU7Ci0gICAgYm9vbCBlbmdhZ2VTbWFsbENhcHNQcm9jZXNzaW5nID0gZW5nYWdlQWxs
U21hbGxDYXBzUHJvY2Vzc2luZyB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBz
OjpTbWFsbCB8fCBmb250VmFyaWFudENhcHMgPT0gRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU7Ci0K
LSAgICBpZiAoZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZyB8fCBlbmdhZ2VTbWFsbENhcHNQ
cm9jZXNzaW5nKQotICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobV9lbmQpOwotCi0g
ICAgdW5zaWduZWQgaW5kZXhPZkZvbnRUcmFuc2l0aW9uID0gMDsKLSAgICBjb25zdCBVQ2hhciog
Y3VyciA9IGNwOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjcCArIG1fZW5kOwotCi0gICAgY29u
c3QgRm9udCogZm9udDsKLSAgICBjb25zdCBGb250KiBuZXh0Rm9udDsKLSAgICBjb25zdCBGb250
KiBzeW50aGVzaXplZEZvbnQgPSBudWxscHRyOwotICAgIGNvbnN0IEZvbnQqIHNtYWxsU3ludGhl
c2l6ZWRGb250ID0gbnVsbHB0cjsKLQotICAgIHVuc2lnbmVkIG1hcmtDb3VudDsKLSAgICBVQ2hh
cjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgaWYgKCFhZHZhbmNlQnlDb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZShjdXJyLCBlbmQsIGJhc2VDaGFyYWN0ZXIsIG1hcmtDb3VudCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG5leHRGb250ID0gbV9mb250LmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZShjcCwgY3VyciAtIGNwKTsKLQotICAgIGJvb2wgaXNTbWFsbENhcHMgPSBmYWxzZTsK
LSAgICBib29sIG5leHRJc1NtYWxsQ2FwcyA9IGZhbHNlOwotCi0gICAgYXV0byBjYXBpdGFsaXpl
ZEJhc2UgPSBjYXBpdGFsaXplZChiYXNlQ2hhcmFjdGVyKTsKLSAgICBpZiAoc2hvdWxkU3ludGhl
c2l6ZShkb250U3ludGhlc2l6ZVNtYWxsQ2FwcywgbmV4dEZvbnQsIGJhc2VDaGFyYWN0ZXIsIGNh
cGl0YWxpemVkQmFzZSwgZm9udFZhcmlhbnRDYXBzLCBlbmdhZ2VBbGxTbWFsbENhcHNQcm9jZXNz
aW5nKSkgewotICAgICAgICBzeW50aGVzaXplZEZvbnQgPSAmbmV4dEZvbnQtPm5vU3ludGhlc2l6
YWJsZUZlYXR1cmVzRm9udCgpOwotICAgICAgICBzbWFsbFN5bnRoZXNpemVkRm9udCA9IHN5bnRo
ZXNpemVkRm9udC0+c21hbGxDYXBzRm9udChtX2ZvbnQuZm9udERlc2NyaXB0aW9uKCkpOwotICAg
ICAgICBVQ2hhcjMyIGNoYXJhY3RlclRvV3JpdGUgPSBjYXBpdGFsaXplZEJhc2UgPyBjYXBpdGFs
aXplZEJhc2UudmFsdWUoKSA6IGNwWzBdOwotICAgICAgICB1bnNpZ25lZCBjaGFyYWN0ZXJJbmRl
eCA9IDA7Ci0gICAgICAgIFUxNl9BUFBFTkRfVU5TQUZFKG1fc21hbGxDYXBzQnVmZmVyLCBjaGFy
YWN0ZXJJbmRleCwgY2hhcmFjdGVyVG9Xcml0ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGNoYXJhY3RlckluZGV4OyBjcCArIGkgPCBjdXJyOyArK2kpCi0gICAgICAgICAgICBtX3NtYWxs
Q2Fwc0J1ZmZlcltpXSA9IGNwW2ldOwotICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSB0cnVlOwot
ICAgIH0KLQotICAgIHdoaWxlIChjdXJyIDwgZW5kKSB7Ci0gICAgICAgIGZvbnQgPSBuZXh0Rm9u
dDsKLSAgICAgICAgaXNTbWFsbENhcHMgPSBuZXh0SXNTbWFsbENhcHM7Ci0gICAgICAgIHVuc2ln
bmVkIGluZGV4ID0gY3VyciAtIGNwOwotCi0gICAgICAgIGlmICghYWR2YW5jZUJ5Q29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY3VyciwgZW5kLCBiYXNlQ2hhcmFjdGVyLCBtYXJrQ291bnQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChzeW50aGVzaXplZEZvbnQpIHsKLSAg
ICAgICAgICAgIGlmIChhdXRvIGNhcGl0YWxpemVkQmFzZSA9IGNhcGl0YWxpemVkKGJhc2VDaGFy
YWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcmFjdGVySW5kZXggPSBpbmRl
eDsKLSAgICAgICAgICAgICAgICBVMTZfQVBQRU5EX1VOU0FGRShtX3NtYWxsQ2Fwc0J1ZmZlciwg
Y2hhcmFjdGVySW5kZXgsIGNhcGl0YWxpemVkQmFzZS52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFya0NvdW50OyArK2kpCi0gICAgICAgICAgICAg
ICAgICAgIG1fc21hbGxDYXBzQnVmZmVyW2kgKyBjaGFyYWN0ZXJJbmRleF0gPSBjcFtpICsgY2hh
cmFjdGVySW5kZXhdOwotICAgICAgICAgICAgICAgIG5leHRJc1NtYWxsQ2FwcyA9IHRydWU7Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChlbmdhZ2VBbGxTbWFsbENh
cHNQcm9jZXNzaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjdXJyIC0gY3AgLSBpbmRleDsgKytpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9z
bWFsbENhcHNCdWZmZXJbaW5kZXggKyBpXSA9IGNwW2luZGV4ICsgaV07Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG5leHRJc1NtYWxsQ2FwcyA9IGVuZ2FnZUFsbFNtYWxsQ2Fw
c1Byb2Nlc3Npbmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYmFz
ZUNoYXJhY3RlciA9PSB6ZXJvV2lkdGhKb2luZXIpCi0gICAgICAgICAgICBuZXh0Rm9udCA9IGZv
bnQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5leHRGb250ID0gbV9mb250LmZvbnRGb3JD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjcCArIGluZGV4LCBjdXJyIC0gY3AgLSBpbmRleCk7
Ci0KLSAgICAgICAgY2FwaXRhbGl6ZWRCYXNlID0gY2FwaXRhbGl6ZWQoYmFzZUNoYXJhY3Rlcik7
Ci0gICAgICAgIGlmICghc3ludGhlc2l6ZWRGb250ICYmIHNob3VsZFN5bnRoZXNpemUoZG9udFN5
bnRoZXNpemVTbWFsbENhcHMsIG5leHRGb250LCBiYXNlQ2hhcmFjdGVyLCBjYXBpdGFsaXplZEJh
c2UsIGZvbnRWYXJpYW50Q2FwcywgZW5nYWdlQWxsU21hbGxDYXBzUHJvY2Vzc2luZykpIHsKLSAg
ICAgICAgICAgIC8vIFJhdGhlciB0aGFuIHN5bnRoZXNpemUgZWFjaCBjaGFyYWN0ZXIgaW5kaXZp
ZHVhbGx5LCB3ZSBzaG91bGQgc3ludGhlc2l6ZSB0aGUgZW50aXJlICJydW4iIGlmIGFueSBjaGFy
YWN0ZXIgcmVxdWlyZXMgc3ludGhlc2lzLgotICAgICAgICAgICAgc3ludGhlc2l6ZWRGb250ID0g
Jm5leHRGb250LT5ub1N5bnRoZXNpemFibGVGZWF0dXJlc0ZvbnQoKTsKLSAgICAgICAgICAgIHNt
YWxsU3ludGhlc2l6ZWRGb250ID0gc3ludGhlc2l6ZWRGb250LT5zbWFsbENhcHNGb250KG1fZm9u
dC5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICBuZXh0SXNTbWFsbENhcHMgPSB0cnVl
OwotICAgICAgICAgICAgY3VyciA9IGNwICsgaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmV4dEZvbnQgIT0gZm9u
dCB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGl0ZW1MZW5ndGggPSBpbmRleCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAg
ICAgIGlmIChpdGVtTGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaXRlbVN0YXJ0
ID0gaW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgICAgIGlmIChzeW50aGVzaXpl
ZEZvbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU21hbGxDYXBzKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMobV9zbWFs
bENhcHNCdWZmZXIuZGF0YSgpICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIHNt
YWxsU3ludGhlc2l6ZWRGb250KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBp
dGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwgc3ludGhlc2l6ZWRGb250KTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhUZXh0
UnVuc0ZvckNoYXJhY3RlcnMoY3AgKyBpdGVtU3RhcnQsIGl0ZW1MZW5ndGgsIGl0ZW1TdGFydCwg
Zm9udCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHRGb250ICE9IGZvbnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3ludGhlc2l6ZWRGb250ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAg
ICAgc21hbGxTeW50aGVzaXplZEZvbnQgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICBu
ZXh0SXNTbWFsbENhcHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpbmRleE9mRm9udFRyYW5zaXRpb24gPSBpbmRleDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIEFTU0VSVChtX2VuZCA+PSBpbmRleE9mRm9udFRyYW5zaXRpb24pOwotICAg
IHVuc2lnbmVkIGl0ZW1MZW5ndGggPSBtX2VuZCAtIGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAg
ICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICB1bnNpZ25lZCBpdGVtU3RhcnQgPSBpbmRleE9m
Rm9udFRyYW5zaXRpb247Ci0gICAgICAgIGlmIChzeW50aGVzaXplZEZvbnQpIHsKLSAgICAgICAg
ICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgY29sbGVjdENvbXBsZXhU
ZXh0UnVuc0ZvckNoYXJhY3RlcnMobV9zbWFsbENhcHNCdWZmZXIuZGF0YSgpICsgaXRlbVN0YXJ0
LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIHNtYWxsU3ludGhlc2l6ZWRGb250KTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFj
dGVycyhjcCArIGl0ZW1TdGFydCwgaXRlbUxlbmd0aCwgaXRlbVN0YXJ0LCBzeW50aGVzaXplZEZv
bnQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnNG
b3JDaGFyYWN0ZXJzKGNwICsgaXRlbVN0YXJ0LCBpdGVtTGVuZ3RoLCBpdGVtU3RhcnQsIG5leHRG
b250KTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcnVuLmx0cigpKQotICAgICAgICBtX2NvbXBsZXhU
ZXh0UnVucy5yZXZlcnNlKCk7Ci19Ci0KLUNGSW5kZXggQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dFJ1bjo6aW5kZXhBdChzaXplX3QgaSkgY29uc3QKLXsKLSAgICBBU1NFUlQoaSA8
IG1fZ2x5cGhDb3VudCk7Ci0KLSAgICByZXR1cm4gbV9jb3JlVGV4dEluZGljZXNbaV07Ci19Ci0K
LXZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6c2V0SXNOb25Nb25v
dG9uaWMoKQotewotICAgIEFTU0VSVChtX2lzTW9ub3RvbmljKTsKLSAgICBtX2lzTW9ub3Rvbmlj
ID0gZmFsc2U7Ci0KLSAgICBWZWN0b3I8Ym9vbCwgNjQ+IG1hcHBlZEluZGljZXMobV9zdHJpbmdM
ZW5ndGgsIGZhbHNlKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ2x5cGhDb3VudDsg
KytpKSB7Ci0gICAgICAgIEFTU0VSVChpbmRleEF0KGkpIDwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4o
bV9zdHJpbmdMZW5ndGgpKTsKLSAgICAgICAgbWFwcGVkSW5kaWNlc1tpbmRleEF0KGkpXSA9IHRy
dWU7Ci0gICAgfQotCi0gICAgbV9nbHlwaEVuZE9mZnNldHMuZ3JvdyhtX2dseXBoQ291bnQpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dseXBoQ291bnQ7ICsraSkgewotICAgICAg
ICBDRkluZGV4IG5leHRNYXBwZWRJbmRleCA9IG1faW5kZXhFbmQ7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGogPSBpbmRleEF0KGkpICsgMTsgaiA8IG1fc3RyaW5nTGVuZ3RoOyArK2opIHsKLSAgICAg
ICAgICAgIGlmIChtYXBwZWRJbmRpY2VzW2pdKSB7Ci0gICAgICAgICAgICAgICAgbmV4dE1hcHBl
ZEluZGV4ID0gajsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBtX2dseXBoRW5kT2Zmc2V0c1tpXSA9IG5leHRNYXBwZWRJbmRleDsKLSAg
ICB9Ci19Ci0KLXVuc2lnbmVkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6aW5kZXhPZkN1cnJlbnRS
dW4odW5zaWduZWQmIGxlZnRtb3N0R2x5cGgpCi17Ci0gICAgbGVmdG1vc3RHbHlwaCA9IDA7Ci0g
ICAgCi0gICAgc2l6ZV90IHJ1bkNvdW50ID0gbV9jb21wbGV4VGV4dFJ1bnMuc2l6ZSgpOwotICAg
IGlmIChtX2N1cnJlbnRSdW4gPj0gcnVuQ291bnQpCi0gICAgICAgIHJldHVybiBydW5Db3VudDsK
LQotICAgIGlmIChtX2lzTFRST25seSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jdXJyZW50UnVuOyArK2kpCi0gICAgICAgICAgICBsZWZ0bW9zdEdseXBoICs9IG1fY29t
cGxleFRleHRSdW5zW2ldLT5nbHlwaENvdW50KCk7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRS
dW47Ci0gICAgfQotCi0gICAgaWYgKG1fcnVuSW5kaWNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
dW5zaWduZWQgZmlyc3RSdW4gPSAwOwotICAgICAgICB1bnNpZ25lZCBmaXJzdFJ1bk9mZnNldCA9
IHN0cmluZ0JlZ2luKCptX2NvbXBsZXhUZXh0UnVuc1swXSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBydW5Db3VudDsgKytpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBzdHJpbmdCZWdpbigqbV9jb21wbGV4VGV4dFJ1bnNbaV0pOwotICAgICAgICAgICAgaWYg
KG9mZnNldCA8IGZpcnN0UnVuT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RSdW4gPSBp
OwotICAgICAgICAgICAgICAgIGZpcnN0UnVuT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIG1fcnVuSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoZmlyc3RS
dW4pOwotICAgIH0KLQotICAgIHdoaWxlIChtX3J1bkluZGljZXMuc2l6ZSgpIDw9IG1fY3VycmVu
dFJ1bikgewotICAgICAgICB1bnNpZ25lZCBvZmZzZXQgPSBzdHJpbmdFbmQoKm1fY29tcGxleFRl
eHRSdW5zW21fcnVuSW5kaWNlcy5sYXN0KCldKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcnVuQ291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKG9mZnNldCA9PSBzdHJp
bmdCZWdpbigqbV9jb21wbGV4VGV4dFJ1bnNbaV0pKSB7Ci0gICAgICAgICAgICAgICAgbV9ydW5J
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZChpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIGN1cnJlbnRSdW5JbmRl
eCA9IG1fcnVuSW5kaWNlc1ttX2N1cnJlbnRSdW5dOwotICAgIGxlZnRtb3N0R2x5cGggPSBtX2ds
eXBoQ291bnRGcm9tU3RhcnRUb0luZGV4W2N1cnJlbnRSdW5JbmRleF07Ci0gICAgcmV0dXJuIGN1
cnJlbnRSdW5JbmRleDsKLX0KLQotdW5zaWduZWQgQ29tcGxleFRleHRDb250cm9sbGVyOjppbmNy
ZW1lbnRDdXJyZW50UnVuKHVuc2lnbmVkJiBsZWZ0bW9zdEdseXBoKQotewotICAgIGlmIChtX2lz
TFRST25seSkgewotICAgICAgICBsZWZ0bW9zdEdseXBoICs9IG1fY29tcGxleFRleHRSdW5zW21f
Y3VycmVudFJ1bisrXS0+Z2x5cGhDb3VudCgpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50UnVu
OwotICAgIH0KLQotICAgIG1fY3VycmVudFJ1bisrOwotICAgIGxlZnRtb3N0R2x5cGggPSAwOwot
ICAgIHJldHVybiBpbmRleE9mQ3VycmVudFJ1bihsZWZ0bW9zdEdseXBoKTsKLX0KLQotZmxvYXQg
Q29tcGxleFRleHRDb250cm9sbGVyOjpydW5XaWR0aFNvRmFyRnJhY3Rpb24odW5zaWduZWQgZ2x5
cGhTdGFydE9mZnNldCwgdW5zaWduZWQgZ2x5cGhFbmRPZmZzZXQsIHVuc2lnbmVkIG9sZENoYXJh
Y3RlckluQ3VycmVudEdseXBoLCBHbHlwaEl0ZXJhdGlvblN0eWxlIGl0ZXJhdGlvblN0eWxlKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBJbnN0ZWFkIG9mIGRpdmlkaW5nIHRoZSBnbHlwaCdzIGFk
dmFuY2UgZXF1YWxseSBiZXR3ZWVuIHRoZSBjaGFyYWN0ZXJzLCB0aGlzCi0gICAgLy8gY291bGQg
dXNlIHRoZSBnbHlwaCdzICJsaWdhdHVyZSBjYXJldHMiLiBUaGlzIGlzIGF2YWlsYWJsZSBpbiBD
b3JlVGV4dCB2aWEgQ1RGb250R2V0TGlnYXR1cmVDYXJldFBvc2l0aW9ucygpLgotICAgIGlmIChn
bHlwaFN0YXJ0T2Zmc2V0ID09IGdseXBoRW5kT2Zmc2V0KSB7Ci0gICAgICAgIC8vIFdoZW4gdGhl
cmUgYXJlIG11bHRpcGxlIGdseXBocyBwZXIgY2hhcmFjdGVyIHdlIG5lZWQgdG8gYWR2YW5jZSBi
eSB0aGUgZnVsbCB3aWR0aCBvZiB0aGUgZ2x5cGguCi0gICAgICAgIEFTU0VSVChtX2NoYXJhY3Rl
ckluQ3VycmVudEdseXBoID09IG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoKTsKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKGl0ZXJhdGlvblN0eWxlID09IEJ5V2hvbGVHbHlw
aHMpIHsKLSAgICAgICAgaWYgKCFvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCkKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGggLSBvbGRDaGFyYWN0ZXJJ
bkN1cnJlbnRHbHlwaCkgLyAoZ2x5cGhFbmRPZmZzZXQgLSBnbHlwaFN0YXJ0T2Zmc2V0KTsKLX0K
LQotdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBH
bHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIEdseXBoSXRlcmF0aW9uU3R5bGUgaXRlcmF0aW9uU3R5
bGUsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzKQotewotICAgIGlmIChvZmZz
ZXQgPiBtX2VuZCkKLSAgICAgICAgb2Zmc2V0ID0gbV9lbmQ7Ci0KLSAgICBpZiAob2Zmc2V0IDw9
IG1fY3VycmVudENoYXJhY3RlcikgewotICAgICAgICBtX3J1bldpZHRoU29GYXIgPSBtX2xlYWRp
bmdFeHBhbnNpb247Ci0gICAgICAgIG1fbnVtR2x5cGhzU29GYXIgPSAwOwotICAgICAgICBtX2N1
cnJlbnRSdW4gPSAwOwotICAgICAgICBtX2dseXBoSW5DdXJyZW50UnVuID0gMDsKLSAgICAgICAg
bV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCA9IDA7Ci0gICAgfQotCi0gICAgbV9jdXJyZW50Q2hh
cmFjdGVyID0gb2Zmc2V0OwotCi0gICAgc2l6ZV90IHJ1bkNvdW50ID0gbV9jb21wbGV4VGV4dFJ1
bnMuc2l6ZSgpOwotCi0gICAgdW5zaWduZWQgbGVmdG1vc3RHbHlwaCA9IDA7Ci0gICAgdW5zaWdu
ZWQgY3VycmVudFJ1bkluZGV4ID0gaW5kZXhPZkN1cnJlbnRSdW4obGVmdG1vc3RHbHlwaCk7Ci0g
ICAgd2hpbGUgKG1fY3VycmVudFJ1biA8IHJ1bkNvdW50KSB7Ci0gICAgICAgIGNvbnN0IENvbXBs
ZXhUZXh0UnVuJiBjb21wbGV4VGV4dFJ1biA9ICptX2NvbXBsZXhUZXh0UnVuc1tjdXJyZW50UnVu
SW5kZXhdOwotICAgICAgICBib29sIGx0ciA9IGNvbXBsZXhUZXh0UnVuLmlzTFRSKCk7Ci0gICAg
ICAgIHNpemVfdCBnbHlwaENvdW50ID0gY29tcGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwotICAg
ICAgICB1bnNpZ25lZCBnID0gbHRyID8gbV9nbHlwaEluQ3VycmVudFJ1biA6IGdseXBoQ291bnQg
LSAxIC0gbV9nbHlwaEluQ3VycmVudFJ1bjsKLSAgICAgICAgdW5zaWduZWQgayA9IGxlZnRtb3N0
R2x5cGggKyBnOwotICAgICAgICBpZiAoZmFsbGJhY2tGb250cyAmJiAmY29tcGxleFRleHRSdW4u
Zm9udCgpICE9ICZtX2ZvbnQucHJpbWFyeUZvbnQoKSkKLSAgICAgICAgICAgIGZhbGxiYWNrRm9u
dHMtPmFkZCgmY29tcGxleFRleHRSdW4uZm9udCgpKTsKLQotICAgICAgICAvLyBXZSBtdXN0IHN0
b3JlIHRoZSBpbml0aWFsIGFkdmFuY2UgZm9yIHRoZSBmaXJzdCBnbHlwaCB3ZSBhcmUgZ29pbmcg
dG8gZHJhdy4KLSAgICAgICAgLy8gV2hlbiBsZWZ0bW9zdEdseXBoIGlzIDAsIGl0IHJlcHJlc2Vu
dHMgdGhlIGZpcnN0IGdseXBoIHRvIGRyYXcsIHRha2luZyBpbnRvCi0gICAgICAgIC8vIGFjY291
bnQgdGhlIHRleHQgZGlyZWN0aW9uLgotICAgICAgICBpZiAoZ2x5cGhCdWZmZXIgJiYgIWxlZnRt
b3N0R2x5cGgpIHsKLSAgICAgICAgICAgIENHU2l6ZSBpbml0aWFsQWR2YW5jZSA9IGNvbXBsZXhU
ZXh0UnVuLmluaXRpYWxBZHZhbmNlKCk7Ci0jaWYgVVNFX0xBWU9VVF9TUEVDSUZJQ19BRFZBTkNF
UwotICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBsdHIgPyAwIDogbV9hZGp1c3RlZEJhc2VB
ZHZhbmNlcy5zaXplKCkgLSAxOwotICAgICAgICAgICAgaW5pdGlhbEFkdmFuY2Uud2lkdGggKz0g
Z2x5cGhPcmlnaW4oaW5kZXgpLng7Ci0gICAgICAgICAgICBpbml0aWFsQWR2YW5jZS5oZWlnaHQg
Kz0gZ2x5cGhPcmlnaW4oaW5kZXgpLnk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGdseXBoQnVmZmVy
LT5zZXRJbml0aWFsQWR2YW5jZShpbml0aWFsQWR2YW5jZSk7Ci0KLSAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5zZXRMZWFkaW5nRXhwYW5zaW9uKG1fbGVhZGluZ0V4cGFuc2lvbik7Ci0gICAgICAg
IH0KLQotICAgICAgICB3aGlsZSAobV9nbHlwaEluQ3VycmVudFJ1biA8IGdseXBoQ291bnQpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGdseXBoU3RhcnRPZmZzZXQgPSBjb21wbGV4VGV4dFJ1bi5p
bmRleEF0KGcpOwotICAgICAgICAgICAgdW5zaWduZWQgZ2x5cGhFbmRPZmZzZXQ7Ci0gICAgICAg
ICAgICBpZiAoY29tcGxleFRleHRSdW4uaXNNb25vdG9uaWMoKSkgewotICAgICAgICAgICAgICAg
IGlmIChsdHIpCi0gICAgICAgICAgICAgICAgICAgIGdseXBoRW5kT2Zmc2V0ID0gc3RkOjptYXg8
dW5zaWduZWQ+KGdseXBoU3RhcnRPZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnICsgMSA8
IGdseXBoQ291bnQgPyBjb21wbGV4VGV4dFJ1bi5pbmRleEF0KGcgKyAxKSA6IGNvbXBsZXhUZXh0
UnVuLmluZGV4RW5kKCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGdseXBoRW5kT2Zmc2V0ID0gc3RkOjptYXg8dW5zaWduZWQ+KGdseXBoU3RhcnRPZmZzZXQs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnID4gMCA/IGNvbXBsZXhUZXh0UnVuLmluZGV4QXQoZyAt
IDEpIDogY29tcGxleFRleHRSdW4uaW5kZXhFbmQoKSkpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgZ2x5cGhFbmRPZmZzZXQgPSBjb21wbGV4VGV4dFJ1bi5lbmRPZmZzZXRB
dChnKTsKLQotICAgICAgICAgICAgQ0dTaXplIGFkanVzdGVkQmFzZUFkdmFuY2UgPSBtX2FkanVz
dGVkQmFzZUFkdmFuY2VzW2tdOwotCi0gICAgICAgICAgICBpZiAoZ2x5cGhTdGFydE9mZnNldCAr
IGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCkgPj0gbV9jdXJyZW50Q2hhcmFjdGVyKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyICYm
ICFtX2NoYXJhY3RlckluQ3VycmVudEdseXBoKSB7Ci0gICAgICAgICAgICAgICAgR2x5cGhCdWZm
ZXJBZHZhbmNlIHBhaW50QWR2YW5jZSA9IGFkanVzdGVkQmFzZUFkdmFuY2U7Ci0jaWYgVVNFX0xB
WU9VVF9TUEVDSUZJQ19BRFZBTkNFUwotICAgICAgICAgICAgICAgIGlmIChrICsgMSA8IG1fYWRq
dXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhaW50QWR2
YW5jZS5zZXRXaWR0aChwYWludEFkdmFuY2Uud2lkdGgoKSArIGdseXBoT3JpZ2luKGsgKyAxKS54
IC0gZ2x5cGhPcmlnaW4oaykueCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhaW50QWR2YW5jZS5z
ZXRIZWlnaHQocGFpbnRBZHZhbmNlLmhlaWdodCgpIC0gZ2x5cGhPcmlnaW4oayArIDEpLnkgKyBn
bHlwaE9yaWdpbihrKS55KTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAg
ICAgICBnbHlwaEJ1ZmZlci0+YWRkKG1fYWRqdXN0ZWRHbHlwaHNba10sICZjb21wbGV4VGV4dFJ1
bi5mb250KCksIHBhaW50QWR2YW5jZSwgY29tcGxleFRleHRSdW4uaW5kZXhBdChtX2dseXBoSW5D
dXJyZW50UnVuKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIG9sZENo
YXJhY3RlckluQ3VycmVudEdseXBoID0gbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaDsKLSAgICAg
ICAgICAgIG1fY2hhcmFjdGVySW5DdXJyZW50R2x5cGggPSBzdGQ6Om1pbihtX2N1cnJlbnRDaGFy
YWN0ZXIgLSBjb21wbGV4VGV4dFJ1bi5zdHJpbmdMb2NhdGlvbigpLCBnbHlwaEVuZE9mZnNldCkg
LSBnbHlwaFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IGFkanVz
dGVkQmFzZUFkdmFuY2Uud2lkdGggKiBydW5XaWR0aFNvRmFyRnJhY3Rpb24oZ2x5cGhTdGFydE9m
ZnNldCwgZ2x5cGhFbmRPZmZzZXQsIG9sZENoYXJhY3RlckluQ3VycmVudEdseXBoLCBpdGVyYXRp
b25TdHlsZSk7Ci0KLSAgICAgICAgICAgIGlmIChnbHlwaEVuZE9mZnNldCArIGNvbXBsZXhUZXh0
UnVuLnN0cmluZ0xvY2F0aW9uKCkgPiBtX2N1cnJlbnRDaGFyYWN0ZXIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICBtX251bUdseXBoc1NvRmFyKys7Ci0gICAgICAgICAg
ICBtX2dseXBoSW5DdXJyZW50UnVuKys7Ci0gICAgICAgICAgICBtX2NoYXJhY3RlckluQ3VycmVu
dEdseXBoID0gMDsKLSAgICAgICAgICAgIGlmIChsdHIpIHsKLSAgICAgICAgICAgICAgICBnKys7
Ci0gICAgICAgICAgICAgICAgaysrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBnLS07Ci0gICAgICAgICAgICAgICAgay0tOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGN1cnJlbnRSdW5JbmRleCA9IGluY3JlbWVudEN1cnJlbnRSdW4obGVmdG1vc3RH
bHlwaCk7Ci0gICAgICAgIG1fZ2x5cGhJbkN1cnJlbnRSdW4gPSAwOwotICAgIH0KLX0KLQotc3Rh
dGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gZXhwYW5zaW9uTG9jYXRpb24oYm9vbCBp
ZGVvZ3JhcGgsIGJvb2wgdHJlYXRBc1NwYWNlLCBib29sIGx0ciwgYm9vbCBpc0FmdGVyRXhwYW5z
aW9uLCBib29sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24sIGJvb2wgZm9yYmlkVHJhaWxpbmdFeHBh
bnNpb24sIGJvb2wgZm9yY2VMZWFkaW5nRXhwYW5zaW9uLCBib29sIGZvcmNlVHJhaWxpbmdFeHBh
bnNpb24pCi17Ci0gICAgYm9vbCBleHBhbmRMZWZ0ID0gaWRlb2dyYXBoOwotICAgIGJvb2wgZXhw
YW5kUmlnaHQgPSBpZGVvZ3JhcGg7Ci0gICAgaWYgKHRyZWF0QXNTcGFjZSkgewotICAgICAgICBp
ZiAobHRyKQotICAgICAgICAgICAgZXhwYW5kUmlnaHQgPSB0cnVlOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBleHBhbmRMZWZ0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGlzQWZ0ZXJFeHBh
bnNpb24pCi0gICAgICAgIGV4cGFuZExlZnQgPSBmYWxzZTsKLSAgICBBU1NFUlQoIWZvcmJpZExl
YWRpbmdFeHBhbnNpb24gfHwgIWZvcmNlTGVhZGluZ0V4cGFuc2lvbik7Ci0gICAgQVNTRVJUKCFm
b3JiaWRUcmFpbGluZ0V4cGFuc2lvbiB8fCAhZm9yY2VUcmFpbGluZ0V4cGFuc2lvbik7Ci0gICAg
aWYgKGZvcmJpZExlYWRpbmdFeHBhbnNpb24pCi0gICAgICAgIGV4cGFuZExlZnQgPSBmYWxzZTsK
LSAgICBpZiAoZm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pCi0gICAgICAgIGV4cGFuZFJpZ2h0ID0g
ZmFsc2U7Ci0gICAgaWYgKGZvcmNlTGVhZGluZ0V4cGFuc2lvbikKLSAgICAgICAgZXhwYW5kTGVm
dCA9IHRydWU7Ci0gICAgaWYgKGZvcmNlVHJhaWxpbmdFeHBhbnNpb24pCi0gICAgICAgIGV4cGFu
ZFJpZ2h0ID0gdHJ1ZTsKLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZXhwYW5kTGVmdCwgZXhw
YW5kUmlnaHQpOwotfQotCi12b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhz
QW5kQWR2YW5jZXMoKQotewotICAgIGJvb2wgYWZ0ZXJFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5z
aW9uQmVoYXZpb3IoKSAmIExlYWRpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRMZWFkaW5nRXhw
YW5zaW9uOwotICAgIENHRmxvYXQgd2lkdGhTaW5jZUxhc3RDb21taXQgPSAwOwotICAgIHNpemVf
dCBydW5Db3VudCA9IG1fY29tcGxleFRleHRSdW5zLnNpemUoKTsKLSAgICBib29sIGhhc0V4dHJh
U3BhY2luZyA9IChtX2ZvbnQubGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC53b3JkU3BhY2luZygp
IHx8IG1fZXhwYW5zaW9uKSAmJiAhbV9ydW4uc3BhY2luZ0Rpc2FibGVkKCk7Ci0gICAgYm9vbCBy
dW5Gb3JjZXNMZWFkaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBM
ZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yY2VMZWFkaW5nRXhwYW5zaW9uOwotICAgIGJvb2wg
cnVuRm9yY2VzVHJhaWxpbmdFeHBhbnNpb24gPSAobV9ydW4uZXhwYW5zaW9uQmVoYXZpb3IoKSAm
IFRyYWlsaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yY2VUcmFpbGluZ0V4cGFuc2lvbjsKLSAgICBi
b29sIHJ1bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uID0gKG1fcnVuLmV4cGFuc2lvbkJlaGF2aW9y
KCkgJiBMZWFkaW5nRXhwYW5zaW9uTWFzaykgPT0gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbjsKLSAg
ICBib29sIHJ1bkZvcmJpZHNUcmFpbGluZ0V4cGFuc2lvbiA9IChtX3J1bi5leHBhbnNpb25CZWhh
dmlvcigpICYgVHJhaWxpbmdFeHBhbnNpb25NYXNrKSA9PSBGb3JiaWRUcmFpbGluZ0V4cGFuc2lv
bjsKLQotICAgIC8vIFdlIGFyZSBpdGVyYXRpbmcgaW4gZ2x5cGggb3JkZXIsIG5vdCBzdHJpbmcg
b3JkZXIuIENvbXBhcmUgdGhpcyB0byBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoKQot
ICAgIGZvciAoc2l6ZV90IHJ1bkluZGV4ID0gMDsgcnVuSW5kZXggPCBydW5Db3VudDsgKytydW5J
bmRleCkgewotICAgICAgICBDb21wbGV4VGV4dFJ1biYgY29tcGxleFRleHRSdW4gPSAqbV9jb21w
bGV4VGV4dFJ1bnNbcnVuSW5kZXhdOwotICAgICAgICB1bnNpZ25lZCBnbHlwaENvdW50ID0gY29t
cGxleFRleHRSdW4uZ2x5cGhDb3VudCgpOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0gY29t
cGxleFRleHRSdW4uZm9udCgpOwotCi0gICAgICAgIC8vIFJlcHJlc2VudCB0aGUgaW5pdGlhbCBh
ZHZhbmNlIGZvciBhIHRleHQgcnVuIGJ5IGFkanVzdGluZyB0aGUgYWR2YW5jZQotICAgICAgICAv
LyBvZiB0aGUgbGFzdCBnbHlwaCBvZiB0aGUgcHJldmlvdXMgdGV4dCBydW4gaW4gdGhlIGdseXBo
IGJ1ZmZlci4KLSAgICAgICAgaWYgKCFjb21wbGV4VGV4dFJ1bi5nbHlwaE9yaWdpbnMoKSAmJiBy
dW5JbmRleCAmJiBtX2FkanVzdGVkQmFzZUFkdmFuY2VzLnNpemUoKSkgewotICAgICAgICAgICAg
Q0dTaXplIHByZXZpb3VzQWR2YW5jZSA9IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMubGFzdCgpOwot
ICAgICAgICAgICAgcHJldmlvdXNBZHZhbmNlLndpZHRoICs9IGNvbXBsZXhUZXh0UnVuLmluaXRp
YWxBZHZhbmNlKCkud2lkdGg7Ci0gICAgICAgICAgICBwcmV2aW91c0FkdmFuY2UuaGVpZ2h0IC09
IGNvbXBsZXhUZXh0UnVuLmluaXRpYWxBZHZhbmNlKCkuaGVpZ2h0OwotICAgICAgICAgICAgbV9h
ZGp1c3RlZEJhc2VBZHZhbmNlc1ttX2FkanVzdGVkQmFzZUFkdmFuY2VzLnNpemUoKSAtIDFdID0g
cHJldmlvdXNBZHZhbmNlOwotICAgICAgICB9Ci0gICAgICAgIHdpZHRoU2luY2VMYXN0Q29tbWl0
ICs9IGNvbXBsZXhUZXh0UnVuLmluaXRpYWxBZHZhbmNlKCkud2lkdGg7Ci0KLSAgICAgICAgaWYg
KCFjb21wbGV4VGV4dFJ1bi5pc0xUUigpKQotICAgICAgICAgICAgbV9pc0xUUk9ubHkgPSBmYWxz
ZTsKLQotICAgICAgICBjb25zdCBDR0dseXBoKiBnbHlwaHMgPSBjb21wbGV4VGV4dFJ1bi5nbHlw
aHMoKTsKLSAgICAgICAgY29uc3QgQ0dTaXplKiBhZHZhbmNlcyA9IGNvbXBsZXhUZXh0UnVuLmJh
c2VBZHZhbmNlcygpOwotCi0gICAgICAgIGJvb2wgbGFzdFJ1biA9IHJ1bkluZGV4ICsgMSA9PSBy
dW5Db3VudDsKLSAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCgpIC0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjcCA9IGNv
bXBsZXhUZXh0UnVuLmNoYXJhY3RlcnMoKTsKLSAgICAgICAgQ0dQb2ludCBnbHlwaE9yaWdpbiA9
IENHUG9pbnRaZXJvOwotICAgICAgICBDRkluZGV4IGxhc3RDaGFyYWN0ZXJJbmRleCA9IG1fcnVu
Lmx0cigpID8gc3RkOjpudW1lcmljX2xpbWl0czxDRkluZGV4Pjo6bWluKCkgOiBzdGQ6Om51bWVy
aWNfbGltaXRzPENGSW5kZXg+OjptYXgoKTsKLSAgICAgICAgYm9vbCBpc01vbm90b25pYyA9IHRy
dWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQ291bnQ7IGkrKykg
ewotICAgICAgICAgICAgQ0ZJbmRleCBjaGFyYWN0ZXJJbmRleCA9IGNvbXBsZXhUZXh0UnVuLmlu
ZGV4QXQoaSk7Ci0gICAgICAgICAgICBpZiAobV9ydW4ubHRyKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY2hhcmFjdGVySW5kZXggPCBsYXN0Q2hhcmFjdGVySW5kZXgpCi0gICAgICAgICAgICAg
ICAgICAgIGlzTW9ub3RvbmljID0gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+IGxhc3RDaGFyYWN0ZXJJbmRleCkKLSAgICAg
ICAgICAgICAgICAgICAgaXNNb25vdG9uaWMgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFVDaGFyIGNoID0gKihjcCArIGNoYXJhY3RlckluZGV4KTsKLSAgICAgICAgICAgIGJv
b2wgbGFzdEdseXBoID0gbGFzdFJ1biAmJiBpICsgMSA9PSBnbHlwaENvdW50OwotICAgICAgICAg
ICAgVUNoYXIgbmV4dENoOwotICAgICAgICAgICAgaWYgKGxhc3RHbHlwaCkKLSAgICAgICAgICAg
ICAgICBuZXh0Q2ggPSAnICc7Ci0gICAgICAgICAgICBlbHNlIGlmIChpICsgMSA8IGdseXBoQ291
bnQpCi0gICAgICAgICAgICAgICAgbmV4dENoID0gKihjcCArIGNvbXBsZXhUZXh0UnVuLmluZGV4
QXQoaSArIDEpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXh0Q2ggPSAq
KG1fY29tcGxleFRleHRSdW5zW3J1bkluZGV4ICsgMV0tPmNoYXJhY3RlcnMoKSArIG1fY29tcGxl
eFRleHRSdW5zW3J1bkluZGV4ICsgMV0tPmluZGV4QXQoMCkpOwotCi0gICAgICAgICAgICBib29s
IHRyZWF0QXNTcGFjZSA9IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2gpOwotICAgICAgICAg
ICAgQ0dHbHlwaCBnbHlwaCA9IHRyZWF0QXNTcGFjZSA/IGZvbnQuc3BhY2VHbHlwaCgpIDogZ2x5
cGhzW2ldOwotICAgICAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSB0cmVhdEFzU3BhY2UgPyBDR1Np
emVNYWtlKHNwYWNlV2lkdGgsIGFkdmFuY2VzW2ldLmhlaWdodCkgOiBhZHZhbmNlc1tpXTsKLQot
ICAgICAgICAgICAgaWYgKGNoID09ICdcdCcgJiYgbV9ydW4uYWxsb3dUYWJzKCkpCi0gICAgICAg
ICAgICAgICAgYWR2YW5jZS53aWR0aCA9IG1fZm9udC50YWJXaWR0aChmb250LCBtX3J1bi50YWJT
aXplKCksIG1fcnVuLnhQb3MoKSArIG1fdG90YWxXaWR0aCArIHdpZHRoU2luY2VMYXN0Q29tbWl0
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZvbnRDYXNjYWRlOjp0cmVhdEFzWmVyb1dpZHRoU3Bh
Y2UoY2gpICYmICF0cmVhdEFzU3BhY2UpIHsKLSAgICAgICAgICAgICAgICBhZHZhbmNlLndpZHRo
ID0gMDsKLSAgICAgICAgICAgICAgICBnbHlwaCA9IGZvbnQuc3BhY2VHbHlwaCgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwotCi0gICAgICAgICAgICBpZiAoaGFzRXh0cmFTcGFjaW5nKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgYSBnbHlwaCB3aXRoIGFuIGFkdmFuY2UsIGFkZCBpbiBsZXR0
ZXItc3BhY2luZy4KLSAgICAgICAgICAgICAgICAvLyBUaGF0IHdheSB3ZSB3ZWVkIG91dCB6ZXJv
IHdpZHRoIGx1cmtlcnMuICBUaGlzIGJlaGF2aW9yIG1hdGNoZXMgdGhlIGZhc3QgdGV4dCBjb2Rl
IHBhdGguCi0gICAgICAgICAgICAgICAgaWYgKGFkdmFuY2Uud2lkdGgpCi0gICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2Uud2lkdGggKz0gbV9mb250LmxldHRlclNwYWNpbmcoKTsKLQotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXJhY3RlckluZGV4SW5SdW4gPSBjaGFyYWN0ZXJJbmRleCAr
IGNvbXBsZXhUZXh0UnVuLnN0cmluZ0xvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBp
c0ZpcnN0Q2hhcmFjdGVyID0gIShjaGFyYWN0ZXJJbmRleCArIGNvbXBsZXhUZXh0UnVuLnN0cmlu
Z0xvY2F0aW9uKCkpOwotICAgICAgICAgICAgICAgIGJvb2wgaXNMYXN0Q2hhcmFjdGVyID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlckluZGV4SW5SdW4gKyAxKSA9PSBtX3J1bi5sZW5n
dGgoKSB8fCAoVTE2X0lTX0xFQUQoY2gpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjaGFyYWN0
ZXJJbmRleEluUnVuICsgMikgPT0gbV9ydW4ubGVuZ3RoKCkgJiYgVTE2X0lTX1RSQUlMKCooY3Ag
KyBjaGFyYWN0ZXJJbmRleCArIDEpKSk7Ci0KLSAgICAgICAgICAgICAgICBib29sIGZvcmNlTGVh
ZGluZ0V4cGFuc2lvbiA9IGZhbHNlOyAvLyBPbiB0aGUgbGVmdCwgcmVnYXJkbGVzcyBvZiBtX3J1
bi5sdHIoKQotICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VUcmFpbGluZ0V4cGFuc2lvbiA9IGZh
bHNlOyAvLyBPbiB0aGUgcmlnaHQsIHJlZ2FyZGxlc3Mgb2YgbV9ydW4ubHRyKCkKLSAgICAgICAg
ICAgICAgICBib29sIGZvcmJpZExlYWRpbmdFeHBhbnNpb24gPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBib29sIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJ1bkZvcmNlc0xlYWRpbmdFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGZv
cmNlTGVhZGluZ0V4cGFuc2lvbiA9IG1fcnVuLmx0cigpID8gaXNGaXJzdENoYXJhY3RlciA6IGlz
TGFzdENoYXJhY3RlcjsKLSAgICAgICAgICAgICAgICBpZiAocnVuRm9yY2VzVHJhaWxpbmdFeHBh
bnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGZvcmNlVHJhaWxpbmdFeHBhbnNpb24gPSBtX3J1
bi5sdHIoKSA/IGlzTGFzdENoYXJhY3RlciA6IGlzRmlyc3RDaGFyYWN0ZXI7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJ1bkZvcmJpZHNMZWFkaW5nRXhwYW5zaW9uKQotICAgICAgICAgICAgICAgICAg
ICBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uID0gbV9ydW4ubHRyKCkgPyBpc0ZpcnN0Q2hhcmFjdGVy
IDogaXNMYXN0Q2hhcmFjdGVyOwotICAgICAgICAgICAgICAgIGlmIChydW5Gb3JiaWRzVHJhaWxp
bmdFeHBhbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIGZvcmJpZFRyYWlsaW5nRXhwYW5zaW9u
ID0gbV9ydW4ubHRyKCkgPyBpc0xhc3RDaGFyYWN0ZXIgOiBpc0ZpcnN0Q2hhcmFjdGVyOwotICAg
ICAgICAgICAgICAgIC8vIEhhbmRsZSBqdXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0g
ICAgICAgICAgICAgICAgYm9vbCBpZGVvZ3JhcGggPSBGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3Jh
cGhPclN5bWJvbChjaCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSB8fCBpZGVv
Z3JhcGggfHwgZm9yY2VMZWFkaW5nRXhwYW5zaW9uIHx8IGZvcmNlVHJhaWxpbmdFeHBhbnNpb24p
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgcnVuJ3MgdG90YWwgZXhw
YW5zaW9uIGV2ZW5seSBvdmVyIGFsbCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgcnVu
LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9leHBhbnNpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZXhwYW5kTGVmdCwgZXhwYW5kUmlnaHQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnRpZShleHBhbmRMZWZ0LCBleHBhbmRSaWdodCkgPSBleHBhbnNpb25Mb2Nh
dGlvbihpZGVvZ3JhcGgsIHRyZWF0QXNTcGFjZSwgbV9ydW4ubHRyKCksIGFmdGVyRXhwYW5zaW9u
LCBmb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBmb3JiaWRUcmFpbGluZ0V4cGFuc2lvbiwgZm9yY2VM
ZWFkaW5nRXhwYW5zaW9uLCBmb3JjZVRyYWlsaW5nRXhwYW5zaW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChleHBhbmRMZWZ0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSW5jcmVhc2UgcHJldmlvdXMgd2lkdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2V4cGFuc2lvbiAtPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdG90YWxXaWR0aCArPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5Owot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2FkanVzdGVkQmFzZUFkdmFuY2VzLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sZWFkaW5nRXhwYW5z
aW9uID0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYWRqdXN0ZWRCYXNl
QWR2YW5jZXMubGFzdCgpLndpZHRoICs9IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwYW5k
UmlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2V4cGFuc2lvbiAtPSBtX2V4
cGFuc2lvblBlck9wcG9ydHVuaXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFu
Y2Uud2lkdGggKz0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZnRlckV4cGFuc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
YWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBY2NvdW50
IGZvciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2Ug
JiYgKGNoICE9ICdcdCcgfHwgIW1fcnVuLmFsbG93VGFicygpKSAmJiAoY2hhcmFjdGVySW5kZXgg
PiAwIHx8IHJ1bkluZGV4ID4gMCkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhZHZhbmNlLndpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBhZnRlckV4cGFuc2lvbiA9
IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aWR0aFNpbmNlTGFzdENvbW1p
dCArPSBhZHZhbmNlLndpZHRoOyAKLQotICAgICAgICAgICAgLy8gRklYTUU6IENvbWJpbmluZyBt
YXJrcyBzaG91bGQgcmVjZWl2ZSBhIHRleHQgZW1waGFzaXMgbWFyayBpZiB0aGV5IGFyZSBjb21i
aW5lIHdpdGggYSBzcGFjZS4KLSAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcyAmJiAo
IUZvbnRDYXNjYWRlOjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKGNoKSB8fCAoVV9HRVRfR0NfTUFT
SyhjaCkgJiBVX0dDX01fTUFTSykpKQotICAgICAgICAgICAgICAgIGdseXBoID0gMDsKLQotICAg
ICAgICAgICAgYWR2YW5jZS5oZWlnaHQgKj0gLTE7Ci0gICAgICAgICAgICBtX2FkanVzdGVkQmFz
ZUFkdmFuY2VzLmFwcGVuZChhZHZhbmNlKTsKLSNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFO
Q0VTCi0gICAgICAgICAgICBpZiAoYXV0byogb3JpZ2lucyA9IGNvbXBsZXhUZXh0UnVuLmdseXBo
T3JpZ2lucygpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUo
KSA8IG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBtX2ds
eXBoT3JpZ2lucy5ncm93KG1fYWRqdXN0ZWRCYXNlQWR2YW5jZXMuc2l6ZSgpKTsKLSAgICAgICAg
ICAgICAgICBtX2dseXBoT3JpZ2luc1ttX2dseXBoT3JpZ2lucy5zaXplKCkgLSAxXSA9IG9yaWdp
bnNbaV07Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA9PSBt
X2FkanVzdGVkQmFzZUFkdmFuY2VzLnNpemUoKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgICAgIG1fYWRqdXN0ZWRHbHlwaHMuYXBwZW5kKGdseXBoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udC5ib3VuZHNGb3JHbHlwaChn
bHlwaCk7Ci0gICAgICAgICAgICBnbHlwaEJvdW5kcy5tb3ZlKGdseXBoT3JpZ2luLngsIGdseXBo
T3JpZ2luLnkpOwotICAgICAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WCA9IHN0ZDo6bWlu
KG1fbWluR2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgICAgICBt
X21heEdseXBoQm91bmRpbmdCb3hYID0gc3RkOjptYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwg
Z2x5cGhCb3VuZHMubWF4WCgpKTsKLSAgICAgICAgICAgIG1fbWluR2x5cGhCb3VuZGluZ0JveFkg
PSBzdGQ6Om1pbihtX21pbkdseXBoQm91bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkpOwotICAg
ICAgICAgICAgbV9tYXhHbHlwaEJvdW5kaW5nQm94WSA9IHN0ZDo6bWF4KG1fbWF4R2x5cGhCb3Vu
ZGluZ0JveFksIGdseXBoQm91bmRzLm1heFkoKSk7Ci0gICAgICAgICAgICBnbHlwaE9yaWdpbi54
ICs9IGFkdmFuY2Uud2lkdGg7Ci0gICAgICAgICAgICBnbHlwaE9yaWdpbi55ICs9IGFkdmFuY2Uu
aGVpZ2h0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXN0Q2hhcmFjdGVySW5kZXggPSBj
aGFyYWN0ZXJJbmRleDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWlzTW9ub3RvbmljKQotICAg
ICAgICAgICAgY29tcGxleFRleHRSdW4uc2V0SXNOb25Nb25vdG9uaWMoKTsKLSAgICB9Ci0KLSAg
ICBtX3RvdGFsV2lkdGggKz0gd2lkdGhTaW5jZUxhc3RDb21taXQ7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZWU3MjVkNjhhOGU4OGJlM2YwMzc4ZWQ0MGJmMGZiMDJjZGE5OGFjMy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAw
OSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBD
b21wbGV4VGV4dENvbnRyb2xsZXJfaAotI2RlZmluZSBDb21wbGV4VGV4dENvbnRyb2xsZXJfaAot
Ci0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
I2RlZmluZSBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTICgoUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTEwMCkgfHwgKFBMQVRGT1JNKElP
UykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gOTAwMDApKQotCi10eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IENHR2x5cGg7Ci0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RS
dW4gKiBDVFJ1blJlZjsKLXR5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ1RMaW5lICogQ1RMaW5lUmVm
OwotCi1uYW1lc3BhY2UgV1RGIHsKLXRlbXBsYXRlPD4gc3RydWN0IFZlY3RvclRyYWl0czxDR1Bv
aW50PiA6IFNpbXBsZUNsYXNzVmVjdG9yVHJhaXRzIHsgfTsKLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBGb250Q2FzY2FkZTsKLWNsYXNzIEZvbnQ7Ci1jbGFzcyBUZXh0UnVuOwot
Ci1lbnVtIEdseXBoSXRlcmF0aW9uU3R5bGUgeyBJbmNsdWRlUGFydGlhbEdseXBocywgQnlXaG9s
ZUdseXBocyB9OwotCi0vLyBDb21wbGV4VGV4dENvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgZm9y
IHJlbmRlcmluZyBhbmQgbWVhc3VyaW5nIGdseXBocyBmb3IKLS8vIGNvbXBsZXggc2NyaXB0cyBv
biBtYWNPUyBhbmQgaU9TLgotY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgYm9vbCBtYXlVc2VOYXR1cmFsV3Jp
dGluZ0RpcmVjdGlvbiA9IGZhbHNlLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250
cyA9IDAsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwotCi0gICAgY2xhc3MgQ29tcGxl
eFRleHRSdW47Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIFZlY3RvcjxSZWY8Q29tcGxleFRleHRSdW4+
PiYpOwotCi0gICAgLy8gQWR2YW5jZSBhbmQgZW1pdCBnbHlwaHMgdXAgdG8gdGhlIHNwZWNpZmll
ZCBjaGFyYWN0ZXIuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZHZhbmNlKHVuc2lnbmVkIHRv
LCBHbHlwaEJ1ZmZlciogPSBudWxscHRyLCBHbHlwaEl0ZXJhdGlvblN0eWxlID0gSW5jbHVkZVBh
cnRpYWxHbHlwaHMsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gbnVsbHB0
cik7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhIGdpdmVuIHgg
Y29vcmRpbmF0ZS4KLSAgICB1bnNpZ25lZCBvZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHdpZHRoIG9mIGV2
ZXJ5dGhpbmcgd2UndmUgY29uc3VtZWQgc28gZmFyLgotICAgIGZsb2F0IHJ1bldpZHRoU29GYXIo
KSBjb25zdCB7IHJldHVybiBtX3J1bldpZHRoU29GYXI7IH0KLQotICAgIGZsb2F0IHRvdGFsV2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsV2lkdGg7IH0KLQotICAgIGZsb2F0IG1pbkdseXBo
Qm91bmRpbmdCb3hYKCkgY29uc3QgeyByZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WDsgfQot
ICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hYKCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlw
aEJvdW5kaW5nQm94WDsgfQotICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdCb3hZKCkgY29uc3Qg
eyByZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WTsgfQotICAgIGZsb2F0IG1heEdseXBoQm91
bmRpbmdCb3hZKCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQotCi0g
ICAgZmxvYXQgbGVhZGluZ0V4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGVhZGluZ0V4cGFu
c2lvbjsgfQotCi0gICAgY2xhc3MgQ29tcGxleFRleHRSdW4gOiBwdWJsaWMgUmVmQ291bnRlZDxD
b21wbGV4VGV4dFJ1bj4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxDb21wbGV4
VGV4dFJ1bj4gY3JlYXRlKENUUnVuUmVmIGN0UnVuLCBjb25zdCBGb250JiBmb250LCBjb25zdCBV
Q2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdM
ZW5ndGgsIENGUmFuZ2UgcnVuUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGN0UnVuLCBmb250LCBjaGFyYWN0ZXJzLCBzdHJp
bmdMb2NhdGlvbiwgc3RyaW5nTGVuZ3RoLCBydW5SYW5nZSkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgc3RhdGljIFJlZjxDb21wbGV4VGV4dFJ1bj4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0
cmluZ0xlbmd0aCwgYm9vbCBsdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENvbXBsZXhUZXh0UnVuKGZvbnQsIGNoYXJhY3RlcnMsIHN0cmluZ0xvY2F0aW9u
LCBzdHJpbmdMZW5ndGgsIGx0cikpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFJlZjxD
b21wbGV4VGV4dFJ1bj4gY3JlYXRlRm9yVGVzdGluZyhjb25zdCBWZWN0b3I8Q0dTaXplPiYgYWR2
YW5jZXMsIGNvbnN0IFZlY3RvcjxDR1BvaW50PiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPENHR2x5
cGg+JiBnbHlwaHMsIGNvbnN0IFZlY3RvcjxDRkluZGV4PiYgc3RyaW5nSW5kaWNlcywgQ0dTaXpl
IGluaXRpYWxBZHZhbmNlLCBjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIENGUmFuZ2Ug
cnVuUmFuZ2UsIGJvb2wgbHRyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDb21wbGV4VGV4dFJ1bihhZHZhbmNlcywgb3JpZ2lucywgZ2x5cGhzLCBzdHJpbmdJ
bmRpY2VzLCBpbml0aWFsQWR2YW5jZSwgZm9udCwgY2hhcmFjdGVycywgc3RyaW5nTG9jYXRpb24s
IHN0cmluZ0xlbmd0aCwgcnVuUmFuZ2UsIGx0cikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5z
aWduZWQgZ2x5cGhDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhDb3VudDsgfQotICAgICAg
ICBjb25zdCBGb250JiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9Ci0g
ICAgICAgIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmdM
b2NhdGlvbjsgfQotICAgICAgICBzaXplX3Qgc3RyaW5nTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJpbmdMZW5ndGg7IH0KLSAgICAgICAgQUxXQVlTX0lOTElORSBDRkluZGV4IGluZGV4QXQo
c2l6ZV90IGkpIGNvbnN0OwotICAgICAgICBDRkluZGV4IGluZGV4QmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4QmVnaW47IH0KLSAgICAgICAgQ0ZJbmRleCBpbmRleEVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhFbmQ7IH0KLSAgICAgICAgQ0ZJbmRleCBlbmRPZmZzZXRBdChzaXplX3Qg
aSkgY29uc3QgeyBBU1NFUlQoIW1faXNNb25vdG9uaWMpOyByZXR1cm4gbV9nbHlwaEVuZE9mZnNl
dHNbaV07IH0KLSAgICAgICAgY29uc3QgQ0dHbHlwaCogZ2x5cGhzKCkgY29uc3QgeyByZXR1cm4g
bV9nbHlwaHM7IH0KLQotICAgICAgICAvKgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBYIChQYWludCBnbHlwaCBwb3NpdGlvbikgICBYIChQ
YWludCBnbHlwaCBwb3NpdGlvbikgICBYIChQYWludCBnbHlwaCBwb3NpdGlvbikKLSAgICAgICAg
ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3ICAgICAgICAg
ICAgICAgICAgICAgICAgICA3ICAgICAgICAgICAgICAgICAgICAgICAgICA3Ci0gICAgICAgICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAg
ICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gKEdseXBoIG9yaWdpbikg
ICAgICAgICAgIC8gKEdseXBoIG9yaWdpbikgICAgICAgICAgIC8gKEdseXBoIG9yaWdpbikKLSAg
ICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICAg
ICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAg
ICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvICAgICAgICAgICAg
ICAgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgICAgICAqICAg
ICAgICAgICAgICAgIFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVgtLS0tPi4uLgotICAgICAgICAgKiAo
dGV4dCBwb3NpdGlvbiBeKSAgKGluaXRpYWwgYWR2YW5jZSkgICAgICAgICAgKGJhc2UgYWR2YW5j
ZSkgICAgICAgICAgICAgKGJhc2UgYWR2YW5jZSkKLSAgICAgICAgICovCi0gICAgICAgIENHU2l6
ZSBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbEFkdmFuY2U7IH0KLSAg
ICAgICAgY29uc3QgQ0dTaXplKiBiYXNlQWR2YW5jZXMoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VB
ZHZhbmNlczsgfQotICAgICAgICBjb25zdCBDR1BvaW50KiBnbHlwaE9yaWdpbnMoKSBjb25zdCB7
IHJldHVybiBtX2dseXBoT3JpZ2lucy5zaXplKCkgPT0gZ2x5cGhDb3VudCgpID8gbV9nbHlwaE9y
aWdpbnMuZGF0YSgpIDogbnVsbHB0cjsgfQotICAgICAgICBib29sIGlzTFRSKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0xUUjsgfQotICAgICAgICBib29sIGlzTW9ub3RvbmljKCkgY29uc3QgeyByZXR1
cm4gbV9pc01vbm90b25pYzsgfQotICAgICAgICB2b2lkIHNldElzTm9uTW9ub3RvbmljKCk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiwgY29uc3QgRm9u
dCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBzdHJpbmdMb2NhdGlvbiwgc2l6
ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSk7Ci0gICAgICAgIENvbXBsZXhUZXh0
UnVuKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5n
TG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIGJvb2wgbHRyKTsKLSAgICAgICAgV0VCQ09S
RV9FWFBPUlQgQ29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPENHU2l6ZT4mIGFkdmFuY2VzLCBj
b25zdCBWZWN0b3I8Q0dQb2ludD4mIG9yaWdpbnMsIGNvbnN0IFZlY3RvcjxDR0dseXBoPiYgZ2x5
cGhzLCBjb25zdCBWZWN0b3I8Q0ZJbmRleD4mIHN0cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFs
QWR2YW5jZSwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBz
dHJpbmdMb2NhdGlvbiwgc2l6ZV90IHN0cmluZ0xlbmd0aCwgQ0ZSYW5nZSBydW5SYW5nZSwgYm9v
bCBsdHIpOwotCi0gICAgICAgIFZlY3RvcjxDR1NpemUsIDY0PiBtX2Jhc2VBZHZhbmNlc1ZlY3Rv
cjsKLSAgICAgICAgVmVjdG9yPENHUG9pbnQsIDY0PiBtX2dseXBoT3JpZ2luczsKLSAgICAgICAg
VmVjdG9yPENHR2x5cGgsIDY0PiBtX2dseXBoc1ZlY3RvcjsKLSAgICAgICAgVmVjdG9yPENGSW5k
ZXgsIDY0PiBtX2dseXBoRW5kT2Zmc2V0czsKLSAgICAgICAgVmVjdG9yPENGSW5kZXgsIDY0PiBt
X2NvcmVUZXh0SW5kaWNlc1ZlY3RvcjsKLSAgICAgICAgQ0dTaXplIG1faW5pdGlhbEFkdmFuY2U7
Ci0gICAgICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKLSAgICAgICAgY29uc3QgVUNoYXIqIG1fY2hh
cmFjdGVyczsKLSAgICAgICAgc2l6ZV90IG1fc3RyaW5nTGVuZ3RoOwotICAgICAgICBjb25zdCBD
RkluZGV4KiBtX2NvcmVUZXh0SW5kaWNlczsKLSAgICAgICAgY29uc3QgQ0dHbHlwaCogbV9nbHlw
aHM7Ci0gICAgICAgIGNvbnN0IENHU2l6ZSogbV9iYXNlQWR2YW5jZXM7Ci0gICAgICAgIENGSW5k
ZXggbV9pbmRleEJlZ2luOwotICAgICAgICBDRkluZGV4IG1faW5kZXhFbmQ7Ci0gICAgICAgIHVu
c2lnbmVkIG1fZ2x5cGhDb3VudDsKLSAgICAgICAgdW5zaWduZWQgbV9zdHJpbmdMb2NhdGlvbjsK
LSAgICAgICAgYm9vbCBtX2lzTFRSOwotICAgICAgICBib29sIG1faXNNb25vdG9uaWMgeyB0cnVl
IH07Ci0gICAgfTsKLXByaXZhdGU6Ci0gICAgdm9pZCBmaW5pc2hDb25zdHJ1Y3Rpb24oKTsKLSAg
ICAKLSAgICBzdGF0aWMgdW5zaWduZWQgc3RyaW5nQmVnaW4oY29uc3QgQ29tcGxleFRleHRSdW4m
IHJ1bikgeyByZXR1cm4gcnVuLnN0cmluZ0xvY2F0aW9uKCkgKyBydW4uaW5kZXhCZWdpbigpOyB9
Ci0gICAgc3RhdGljIHVuc2lnbmVkIHN0cmluZ0VuZChjb25zdCBDb21wbGV4VGV4dFJ1biYgcnVu
KSB7IHJldHVybiBydW4uc3RyaW5nTG9jYXRpb24oKSArIHJ1bi5pbmRleEVuZCgpOyB9Ci0KLSAg
ICB2b2lkIGNvbGxlY3RDb21wbGV4VGV4dFJ1bnMoKTsKLQotICAgIHZvaWQgY29sbGVjdENvbXBs
ZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgsIHVu
c2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250Kik7Ci0gICAgdm9pZCBhZGp1c3RHbHlw
aHNBbmRBZHZhbmNlcygpOwotCi0gICAgdW5zaWduZWQgaW5kZXhPZkN1cnJlbnRSdW4odW5zaWdu
ZWQmIGxlZnRtb3N0R2x5cGgpOwotICAgIHVuc2lnbmVkIGluY3JlbWVudEN1cnJlbnRSdW4odW5z
aWduZWQmIGxlZnRtb3N0R2x5cGgpOwotCi0gICAgZmxvYXQgcnVuV2lkdGhTb0ZhckZyYWN0aW9u
KHVuc2lnbmVkIGdseXBoU3RhcnRPZmZzZXQsIHVuc2lnbmVkIGdseXBoRW5kT2Zmc2V0LCB1bnNp
Z25lZCBvbGRDaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCwgR2x5cGhJdGVyYXRpb25TdHlsZSkgY29u
c3Q7Ci0KLSAgICBDR1BvaW50IGdseXBoT3JpZ2luKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBpbmRleCA8IG1fZ2x5cGhPcmlnaW5zLnNpemUoKSA/IG1fZ2x5cGhPcmlnaW5zW2luZGV4
XSA6IENHUG9pbnRaZXJvOyB9Ci0KLSAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IG1fYWRqdXN0ZWRC
YXNlQWR2YW5jZXM7Ci0gICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gbV9nbHlwaE9yaWdpbnM7Ci0g
ICAgVmVjdG9yPENHR2x5cGgsIDI1Nj4gbV9hZGp1c3RlZEdseXBoczsKLQotICAgIFZlY3RvcjxV
Q2hhciwgMjU2PiBtX3NtYWxsQ2Fwc0J1ZmZlcjsKLQotICAgIC8vIFRoZXJlIGlzIGEgMy1sZXZl
bCBoaWVyYXJjaHkgaGVyZS4gQXQgdGhlIHRvcCwgd2UgYXJlIGludGVyZXN0ZWQgaW4gbV9ydW4u
c3RyaW5nKCkuIFdlIHBhcnRpdGlvbiB0aGF0IHN0cmluZwotICAgIC8vIGludG8gTGluZXMsIGVh
Y2ggb2Ygd2hpY2ggaXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHdoaWNoIHNob3VsZCB1c2Ug
dGhlIHNhbWUgRm9udC4gQ29yZSBUZXh0IHRoZW4gcGFydGl0aW9ucwotICAgIC8vIHRoZSBMaW5l
IGludG8gQ29tcGxleFRleHRSdW5zLgotICAgIC8vIENvbXBsZXhUZXh0UnVuOjpzdHJpbmdMb2Nh
dGlvbigpIGFuZCBDb21wbGV4VGV4dFJ1bjo6c3RyaW5nTGVuZ3RoKCkgcmVmZXIgdG8gdGhlIG9m
ZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBMaW5lCi0gICAgLy8gcmVsYXRpdmUgdG8gbV9ydW4uc3Ry
aW5nKCkuIENvbXBsZXhUZXh0UnVuOjppbmRleEF0KCkgcmV0dXJucyB0byB0aGUgb2Zmc2V0IG9m
IGEgY29kZXBvaW50IHJlbGF0aXZlIHRvCi0gICAgLy8gaXRzIExpbmUuIENvbXBsZXhUZXh0UnVu
OjpnbHlwaHMoKSBhbmQgQ29tcGxleFRleHRSdW46OmFkdmFuY2VzKCkgcmVmZXIgdG8gZ2x5cGhz
IHJlbGF0aXZlIHRvIHRoZSBDb21wbGV4VGV4dFJ1bi4KLSAgICAvLyBUaGUgbGVuZ3RoIG9mIHRo
ZSBlbnRpcmUgVGV4dFJ1biBpcyBtX3J1bi5sZW5ndGgoKQotICAgIFZlY3RvcjxSZWZQdHI8Q29t
cGxleFRleHRSdW4+LCAxNj4gbV9jb21wbGV4VGV4dFJ1bnM7Ci0KLSAgICAvLyBUaGUgaW5pdGlh
bCBjYXBhY2l0eSBvZiB0aGVzZSB2ZWN0b3JzIHdhcyBzZWxlY3RlZCBhcyBiZWluZyB0aGUgc21h
bGxlc3QgcG93ZXIgb2YgdHdvIGdyZWF0ZXIgdGhhbgotICAgIC8vIHRoZSBhdmVyYWdlICgzLjUp
IHBsdXMgb25lIHN0YW5kYXJkIGRldmlhdGlvbiAoNy41KSBvZiBub256ZXJvIHNpemVzIHVzZWQg
b24gQXJhYmljIFdpa2lwZWRpYS4KLSAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBtX3J1bkluZGlj
ZXM7Ci0gICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gbV9nbHlwaENvdW50RnJvbVN0YXJ0VG9JbmRl
eDsKLQotICAgIFZlY3RvcjxSZXRhaW5QdHI8Q1RMaW5lUmVmPj4gbV9jb3JlVGV4dExpbmVzOwot
Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9zdHJpbmdzRm9yOEJpdFJ1bnM7Ci0KLSAgICBIYXNoU2V0
PGNvbnN0IEZvbnQqPiogbV9mYWxsYmFja0ZvbnRzIHsgbnVsbHB0ciB9OwotCi0gICAgY29uc3Qg
Rm9udENhc2NhZGUmIG1fZm9udDsKLSAgICBjb25zdCBUZXh0UnVuJiBtX3J1bjsKLSAKLSAgICB1
bnNpZ25lZCBtX2N1cnJlbnRDaGFyYWN0ZXIgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9lbmQgeyAw
IH07Ci0KLSAgICBmbG9hdCBtX3RvdGFsV2lkdGggeyAwIH07Ci0gICAgZmxvYXQgbV9ydW5XaWR0
aFNvRmFyIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fbnVtR2x5cGhzU29GYXIgeyAwIH07Ci0gICAg
dW5zaWduZWQgbV9jdXJyZW50UnVuIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fZ2x5cGhJbkN1cnJl
bnRSdW4geyAwIH07Ci0gICAgdW5zaWduZWQgbV9jaGFyYWN0ZXJJbkN1cnJlbnRHbHlwaCB7IDAg
fTsKLSAgICBmbG9hdCBtX2V4cGFuc2lvbiB7IDAgfTsKLSAgICBmbG9hdCBtX2V4cGFuc2lvblBl
ck9wcG9ydHVuaXR5IHsgMCB9OwotICAgIGZsb2F0IG1fbGVhZGluZ0V4cGFuc2lvbiB7IDAgfTsK
LQotICAgIGZsb2F0IG1fbWluR2x5cGhCb3VuZGluZ0JveFggeyBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCkgfTsKLSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYIHsgc3Rk
OjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1pbigpIH07Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJv
dW5kaW5nQm94WSB7IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSB9OwotICAgIGZs
b2F0IG1fbWF4R2x5cGhCb3VuZGluZ0JveFkgeyBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWluKCkgfTsKLQotICAgIGJvb2wgbV9pc0xUUk9ubHkgeyB0cnVlIH07Ci0gICAgYm9vbCBtX21h
eVVzZU5hdHVyYWxXcml0aW5nRGlyZWN0aW9uIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZm9yVGV4
dEVtcGhhc2lzIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIENvbXBsZXhUZXh0Q29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyQ29yZVRleHQubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyQ29yZVRleHQubW0KaW5kZXggODgyNDMxMDAyNjI1YTU3Zjk2MmEyYThiMTA0YzY0YjFjNDE5
MDVjMi4uN2VmYmY1NzE3ZDZmYzMyZWU1YzI4ZjdmMWM1NjhjMzgzOWE0ODA0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJv
bGxlckNvcmVUZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db21wbGV4VGV4dENvbnRyb2xsZXJDb3JlVGV4dC5tbQpAQCAtMTA2LDEwMyArMTA2LDY2IEBA
IEBlbmQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihDVFJ1blJlZiBjdFJ1biwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBz
aXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlKQorQ29tcGxleFRleHRDb250cm9s
bGVyOjpDb21wbGV4VGV4dFJ1bjo6Q29tcGxleFRleHRSdW4oQ1RSdW5SZWYgY3RSdW4sIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qgc3RyaW5nTG9jYXRp
b24sIHNpemVfdCBzdHJpbmdMZW5ndGgsIHVuc2lnbmVkIGluZGV4QmVnaW4sIHVuc2lnbmVkIGlu
ZGV4RW5kKQogICAgIDogbV9pbml0aWFsQWR2YW5jZShDVFJ1bkdldEluaXRpYWxBZHZhbmNlKGN0
UnVuKSkKICAgICAsIG1fZm9udChmb250KQogICAgICwgbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMp
CiAgICAgLCBtX3N0cmluZ0xlbmd0aChzdHJpbmdMZW5ndGgpCi0gICAgLCBtX2NvcmVUZXh0SW5k
aWNlcyhDVFJ1bkdldFN0cmluZ0luZGljZXNQdHIoY3RSdW4pKQotICAgICwgbV9nbHlwaHMoQ1RS
dW5HZXRHbHlwaHNQdHIoY3RSdW4pKQotICAgICwgbV9pbmRleEJlZ2luKHJ1blJhbmdlLmxvY2F0
aW9uKQotICAgICwgbV9pbmRleEVuZChydW5SYW5nZS5sb2NhdGlvbiArIHJ1blJhbmdlLmxlbmd0
aCkKKyAgICAsIG1faW5kZXhCZWdpbihpbmRleEJlZ2luKQorICAgICwgbV9pbmRleEVuZChpbmRl
eEVuZCkKICAgICAsIG1fZ2x5cGhDb3VudChDVFJ1bkdldEdseXBoQ291bnQoY3RSdW4pKQogICAg
ICwgbV9zdHJpbmdMb2NhdGlvbihzdHJpbmdMb2NhdGlvbikKICAgICAsIG1faXNMVFIoIShDVFJ1
bkdldFN0YXR1cyhjdFJ1bikgJiBrQ1RSdW5TdGF0dXNSaWdodFRvTGVmdCkpCiB7Ci0gICAgaWYg
KCFtX2NvcmVUZXh0SW5kaWNlcykgewotICAgICAgICBtX2NvcmVUZXh0SW5kaWNlc1ZlY3Rvci5n
cm93KG1fZ2x5cGhDb3VudCk7Ci0gICAgICAgIENUUnVuR2V0U3RyaW5nSW5kaWNlcyhjdFJ1biwg
Q0ZSYW5nZU1ha2UoMCwgMCksIG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKSk7Ci0gICAg
ICAgIG1fY29yZVRleHRJbmRpY2VzID0gbV9jb3JlVGV4dEluZGljZXNWZWN0b3IuZGF0YSgpOwor
ICAgIGNvbnN0IENGSW5kZXgqIGNvcmVUZXh0SW5kaWNlcyA9IENUUnVuR2V0U3RyaW5nSW5kaWNl
c1B0cihjdFJ1bik7CisgICAgVmVjdG9yPENGSW5kZXg+IGNvcmVUZXh0SW5kaWNlc1ZlY3RvcjsK
KyAgICBpZiAoIWNvcmVUZXh0SW5kaWNlcykgeworICAgICAgICBjb3JlVGV4dEluZGljZXNWZWN0
b3IuZ3JvdyhtX2dseXBoQ291bnQpOworICAgICAgICBDVFJ1bkdldFN0cmluZ0luZGljZXMoY3RS
dW4sIENGUmFuZ2VNYWtlKDAsIDApLCBjb3JlVGV4dEluZGljZXNWZWN0b3IuZGF0YSgpKTsKKyAg
ICAgICAgY29yZVRleHRJbmRpY2VzID0gY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKTsKICAg
ICB9Ci0KLSAgICBpZiAoIW1fZ2x5cGhzKSB7Ci0gICAgICAgIG1fZ2x5cGhzVmVjdG9yLmdyb3co
bV9nbHlwaENvdW50KTsKLSAgICAgICAgQ1RSdW5HZXRHbHlwaHMoY3RSdW4sIENGUmFuZ2VNYWtl
KDAsIDApLCBtX2dseXBoc1ZlY3Rvci5kYXRhKCkpOwotICAgICAgICBtX2dseXBocyA9IG1fZ2x5
cGhzVmVjdG9yLmRhdGEoKTsKKyAgICBtX2NvcmVUZXh0SW5kaWNlc1ZlY3Rvci5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fZ2x5cGhDb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dseXBoQ291bnQ7ICsraSkKKyAgICAgICAgbV9jb3JlVGV4dEluZGljZXNWZWN0b3IudW5jaGVj
a2VkQXBwZW5kKGNvcmVUZXh0SW5kaWNlc1tpXSk7CisKKyAgICBjb25zdCBDR0dseXBoKiBnbHlw
aHMgPSBDVFJ1bkdldEdseXBoc1B0cihjdFJ1bik7CisgICAgVmVjdG9yPENHR2x5cGg+IGdseXBo
c1ZlY3RvcjsKKyAgICBpZiAoIWdseXBocykgeworICAgICAgICBnbHlwaHNWZWN0b3IuZ3Jvdyht
X2dseXBoQ291bnQpOworICAgICAgICBDVFJ1bkdldEdseXBocyhjdFJ1biwgQ0ZSYW5nZU1ha2Uo
MCwgMCksIGdseXBoc1ZlY3Rvci5kYXRhKCkpOworICAgICAgICBnbHlwaHMgPSBnbHlwaHNWZWN0
b3IuZGF0YSgpOwogICAgIH0KKyAgICBtX2dseXBoc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KG1fZ2x5cGhDb3VudCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBoQ291
bnQ7ICsraSkKKyAgICAgICAgbV9nbHlwaHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGdseXBoc1tp
XSk7CiAKICNpZiBVU0VfTEFZT1VUX1NQRUNJRklDX0FEVkFOQ0VTCiAgICAgaWYgKENUUnVuR2V0
U3RhdHVzKGN0UnVuKSAmIGtDVFJ1blN0YXR1c0hhc09yaWdpbnMpIHsKLSAgICAgICAgbV9iYXNl
QWR2YW5jZXNWZWN0b3IuZ3JvdyhtX2dseXBoQ291bnQpOwotICAgICAgICBtX2dseXBoT3JpZ2lu
cy5ncm93KG1fZ2x5cGhDb3VudCk7Ci0gICAgICAgIENUUnVuR2V0QmFzZUFkdmFuY2VzQW5kT3Jp
Z2lucyhjdFJ1biwgQ0ZSYW5nZU1ha2UoMCwgMCksIG1fYmFzZUFkdmFuY2VzVmVjdG9yLmRhdGEo
KSwgbV9nbHlwaE9yaWdpbnMuZGF0YSgpKTsKLSAgICAgICAgbV9iYXNlQWR2YW5jZXMgPSBtX2Jh
c2VBZHZhbmNlc1ZlY3Rvci5kYXRhKCk7CisgICAgICAgIFZlY3RvcjxDR1NpemU+IGJhc2VBZHZh
bmNlc1ZlY3RvcihtX2dseXBoQ291bnQpOworICAgICAgICBWZWN0b3I8Q0dQb2ludD4gZ2x5cGhP
cmlnaW5zVmVjdG9yKG1fZ2x5cGhDb3VudCk7CisgICAgICAgIENUUnVuR2V0QmFzZUFkdmFuY2Vz
QW5kT3JpZ2lucyhjdFJ1biwgQ0ZSYW5nZU1ha2UoMCwgMCksIGJhc2VBZHZhbmNlc1ZlY3Rvci5k
YXRhKCksIGdseXBoT3JpZ2luc1ZlY3Rvci5kYXRhKCkpOworICAgICAgICBtX2Jhc2VBZHZhbmNl
c1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZ2x5cGhDb3VudCk7CisgICAgICAgIG1f
Z2x5cGhPcmlnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9nbHlwaENvdW50KTsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dseXBoQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgbV9iYXNlQWR2YW5jZXNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGJhc2VBZHZhbmNlc1ZlY3Rv
cltpXSk7CisgICAgICAgICAgICBtX2dseXBoT3JpZ2lucy51bmNoZWNrZWRBcHBlbmQoZ2x5cGhP
cmlnaW5zVmVjdG9yW2ldKTsKKyAgICAgICAgfQogICAgIH0gZWxzZQogI2VuZGlmCiAgICAgewot
ICAgICAgICBtX2Jhc2VBZHZhbmNlcyA9IENUUnVuR2V0QWR2YW5jZXNQdHIoY3RSdW4pOwotICAg
ICAgICBpZiAoIW1fYmFzZUFkdmFuY2VzKSB7Ci0gICAgICAgICAgICBtX2Jhc2VBZHZhbmNlc1Zl
Y3Rvci5ncm93KG1fZ2x5cGhDb3VudCk7Ci0gICAgICAgICAgICBDVFJ1bkdldEFkdmFuY2VzKGN0
UnVuLCBDRlJhbmdlTWFrZSgwLCAwKSwgbV9iYXNlQWR2YW5jZXNWZWN0b3IuZGF0YSgpKTsKLSAg
ICAgICAgICAgIG1fYmFzZUFkdmFuY2VzID0gbV9iYXNlQWR2YW5jZXNWZWN0b3IuZGF0YSgpOwor
ICAgICAgICBjb25zdCBDR1NpemUqIGJhc2VBZHZhbmNlcyA9IENUUnVuR2V0QWR2YW5jZXNQdHIo
Y3RSdW4pOworICAgICAgICBWZWN0b3I8Q0dTaXplPiBiYXNlQWR2YW5jZXNWZWN0b3I7CisgICAg
ICAgIGlmICghYmFzZUFkdmFuY2VzKSB7CisgICAgICAgICAgICBiYXNlQWR2YW5jZXNWZWN0b3Iu
Z3JvdyhtX2dseXBoQ291bnQpOworICAgICAgICAgICAgQ1RSdW5HZXRBZHZhbmNlcyhjdFJ1biwg
Q0ZSYW5nZU1ha2UoMCwgMCksIGJhc2VBZHZhbmNlc1ZlY3Rvci5kYXRhKCkpOworICAgICAgICAg
ICAgYmFzZUFkdmFuY2VzID0gYmFzZUFkdmFuY2VzVmVjdG9yLmRhdGEoKTsKICAgICAgICAgfQor
ICAgICAgICBtX2Jhc2VBZHZhbmNlc1ZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fZ2x5
cGhDb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9nbHlwaENvdW50OyAr
K2kpCisgICAgICAgICAgICBtX2Jhc2VBZHZhbmNlc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYmFz
ZUFkdmFuY2VzW2ldKTsKICAgICB9CiB9CiAKLS8vIE1pc3NpbmcgZ2x5cGhzIHJ1biBjb25zdHJ1
Y3Rvci4gQ29yZSBUZXh0IHdpbGwgbm90IGdlbmVyYXRlIGEgcnVuIG9mIG1pc3NpbmcgZ2x5cGhz
LCBpbnN0ZWFkIGZhbGxpbmcgYmFjayBvbgotLy8gZ2x5cGhzIGZyb20gTGFzdFJlc29ydC4gV2Ug
d2FudCB0byB1c2UgdGhlIHByaW1hcnkgZm9udCdzIG1pc3NpbmcgZ2x5cGggaW4gb3JkZXIgdG8g
bWF0Y2ggdGhlIGZhc3QgdGV4dCBjb2RlIHBhdGguCi1Db21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0UnVuOjpDb21wbGV4VGV4dFJ1bihjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgc3RyaW5nTG9jYXRpb24sIHNpemVfdCBzdHJpbmdMZW5n
dGgsIGJvb2wgbHRyKQotICAgIDogbV9pbml0aWFsQWR2YW5jZShDR1NpemVaZXJvKQotICAgICwg
bV9mb250KGZvbnQpCi0gICAgLCBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKLSAgICAsIG1fc3Ry
aW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKLSAgICAsIG1faW5kZXhCZWdpbigwKQotICAgICwgbV9p
bmRleEVuZChzdHJpbmdMZW5ndGgpCi0gICAgLCBtX3N0cmluZ0xvY2F0aW9uKHN0cmluZ0xvY2F0
aW9uKQotICAgICwgbV9pc0xUUihsdHIpCi17Ci0gICAgbV9jb3JlVGV4dEluZGljZXNWZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3N0cmluZ0xlbmd0aCk7Ci0gICAgdW5zaWduZWQgciA9
IDA7Ci0gICAgd2hpbGUgKHIgPCBtX3N0cmluZ0xlbmd0aCkgewotICAgICAgICBtX2NvcmVUZXh0
SW5kaWNlc1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQocik7Ci0gICAgICAgIFVDaGFyMzIgY2hhcmFj
dGVyOwotICAgICAgICBVMTZfTkVYVChtX2NoYXJhY3RlcnMsIHIsIG1fc3RyaW5nTGVuZ3RoLCBj
aGFyYWN0ZXIpOwotICAgIH0KLSAgICBtX2dseXBoQ291bnQgPSBtX2NvcmVUZXh0SW5kaWNlc1Zl
Y3Rvci5zaXplKCk7Ci0gICAgaWYgKCFsdHIpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCByID0g
MCwgZW5kID0gbV9nbHlwaENvdW50IC0gMTsgciA8IG1fZ2x5cGhDb3VudCAvIDI7ICsrciwgLS1l
bmQpCi0gICAgICAgICAgICBzdGQ6OnN3YXAobV9jb3JlVGV4dEluZGljZXNWZWN0b3Jbcl0sIG1f
Y29yZVRleHRJbmRpY2VzVmVjdG9yW2VuZF0pOwotICAgIH0KLSAgICBtX2NvcmVUZXh0SW5kaWNl
cyA9IG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKTsKLQotICAgIC8vIFN5bnRoZXNpemUg
YSBydW4gb2YgbWlzc2luZyBnbHlwaHMuCi0gICAgbV9nbHlwaHNWZWN0b3IuZmlsbCgwLCBtX2ds
eXBoQ291bnQpOwotICAgIG1fZ2x5cGhzID0gbV9nbHlwaHNWZWN0b3IuZGF0YSgpOwotICAgIG1f
YmFzZUFkdmFuY2VzVmVjdG9yLmZpbGwoQ0dTaXplTWFrZShtX2ZvbnQud2lkdGhGb3JHbHlwaCgw
KSwgMCksIG1fZ2x5cGhDb3VudCk7Ci0gICAgbV9iYXNlQWR2YW5jZXMgPSBtX2Jhc2VBZHZhbmNl
c1ZlY3Rvci5kYXRhKCk7Ci19Ci0KLQotQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Q29tcGxleFRleHRSdW4oY29uc3QgVmVjdG9yPENHU2l6ZT4mIGFkdmFuY2VzLCBjb25z
dCBWZWN0b3I8Q0dQb2ludD4mIG9yaWdpbnMsIGNvbnN0IFZlY3RvcjxDR0dseXBoPiYgZ2x5cGhz
LCBjb25zdCBWZWN0b3I8Q0ZJbmRleD4mIHN0cmluZ0luZGljZXMsIENHU2l6ZSBpbml0aWFsQWR2
YW5jZSwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IHN0cmluZ0xvY2F0aW9uLCBzaXplX3Qgc3RyaW5nTGVuZ3RoLCBDRlJhbmdlIHJ1blJhbmdlLCBi
b29sIGx0cikKLSAgICA6IG1fYmFzZUFkdmFuY2VzVmVjdG9yKGFkdmFuY2VzKQotICAgICwgbV9n
bHlwaE9yaWdpbnMob3JpZ2lucykKLSAgICAsIG1fZ2x5cGhzVmVjdG9yKGdseXBocykKLSAgICAs
IG1fY29yZVRleHRJbmRpY2VzVmVjdG9yKHN0cmluZ0luZGljZXMpCi0gICAgLCBtX2luaXRpYWxB
ZHZhbmNlKGluaXRpYWxBZHZhbmNlKQotICAgICwgbV9mb250KGZvbnQpCi0gICAgLCBtX2NoYXJh
Y3RlcnMoY2hhcmFjdGVycykKLSAgICAsIG1fc3RyaW5nTGVuZ3RoKHN0cmluZ0xlbmd0aCkKLSAg
ICAsIG1fY29yZVRleHRJbmRpY2VzKG1fY29yZVRleHRJbmRpY2VzVmVjdG9yLmRhdGEoKSkKLSAg
ICAsIG1fZ2x5cGhzKG1fZ2x5cGhzVmVjdG9yLmRhdGEoKSkKLSAgICAsIG1fYmFzZUFkdmFuY2Vz
KG1fYmFzZUFkdmFuY2VzVmVjdG9yLmRhdGEoKSkKLSAgICAsIG1faW5kZXhCZWdpbihydW5SYW5n
ZS5sb2NhdGlvbikKLSAgICAsIG1faW5kZXhFbmQocnVuUmFuZ2UubG9jYXRpb24gKyBydW5SYW5n
ZS5sZW5ndGgpCi0gICAgLCBtX2dseXBoQ291bnQoZ2x5cGhzLnNpemUoKSkKLSAgICAsIG1fc3Ry
aW5nTG9jYXRpb24oc3RyaW5nTG9jYXRpb24pCi0gICAgLCBtX2lzTFRSKGx0cikKLXsKLX0KLQog
c3RydWN0IFByb3ZpZGVySW5mbyB7CiAgICAgY29uc3QgVUNoYXIqIGNwOwogICAgIHVuc2lnbmVk
IGxlbmd0aDsKQEAgLTIyOSw3ICsxOTIsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLAogewog
ICAgIGlmICghZm9udCkgewogICAgICAgICAvLyBDcmVhdGUgYSBydW4gb2YgbWlzc2luZyBnbHlw
aHMgZnJvbSB0aGUgcHJpbWFyeSBmb250LgotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBl
bmQoQ29tcGxleFRleHRSdW46OmNyZWF0ZShtX2ZvbnQucHJpbWFyeUZvbnQoKSwgY3AsIHN0cmlu
Z0xvY2F0aW9uLCBsZW5ndGgsIG1fcnVuLmx0cigpKSk7CisgICAgICAgIG1fY29tcGxleFRleHRS
dW5zLmFwcGVuZChDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBj
cCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgMCwgbGVuZ3RoLCBtX3J1bi5sdHIoKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMTMsNyArMjc2LDcgQEAgdm9pZCBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnNGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjcCwKICAgICAgICAgICAgICAgICAgICAgLy8gTlNGb250UmVuZGVyaW5nTW9kZS4KICAg
ICAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmb250TmFtZSA9IGFkb3B0
Q0YoQ1RGb250Q29weVBvc3RTY3JpcHROYW1lKHJ1bkNURm9udCkpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoQ0ZFcXVhbChmb250TmFtZS5nZXQoKSwgQ0ZTVFIoIkxhc3RSZXNvcnQiKSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcGxleFRleHRSdW5zLmFwcGVuZChDb21wbGV4
VGV4dFJ1bjo6Y3JlYXRlKG1fZm9udC5wcmltYXJ5Rm9udCgpLCBjcCwgc3RyaW5nTG9jYXRpb24g
KyBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubGVuZ3RoLCBtX3J1bi5sdHIoKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0
UnVuOjpjcmVhdGUobV9mb250LnByaW1hcnlGb250KCksIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVu
Z3RoLCBydW5SYW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubG9jYXRpb24gKyBydW5SYW5nZS5sZW5n
dGgsIG1fcnVuLmx0cigpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb250Q2FjaGUg
PSBGb250Q2FjaGU6OnNpbmdsZXRvbigpOwpAQCAtMzMyLDcgKzI5NSw3IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpjb2xsZWN0Q29tcGxleFRleHRSdW5zRm9yQ2hhcmFjdGVycyhjb25z
dCBVQ2hhciogY3AsCiAgICAgICAgIGlmIChtX2ZhbGxiYWNrRm9udHMgJiYgcnVuRm9udCAhPSAm
bV9mb250LnByaW1hcnlGb250KCkpCiAgICAgICAgICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChm
b250KTsKIAotICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46
OmNyZWF0ZShjdFJ1biwgKnJ1bkZvbnQsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5S
YW5nZSkpOworICAgICAgICBtX2NvbXBsZXhUZXh0UnVucy5hcHBlbmQoQ29tcGxleFRleHRSdW46
OmNyZWF0ZShjdFJ1biwgKnJ1bkZvbnQsIGNwLCBzdHJpbmdMb2NhdGlvbiwgbGVuZ3RoLCBydW5S
YW5nZS5sb2NhdGlvbiwgcnVuUmFuZ2UubG9jYXRpb24gKyBydW5SYW5nZS5sZW5ndGgpKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Db21wbGV4VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0NvbXBsZXhUZXh0Q29udHJvbGxlclVuaXNjcmliZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDM4MWI2NzNmNjM2MzA4MDdlZGFlZmI4ZTljMTc3MjA3YTQ5NDg3NQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Db21wbGV4
VGV4dENvbnRyb2xsZXJVbmlzY3JpYmUuY3BwCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisK
KyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1
ZGUgIkhXbmREQy5oIgorI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCByZXNldENvbnRyb2xB
bmRTdGF0ZShTQ1JJUFRfQ09OVFJPTCYgY29udHJvbCwgU0NSSVBUX1NUQVRFJiBzdGF0ZSwgYm9v
bCBydGwsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSkKK3sKKyAgICBtZW1zZXQoJmNvbnRyb2ws
IDAsIHNpemVvZihTQ1JJUFRfQ09OVFJPTCkpOworICAgIG1lbXNldCgmc3RhdGUsIDAsIHNpemVv
ZihTQ1JJUFRfU1RBVEUpKTsKKworICAgIC8vIFNldCB1cCB0aGUgY29ycmVjdCBkaXJlY3Rpb24g
Zm9yIHRoZSBydW4uCisgICAgc3RhdGUudUJpZGlMZXZlbCA9IHJ0bDsKKworICAgIC8vIExvY2sg
dGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwgb3ZlcnJpZGUuCisgICAgc3RhdGUuZk92ZXJyaWRlRGly
ZWN0aW9uID0gZGlyZWN0aW9uYWxPdmVycmlkZTsKK30KKworc3RydWN0IFNoYXBlUmVzdWx0IHsK
KyAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOworICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsKKyAg
ICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7Cit9OworCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxTaGFwZVJlc3VsdD4gc2hhcGUoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxl
biwgU0NSSVBUX0lURU0mIGl0ZW0sIGNvbnN0IEZvbnQqIGZvbnQpCit7CisgICAgSFduZERDIGhk
YzsKKyAgICBIRk9OVCBvbGRGb250ID0gMDsKKyAgICBIUkVTVUxUIHNoYXBlUmVzdWx0OworICAg
IGludCBnbHlwaENvdW50ID0gMDsKKworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIFNoYXBlUmVzdWx0IHJlc3VsdDsKKyAgICByZXN1bHQuZ2x5cGhzLnJlc2l6ZSgx
LjUgKiBsZW4gKyAxNik7CisgICAgcmVzdWx0LmNsdXN0ZXJzLnJlc2l6ZShsZW4pOworICAgIHJl
c3VsdC52aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShyZXN1bHQuZ2x5cGhzLnNpemUoKSk7CisgICAg
ZG8geworICAgICAgICBzaGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udC0+c2NyaXB0
Q2FjaGUoKSwgc3RyLCBsZW4sIHJlc3VsdC5nbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLCByZXN1bHQu
Z2x5cGhzLmRhdGEoKSwgcmVzdWx0LmNsdXN0ZXJzLmRhdGEoKSwgcmVzdWx0LnZpc3VhbEF0dHJp
YnV0ZXMuZGF0YSgpLCAmZ2x5cGhDb3VudCk7CisgICAgICAgIGlmIChzaGFwZVJlc3VsdCA9PSBF
X1BFTkRJTkcpIHsKKyAgICAgICAgICAgIC8vIFRoZSBzY3JpcHQgY2FjaGUgaXNuJ3QgcHJpbWVk
IHdpdGggZW5vdWdoIGluZm8geWV0LiBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwor
ICAgICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCisg
ICAgICAgICAgICBBU1NFUlQoIWhkYyk7CisgICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKKyAg
ICAgICAgICAgIEhGT05UIGhmb250ID0gZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKTsKKyAg
ICAgICAgICAgIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAg
ICAgICB9IGVsc2UgaWYgKHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5nbHlwaHMucmVzaXplKHJlc3VsdC5nbHlwaHMuc2l6ZSgpICogMik7CisgICAg
ICAgICAgICByZXN1bHQudmlzdWFsQXR0cmlidXRlcy5yZXNpemUocmVzdWx0LmdseXBocy5zaXpl
KCkpOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc2hhcGVSZXN1bHQgPT0gRV9QRU5ESU5HIHx8
IHNoYXBlUmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworCisgICAgaWYgKGhkYykKKyAgICAgICAg
U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CisKKyAgICBpZiAoRkFJTEVEKHNoYXBlUmVzdWx0
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJlc3VsdC5nbHlwaHMuc2hyaW5rKGdseXBo
Q291bnQpOworICAgIHJlc3VsdC52aXN1YWxBdHRyaWJ1dGVzLnNocmluayhnbHlwaENvdW50KTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBQbGFjZVJlc3VsdCB7CisgICAgVmVj
dG9yPGludD4gYWR2YW5jZXM7CisgICAgVmVjdG9yPEdPRkZTRVQ+IG9mZnNldHM7Cit9OworCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxQbGFjZVJlc3VsdD4gcGxhY2UoU0NSSVBUX0lURU0mIGl0ZW0s
IGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFZlY3RvcjxXT1JEPiYgZ2x5cGhzLCBjb25zdCBWZWN0
b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKQoreworICAgIFBsYWNlUmVzdWx0
IHJlc3VsdDsKKyAgICByZXN1bHQub2Zmc2V0cy5yZXNpemUoZ2x5cGhzLnNpemUoKSk7CisgICAg
cmVzdWx0LmFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKKyAgICBpbnQgZ2x5cGhDb3Vu
dCA9IDA7CisgICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnQtPnNj
cmlwdENhY2hlKCksIGdseXBocy5kYXRhKCksIGdseXBocy5zaXplKCksIHZpc3VhbEF0dHJpYnV0
ZXMuZGF0YSgpLCAmaXRlbS5hLCByZXN1bHQuYWR2YW5jZXMuZGF0YSgpLCByZXN1bHQub2Zmc2V0
cy5kYXRhKCksIDApOworICAgIGlmIChwbGFjZVJlc3VsdCA9PSBFX1BFTkRJTkcpIHsKKyAgICAg
ICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0aCBlbm91Z2ggaW5mbyB5ZXQu
IFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9OVCBpbnRvCisgICAgICAgIC8vIGEgREMgYW5kIHBh
c3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNlLgorICAgICAgICBIV25kREMgaGRjKDApOworICAg
ICAgICBIRk9OVCBoZm9udCA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7CisgICAgICAg
IEhGT05UIG9sZEZvbnQgPSAoSEZPTlQpU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpOworICAgICAg
ICBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKGhkYywgZm9udC0+c2NyaXB0Q2FjaGUoKSwgZ2x5
cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgdmlzdWFsQXR0cmlidXRlcy5kYXRhKCksICZpdGVt
LmEsIHJlc3VsdC5hZHZhbmNlcy5kYXRhKCksIHJlc3VsdC5vZmZzZXRzLmRhdGEoKSwgMCk7Cisg
ICAgICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOworICAgIH0KKworICAgIGlmIChGQUlM
RUQocGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IFNoYXBlQW5kUGxhY2VSZXN1bHQgewor
ICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzOworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBv
cmlnaW5zOworICAgIFZlY3RvcjxHbHlwaD4gZ2x5cGhzOworICAgIFZlY3RvcjxzaXplX3Q+IHN0
cmluZ0luZGljZXM7CisgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlOworfTsKKworc3RhdGlj
IHN0ZDo6b3B0aW9uYWw8U2hhcGVBbmRQbGFjZVJlc3VsdD4gc2hhcGVBbmRQbGFjZShjb25zdCBV
Q2hhciogc3RyLCB1bnNpZ25lZCBsZW4sIFNDUklQVF9JVEVNJiBpdGVtLCBjb25zdCBGb250KiBm
b250KQoreworICAgIGlmIChjb25zdCBhdXRvJiBzaGFwZVJlc3VsdCA9IHNoYXBlKHN0ciwgbGVu
LCBpdGVtLCBmb250KSkgeworICAgICAgICBpZiAoY29uc3QgYXV0byYgcGxhY2VSZXN1bHQgPSBw
bGFjZShpdGVtLCBmb250LCBzaGFwZVJlc3VsdC0+Z2x5cGhzLCBzaGFwZVJlc3VsdC0+dmlzdWFs
QXR0cmlidXRlcykpIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNMb2dpY2FsU2NhbGUgPSBm
b250LT5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSA/IDEuMGYgOiAzMi4wZjsKKyAgICAgICAgICAg
IFNoYXBlQW5kUGxhY2VSZXN1bHQgcmVzdWx0OworICAgICAgICAgICAgcmVzdWx0LmFkdmFuY2Vz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2hhcGVSZXN1bHQtPmdseXBocy5zaXplKCkpOworICAg
ICAgICAgICAgcmVzdWx0Lm9yaWdpbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaGFwZVJlc3Vs
dC0+Z2x5cGhzLnNpemUoKSk7CisgICAgICAgICAgICByZXN1bHQuZ2x5cGhzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2hhcGVSZXN1bHQtPmdseXBocy5zaXplKCkpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaGFwZVJlc3VsdC0+Z2x5cGhzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkdmFuY2VzLmFwcGVuZChGbG9hdFNpemUocGxhY2VSZXN1
bHQtPmFkdmFuY2VzW2ldIC8gY0xvZ2ljYWxTY2FsZSwgMCkpOworICAgICAgICAgICAgICAgIHJl
c3VsdC5vcmlnaW5zLmFwcGVuZChGbG9hdFBvaW50KHBsYWNlUmVzdWx0LT5vZmZzZXRzW2ldLmR1
IC8gY0xvZ2ljYWxTY2FsZSwgcGxhY2VSZXN1bHQtPm9mZnNldHNbaV0uZHYgLyBjTG9naWNhbFNj
YWxlKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LmdseXBocy5hcHBlbmQoc2hhcGVSZXN1bHQt
PmdseXBoc1tpXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJlc3VsdC5zdHJpbmdJ
bmRpY2VzLnJlc2l6ZShzaGFwZVJlc3VsdC0+Z2x5cGhzLnNpemUoKSk7CisgICAgICAgICAgICBh
dXRvIGVtcHR5VmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBpbmRleCA6IHJlc3VsdC5zdHJpbmdJbmRpY2VzKQorICAgICAg
ICAgICAgICAgIGluZGV4ID0gZW1wdHlWYWx1ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkKKyAgICAgICAgICAgICAgICByZXN1bHQuc3RyaW5nSW5kaWNl
c1tzaGFwZVJlc3VsdC0+Y2x1c3RlcnNbaV1dID0gaTsKKyAgICAgICAgICAgIHNpemVfdCBjdXJy
ZW50VmFsdWUgPSBlbXB0eVZhbHVlOworICAgICAgICAgICAgZm9yIChhdXRvIGluZGV4IDogcmVz
dWx0LnN0cmluZ0luZGljZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT0gZW1wdHlW
YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBpbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBlbXB0eVZhbHVlKQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4IDogcmVzdWx0LnN0
cmluZ0luZGljZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gZW1wdHlWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBjdXJyZW50VmFsdWU7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBpbmRleDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byYgaW5kZXggOiByZXN1bHQuc3RyaW5nSW5k
aWNlcykgeworICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleCAhPSBlbXB0eVZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBpbmRleCArPSBpdGVtLmlDaGFyUG9zOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXN1bHQuaW5pdGlhbEFkdmFuY2UgPSBGbG9hdFNpemUocGxhY2VSZXN1bHQt
Pm9mZnNldHNbMF0uZHUgLyBjTG9naWNhbFNjYWxlLCBwbGFjZVJlc3VsdC0+b2Zmc2V0c1swXS5k
diAvIGNMb2dpY2FsU2NhbGUpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6Y29sbGVjdENvbXBsZXhUZXh0UnVuc0ZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNwLCB1
bnNpZ25lZCBsZW5ndGgsIHVuc2lnbmVkIHN0cmluZ0xvY2F0aW9uLCBjb25zdCBGb250KiBmb250
KQoreworICAgIC8vIFNjcmlwdEl0ZW1pemUgKGluIFdpbmRvd3MgWFAgdmVyc2lvbnMgcHJpb3Ig
dG8gU1AyKSBjYW4gb3ZlcmZsb3cgYnkgMS4gVGhpcyBpcyB3aHkgdGhlcmUgaXMgYW4gZXh0cmEg
ZW1wdHkgaXRlbQorICAgIC8vIGhhbmdpbmcgb3V0IGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5Cisg
ICAgU0NSSVBUX0NPTlRST0wgY29udHJvbDsKKyAgICBTQ1JJUFRfU1RBVEUgc3RhdGU7CisgICAg
VmVjdG9yPFNDUklQVF9JVEVNPiBpdGVtcyg2KTsKKyAgICByZXNldENvbnRyb2xBbmRTdGF0ZShj
b250cm9sLCBzdGF0ZSwgbV9ydW4ucnRsKCksIG1fcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSk7
CisgICAgbWVtc2V0KGl0ZW1zLmRhdGEoKSwgMCwgc2l6ZW9mKFNDUklQVF9JVEVNKSAqIGl0ZW1z
LnNpemUoKSk7CisgICAgaW50IG51bUl0ZW1zID0gMDsKKyAgICBIUkVTVUxUIHJjID0gU19PSzsK
KyAgICB3aGlsZSAocmMgPSA6OlNjcmlwdEl0ZW1pemUoY3AsIGxlbmd0aCwgaXRlbXMuc2l6ZSgp
IC0gMSwgJmNvbnRyb2wsICZzdGF0ZSwgaXRlbXMuZGF0YSgpLCAmbnVtSXRlbXMpID09IEVfT1VU
T0ZNRU1PUlkpIHsKKyAgICAgICAgaXRlbXMucmVzaXplKGl0ZW1zLnNpemUoKSAqIDIpOworICAg
ICAgICByZXNldENvbnRyb2xBbmRTdGF0ZShjb250cm9sLCBzdGF0ZSwgbV9ydW4ucnRsKCksIG1f
cnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSk7CisgICAgICAgIG1lbXNldChpdGVtcy5kYXRhKCks
IDAsIHNpemVvZihTQ1JJUFRfSVRFTSkgKiBpdGVtcy5zaXplKCkpOworICAgIH0KKyAgICBpZiAo
RkFJTEVEKHJjKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIlVuaXNjcmliZUNvbnRyb2xsZXI6
Oml0ZW1pemVTaGFwZUFuZFBsYWNlOiBTY3JpcHRJdGVtaXplIGZhaWxlZCwgcmM9JWx4IiwgcmMp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGl0ZW1zLnJlc2l6ZShudW1JdGVtcyArIDEp
OworCisgICAgYXV0byBzaGFwZUFuZFBsYWNlSXRlbSA9IFsmXShpbnQgaW5kZXgpIHsKKyAgICAg
ICAgYXV0byYgc2NyaXB0SXRlbSA9IGl0ZW1zW2luZGV4XTsKKyAgICAgICAgaW50IGluZGV4QmVn
aW4gPSBzY3JpcHRJdGVtLmlDaGFyUG9zOworICAgICAgICBpbnQgaW5kZXhFbmQgPSBpdGVtc1tp
bmRleCArIDFdLmlDaGFyUG9zOworICAgICAgICBpbnQgbGVuZ3RoID0gaW5kZXhFbmQgLSBpbmRl
eEJlZ2luOworICAgICAgICBpZiAoY29uc3QgYXV0byYgc2hhcGVBbmRQbGFjZVJlc3VsdCA9IHNo
YXBlQW5kUGxhY2UoY3AgKyBpbmRleEJlZ2luLCBsZW5ndGgsIHNjcmlwdEl0ZW0sIGZvbnQpKQor
ICAgICAgICAgICAgbV9jb21wbGV4VGV4dFJ1bnMuYXBwZW5kKENvbXBsZXhUZXh0UnVuOjpjcmVh
dGUoc2hhcGVBbmRQbGFjZVJlc3VsdC0+YWR2YW5jZXMsIHNoYXBlQW5kUGxhY2VSZXN1bHQtPm9y
aWdpbnMsIHNoYXBlQW5kUGxhY2VSZXN1bHQtPmdseXBocywgc2hhcGVBbmRQbGFjZVJlc3VsdC0+
c3RyaW5nSW5kaWNlcywgc2hhcGVBbmRQbGFjZVJlc3VsdC0+aW5pdGlhbEFkdmFuY2UsICpmb250
LCBjcCwgc3RyaW5nTG9jYXRpb24sIGxlbmd0aCwgaW5kZXhCZWdpbiwgaW5kZXhFbmQsIHNjcmlw
dEl0ZW0uYS5mUlRMID09IEZBTFNFKSk7CisgICAgfTsKKworICAgIGlmIChtX3J1bi5ydGwoKSkg
eworICAgICAgICBmb3IgKGludCBpID0gaXRlbXMuc2l6ZSgpIC0gMjsgaSA+PSAwOyBpLS0pCisg
ICAgICAgICAgICBzaGFwZUFuZFBsYWNlSXRlbShpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpIC0gMTsgaSsrKQorICAgICAgICAg
ICAgc2hhcGVBbmRQbGFjZUl0ZW0oaSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dX
aW4uY3BwCmluZGV4IDVlODg3MjBmNjM5ZTgzOThiNGUwMjVhZTFjOTZjYzRiNDUwYWU3NzMuLjc5
ZWYzMjdhYjI1ZTdmMDBlMTFlY2M4NGQ4MzdhOWFkZjJmYTcxZjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0zNCw3ICsz
NCw2IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxl
ci5oIgogI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKICNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KICNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CkBAIC0xNzUsOSArMTc0LDYgQEAg
dm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICBDR0FmZmluZVRyYW5zZm9ybSBzYXZlZE1hdHJp
eCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY2dDb250ZXh0KTsKICAgICBDR0NvbnRleHRTZXRU
ZXh0TWF0cml4KGNnQ29udGV4dCwgbWF0cml4KTsKIAotICAgIC8vIFVuaXNjcmliZSBnaXZlcyB1
cyBvZmZzZXRzIHRvIGhlbHAgcmVmaW5lIHRoZSBwb3NpdGlvbmluZyBvZiBjb21iaW5pbmcgZ2x5
cGhzLgotICAgIEZsb2F0U2l6ZSB0cmFuc2xhdGlvbiA9IGdseXBoQnVmZmVyLm9mZnNldEF0KGZy
b20pOwotCiAgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEu
c2l6ZSgpKTsKICAgICB3a1NldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQs
IGZvbnQucGxhdGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3Jt
RGF0YSgpLnVzZUdESSgpKTsKIApAQCAtMTkzLDIyICsxODksMjIgQEAgdm9pZCBGb250Q2FzY2Fk
ZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9u
dCYgZm9udCwKICAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxD
b2xvcigpOwogICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3Ioc2hhZG93Q29sb3IucmVkKCks
IHNoYWRvd0NvbG9yLmdyZWVuKCksIHNoYWRvd0NvbG9yLmJsdWUoKSwgc2hhZG93Q29sb3IuYWxw
aGEoKSAqIGZpbGxDb2xvci5hbHBoYSgpIC8gMjU1KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0
WCA9IHBvaW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBzaGFkb3dPZmZzZXQud2lkdGgo
KTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQu
d2lkdGgoKTsKICAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3Jtcywg
dGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93
biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyB0
cmFuc2xhdGlvbi5oZWlnaHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAgIGZsb2F0
IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGdyYXBo
aWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKICAgICAgICAg
Q0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgc2hhZG93VGV4dFgsIHNoYWRvd1Rl
eHRZKTsKICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwogICAgICAgICBpZiAoZm9udC5z
eW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENHQ29udGV4dFNldFRleHRQb3Np
dGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHRyYW5zbGF0aW9uLndpZHRoKCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0
cmFuc2xhdGlvbi5oZWlnaHQoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBz
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dp
dGhBZHZhbmNlcyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgQ0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMp
OwogICAgICAgICB9CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENv
bG9yKTsKICAgICB9CiAKLSAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBw
b2ludC54KCkgKyB0cmFuc2xhdGlvbi53aWR0aCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5o
ZWlnaHQoKSk7CisgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQu
eCgpLCBwb2ludC55KCkpOwogICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dD
b250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6
ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKICAgICBpZiAoZm9u
dC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0
aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIGZvbnQuc3lu
dGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWlnaHQoKSk7Cisg
ICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIGZv
bnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkpOwogICAgICAgICBDR0NvbnRleHRT
aG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSks
IG51bUdseXBocyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVEaXJlY3QyRC5jcHAKaW5kZXggYmQ1NGNi
YTkwMmFhM2Y4ZjhjYTAwYmQ0MjFlMDEzMDlmY2Y4MDg4Mi4uODYyZTQwZTdiZTA3NGE3NzhhZjQ2
MzEwMDUzNzM0YjczZTMyYjYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZURpcmVjdDJELmNwcApAQCAtODMsOSAr
ODMsNiBAQCB2b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LAogICAgICAgICBjb250ZXh0LT5TZXRUcmFu
c2Zvcm0obWF0cml4ICogc2tld01hdHJpeCk7CiAgICAgfQogCi0gICAgLy8gVW5pc2NyaWJlIGdp
dmVzIHVzIG9mZnNldHMgdG8gaGVscCByZWZpbmUgdGhlIHBvc2l0aW9uaW5nIG9mIGNvbWJpbmlu
ZyBnbHlwaHMuCi0gICAgRmxvYXRTaXplIHRyYW5zbGF0aW9uID0gZ2x5cGhCdWZmZXIub2Zmc2V0
QXQoZnJvbSk7Ci0KICAgICBSRUxFQVNFX0FTU0VSVChwbGF0Zm9ybURhdGEuZHdGb250KCkpOwog
ICAgIFJFTEVBU0VfQVNTRVJUKHBsYXRmb3JtRGF0YS5kd0ZvbnRGYWNlKCkpOwogCkBAIC0xMjUs
OSArMTIyLDkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LmNsZWFyU2hhZG93KCk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29u
dGV4dC5maWxsQ29sb3IoKTsKICAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yKHNoYWRvd0Nv
bG9yLnJlZCgpLCBzaGFkb3dDb2xvci5ncmVlbigpLCBzaGFkb3dDb2xvci5ibHVlKCksIHNoYWRv
d0NvbG9yLmFscGhhKCkgKiBmaWxsQ29sb3IuYWxwaGEoKSAvIDI1NSk7Ci0gICAgICAgIGZsb2F0
IHNoYWRvd1RleHRYID0gcG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSArIHNoYWRvd09m
ZnNldC53aWR0aCgpOworICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNo
YWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0
cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAg
eWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBv
aW50LnkoKSArIHRyYW5zbGF0aW9uLmhlaWdodCgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICog
KGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAg
ICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0
KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEp
OwogCiAgICAgICAgIGF1dG8gc2hhZG93QnJ1c2ggPSBncmFwaGljc0NvbnRleHQuYnJ1c2hXaXRo
Q29sb3Ioc2hhZG93RmlsbENvbG9yKTsKICAgICAgICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQy
RDE6OlBvaW50MkYoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgJmdseXBoUnVuLCBzaGFkb3dC
cnVzaCk7CkBAIC0xMzUsOSArMTMyLDkgQEAgdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwKICAgICAg
ICAgICAgIGNvbnRleHQtPkRyYXdHbHlwaFJ1bihEMkQxOjpQb2ludDJGKHNoYWRvd1RleHRYICsg
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHNoYWRvd1RleHRZKSwgJmdseXBoUnVuLCBzaGFk
b3dCcnVzaCk7CiAgICAgfQogCi0gICAgY29udGV4dC0+RHJhd0dseXBoUnVuKEQyRDE6OlBvaW50
MkYocG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSwgcG9pbnQueSgpICsgdHJhbnNsYXRp
b24uaGVpZ2h0KCkpLCAmZ2x5cGhSdW4sIGdyYXBoaWNzQ29udGV4dC5zb2xpZEZpbGxCcnVzaCgp
KTsKKyAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCksIHBv
aW50LnkoKSksICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOwog
ICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkKLSAgICAgICAgY29udGV4dC0+RHJh
d0dseXBoUnVuKEQyRDE6OlBvaW50MkYocG9pbnQueCgpICsgdHJhbnNsYXRpb24ud2lkdGgoKSAr
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyB0cmFuc2xhdGlvbi5oZWln
aHQoKSksICZnbHlwaFJ1biwgZ3JhcGhpY3NDb250ZXh0LnNvbGlkRmlsbEJydXNoKCkpOworICAg
ICAgICBjb250ZXh0LT5EcmF3R2x5cGhSdW4oRDJEMTo6UG9pbnQyRihwb2ludC54KCkgKyBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpKSwgJmdseXBoUnVuLCBncmFwaGljc0Nv
bnRleHQuc29saWRGaWxsQnJ1c2goKSk7CiAKICAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRXaW4uY3BwCmluZGV4IDIxZDMyZWRiZjk1ODgwMTI5OTkwZmE1NWM4ZTk2NGZlNDQwMzc5
MTIuLjYwODJmMTY5MGQ2MDc4ODdjMTVhM2M1ZWY5ZDdmZWUxMjBjNTNlOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKQEAgLTMzLDcg
KzMzLDYgQEAKICNpbmNsdWRlICJMYXlvdXRSZWN0LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJVbmlzY3JpYmVDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTUw
LDc5ICs0OSw0IEBAIGJvb2wgRm9udENhc2NhZGU6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJ
bkNvbXBsZXhUZXh0KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRm9udENhc2NhZGU6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25z
dAotewotICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKLSAgICBpdC5hZHZh
bmNlKGZyb20pOwotICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwot
ICAgIGl0LmFkdmFuY2UodG8pOwotICAgIGZsb2F0IGFmdGVyV2lkdGggPSBpdC5ydW5XaWR0aFNv
RmFyKCk7Ci0KLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxl
bmd0aCgpKTsKLSAgICAgICAgc2VsZWN0aW9uUmVjdC5tb3ZlKGl0LnJ1bldpZHRoU29GYXIoKSAt
IGFmdGVyV2lkdGgsIDApOwotICAgIH0gZWxzZQotICAgICAgICBzZWxlY3Rpb25SZWN0Lm1vdmUo
YmVmb3JlV2lkdGgsIDApOwotICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAt
IGJlZm9yZVdpZHRoKTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBm
b3JUZXh0RW1waGFzaXMpIGNvbnN0Ci17Ci0gICAgaWYgKGZvclRleHRFbXBoYXNpcykgewotICAg
ICAgICAvLyBGSVhNRTogQWRkIGZvclRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJl
Q29udHJvbGxlciBhbmQgdXNlIGl0LgotICAgICAgICBMT0dfRVJST1IoIk5vdCBpbXBsZW1lbnRl
ZCBmb3IgdGV4dCBlbXBoYXNpcy4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
VW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgY29udHJvbGxl
ci5hZHZhbmNlKGZyb20pOwotICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gY29udHJvbGxlci5ydW5X
aWR0aFNvRmFyKCk7Ci0gICAgY29udHJvbGxlci5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOwot
Ci0gICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBmbG9hdCBhZnRlcldpZHRoID0gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCk7Ci0KLSAgICBp
ZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIGNvbnRyb2xsZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkp
OwotICAgICAgICByZXR1cm4gY29udHJvbGxlci5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRo
OwotICAgIH0KLSAgICByZXR1cm4gYmVmb3JlV2lkdGg7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6
OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAotewotICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZl
ciwgRm9yVGV4dEVtcGhhc2lzKTsKLQotICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRyYXdFbXBoYXNpc01hcmtzKGNvbnRleHQsIGdseXBoQnVm
ZmVyLCBtYXJrLCBGbG9hdFBvaW50KHBvaW50LngoKSArIGluaXRpYWxBZHZhbmNlLCBwb2ludC55
KCkpKTsKLX0KLQotZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzLCBH
bHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAotewotICAgIFVuaXNjcmliZUNvbnRy
b2xsZXIgY29udHJvbGxlcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAgIGNvbnRyb2xs
ZXIuYWR2YW5jZShydW4ubGVuZ3RoKCkpOwotICAgIGlmIChnbHlwaE92ZXJmbG93KSB7Ci0gICAg
ICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IG1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPnRvcCwgY2Vp
bGYoLWNvbnRyb2xsZXIubWluR2x5cGhCb3VuZGluZ0JveFkoKSkgLSAoZ2x5cGhPdmVyZmxvdy0+
Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2VudCgpKSk7Ci0gICAgICAgIGds
eXBoT3ZlcmZsb3ctPmJvdHRvbSA9IG1heDxpbnQ+KGdseXBoT3ZlcmZsb3ctPmJvdHRvbSwgY2Vp
bGYoY29udHJvbGxlci5tYXhHbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5j
b21wdXRlQm91bmRzID8gMCAgOiBmb250TWV0cmljcygpLmRlc2NlbnQoKSkpOwotICAgICAgICBn
bHlwaE92ZXJmbG93LT5sZWZ0ID0gbWF4PGludD4oMCwgY2VpbGYoLWNvbnRyb2xsZXIubWluR2x5
cGhCb3VuZGluZ0JveFgoKSkpOwotICAgICAgICBnbHlwaE92ZXJmbG93LT5yaWdodCA9IG1heDxp
bnQ+KDAsIGNlaWxmKGNvbnRyb2xsZXIubWF4R2x5cGhCb3VuZGluZ0JveFgoKSAtIGNvbnRyb2xs
ZXIucnVuV2lkdGhTb0ZhcigpKSk7Ci0gICAgfQotICAgIHJldHVybiBjb250cm9sbGVyLnJ1bldp
ZHRoU29GYXIoKTsKLX0KLQotaW50IEZvbnRDYXNjYWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LCBib29sIGluY2x1ZGVQ
YXJ0aWFsR2x5cGhzKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHRydW5jYXRpb24gaXMg
bm90IGEgcHJvYmxlbSBmb3IgSFRNTCwgYnV0IG9ubHkgYWZmZWN0cyBTVkcsIHdoaWNoIHBhc3Nl
cyBmbG9hdGluZy1wb2ludCBudW1iZXJzCi0gICAgLy8gdG8gRm9udENhc2NhZGU6Om9mZnNldEZv
clBvc2l0aW9uKCkuIEJ1ZyBodHRwOi8vd2Via2l0Lm9yZy9iLzQwNjczIHRyYWNrcyBmaXhpbmcg
dGhpcyBwcm9ibGVtLgotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8aW50Pih4RmxvYXQpOwotCi0g
ICAgVW5pc2NyaWJlQ29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7Ci0gICAgcmV0dXJu
IGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24oeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwot
fQotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
VW5pc2NyaWJlQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwYjAzODdlZmE3MTQwYjI5ZDNkZWNhZGI4NTAyNDk4YjU5YjkwMzYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pc2NyaWJlQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0j
aW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKLXVzaW5nIG5hbWVzcGFj
ZSBzdGQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFJlYXJjaGl0ZWN0IHRo
aXMgdG8gYmUgbW9yZSBsaWtlIFdpZHRoSXRlcmF0b3IgaW4gRm9udC5jcHAuICBIYXZlIGFuIGFk
dmFuY2UoKSBtZXRob2QKLS8vIHRoYXQgZG9lcyBzdHVmZiBpbiB0aGF0IG1ldGhvZCBpbnN0ZWFk
IG9mIGRvaW5nIGV2ZXJ5dGhpbmcgaW4gdGhlIGNvbnN0cnVjdG9yLiAgSGF2ZSBhZHZhbmNlKCkK
LS8vIHRha2UgdGhlIEdseXBoQnVmZmVyIGFzIGFuIGFyZyBzbyB0aGF0IHdlIGRvbid0IGhhdmUg
dG8gcG9wdWxhdGUgdGhlIGdseXBoIGJ1ZmZlciB3aGVuCi0vLyBtZWFzdXJpbmcuCi1VbmlzY3Jp
YmVDb250cm9sbGVyOjpVbmlzY3JpYmVDb250cm9sbGVyKGNvbnN0IEZvbnRDYXNjYWRlKiBmb250
LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRz
KQotICAgIDogbV9mb250KCpmb250KQotICAgICwgbV9ydW4ocnVuKQotICAgICwgbV9mYWxsYmFj
a0ZvbnRzKGZhbGxiYWNrRm9udHMpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hYKG51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdCb3hYKG51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpCi0gICAgLCBtX21pbkdseXBoQm91bmRpbmdCb3hZ
KG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpCi0gICAgLCBtX21heEdseXBoQm91bmRpbmdC
b3hZKG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWluKCkpCi0gICAgLCBtX2VuZChydW4ubGVuZ3Ro
KCkpCi0gICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoMCkKLSAgICAsIG1fcnVuV2lkdGhTb0Zhcigw
KQotICAgICwgbV9wYWRkaW5nKHJ1bi5leHBhbnNpb24oKSkKLSAgICAsIG1fY29tcHV0aW5nT2Zm
c2V0UG9zaXRpb24oZmFsc2UpCi0gICAgLCBtX2luY2x1ZGVQYXJ0aWFsR2x5cGhzKGZhbHNlKQot
ICAgICwgbV9vZmZzZXRYKDApCi0gICAgLCBtX29mZnNldFBvc2l0aW9uKDApCi17Ci0gICAgaWYg
KCFtX3BhZGRpbmcpCi0gICAgICAgIG1fcGFkUGVyU3BhY2UgPSAwOwotICAgIGVsc2UgewotICAg
ICAgICBmbG9hdCBudW1TcGFjZXMgPSAwOwotICAgICAgICBmb3IgKGludCBzID0gMDsgcyA8IG1f
cnVuLmxlbmd0aCgpOyBzKyspIHsKLSAgICAgICAgICAgIGlmIChGb250Q2FzY2FkZTo6dHJlYXRB
c1NwYWNlKG1fcnVuW3NdKSkKLSAgICAgICAgICAgICAgICBudW1TcGFjZXMrKzsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChudW1TcGFjZXMgPT0gMCkKLSAgICAgICAgICAgIG1fcGFkUGVyU3Bh
Y2UgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BhZFBlclNwYWNlID0gbV9wYWRk
aW5nIC8gbnVtU3BhY2VzOwotICAgIH0KLQotICAgIC8vIE51bGwgb3V0IG91ciB1bmlzY3JpYmUg
c3RydWN0cwotICAgIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7Ci19Ci0KLWludCBVbmlzY3JpYmVD
b250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEds
eXBocykKLXsKLSAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0gdHJ1ZTsKLSAgICBtX2lu
Y2x1ZGVQYXJ0aWFsR2x5cGhzID0gaW5jbHVkZVBhcnRpYWxHbHlwaHM7Ci0gICAgbV9vZmZzZXRY
ID0geDsKLSAgICBtX29mZnNldFBvc2l0aW9uID0gMDsKLSAgICBhZHZhbmNlKG1fcnVuLmxlbmd0
aCgpKTsKLSAgICBpZiAobV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbikgewotICAgICAgICAvLyBU
aGUgcG9pbnQgaXMgdG8gdGhlIGxlZnQgb3IgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlbnRpcmUgcnVu
LgotICAgICAgICBpZiAobV9vZmZzZXRYID49IG1fcnVuV2lkdGhTb0ZhciAmJiBtX3J1bi5sdHIo
KSB8fCBtX29mZnNldFggPCAwICYmIG1fcnVuLnJ0bCgpKQotICAgICAgICAgICAgbV9vZmZzZXRQ
b3NpdGlvbiA9IG1fZW5kOwotICAgIH0KLSAgICBtX2NvbXB1dGluZ09mZnNldFBvc2l0aW9uID0g
ZmFsc2U7Ci0gICAgcmV0dXJuIG1fb2Zmc2V0UG9zaXRpb247Ci19Ci0KLXZvaWQgVW5pc2NyaWJl
Q29udHJvbGxlcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogV2UgcmVhbGx5IHdhbnQgdG8gYmUgdXNpbmcgYSBuZXdl
ciB2ZXJzaW9uIG9mIFVuaXNjcmliZSB0aGF0IHN1cHBvcnRzIHRoZSBuZXcgT3BlblR5cGUKLSAg
ICAvLyBmdW5jdGlvbnMuICBUaG9zZSBmdW5jdGlvbnMgd291bGQgYWxsb3cgdXMgdG8gdHVybiBv
ZmYga2VybmluZyBhbmQgbGlnYXR1cmVzLiAgV2l0aG91dCBiZWluZyBhYmxlCi0gICAgLy8gdG8g
ZG8gdGhhdCwgd2Ugd2lsbCBoYXZlIGJ1Z2d5IGxpbmUgYnJlYWtpbmcgYW5kIG1ldHJpY3Mgd2hl
biBzaW1wbGUgYW5kIGNvbXBsZXggdGV4dCBhcmUgY2xvc2UKLSAgICAvLyB0b2dldGhlciAodGhl
IGNvbXBsZXggY29kZSBwYXRoIHdpbGwgbmFycm93IHRoZSB0ZXh0IGJlY2F1c2Ugb2Yga2Vybmlu
ZyBhbmQgbGlnYXR1cmVzIGFuZCB0aGVuCi0gICAgLy8gd2hlbiBiaWRpIHByb2Nlc3Npbmcgc3Bs
aXRzIGludG8gbXVsdGlwbGUgcnVucywgdGhlIHNpbXBsZSBwb3J0aW9ucyB3aWxsIGdldCB3aWRl
ciBhbmQgY2F1c2UgdXMgdG8KLSAgICAvLyBzcGlsbCBvZmYgdGhlIGVkZ2Ugb2YgYSBsaW5lKS4K
LSAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID4gbV9lbmQpCi0gICAgICAgIG9mZnNl
dCA9IG1fZW5kOwotCi0gICAgaW50IGxlbmd0aCA9IG9mZnNldCAtIG1fY3VycmVudENoYXJhY3Rl
cjsKLSAgICBpZiAobGVuZ3RoIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBi
dWZmZXJGb3IxNkJpdERhdGE7Ci0KLSAgICAvLyBJdGVtaXplIHRoZSBzdHJpbmcuCi0gICAgY29u
c3QgVUNoYXIqIGNwID0gbnVsbHB0cjsKLSAgICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKLSAgICAg
ICAgLy8gVW5pc2NyaWJlIG9ubHkgZGVhbHMgd2l0aCAxNi1iaXQgY2hhcmFjdGVycy4gTXVzdCBn
ZW5lcmF0ZSB0aGVtIG5vdy4KLSAgICAgICAgYnVmZmVyRm9yMTZCaXREYXRhID0gU3RyaW5nOjpt
YWtlMTZCaXRGcm9tOEJpdFNvdXJjZShtX3J1bi5kYXRhOChtX2N1cnJlbnRDaGFyYWN0ZXIpLCBs
ZW5ndGgpOwotICAgICAgICBjcCA9IGJ1ZmZlckZvcjE2Qml0RGF0YS5jaGFyYWN0ZXJzMTYoKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgY3AgPSBtX3J1bi5kYXRhMTYobV9jdXJyZW50Q2hhcmFjdGVy
KTsKLQotICAgIHVuc2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0K
LSAgICAvLyBXZSBicmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3RyaW5nIGJ5IGZvbnREYXRh
IGFuZCAoaWYgbmVlZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCi0KLSAgICAvLyBGSVhNRTog
SXQncyBpbmNvbnNpc3RlbnQgdGhhdCB3ZSB1c2UgbG9naWNhbCBvcmRlciB3aGVuIGl0ZW1pemlu
Zywgc2luY2UgdGhpcwotICAgIC8vIGRvZXMgbm90IG1hdGNoIG5vcm1hbCBSVEwuCi0KLSAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgZGVjb2RlIHN1cnJvZ2F0ZSBwYWlycy4gQ3Vy
cmVudGx5IGl0IG1ha2VzIGxpdHRsZSBkaWZmZXJlbmNlIHRoYXQKLSAgICAvLyBpdCBkb2VzIG5v
dCBiZWNhdXNlIHRoZSBmb250IGNhY2hlIG9uIFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBub24t
Qk1QIGNoYXJhY3RlcnMuCi0gICAgVmVjdG9yPFVDaGFyLCAyNTY+IHNtYWxsQ2Fwc0J1ZmZlcjsK
LSAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCi0gICAgICAgIHNtYWxsQ2Fwc0J1ZmZlci5y
ZXNpemUobGVuZ3RoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4T2ZGb250VHJhbnNpdGlvbiA9IG1f
cnVuLnJ0bCgpID8gbGVuZ3RoIC0gMSA6IDA7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnIgPSBtX3J1
bi5ydGwoKSA/IGNwICsgbGVuZ3RoICAtIDEgOiBjcDsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
bV9ydW4ucnRsKCkgPyBjcCAtIDEgOiBjcCArIGxlbmd0aDsKLQotICAgIGNvbnN0IEZvbnQqIGZv
bnREYXRhOwotICAgIGNvbnN0IEZvbnQqIG5leHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFG
b3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlKS5mb250OwotCi0gICAgVUNoYXIgbmV3QyA9IDA7Ci0K
LSAgICBib29sIGlzU21hbGxDYXBzOwotICAgIGJvb2wgbmV4dElzU21hbGxDYXBzID0gbV9mb250
LmlzU21hbGxDYXBzKCkgJiYgIShVX0dFVF9HQ19NQVNLKCpjdXJyKSAmIFVfR0NfTV9NQVNLKSAm
JiAobmV3QyA9IHVfdG91cHBlcigqY3VycikpICE9ICpjdXJyOwotCi0gICAgaWYgKG5leHRJc1Nt
YWxsQ2FwcykKLSAgICAgICAgc21hbGxDYXBzQnVmZmVyW2N1cnIgLSBjcF0gPSBuZXdDOwotCi0g
ICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgY3VyciA9IG1fcnVuLnJ0bCgpID8gY3VyciAtIDEg
OiBjdXJyICsgMTsKLSAgICAgICAgaWYgKGN1cnIgPT0gZW5kKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7Ci0gICAgICAgIGlzU21hbGxDYXBz
ID0gbmV4dElzU21hbGxDYXBzOwotICAgICAgICBpbnQgaW5kZXggPSBjdXJyIC0gY3A7Ci0gICAg
ICAgIFVDaGFyIGMgPSAqY3VycjsKLQotICAgICAgICBib29sIGZvcmNlU21hbGxDYXBzID0gaXNT
bWFsbENhcHMgJiYgKFVfR0VUX0dDX01BU0soYykgJiBVX0dDX01fTUFTSyk7Ci0gICAgICAgIG5l
eHRGb250RGF0YSA9IG1fZm9udC5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoKmN1cnIsIGZhbHNlLCBm
b3JjZVNtYWxsQ2FwcyA/IFNtYWxsQ2Fwc1ZhcmlhbnQgOiBBdXRvVmFyaWFudCkuZm9udDsKLSAg
ICAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2FwcygpKSB7Ci0gICAgICAgICAgICBuZXh0SXNTbWFs
bENhcHMgPSBmb3JjZVNtYWxsQ2FwcyB8fCAobmV3QyA9IHVfdG91cHBlcihjKSkgIT0gYzsKLSAg
ICAgICAgICAgIGlmIChuZXh0SXNTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgc21hbGxDYXBz
QnVmZmVyW2luZGV4XSA9IGZvcmNlU21hbGxDYXBzID8gYyA6IG5ld0M7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobV9mYWxsYmFja0ZvbnRzICYmIGZvbnREYXRhICYmIG5leHRGb250RGF0YSAh
PSBmb250RGF0YSAmJiBmb250RGF0YSAhPSAmbV9mb250LnByaW1hcnlGb250KCkpCi0gICAgICAg
ICAgICBtX2ZhbGxiYWNrRm9udHMtPmFkZChmb250RGF0YSk7Ci0KLSAgICAgICAgaWYgKG5leHRG
b250RGF0YSAhPSBmb250RGF0YSB8fCBuZXh0SXNTbWFsbENhcHMgIT0gaXNTbWFsbENhcHMpIHsK
LSAgICAgICAgICAgIGludCBpdGVtU3RhcnQgPSBtX3J1bi5ydGwoKSA/IGluZGV4ICsgMSA6IGlu
ZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICAgICAgICAgIGludCBpdGVtTGVuZ3RoID0gbV9ydW4u
cnRsKCkgPyBpbmRleE9mRm9udFRyYW5zaXRpb24gLSBpbmRleCA6IGluZGV4IC0gaW5kZXhPZkZv
bnRUcmFuc2l0aW9uOwotICAgICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJh
Y3RlciArIGl0ZW1TdGFydDsKLSAgICAgICAgICAgIGl0ZW1pemVTaGFwZUFuZFBsYWNlKChpc1Nt
YWxsQ2FwcyA/IHNtYWxsQ2Fwc0J1ZmZlci5kYXRhKCkgOiBjcCkgKyBpdGVtU3RhcnQsIGl0ZW1M
ZW5ndGgsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlcik7Ci0gICAgICAgICAgICBpbmRleE9mRm9udFRy
YW5zaXRpb24gPSBpbmRleDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpbnQgaXRlbUxl
bmd0aCA9IG1fcnVuLnJ0bCgpID8gaW5kZXhPZkZvbnRUcmFuc2l0aW9uICsgMSA6IGxlbmd0aCAt
IGluZGV4T2ZGb250VHJhbnNpdGlvbjsKLSAgICBpZiAoaXRlbUxlbmd0aCkgewotICAgICAgICBp
ZiAobV9mYWxsYmFja0ZvbnRzICYmIG5leHRGb250RGF0YSAmJiBuZXh0Rm9udERhdGEgIT0gJm1f
Zm9udC5wcmltYXJ5Rm9udCgpKQotICAgICAgICAgICAgbV9mYWxsYmFja0ZvbnRzLT5hZGQobmV4
dEZvbnREYXRhKTsKLQotICAgICAgICBpbnQgaXRlbVN0YXJ0ID0gbV9ydW4ucnRsKCkgPyAwIDog
aW5kZXhPZkZvbnRUcmFuc2l0aW9uOwotICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgPSBiYXNl
Q2hhcmFjdGVyICsgaXRlbVN0YXJ0OwotICAgICAgICBpdGVtaXplU2hhcGVBbmRQbGFjZSgobmV4
dElzU21hbGxDYXBzID8gc21hbGxDYXBzQnVmZmVyLmRhdGEoKSA6IGNwKSArIGl0ZW1TdGFydCwg
aXRlbUxlbmd0aCwgbmV4dEZvbnREYXRhLCBnbHlwaEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgbV9j
dXJyZW50Q2hhcmFjdGVyID0gYmFzZUNoYXJhY3RlciArIGxlbmd0aDsKLX0KLQotdm9pZCBVbmlz
Y3JpYmVDb250cm9sbGVyOjppdGVtaXplU2hhcGVBbmRQbGFjZShjb25zdCBVQ2hhciogY3AsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCogZm9udERhdGEsIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlcikKLXsKLSAgICAvLyBTY3JpcHRJdGVtaXplIChpbiBXaW5kb3dzIFhQIHZlcnNpb25zIHBy
aW9yIHRvIFNQMikgY2FuIG92ZXJmbG93IGJ5IDEuICBUaGlzIGlzIHdoeSB0aGVyZSBpcyBhbiBl
eHRyYSBlbXB0eSBpdGVtCi0gICAgLy8gaGFuZ2luZyBvdXQgYXQgdGhlIGVuZCBvZiB0aGUgYXJy
YXkKLSAgICBtX2l0ZW1zLnJlc2l6ZSg2KTsKLSAgICBpbnQgbnVtSXRlbXMgPSAwOwotICAgIEhS
RVNVTFQgcmMgPSBTX09LOwotICAgIHdoaWxlIChyYyA9IDo6U2NyaXB0SXRlbWl6ZShjcCwgbGVu
Z3RoLCBtX2l0ZW1zLnNpemUoKSAtIDEsICZtX2NvbnRyb2wsICZtX3N0YXRlLCBtX2l0ZW1zLmRh
dGEoKSwgJm51bUl0ZW1zKSA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAgIG1faXRlbXMucmVz
aXplKG1faXRlbXMuc2l6ZSgpICogMik7Ci0gICAgICAgIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7
Ci0gICAgfQotICAgIGlmIChGQUlMRUQocmMpKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiVW5p
c2NyaWJlQ29udHJvbGxlcjo6aXRlbWl6ZVNoYXBlQW5kUGxhY2U6IFNjcmlwdEl0ZW1pemUgZmFp
bGVkLCByYz0lbHgiLCByYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9pdGVtcy5y
ZXNpemUobnVtSXRlbXMgKyAxKTsKLQotICAgIGlmIChtX3J1bi5ydGwoKSkgewotICAgICAgICBm
b3IgKGludCBpID0gbV9pdGVtcy5zaXplKCkgLSAyOyBpID49IDA7IGktLSkgewotICAgICAgICAg
ICAgaWYgKCFzaGFwZUFuZFBsYWNlSXRlbShjcCwgaSwgZm9udERhdGEsIGdseXBoQnVmZmVyKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pdGVtcy5zaXplKCkgLSAxOyBpKyspIHsKLSAg
ICAgICAgICAgIGlmICghc2hhcGVBbmRQbGFjZUl0ZW0oY3AsIGksIGZvbnREYXRhLCBnbHlwaEJ1
ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OnJlc2V0Q29udHJvbEFuZFN0YXRlKCkKLXsKLSAgICBt
ZW1zZXQoJm1fY29udHJvbCwgMCwgc2l6ZW9mKFNDUklQVF9DT05UUk9MKSk7Ci0gICAgbWVtc2V0
KCZtX3N0YXRlLCAwLCBzaXplb2YoU0NSSVBUX1NUQVRFKSk7Ci0KLSAgICAvLyBTZXQgdXAgdGhl
IGNvcnJlY3QgZGlyZWN0aW9uIGZvciB0aGUgcnVuLgotICAgIG1fc3RhdGUudUJpZGlMZXZlbCA9
IG1fcnVuLnJ0bCgpOwotICAgIAotICAgIC8vIExvY2sgdGhlIGNvcnJlY3QgZGlyZWN0aW9uYWwg
b3ZlcnJpZGUuCi0gICAgbV9zdGF0ZS5mT3ZlcnJpZGVEaXJlY3Rpb24gPSBtX3J1bi5kaXJlY3Rp
b25hbE92ZXJyaWRlKCk7Ci19Ci0KLWJvb2wgVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQ
bGFjZUl0ZW0oY29uc3QgVUNoYXIqIGNwLCB1bnNpZ25lZCBpLCBjb25zdCBGb250KiBmb250RGF0
YSwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQotewotICAgIC8vIERldGVybWluZSB0aGUgc3Ry
aW5nIGZvciB0aGlzIGl0ZW0uCi0gICAgY29uc3QgVUNoYXIqIHN0ciA9IGNwICsgbV9pdGVtc1tp
XS5pQ2hhclBvczsKLSAgICBpbnQgbGVuID0gbV9pdGVtc1tpKzFdLmlDaGFyUG9zIC0gbV9pdGVt
c1tpXS5pQ2hhclBvczsKLSAgICBTQ1JJUFRfSVRFTSBpdGVtID0gbV9pdGVtc1tpXTsKLQotICAg
IC8vIFNldCB1cCBidWZmZXJzIHRvIGhvbGQgdGhlIHJlc3VsdHMgb2Ygc2hhcGluZyB0aGUgaXRl
bS4KLSAgICBWZWN0b3I8V09SRD4gZ2x5cGhzOwotICAgIFZlY3RvcjxXT1JEPiBjbHVzdGVyczsK
LSAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+IHZpc3VhbEF0dHJpYnV0ZXM7Ci0gICAgY2x1c3Rl
cnMucmVzaXplKGxlbik7Ci0gICAgIAotICAgIC8vIFNoYXBlIHRoZSBpdGVtLgotICAgIC8vIFRo
ZSByZWNvbW1lbmRlZCBzaXplIGZvciB0aGUgZ2x5cGggYnVmZmVyIGlzIDEuNSAqIHRoZSBjaGFy
YWN0ZXIgbGVuZ3RoICsgMTYgaW4gdGhlIHVuaXNjcmliZSBkb2NzLgotICAgIC8vIEFwcGFyZW50
bHkgdGhpcyBpcyBhIGdvb2Qgc2l6ZSB0byBhdm9pZCBoYXZpbmcgdG8gbWFrZSByZXBlYXRlZCBj
YWxscyB0byBTY3JpcHRTaGFwZS4KLSAgICBnbHlwaHMucmVzaXplKDEuNSAqIGxlbiArIDE2KTsK
LSAgICB2aXN1YWxBdHRyaWJ1dGVzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLQotICAgIGlmICgh
c2hhcGUoc3RyLCBsZW4sIGl0ZW0sIGZvbnREYXRhLCBnbHlwaHMsIGNsdXN0ZXJzLCB2aXN1YWxB
dHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBXZSBub3cgaGF2ZSBh
IGNvbGxlY3Rpb24gb2YgZ2x5cGhzLgotICAgIFZlY3RvcjxHT0ZGU0VUPiBvZmZzZXRzOwotICAg
IFZlY3RvcjxpbnQ+IGFkdmFuY2VzOwotICAgIG9mZnNldHMucmVzaXplKGdseXBocy5zaXplKCkp
OwotICAgIGFkdmFuY2VzLnJlc2l6ZShnbHlwaHMuc2l6ZSgpKTsKLSAgICBpbnQgZ2x5cGhDb3Vu
dCA9IDA7Ci0gICAgSFJFU1VMVCBwbGFjZVJlc3VsdCA9IFNjcmlwdFBsYWNlKDAsIGZvbnREYXRh
LT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMuc2l6ZSgpLCB2aXN1YWxBdHRy
aWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0
ZW0uYSwgYWR2YW5jZXMuZGF0YSgpLCBvZmZzZXRzLmRhdGEoKSwgMCk7Ci0gICAgaWYgKHBsYWNl
UmVzdWx0ID09IEVfUEVORElORykgewotICAgICAgICAvLyBUaGUgc2NyaXB0IGNhY2hlIGlzbid0
IHByaW1lZCB3aXRoIGVub3VnaCBpbmZvIHlldC4gIFdlIG5lZWQgdG8gc2VsZWN0IG91ciBIRk9O
VCBpbnRvCi0gICAgICAgIC8vIGEgREMgYW5kIHBhc3MgdGhlIERDIGluIHRvIFNjcmlwdFBsYWNl
LgotICAgICAgICBIV25kREMgaGRjKDApOwotICAgICAgICBIRk9OVCBoZm9udCA9IGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpOwotICAgICAgICBIRk9OVCBvbGRGb250ID0gKEhGT05U
KVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAgICAgICAgcGxhY2VSZXN1bHQgPSBTY3JpcHRQ
bGFjZShoZGMsIGZvbnREYXRhLT5zY3JpcHRDYWNoZSgpLCBnbHlwaHMuZGF0YSgpLCBnbHlwaHMu
c2l6ZSgpLCB2aXN1YWxBdHRyaWJ1dGVzLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaXRlbS5hLCBhZHZhbmNlcy5kYXRhKCksIG9mZnNldHMuZGF0YSgpLCAwKTsK
LSAgICAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7Ci0gICAgfQotICAgIAotICAgIGlm
IChGQUlMRUQocGxhY2VSZXN1bHQpIHx8IGdseXBocy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgLy8gQ29udmVydCBhbGwgY2hhcnMgdGhhdCBzaG91bGQgYmUgdHJlYXRl
ZCBhcyBzcGFjZXMgdG8gdXNlIHRoZSBzcGFjZSBnbHlwaC4KLSAgICAvLyBXZSBhbHNvIGNyZWF0
ZSBhIG1hcCB0aGF0IGFsbG93cyB1cyB0byBxdWlja2x5IGdvIGZyb20gc3BhY2UgZ2x5cGhzIGJh
Y2sgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLgotICAgIFZlY3RvcjxpbnQ+IHNw
YWNlQ2hhcmFjdGVycyhnbHlwaHMuc2l6ZSgpKTsKLSAgICBzcGFjZUNoYXJhY3RlcnMuZmlsbCgt
MSk7Ci0KLSAgICBjb25zdCBmbG9hdCBjTG9naWNhbFNjYWxlID0gZm9udERhdGEtPnBsYXRmb3Jt
RGF0YSgpLnVzZUdESSgpID8gMS4wZiA6IDMyLjBmOwotICAgIGZsb2F0IHNwYWNlV2lkdGggPSBm
b250RGF0YS0+c3BhY2VXaWR0aCgpIC0gZm9udERhdGEtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsK
LSAgICB1bnNpZ25lZCBsb2dpY2FsU3BhY2VXaWR0aCA9IHNwYWNlV2lkdGggKiBjTG9naWNhbFNj
YWxlOwotCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBsZW47IGsrKykgewotICAgICAgICBVQ2hh
ciBjaCA9ICooc3RyICsgayk7Ci0gICAgICAgIGJvb2wgdHJlYXRBc1NwYWNlID0gRm9udENhc2Nh
ZGU6OnRyZWF0QXNTcGFjZShjaCk7Ci0gICAgICAgIGJvb2wgdHJlYXRBc1plcm9XaWR0aFNwYWNl
ID0gRm9udENhc2NhZGU6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaCk7Ci0gICAgICAgIGlmICh0
cmVhdEFzU3BhY2UgfHwgdHJlYXRBc1plcm9XaWR0aFNwYWNlKSB7Ci0gICAgICAgICAgICAvLyBT
dWJzdGl0dXRlIGluIHRoZSBzcGFjZSBnbHlwaCBhdCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4g
dGhlIGdseXBocwotICAgICAgICAgICAgLy8gYXJyYXkuCi0gICAgICAgICAgICBnbHlwaHNbY2x1
c3RlcnNba11dID0gZm9udERhdGEtPnNwYWNlR2x5cGgoKTsKLSAgICAgICAgICAgIGFkdmFuY2Vz
W2NsdXN0ZXJzW2tdXSA9IHRyZWF0QXNTcGFjZSA/IGxvZ2ljYWxTcGFjZVdpZHRoIDogMDsKLSAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UpCi0gICAgICAgICAgICAgICAgc3BhY2VDaGFyYWN0
ZXJzW2NsdXN0ZXJzW2tdXSA9IG1fY3VycmVudENoYXJhY3RlciArIGsgKyBpdGVtLmlDaGFyUG9z
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gUG9wdWxhdGUgb3VyIGdseXBoIGJ1ZmZlciB3
aXRoIHRoaXMgaW5mb3JtYXRpb24uCi0gICAgYm9vbCBoYXNFeHRyYVNwYWNpbmcgPSBtX2ZvbnQu
bGV0dGVyU3BhY2luZygpIHx8IG1fZm9udC53b3JkU3BhY2luZygpIHx8IG1fcGFkZGluZzsKLSAg
ICAKLSAgICBmbG9hdCBsZWZ0RWRnZSA9IG1fcnVuV2lkdGhTb0ZhcjsKLQotICAgIGZvciAodW5z
aWduZWQgayA9IDA7IGsgPCBnbHlwaHMuc2l6ZSgpOyBrKyspIHsKLSAgICAgICAgR2x5cGggZ2x5
cGggPSBnbHlwaHNba107Ci0gICAgICAgIGZsb2F0IGFkdmFuY2UgPSBhZHZhbmNlc1trXSAvIGNM
b2dpY2FsU2NhbGU7Ci0gICAgICAgIGZsb2F0IG9mZnNldFggPSBvZmZzZXRzW2tdLmR1IC8gY0xv
Z2ljYWxTY2FsZTsKLSAgICAgICAgZmxvYXQgb2Zmc2V0WSA9IG9mZnNldHNba10uZHYgLyBjTG9n
aWNhbFNjYWxlOwotCi0gICAgICAgIC8vIE1hdGNoIEFwcEtpdCdzIHJ1bGVzIGZvciB0aGUgaW50
ZWdlciB2cy4gbm9uLWludGVnZXIgcmVuZGVyaW5nIG1vZGVzLgotICAgICAgICBmbG9hdCByb3Vu
ZGVkQWR2YW5jZSA9IHJvdW5kZihhZHZhbmNlKTsKLSAgICAgICAgaWYgKCFmb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkuaXNTeXN0ZW1Gb250KCkpIHsKLSAgICAgICAgICAgIGFkdmFuY2UgPSByb3Vu
ZGVkQWR2YW5jZTsKLSAgICAgICAgICAgIG9mZnNldFggPSByb3VuZGYob2Zmc2V0WCk7Ci0gICAg
ICAgICAgICBvZmZzZXRZID0gcm91bmRmKG9mZnNldFkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
YWR2YW5jZSArPSBmb250RGF0YS0+c3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgICAgIGlm
IChoYXNFeHRyYVNwYWNpbmcpIHsKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgZ2x5cGggd2l0
aCBhbiBhZHZhbmNlLCBnbyBhaGVhZCBhbmQgYWRkIGluIGxldHRlci1zcGFjaW5nLgotICAgICAg
ICAgICAgLy8gVGhhdCB3YXkgd2Ugd2VlZCBvdXQgemVybyB3aWR0aCBsdXJrZXJzLiAgVGhpcyBi
ZWhhdmlvciBtYXRjaGVzIHRoZSBmYXN0IHRleHQgY29kZSBwYXRoLgotICAgICAgICAgICAgaWYg
KGFkdmFuY2UgJiYgbV9mb250LmxldHRlclNwYWNpbmcoKSkKLSAgICAgICAgICAgICAgICBhZHZh
bmNlICs9IG1fZm9udC5sZXR0ZXJTcGFjaW5nKCk7Ci0KLSAgICAgICAgICAgIC8vIEhhbmRsZSBq
dXN0aWZpY2F0aW9uIGFuZCB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICBpbnQgY2hhcmFjdGVy
SW5kZXggPSBzcGFjZUNoYXJhY3RlcnNba107Ci0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJJbmRl
eCBpcyBsZWZ0IGF0IHRoZSBpbml0aWFsIHZhbHVlIG9mIC0xIGZvciBnbHlwaHMgdGhhdCBkbyBu
b3QgbWFwIGJhY2sgdG8gdHJlYXRlZC1hcy1zcGFjZSBjaGFyYWN0ZXJzLgotICAgICAgICAgICAg
aWYgKGNoYXJhY3RlckluZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWNjb3VudCBm
b3IgcGFkZGluZy4gV2ViQ29yZSB1c2VzIHNwYWNlIHBhZGRpbmcgdG8ganVzdGlmeSB0ZXh0Lgot
ICAgICAgICAgICAgICAgIC8vIFdlIGRpc3RyaWJ1dGUgdGhlIHNwZWNpZmllZCBwYWRkaW5nIG92
ZXIgdGhlIGF2YWlsYWJsZSBzcGFjZXMgaW4gdGhlIHJ1bi4KLSAgICAgICAgICAgICAgICBpZiAo
bV9wYWRkaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBsZWZ0b3ZlciBwYWRkaW5n
IGlmIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IG51bWJlciBvZiBzcGFjZXMuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX3BhZGRpbmcgPCBtX3BhZFBlclNwYWNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlICs9IG1fcGFkZGluZzsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fcGFkZGluZyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX3BhZGRpbmcgLT0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkdmFuY2UgKz0gbV9wYWRQZXJTcGFjZTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdv
cmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmIG1f
Zm9udC53b3JkU3BhY2luZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFVDaGFyIGNhbmRpZGF0
ZVNwYWNlOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9ydW4uaXM4Qml0KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGFjZSA9ICoobV9ydW4uZGF0YTgoY2hhcmFjdGVy
SW5kZXggLSAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmRpZGF0ZVNwYWNlID0gKihtX3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAx
KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNl
KGNhbmRpZGF0ZVNwYWNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9m
b250LndvcmRTcGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IGFkdmFuY2U7Ci0KLSAgICAgICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gdGFrZSB0aGUgR09GRlNFVFMgZm9yIGNvbWJpbmluZyBnbHlw
aHMgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIGdseXBoIGJ1ZmZlcgotICAgICAgICAvLyBhcyB3ZWxs
LCBzbyB0aGF0IHdoZW4gdGhlIHRpbWUgY29tZXMgdG8gZHJhdyB0aG9zZSBnbHlwaHMsIHdlIGNh
biBhcHBseSB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gdHJhbnNsYXRpb24uCi0gICAgICAg
IGlmIChnbHlwaEJ1ZmZlcikgewotICAgICAgICAgICAgRmxvYXRTaXplIHNpemUob2Zmc2V0WCwg
LW9mZnNldFkpOwotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaCwgZm9udERhdGEs
IGFkdmFuY2UsIEdseXBoQnVmZmVyOjpub09mZnNldCwgJnNpemUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgRmxvYXRSZWN0IGdseXBoQm91bmRzID0gZm9udERhdGEtPmJvdW5kc0ZvckdseXBoKGds
eXBoKTsKLSAgICAgICAgZ2x5cGhCb3VuZHMubW92ZShtX2dseXBoT3JpZ2luLngoKSwgbV9nbHlw
aE9yaWdpbi55KCkpOwotICAgICAgICBtX21pbkdseXBoQm91bmRpbmdCb3hYID0gbWluKG1fbWlu
R2x5cGhCb3VuZGluZ0JveFgsIGdseXBoQm91bmRzLngoKSk7Ci0gICAgICAgIG1fbWF4R2x5cGhC
b3VuZGluZ0JveFggPSBtYXgobV9tYXhHbHlwaEJvdW5kaW5nQm94WCwgZ2x5cGhCb3VuZHMubWF4
WCgpKTsKLSAgICAgICAgbV9taW5HbHlwaEJvdW5kaW5nQm94WSA9IG1pbihtX21pbkdseXBoQm91
bmRpbmdCb3hZLCBnbHlwaEJvdW5kcy55KCkpOwotICAgICAgICBtX21heEdseXBoQm91bmRpbmdC
b3hZID0gbWF4KG1fbWF4R2x5cGhCb3VuZGluZ0JveFksIGdseXBoQm91bmRzLm1heFkoKSk7Ci0g
ICAgICAgIG1fZ2x5cGhPcmlnaW4ubW92ZShhZHZhbmNlICsgb2Zmc2V0WCwgLW9mZnNldFkpOwot
Ci0gICAgICAgIC8vIE11dGF0ZSB0aGUgZ2x5cGggYXJyYXkgdG8gY29udGFpbiBvdXIgYWx0ZXJl
ZCBhZHZhbmNlcy4KLSAgICAgICAgaWYgKG1fY29tcHV0aW5nT2Zmc2V0UG9zaXRpb24pCi0gICAg
ICAgICAgICBhZHZhbmNlc1trXSA9IGFkdmFuY2U7Ci0gICAgfQotCi0gICAgd2hpbGUgKG1fY29t
cHV0aW5nT2Zmc2V0UG9zaXRpb24gJiYgbV9vZmZzZXRYID49IGxlZnRFZGdlICYmIG1fb2Zmc2V0
WCA8IG1fcnVuV2lkdGhTb0ZhcikgewotICAgICAgICAvLyBUaGUgcG9zaXRpb24gaXMgc29tZXdo
ZXJlIGluc2lkZSB0aGlzIHJ1bi4KLSAgICAgICAgaW50IHRyYWlsaW5nID0gMDsKLSAgICAgICAg
SFJFU1VMVCByYyA9IDo6U2NyaXB0WHRvQ1AobV9vZmZzZXRYIC0gbGVmdEVkZ2UsIGNsdXN0ZXJz
LnNpemUoKSwgZ2x5cGhzLnNpemUoKSwgY2x1c3RlcnMuZGF0YSgpLCB2aXN1YWxBdHRyaWJ1dGVz
LmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZXMuZGF0YSgpLCAmaXRlbS5hLCAm
bV9vZmZzZXRQb3NpdGlvbiwgJnRyYWlsaW5nKTsKLSAgICAgICAgaWYgKEZBSUxFRChyYykpIHsK
LSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVW5pc2NyaWJlQ29udHJvbGxlcjo6c2hhcGVBbmRQ
bGFjZUl0ZW06IFNjcmlwdFh0b0NQIGZhaWxlZCByYz0lbHgiLCByYyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJhaWxpbmcgJiYgbV9pbmNsdWRl
UGFydGlhbEdseXBocyAmJiBtX29mZnNldFBvc2l0aW9uIDwgbGVuIC0gMSkgewotICAgICAgICAg
ICAgbV9vZmZzZXRQb3NpdGlvbiArPSBtX2N1cnJlbnRDaGFyYWN0ZXIgKyBtX2l0ZW1zW2ldLmlD
aGFyUG9zOwotICAgICAgICAgICAgbV9vZmZzZXRYICs9IG1fcnVuLnJ0bCgpID8gLXRyYWlsaW5n
IDogdHJhaWxpbmc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2NvbXB1dGluZ09m
ZnNldFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICBtX29mZnNldFBvc2l0aW9uICs9IG1f
Y3VycmVudENoYXJhY3RlciArIG1faXRlbXNbaV0uaUNoYXJQb3M7Ci0gICAgICAgICAgICBpZiAo
dHJhaWxpbmcgJiYgbV9pbmNsdWRlUGFydGlhbEdseXBocykKLSAgICAgICAgICAgICAgIG1fb2Zm
c2V0UG9zaXRpb24rKzsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNo
YXBlKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4sIFNDUklQVF9JVEVNIGl0ZW0sIGNvbnN0IEZv
bnQqIGZvbnREYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8V09S
RD4mIGdseXBocywgVmVjdG9yPFdPUkQ+JiBjbHVzdGVycywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPFNDUklQVF9WSVNBVFRSPiYgdmlzdWFsQXR0cmlidXRlcykKLXsK
LSAgICBIV25kREMgaGRjOwotICAgIEhGT05UIG9sZEZvbnQgPSAwOwotICAgIEhSRVNVTFQgc2hh
cGVSZXN1bHQgPSBFX1BFTkRJTkc7Ci0gICAgaW50IGdseXBoQ291bnQgPSAwOwotCi0gICAgaWYg
KCFmb250RGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZG8gewotICAgICAgICBz
aGFwZVJlc3VsdCA9IFNjcmlwdFNoYXBlKGhkYywgZm9udERhdGEtPnNjcmlwdENhY2hlKCksIHN0
ciwgbGVuLCBnbHlwaHMuc2l6ZSgpLCAmaXRlbS5hLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdseXBocy5kYXRhKCksIGNsdXN0ZXJzLmRhdGEoKSwgdmlzdWFsQXR0cmlidXRl
cy5kYXRhKCksICZnbHlwaENvdW50KTsKLSAgICAgICAgaWYgKHNoYXBlUmVzdWx0ID09IEVfUEVO
RElORykgewotICAgICAgICAgICAgLy8gVGhlIHNjcmlwdCBjYWNoZSBpc24ndCBwcmltZWQgd2l0
aCBlbm91Z2ggaW5mbyB5ZXQuICBXZSBuZWVkIHRvIHNlbGVjdCBvdXIgSEZPTlQgaW50bwotICAg
ICAgICAgICAgLy8gYSBEQyBhbmQgcGFzcyB0aGUgREMgaW4gdG8gU2NyaXB0U2hhcGUuCi0gICAg
ICAgICAgICBBU1NFUlQoIWhkYyk7Ci0gICAgICAgICAgICBoZGMuc2V0SFduZCgwKTsKLSAgICAg
ICAgICAgIEhGT05UIGhmb250ID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhmb250KCk7Ci0g
ICAgICAgICAgICBvbGRGb250ID0gKEhGT05UKVNlbGVjdE9iamVjdChoZGMsIGhmb250KTsKLSAg
ICAgICAgfSBlbHNlIGlmIChzaGFwZVJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKSB7Ci0gICAgICAg
ICAgICAvLyBOZWVkIHRvIHJlc2l6ZSBvdXIgYnVmZmVycy4KLSAgICAgICAgICAgIGdseXBocy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSAqIDIpOwotICAgICAgICAgICAgdmlzdWFsQXR0cmlidXRlcy5y
ZXNpemUoZ2x5cGhzLnNpemUoKSk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChzaGFwZVJlc3Vs
dCA9PSBFX1BFTkRJTkcgfHwgc2hhcGVSZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0KLSAgICBp
ZiAoaGRjKQotICAgICAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLQotICAgIGlmIChG
QUlMRUQoc2hhcGVSZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBnbHlwaHMu
c2hyaW5rKGdseXBoQ291bnQpOwotICAgIHZpc3VhbEF0dHJpYnV0ZXMuc2hyaW5rKGdseXBoQ291
bnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGMxNjhmYzZhNmFmZDc2MGZhYzg0ZWU5ZmIyYzc0
YzQ1YzIzOWU5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3JpYmVDb250cm9sbGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBVbmlzY3JpYmVDb250cm9sbGVyX2gKLSNkZWZpbmUgVW5pc2NyaWJl
Q29udHJvbGxlcl9oCi0KLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSA8dXNwMTAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVW5pc2NyaWJlQ29udHJvbGxlciB7Ci1wdWJs
aWM6Ci0gICAgVW5pc2NyaWJlQ29udHJvbGxlcihjb25zdCBGb250Q2FzY2FkZSosIGNvbnN0IFRl
eHRSdW4mLCBIYXNoU2V0PGNvbnN0IEZvbnQqPiogZmFsbGJhY2tGb250cyA9IDApOwotCi0gICAg
Ly8gQWR2YW5jZSBhbmQgbWVhc3VyZS9wbGFjZSB1cCB0byB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rl
ci4KLSAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyKiA9IDApOwotCi0g
ICAgLy8gQ29tcHV0ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmb3IgYSBnaXZlbiB4IGNvb3JkaW5h
dGUuCi0gICAgaW50IG9mZnNldEZvclBvc2l0aW9uKGludCB4LCBib29sIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHdpZHRoIG9mIGV2ZXJ5dGhpbmcgd2UndmUg
Y29uc3VtZWQgc28gZmFyLgotICAgIGZsb2F0IHJ1bldpZHRoU29GYXIoKSBjb25zdCB7IHJldHVy
biBtX3J1bldpZHRoU29GYXI7IH0KLQotICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdCb3hYKCkg
Y29uc3QgeyByZXR1cm4gbV9taW5HbHlwaEJvdW5kaW5nQm94WDsgfQotICAgIGZsb2F0IG1heEds
eXBoQm91bmRpbmdCb3hYKCkgY29uc3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WDsg
fQotICAgIGZsb2F0IG1pbkdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyByZXR1cm4gbV9taW5H
bHlwaEJvdW5kaW5nQm94WTsgfQotICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29u
c3QgeyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQotCi1wcml2YXRlOiAgICAKLSAg
ICB2b2lkIHJlc2V0Q29udHJvbEFuZFN0YXRlKCk7Ci0KLSAgICB2b2lkIGl0ZW1pemVTaGFwZUFu
ZFBsYWNlKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBGb250KiwgR2x5cGhC
dWZmZXIqKTsKLSAgICBib29sIHNoYXBlQW5kUGxhY2VJdGVtKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgaW5kZXgsIGNvbnN0IEZvbnQqLCBHbHlwaEJ1ZmZlciopOwotICAgIGJvb2wgc2hhcGUoY29u
c3QgVUNoYXIqIHN0ciwgaW50IGxlbiwgU0NSSVBUX0lURU0sIGNvbnN0IEZvbnQqLAotICAgICAg
ICAgICAgICAgVmVjdG9yPFdPUkQ+JiBnbHlwaHMsIFZlY3RvcjxXT1JEPiYgY2x1c3RlcnMsCi0g
ICAgICAgICAgICAgICBWZWN0b3I8U0NSSVBUX1ZJU0FUVFI+JiB2aXN1YWxBdHRyaWJ1dGVzKTsK
LQotICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBtX2ZvbnQ7Ci0gICAgY29uc3QgVGV4dFJ1biYgbV9y
dW47Ci0gICAgSGFzaFNldDxjb25zdCBGb250Kj4qIG1fZmFsbGJhY2tGb250czsKLSAgICBGbG9h
dFBvaW50IG1fZ2x5cGhPcmlnaW47Ci0gICAgZmxvYXQgbV9taW5HbHlwaEJvdW5kaW5nQm94WDsK
LSAgICBmbG9hdCBtX21heEdseXBoQm91bmRpbmdCb3hYOwotICAgIGZsb2F0IG1fbWluR2x5cGhC
b3VuZGluZ0JveFk7Ci0gICAgZmxvYXQgbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsKLQotICAgIFND
UklQVF9DT05UUk9MIG1fY29udHJvbDsKLSAgICBTQ1JJUFRfU1RBVEUgbV9zdGF0ZTsKLSAgICBW
ZWN0b3I8U0NSSVBUX0lURU0+IG1faXRlbXM7Ci0gCi0gICAgdW5zaWduZWQgbV9jdXJyZW50Q2hh
cmFjdGVyOwotICAgIGludCBtX2VuZDsKLQotICAgIGZsb2F0IG1fcnVuV2lkdGhTb0ZhcjsKLSAg
ICBmbG9hdCBtX3BhZGRpbmc7Ci0gICAgZmxvYXQgbV9wYWRQZXJTcGFjZTsKLQotICAgIGJvb2wg
bV9jb21wdXRpbmdPZmZzZXRQb3NpdGlvbjsKLSAgICBib29sIG1faW5jbHVkZVBhcnRpYWxHbHlw
aHM7Ci0gICAgZmxvYXQgbV9vZmZzZXRYOwotICAgIGludCBtX29mZnNldFBvc2l0aW9uOwotfTsK
LQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggY2NjNWI1N2Y2ZjZjNmIzYmZiZjU0YmVkM2IwY2RkM2RiM2ExMmUzMi4uNDFlZmZj
YzQ3Njg3YTRlNTdiMTc3ODg1MzZhMjQwZTg5YjY4YmEwYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTAxLTI5
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IENvbXBsZXhUZXh0Q29udHJvbGxlciBvbiBhbGwgcG9ydHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzU2NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5j
bWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTct
MDEtMjggIFlvYXYgV2Vpc3MgIDx5b2F2QHlvYXYud3M+CiAKICAgICAgICAgQWRkIExpbmsgUHJl
bG9hZCBhcyBhbiBvZmYtYnktZGVmYXVsdCBleHBlcmltZW50YWwgZmVhdHVyZSBtZW51IGl0ZW0u
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjZmY5Njc2NWFlOTczNWZl
NWRlNmQ4OGQ5Y2MyZDA3NWEzNDk1YTY2Li5mZmM3MmYyOTExMTI2MDhiNzg5NDFkNjZiMWM2NGQ0
ZTY3NWZhMmUyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNt
YWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTEzMSw2
ICsxMzEsNyBAQCBhZGRfZXhlY3V0YWJsZShUZXN0V2ViQ29yZQogICAgICR7dGVzdF9tYWluX1NP
VVJDRVN9CiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHNDb250cm9sbGVyLmNwcAogICAg
ICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQ1NTUGFyc2VyLmNwcAorICAgICR7
VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNw
cAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmlsZVN5c3RlbS5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0dyaWRQb3NpdGlvbi5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0hUTUxQYXJzZXJJZGlvbXMu
Y3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAxOTRjYThmZjM0YWZk
MGJiMTZjYjM3N2Y0NzdhNGYwMmE0NjQxODljLi5jMTQ4MDAxNzg0NGNiMTdhMGI2ZDQ5ZWU3ZDIz
ZjIzY2JlOTEzMjhkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2lu
LmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTQ3
LDYgKzQ3LDcgQEAgc2V0KFRlc3RXZWJDb3JlTGliX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XZWJDb3JlL0FmZmluZVRyYW5zZm9ybS5jcHAKICAgICAke1RFU1RXRUJL
SVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCiAgICAgJHtURVNU
V0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9DU1NQYXJzZXIuY3BwCisgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GbG9hdFJlY3QuY3BwCiAgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9GbG9hdFBvaW50LmNwcAogICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvRmxvYXRTaXplLmNwcApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbXBsZXhUZXh0Q29udHJvbGxlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAppbmRleCBmNzBjZWNkMjA3OGU1YWY2MmY1YjJmNTRiOTE4N2JlNTYzYjNhMGMwLi5l
ZjcxNWNmZTAyNTdiMDYyNTY3YmNkNTYwOTA3MzEyYTNmOGI1MTlhIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcApAQCAtNTUsNDUgKzU1LDQ1IEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRyb2xsZXJU
ZXN0LCBESVNBQkxFRF9Jbml0aWFsQWR2YW5jZVdpdGhMZWZ0UnVuSW5SVEwpCiAgICAgYXV0byBz
cGFjZVdpZHRoID0gZm9udC5wcmltYXJ5Rm9udCgpLnNwYWNlV2lkdGgoKTsKIAogI2lmIFVTRV9M
QVlPVVRfU1BFQ0lGSUNfQURWQU5DRVMKLSAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsg
Q0dTaXplWmVybywgQ0dTaXplTWFrZSgyMS42NDA2MjUsIDAuMCksIENHU2l6ZU1ha2UoNDIuMzA0
Njg3NSwgMC4wKSwgQ0dTaXplTWFrZSg1NS44OTg0Mzc1LCAwLjApLCBDR1NpemVNYWtlKDIyLjM0
Mzc1LCAwLjApIH07Ci0gICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7IENHUG9pbnRNYWtl
KC0xNS4xNTYyNSwgMTguMDQ2ODc1KSwgQ0dQb2ludFplcm8sIENHUG9pbnRaZXJvLCBDR1BvaW50
WmVybywgQ0dQb2ludFplcm8gfTsKKyAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlcyA9IHsg
RmxvYXRTaXplKCksIEZsb2F0U2l6ZSgyMS42NDA2MjUsIDAuMCksIEZsb2F0U2l6ZSg0Mi4zMDQ2
ODc1LCAwLjApLCBGbG9hdFNpemUoNTUuODk4NDM3NSwgMC4wKSwgRmxvYXRTaXplKDIyLjM0Mzc1
LCAwLjApIH07CisgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IG9yaWdpbnMgPSB7IEZsb2F0UG9pbnQo
LTE1LjE1NjI1LCAxOC4wNDY4NzUpLCBGbG9hdFBvaW50KCksIEZsb2F0UG9pbnQoKSwgRmxvYXRQ
b2ludCgpLCBGbG9hdFBvaW50KCkgfTsKICNlbHNlCi0gICAgVmVjdG9yPENHU2l6ZT4gYWR2YW5j
ZXMgPSB7IENHU2l6ZU1ha2UoMTUuMTU2MjUsIC0xOC4wNDY4NzUpLCBDR1NpemVNYWtlKDIxLjY0
MDYyNSwgMC4wKSwgQ0dTaXplTWFrZSg0Mi4zMDQ2ODc1LCAwLjApLCBDR1NpemVNYWtlKDU1Ljg5
ODQzNzUsIDAuMCksIENHU2l6ZU1ha2UoMjIuMzQzNzUsIDAuMCkgfTsKLSAgICBWZWN0b3I8Q0dQ
b2ludD4gb3JpZ2lucyA9IHsgfTsKKyAgICBWZWN0b3I8RmxvYXRTaXplPiBhZHZhbmNlcyA9IHsg
RmxvYXRTaXplKDE1LjE1NjI1LCAtMTguMDQ2ODc1KSwgRmxvYXRTaXplKDIxLjY0MDYyNSwgMC4w
KSwgRmxvYXRTaXplKDQyLjMwNDY4NzUsIDAuMCksIEZsb2F0U2l6ZSg1NS44OTg0Mzc1LCAwLjAp
LCBGbG9hdFNpemUoMjIuMzQzNzUsIDAuMCkgfTsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3Jp
Z2lucyA9IHsgfTsKICNlbmRpZgogCi0gICAgQ0dTaXplIGluaXRpYWxBZHZhbmNlID0gQ0dTaXpl
TWFrZSgtMTUuMTU2MjUsIDE4LjA0Njg3NSk7CisgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNl
KC0xNS4xNTYyNSwgMTguMDQ2ODc1KTsKIAogICAgIFVDaGFyIGNoYXJhY3RlcnNbXSA9IHsgMHg2
NDQsIDB4NjM3LCAweDY0MSwgMHg2MjcsIDB4NjRiLCAweDIwIH07CiAgICAgc2l6ZV90IGNoYXJh
Y3RlcnNMZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYXJhY3RlcnMpOwogICAgIFRleHRSdW4g
dGV4dFJ1bihTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGNoYXJhY3RlcnNMZW5ndGgpKTsKLSAgICBh
dXRvIHJ1bjEgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVG
b3JUZXN0aW5nKHsgQ0dTaXplTWFrZSgyMS44NzUsIDApIH0sIHsgQ0dQb2ludFplcm8gfSwgeyA1
IH0sIHsgNSB9LCBDR1NpemVaZXJvLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAs
IGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDUsIDEpLCBmYWxzZSk7Ci0gICAgYXV0byBy
dW4yID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVz
dGluZyhhZHZhbmNlcywgb3JpZ2lucywgeyAxOTMsIDM3NywgNDQ3LCA0MzEsIDQ1OCB9LCB7IDQs
IDMsIDIsIDEsIDAgfSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFj
dGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMCwgNSksIGZhbHNlKTsKKyAg
ICBhdXRvIHJ1bjEgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVh
dGUoeyBGbG9hdFNpemUoMjEuODc1LCAwKSB9LCB7IEZsb2F0UG9pbnQoKSB9LCB7IDUgfSwgeyA1
IH0sIEZsb2F0U2l6ZSgpLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJh
Y3RlcnNMZW5ndGgsIDUsIDYsIGZhbHNlKTsKKyAgICBhdXRvIHJ1bjIgPSBDb21wbGV4VGV4dENv
bnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIHsgMTkz
LCAzNzcsIDQ0NywgNDMxLCA0NTggfSwgeyA0LCAzLCAyLCAxLCAwIH0sIGluaXRpYWxBZHZhbmNl
LCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIDAs
IDUsIGZhbHNlKTsKICAgICBWZWN0b3I8UmVmPENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRSdW4+PiBydW5zOwogICAgIHJ1bnMuYXBwZW5kKFdURk1vdmUocnVuMSkpOwogICAgIHJ1
bnMuYXBwZW5kKFdURk1vdmUocnVuMikpOwogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKGZvbnQsIHRleHRSdW4sIHJ1bnMpOwogCi0gICAgQ0dGbG9hdCB0b3RhbFdpZHRoID0g
MDsKKyAgICBmbG9hdCB0b3RhbFdpZHRoID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IGFkdmFuY2VzLnNpemUoKTsgKytpKQotICAgICAgICB0b3RhbFdpZHRoICs9IGFkdmFuY2VzW2ld
LndpZHRoOworICAgICAgICB0b3RhbFdpZHRoICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAgICAg
RVhQRUNUX05FQVIoY29udHJvbGxlci50b3RhbFdpZHRoKCksIHNwYWNlV2lkdGggKyB0b3RhbFdp
ZHRoLCAwLjAwMDEpOwogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGNvbnRyb2xs
ZXIuYWR2YW5jZSgwLCAmZ2x5cGhCdWZmZXIpOwogICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIu
cnVuV2lkdGhTb0ZhcigpLCAwLCAwLjAwMDEpOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgxLCAm
Z2x5cGhCdWZmZXIpOwotICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
LCBhZHZhbmNlc1s0XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVy
LnJ1bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbNF0ud2lkdGgoKSwgMC4wMDAxKTsKICAgICBjb250
cm9sbGVyLmFkdmFuY2UoNiwgJmdseXBoQnVmZmVyKTsKICAgICBFWFBFQ1RfTkVBUihjb250cm9s
bGVyLnJ1bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCArIHRvdGFsV2lkdGgsIDAuMDAwMSk7CiAg
ICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS53aWR0aCgpLCAwLCAw
LjAwMDEpOwogICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkuaGVp
Z2h0KCksIDAsIDAuMDAwMSk7CiAgICAgRVhQRUNUX0VRKGdseXBoQnVmZmVyLnNpemUoKSwgNlUp
OwotICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpLCBhZHZh
bmNlc1s0XS53aWR0aCwgMC4wMDAxKTsKLSAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZh
bmNlQXQoMSkud2lkdGgoKSwgYWR2YW5jZXNbM10ud2lkdGgsIDAuMDAwMSk7Ci0gICAgRVhQRUNU
X05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDIpLndpZHRoKCksIGFkdmFuY2VzWzJdLndpZHRo
LCAwLjAwMDEpOwotICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgzKS53aWR0
aCgpLCBhZHZhbmNlc1sxXS53aWR0aCwgMC4wMDAxKTsKLSAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1
ZmZlci5hZHZhbmNlQXQoNCkud2lkdGgoKSwgLWluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEp
OwotICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCg1KS53aWR0aCgpLCBzcGFj
ZVdpZHRoICsgaW5pdGlhbEFkdmFuY2Uud2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIo
Z2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCksIGFkdmFuY2VzWzRdLndpZHRoKCksIDAu
MDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDEpLndpZHRoKCks
IGFkdmFuY2VzWzNdLndpZHRoKCksIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZm
ZXIuYWR2YW5jZUF0KDIpLndpZHRoKCksIGFkdmFuY2VzWzJdLndpZHRoKCksIDAuMDAwMSk7Cisg
ICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDMpLndpZHRoKCksIGFkdmFuY2Vz
WzFdLndpZHRoKCksIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDQpLndpZHRoKCksIC1pbml0aWFsQWR2YW5jZS53aWR0aCgpLCAwLjAwMDEpOworICAgIEVY
UEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCg1KS53aWR0aCgpLCBzcGFjZVdpZHRoICsg
aW5pdGlhbEFkdmFuY2Uud2lkdGgoKSwgMC4wMDAxKTsKIH0KIAogVEVTVF9GKENvbXBsZXhUZXh0
Q29udHJvbGxlclRlc3QsIERJU0FCTEVEX0luaXRpYWxBZHZhbmNlSW5SVEwpCkBAIC0xMDUsNDIg
KzEwNSw0MiBAQCBURVNUX0YoQ29tcGxleFRleHRDb250cm9sbGVyVGVzdCwgRElTQUJMRURfSW5p
dGlhbEFkdmFuY2VJblJUTCkKICAgICBmb250LnVwZGF0ZSgpOwogCiAjaWYgVVNFX0xBWU9VVF9T
UEVDSUZJQ19BRFZBTkNFUwotICAgIFZlY3RvcjxDR1NpemU+IGFkdmFuY2VzID0geyBDR1NpemVa
ZXJvLCBDR1NpemVNYWtlKDIxLjY0MDYyNSwgMC4wKSwgQ0dTaXplTWFrZSg0Mi4zMDQ2ODc1LCAw
LjApLCBDR1NpemVNYWtlKDU1Ljg5ODQzNzUsIDAuMCksIENHU2l6ZU1ha2UoMjIuMzQzNzUsIDAu
MCkgfTsKLSAgICBWZWN0b3I8Q0dQb2ludD4gb3JpZ2lucyA9IHsgQ0dQb2ludE1ha2UoLTE1LjE1
NjI1LCAxOC4wNDY4NzUpLCBDR1BvaW50WmVybywgQ0dQb2ludFplcm8sIENHUG9pbnRaZXJvLCBD
R1BvaW50WmVybyB9OworICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzID0geyBGbG9hdFNp
emUoKSwgRmxvYXRTaXplKDIxLjY0MDYyNSwgMC4wKSwgRmxvYXRTaXplKDQyLjMwNDY4NzUsIDAu
MCksIEZsb2F0U2l6ZSg1NS44OTg0Mzc1LCAwLjApLCBGbG9hdFNpemUoMjIuMzQzNzUsIDAuMCkg
fTsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2lucyA9IHsgRmxvYXRQb2ludCgtMTUuMTU2
MjUsIDE4LjA0Njg3NSksIEZsb2F0UG9pbnQoKSwgRmxvYXRQb2ludCgpLCBGbG9hdFBvaW50KCks
IEZsb2F0UG9pbnQoKSB9OwogI2Vsc2UKLSAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsg
Q0dTaXplTWFrZSgxNS4xNTYyNSwgLTE4LjA0Njg3NSksIENHU2l6ZU1ha2UoMjEuNjQwNjI1LCAw
LjApLCBDR1NpemVNYWtlKDQyLjMwNDY4NzUsIDAuMCksIENHU2l6ZU1ha2UoNTUuODk4NDM3NSwg
MC4wKSwgQ0dTaXplTWFrZSgyMi4zNDM3NSwgMC4wKSB9OwotICAgIFZlY3RvcjxDR1BvaW50PiBv
cmlnaW5zID0geyB9OworICAgIFZlY3RvcjxGbG9hdFNpemU+IGFkdmFuY2VzID0geyBGbG9hdFNp
emUoMTUuMTU2MjUsIC0xOC4wNDY4NzUpLCBGbG9hdFNpemUoMjEuNjQwNjI1LCAwLjApLCBGbG9h
dFNpemUoNDIuMzA0Njg3NSwgMC4wKSwgRmxvYXRTaXplKDU1Ljg5ODQzNzUsIDAuMCksIEZsb2F0
U2l6ZSgyMi4zNDM3NSwgMC4wKSB9OworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zID0g
eyB9OwogI2VuZGlmCiAKLSAgICBDR1NpemUgaW5pdGlhbEFkdmFuY2UgPSBDR1NpemVNYWtlKC0x
NS4xNTYyNSwgMTguMDQ2ODc1KTsKKyAgICBGbG9hdFNpemUgaW5pdGlhbEFkdmFuY2UoLTE1LjE1
NjI1LCAxOC4wNDY4NzUpOwogCiAgICAgVUNoYXIgY2hhcmFjdGVyc1tdID0geyAweDY0NCwgMHg2
MzcsIDB4NjQxLCAweDYyNywgMHg2NGIgfTsKICAgICBzaXplX3QgY2hhcmFjdGVyc0xlbmd0aCA9
IFdURl9BUlJBWV9MRU5HVEgoY2hhcmFjdGVycyk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuKFN0cmlu
Z1ZpZXcoY2hhcmFjdGVycywgY2hhcmFjdGVyc0xlbmd0aCkpOwotICAgIGF1dG8gcnVuID0gQ29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyhhZHZh
bmNlcywgb3JpZ2lucywgeyAxOTMsIDM3NywgNDQ3LCA0MzEsIDQ1OCB9LCB7IDQsIDMsIDIsIDEs
IDAgfSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwg
Y2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMCwgNSksIGZhbHNlKTsKKyAgICBhdXRvIHJ1
biA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRSdW46OmNyZWF0ZShhZHZhbmNl
cywgb3JpZ2lucywgeyAxOTMsIDM3NywgNDQ3LCA0MzEsIDQ1OCB9LCB7IDQsIDMsIDIsIDEsIDAg
fSwgaW5pdGlhbEFkdmFuY2UsIGZvbnQucHJpbWFyeUZvbnQoKSwgY2hhcmFjdGVycywgMCwgY2hh
cmFjdGVyc0xlbmd0aCwgMCwgNSwgZmFsc2UpOwogICAgIFZlY3RvcjxSZWY8Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CiAgICAgcnVucy5hcHBlbmQoV1RGTW92
ZShydW4pKTsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihmb250LCB0ZXh0
UnVuLCBydW5zKTsKIAogICAgIENHRmxvYXQgdG90YWxXaWR0aCA9IDA7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDE7IGkgPCBhZHZhbmNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdG90YWxXaWR0aCAr
PSBhZHZhbmNlc1tpXS53aWR0aDsKKyAgICAgICAgdG90YWxXaWR0aCArPSBhZHZhbmNlc1tpXS53
aWR0aCgpOwogICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIudG90YWxXaWR0aCgpLCB0b3RhbFdp
ZHRoLCAwLjAwMDEpOwogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGNvbnRyb2xs
ZXIuYWR2YW5jZSgwLCAmZ2x5cGhCdWZmZXIpOwogICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIu
cnVuV2lkdGhTb0ZhcigpLCAwLCAwLjAwMDEpOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZSgxLCAm
Z2x5cGhCdWZmZXIpOwotICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0Zhcigp
LCBhZHZhbmNlc1s0XS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVy
LnJ1bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbNF0ud2lkdGgoKSwgMC4wMDAxKTsKICAgICBjb250
cm9sbGVyLmFkdmFuY2UoNSwgJmdseXBoQnVmZmVyKTsKICAgICBFWFBFQ1RfTkVBUihjb250cm9s
bGVyLnJ1bldpZHRoU29GYXIoKSwgdG90YWxXaWR0aCwgMC4wMDAxKTsKLSAgICBFWFBFQ1RfTkVB
UihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIGluaXRpYWxBZHZhbmNlLndp
ZHRoLCAwLjAwMDEpOwotICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNl
KCkuaGVpZ2h0KCksIGluaXRpYWxBZHZhbmNlLmhlaWdodCwgMC4wMDAxKTsKKyAgICBFWFBFQ1Rf
TkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIGluaXRpYWxBZHZhbmNl
LndpZHRoKCksIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFk
dmFuY2UoKS5oZWlnaHQoKSwgaW5pdGlhbEFkdmFuY2UuaGVpZ2h0KCksIDAuMDAwMSk7CiAgICAg
RVhQRUNUX0VRKGdseXBoQnVmZmVyLnNpemUoKSwgNVUpOwotICAgIEVYUEVDVF9ORUFSKGdseXBo
QnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpLCBhZHZhbmNlc1s0XS53aWR0aCwgMC4wMDAxKTsK
LSAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwgYWR2YW5j
ZXNbM10ud2lkdGgsIDAuMDAwMSk7Ci0gICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5j
ZUF0KDIpLndpZHRoKCksIGFkdmFuY2VzWzJdLndpZHRoLCAwLjAwMDEpOwotICAgIEVYUEVDVF9O
RUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgzKS53aWR0aCgpLCBhZHZhbmNlc1sxXS53aWR0aCwg
MC4wMDAxKTsKLSAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoNCkud2lkdGgo
KSwgLWluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBo
QnVmZmVyLmFkdmFuY2VBdCgwKS53aWR0aCgpLCBhZHZhbmNlc1s0XS53aWR0aCgpLCAwLjAwMDEp
OworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgxKS53aWR0aCgpLCBhZHZh
bmNlc1szXS53aWR0aCgpLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFk
dmFuY2VBdCgyKS53aWR0aCgpLCBhZHZhbmNlc1syXS53aWR0aCgpLCAwLjAwMDEpOworICAgIEVY
UEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCgzKS53aWR0aCgpLCBhZHZhbmNlc1sxXS53
aWR0aCgpLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmFkdmFuY2VBdCg0
KS53aWR0aCgpLCAtaW5pdGlhbEFkdmFuY2Uud2lkdGgoKSwgMC4wMDAxKTsKIH0KIAogVEVTVF9G
KENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIERJU0FCTEVEX0luaXRpYWxBZHZhbmNlV2l0aExl
ZnRSdW5JbkxUUikKQEAgLTE1MywzOSArMTUzLDM5IEBAIFRFU1RfRihDb21wbGV4VGV4dENvbnRy
b2xsZXJUZXN0LCBESVNBQkxFRF9Jbml0aWFsQWR2YW5jZVdpdGhMZWZ0UnVuSW5MVFIpCiAgICAg
YXV0byBzcGFjZVdpZHRoID0gZm9udC5wcmltYXJ5Rm9udCgpLnNwYWNlV2lkdGgoKTsKIAogI2lm
IFVTRV9MQVlPVVRfU1BFQ0lGSUNfQURWQU5DRVMKLSAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNl
cyA9IHsgQ0dTaXplTWFrZSg3Ni4zNDc2NTYsIDAuMDAwMDAwKSwgQ0dTaXplTWFrZSgwLjAwMDAw
MCwgMC4wMDAwMDApIH07Ci0gICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7IENHUG9pbnRa
ZXJvLCBDR1BvaW50TWFrZSgtMjMuMjgxMjUwLCAtOC4zOTg0MzgpIH07CisgICAgVmVjdG9yPEZs
b2F0U2l6ZT4gYWR2YW5jZXMgPSB7IEZsb2F0U2l6ZSg3Ni4zNDc2NTYsIDAuMDAwMDAwKSwgRmxv
YXRTaXplKDAuMDAwMDAwLCAwLjAwMDAwMCkgfTsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3Jp
Z2lucyA9IHsgRmxvYXRQb2ludCgpLCBGbG9hdFBvaW50KC0yMy4yODEyNTAsIC04LjM5ODQzOCkg
fTsKICNlbHNlCi0gICAgVmVjdG9yPENHU2l6ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNTMu
MDY2NDA2LCAtOC4zOTg0MzgpLCBDR1NpemVNYWtlKDIzLjI4MTI1MCwgOC4zOTg0MzgpIH07Ci0g
ICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMgPSB7IH07CisgICAgVmVjdG9yPEZsb2F0U2l6ZT4g
YWR2YW5jZXMgPSB7IEZsb2F0U2l6ZSg1My4wNjY0MDYsIC04LjM5ODQzOCksIEZsb2F0U2l6ZSgy
My4yODEyNTAsIDguMzk4NDM4KSB9OworICAgIFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zID0g
eyB9OwogI2VuZGlmCiAKLSAgICBDR1NpemUgaW5pdGlhbEFkdmFuY2UgPSBDR1NpemVNYWtlKDI4
LjE0NDUzMSwgMCk7CisgICAgRmxvYXRTaXplIGluaXRpYWxBZHZhbmNlKDI4LjE0NDUzMSwgMCk7
CiAKICAgICBVQ2hhciBjaGFyYWN0ZXJzW10gPSB7IDB4MjAsIDB4NjEsIDB4MjBlMyB9OwogICAg
IHNpemVfdCBjaGFyYWN0ZXJzTGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsK
ICAgICBUZXh0UnVuIHRleHRSdW4oU3RyaW5nVmlldyhjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVu
Z3RoKSk7Ci0gICAgYXV0byBydW4xID0gQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4
dFJ1bjo6Y3JlYXRlRm9yVGVzdGluZyh7IENHU2l6ZU1ha2Uoc3BhY2VXaWR0aCwgMCkgfSwgeyBD
R1BvaW50WmVybyB9LCB7IDUgfSwgeyAwIH0sIENHU2l6ZVplcm8sIGZvbnQucHJpbWFyeUZvbnQo
KSwgY2hhcmFjdGVycywgMCwgY2hhcmFjdGVyc0xlbmd0aCwgQ0ZSYW5nZU1ha2UoMCwgMSksIHRy
dWUpOwotICAgIGF1dG8gcnVuMiA9IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRS
dW46OmNyZWF0ZUZvclRlc3RpbmcoYWR2YW5jZXMsIG9yaWdpbnMsIHsgNjgsIDE0NzEgfSwgeyAx
LCAyIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAs
IGNoYXJhY3RlcnNMZW5ndGgsIENGUmFuZ2VNYWtlKDEsIDIpLCB0cnVlKTsKKyAgICBhdXRvIHJ1
bjEgPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUoeyBGbG9h
dFNpemUoc3BhY2VXaWR0aCwgMCkgfSwgeyBGbG9hdFBvaW50KCkgfSwgeyA1IH0sIHsgMCB9LCBG
bG9hdFNpemUoKSwgZm9udC5wcmltYXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJz
TGVuZ3RoLCAwLCAxLCB0cnVlKTsKKyAgICBhdXRvIHJ1bjIgPSBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIHsgNjgsIDE0NzEg
fSwgeyAxLCAyIH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3Rl
cnMsIDAsIGNoYXJhY3RlcnNMZW5ndGgsIDEsIDMsIHRydWUpOwogICAgIFZlY3RvcjxSZWY8Q29t
cGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CiAgICAgcnVucy5hcHBl
bmQoV1RGTW92ZShydW4xKSk7CiAgICAgcnVucy5hcHBlbmQoV1RGTW92ZShydW4yKSk7CiAgICAg
Q29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIoZm9udCwgdGV4dFJ1biwgcnVucyk7CiAK
LSAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnRvdGFsV2lkdGgoKSwgc3BhY2VXaWR0aCArIDc2
LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFS
KGNvbnRyb2xsZXIudG90YWxXaWR0aCgpLCBzcGFjZVdpZHRoICsgNzYuMzQ3NjU2ICsgaW5pdGlh
bEFkdmFuY2Uud2lkdGgoKSwgMC4wMDAxKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsK
ICAgICBjb250cm9sbGVyLmFkdmFuY2UoMCwgJmdseXBoQnVmZmVyKTsKICAgICBFWFBFQ1RfTkVB
Uihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgMCwgMC4wMDAxKTsKICAgICBjb250cm9sbGVy
LmFkdmFuY2UoMSwgJmdseXBoQnVmZmVyKTsKICAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1
bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCwgMC4wMDAxKTsKICAgICBjb250cm9sbGVyLmFkdmFu
Y2UoMiwgJmdseXBoQnVmZmVyKTsKLSAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRo
U29GYXIoKSwgc3BhY2VXaWR0aCArIGFkdmFuY2VzWzBdLndpZHRoICsgaW5pdGlhbEFkdmFuY2Uu
d2lkdGgsIDAuMDAwMSk7CisgICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5ydW5XaWR0aFNvRmFy
KCksIHNwYWNlV2lkdGggKyBhZHZhbmNlc1swXS53aWR0aCgpICsgaW5pdGlhbEFkdmFuY2Uud2lk
dGgoKSwgMC4wMDAxKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoMywgJmdseXBoQnVmZmVyKTsK
LSAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgc3BhY2VXaWR0aCAr
IDc2LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOworICAgIEVYUEVDVF9O
RUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCBzcGFjZVdpZHRoICsgNzYuMzQ3NjU2ICsg
aW5pdGlhbEFkdmFuY2Uud2lkdGgoKSwgMC4wMDAxKTsKICAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1
ZmZlci5pbml0aWFsQWR2YW5jZSgpLndpZHRoKCksIDAsIDAuMDAwMSk7CiAgICAgRVhQRUNUX05F
QVIoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSwgMCwgMC4wMDAxKTsKICAg
ICBFWFBFQ1RfRVEoZ2x5cGhCdWZmZXIuc2l6ZSgpLCAzVSk7Ci0gICAgRVhQRUNUX05FQVIoZ2x5
cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCksIHNwYWNlV2lkdGggKyBpbml0aWFsQWR2YW5j
ZS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQo
MCkud2lkdGgoKSwgc3BhY2VXaWR0aCArIGluaXRpYWxBZHZhbmNlLndpZHRoKCksIDAuMDAwMSk7
CiAgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDEpLndpZHRoKCksIDUzLjA2
NjQwNiwgMC4wMDAxKTsKICAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoMiku
d2lkdGgoKSwgMjMuMjgxMjUwLCAwLjAwMDEpOwogfQpAQCAtMTk5LDMzICsxOTksMzMgQEAgVEVT
VF9GKENvbXBsZXhUZXh0Q29udHJvbGxlclRlc3QsIERJU0FCTEVEX0luaXRpYWxBZHZhbmNlSW5M
VFIpCiAgICAgZm9udC51cGRhdGUoKTsKIAogI2lmIFVTRV9MQVlPVVRfU1BFQ0lGSUNfQURWQU5D
RVMKLSAgICBWZWN0b3I8Q0dTaXplPiBhZHZhbmNlcyA9IHsgQ0dTaXplTWFrZSg3Ni4zNDc2NTYs
IDAuMDAwMDAwKSwgQ0dTaXplTWFrZSgwLjAwMDAwMCwgMC4wMDAwMDApIH07Ci0gICAgVmVjdG9y
PENHUG9pbnQ+IG9yaWdpbnMgPSB7IENHUG9pbnRaZXJvLCBDR1BvaW50TWFrZSgtMjMuMjgxMjUw
LCAtOC4zOTg0MzgpIH07CisgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYWR2YW5jZXMgPSB7IEZsb2F0
U2l6ZSg3Ni4zNDc2NTYsIDAuMDAwMDAwKSwgRmxvYXRTaXplKDAuMDAwMDAwLCAwLjAwMDAwMCkg
fTsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gb3JpZ2lucyA9IHsgRmxvYXRQb2ludCgpLCBGbG9h
dFBvaW50KC0yMy4yODEyNTAsIC04LjM5ODQzOCkgfTsKICNlbHNlCi0gICAgVmVjdG9yPENHU2l6
ZT4gYWR2YW5jZXMgPSB7IENHU2l6ZU1ha2UoNTMuMDY2NDA2LCAtOC4zOTg0MzgpLCBDR1NpemVN
YWtlKDIzLjI4MTI1MCwgOC4zOTg0MzgpIH07Ci0gICAgVmVjdG9yPENHUG9pbnQ+IG9yaWdpbnMg
PSB7IH07CisgICAgVmVjdG9yPEZsb2F0U2l6ZT4gYWR2YW5jZXMgPSB7IEZsb2F0U2l6ZSg1My4w
NjY0MDYsIC04LjM5ODQzOCksIEZsb2F0U2l6ZSgyMy4yODEyNTAsIDguMzk4NDM4KSB9OworICAg
IFZlY3RvcjxGbG9hdFBvaW50PiBvcmlnaW5zID0geyB9OwogI2VuZGlmCiAKLSAgICBDR1NpemUg
aW5pdGlhbEFkdmFuY2UgPSBDR1NpemVNYWtlKDI4LjE0NDUzMSwgMCk7CisgICAgRmxvYXRTaXpl
IGluaXRpYWxBZHZhbmNlKDI4LjE0NDUzMSwgMCk7CiAKICAgICBVQ2hhciBjaGFyYWN0ZXJzW10g
PSB7IDB4NjEsIDB4MjBlMyB9OwogICAgIHNpemVfdCBjaGFyYWN0ZXJzTGVuZ3RoID0gV1RGX0FS
UkFZX0xFTkdUSChjaGFyYWN0ZXJzKTsKICAgICBUZXh0UnVuIHRleHRSdW4oU3RyaW5nVmlldyhj
aGFyYWN0ZXJzLCBjaGFyYWN0ZXJzTGVuZ3RoKSk7Ci0gICAgYXV0byBydW4gPSBDb21wbGV4VGV4
dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0UnVuOjpjcmVhdGVGb3JUZXN0aW5nKGFkdmFuY2VzLCBv
cmlnaW5zLCB7IDY4LCAxNDcxIH0sIHsgMCwgMSB9LCBpbml0aWFsQWR2YW5jZSwgZm9udC5wcmlt
YXJ5Rm9udCgpLCBjaGFyYWN0ZXJzLCAwLCBjaGFyYWN0ZXJzTGVuZ3RoLCBDRlJhbmdlTWFrZSgw
LCAyKSwgdHJ1ZSk7CisgICAgYXV0byBydW4gPSBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBs
ZXhUZXh0UnVuOjpjcmVhdGUoYWR2YW5jZXMsIG9yaWdpbnMsIHsgNjgsIDE0NzEgfSwgeyAwLCAx
IH0sIGluaXRpYWxBZHZhbmNlLCBmb250LnByaW1hcnlGb250KCksIGNoYXJhY3RlcnMsIDAsIGNo
YXJhY3RlcnNMZW5ndGgsIDAsIDIsIHRydWUpOwogICAgIFZlY3RvcjxSZWY8Q29tcGxleFRleHRD
b250cm9sbGVyOjpDb21wbGV4VGV4dFJ1bj4+IHJ1bnM7CiAgICAgcnVucy5hcHBlbmQoV1RGTW92
ZShydW4pKTsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihmb250LCB0ZXh0
UnVuLCBydW5zKTsKIAotICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIudG90YWxXaWR0aCgpLCA3
Ni4zNDc2NTYgKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVB
Uihjb250cm9sbGVyLnRvdGFsV2lkdGgoKSwgNzYuMzQ3NjU2ICsgaW5pdGlhbEFkdmFuY2Uud2lk
dGgoKSwgMC4wMDAxKTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBjb250cm9s
bGVyLmFkdmFuY2UoMCwgJmdseXBoQnVmZmVyKTsKICAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVy
LnJ1bldpZHRoU29GYXIoKSwgMCwgMC4wMDAxKTsKICAgICBjb250cm9sbGVyLmFkdmFuY2UoMSwg
JmdseXBoQnVmZmVyKTsKLSAgICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIo
KSwgYWR2YW5jZXNbMF0ud2lkdGggKyBpbml0aWFsQWR2YW5jZS53aWR0aCwgMC4wMDAxKTsKKyAg
ICBFWFBFQ1RfTkVBUihjb250cm9sbGVyLnJ1bldpZHRoU29GYXIoKSwgYWR2YW5jZXNbMF0ud2lk
dGgoKSArIGluaXRpYWxBZHZhbmNlLndpZHRoKCksIDAuMDAwMSk7CiAgICAgY29udHJvbGxlci5h
ZHZhbmNlKDIsICZnbHlwaEJ1ZmZlcik7Ci0gICAgRVhQRUNUX05FQVIoY29udHJvbGxlci5ydW5X
aWR0aFNvRmFyKCksIDc2LjM0NzY1NiArIGluaXRpYWxBZHZhbmNlLndpZHRoLCAwLjAwMDEpOwot
ICAgIEVYUEVDVF9ORUFSKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgaW5p
dGlhbEFkdmFuY2Uud2lkdGgsIDAuMDAwMSk7Ci0gICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIu
aW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSwgaW5pdGlhbEFkdmFuY2UuaGVpZ2h0LCAwLjAwMDEp
OworICAgIEVYUEVDVF9ORUFSKGNvbnRyb2xsZXIucnVuV2lkdGhTb0ZhcigpLCA3Ni4zNDc2NTYg
KyBpbml0aWFsQWR2YW5jZS53aWR0aCgpLCAwLjAwMDEpOworICAgIEVYUEVDVF9ORUFSKGdseXBo
QnVmZmVyLmluaXRpYWxBZHZhbmNlKCkud2lkdGgoKSwgaW5pdGlhbEFkdmFuY2Uud2lkdGgoKSwg
MC4wMDAxKTsKKyAgICBFWFBFQ1RfTkVBUihnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhl
aWdodCgpLCBpbml0aWFsQWR2YW5jZS5oZWlnaHQoKSwgMC4wMDAxKTsKICAgICBFWFBFQ1RfRVEo
Z2x5cGhCdWZmZXIuc2l6ZSgpLCAyVSk7CiAgICAgRVhQRUNUX05FQVIoZ2x5cGhCdWZmZXIuYWR2
YW5jZUF0KDApLndpZHRoKCksIDUzLjA2NjQwNiwgMC4wMDAxKTsKICAgICBFWFBFQ1RfTkVBUihn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoMSkud2lkdGgoKSwgMjMuMjgxMjUwLCAwLjAwMDEpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>