<?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>216353</bug_id>
          
          <creation_ts>2020-09-10 04:06:44 -0700</creation_ts>
          <short_desc>[Apple Win] Migrate the Apple Win port&apos;s font code to Core Text from Core Graphics</short_desc>
          <delta_ts>2024-02-06 19:43:21 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>216400</dependson>
    
    <dependson>216432</dependson>
    
    <dependson>216444</dependson>
    
    <dependson>216446</dependson>
    
    <dependson>216448</dependson>
    
    <dependson>216454</dependson>
    
    <dependson>216525</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1687318</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 04:06:44 -0700</bug_when>
    <thetext>[Win] Migrate the Apple Win port&apos;s font code to Core Text from Core Graphics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687319</commentid>
    <comment_count>1</comment_count>
      <attachid>408428</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 04:09:14 -0700</bug_when>
    <thetext>Created attachment 408428
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687589</commentid>
    <comment_count>2</comment_count>
      <attachid>408493</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 16:25:52 -0700</bug_when>
    <thetext>Created attachment 408493
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687650</commentid>
    <comment_count>3</comment_count>
      <attachid>408511</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 21:50:04 -0700</bug_when>
    <thetext>Created attachment 408511
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687654</commentid>
    <comment_count>4</comment_count>
      <attachid>408513</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 22:06:37 -0700</bug_when>
    <thetext>Created attachment 408513
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687656</commentid>
    <comment_count>5</comment_count>
      <attachid>408514</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 22:24:09 -0700</bug_when>
    <thetext>Created attachment 408514
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687658</commentid>
    <comment_count>6</comment_count>
      <attachid>408515</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-10 22:36:07 -0700</bug_when>
    <thetext>Created attachment 408515
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689414</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-17 04:07:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/69058218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2011272</commentid>
    <comment_count>8</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2024-02-06 19:43:21 -0800</bug_when>
    <thetext>Apple Windows port has gone. Closed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408428</attachid>
            <date>2020-09-10 04:09:14 -0700</date>
            <delta_ts>2020-09-10 16:25:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-216353-20200910040913.patch</filename>
            <type>text/plain</type>
            <size>187529</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2ODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDY4ODY4ZTJlNDVmMDFiZTU3MThhNWUy
MDU2MmYzMTYyZmVmYjExMTguLjhlNGQxYTBlOWU0MWRkOTI4MDIxYjlmYzg4NjA5ZjdkOWQ0MWE4
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBX
aW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bVVzZS5oOgorCiAyMDIwLTA5LTA5ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFRleHQgY29waWVkIGFuZCBwYXN0ZWQgZnJvbSBNYWMgQ2F0YWx5c3Qg
YXBwcyBhcHBlYXJzIGxhcmdlciB0aGFuIGV4cGVjdGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2U0NmRkZDdj
YjA0ZmZhOWU1YTdlM2UzNTZiOTUwMWUwM2IxMmNiNC4uYmIxMmMxNTU4MmFjNDQ0ZjU1ODlkZDlh
YTQzMTg1YzBkMjVkMzk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDIwLTA5LTEw
ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dp
bl0gTWlncmF0ZSB0aGUgQXBwbGUgV2luIHBvcnQncyBmb250IGNvZGUgdG8gQ29yZSBUZXh0IGZy
b20gQ29yZSBHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE2MzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgor
ICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
aGZvbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y2dGb250
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FzY2FkZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlw
aHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzU3VicGl4
ZWxBbnRpYWxpYXNpbmdBdmFpbGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Zmls
bFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q29jb2EuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtRGVz
dHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0
dXJlU2VsZWN0b3IpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxp
YXNpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9u
dGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNlTGV0dGVycHJl
c3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBoc1dpdGhBZHZhbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNj
YWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OmFwcGx5VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlQ0dXaW4uY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRh
Q0dXaW4uY3BwOiBSZW1vdmVkLgorCiAyMDIwLTA5LTA5ICBBbmRyZXMgR29uemFsZXogIDxhbmRy
ZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW51c2VkIGVudW0gUG9zdFR5cGUu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oIGIvU291cmNlL1dURi93
dGYvUGxhdGZvcm1Vc2UuaAppbmRleCBhNmViZTY3MmY0YTk1NGMzMzIyNDc4MDNmYmRhZTFjODI4
MWFmZmUyLi45M2MyNWFhOTdlYzU0ODU2ODBlMTcwN2M3MDU4YjA4NDRmM2Q4NTVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtVXNlLmgKQEAgLTU0LDYgKzU0LDEwIEBACiAjZGVmaW5lIFVTRV9DRyAxCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBVU0VfQ1QgMQorI2VuZGlmCisKICNpZiBQ
TEFURk9STShDT0NPQSkKICNkZWZpbmUgVVNFX0NBIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCA0M2ViOGYzZWI3ZDAy
ZmQ0YzllOTg3ZWQ2NDMzMmIxNGVlZDc0YzhhLi4zZDFlMjM2MmNmYmJmODNkYzBjYzU2ZGU4YTQ1
YmM5NjdiMzRmOTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdApAQCAtMTksNiArMTksMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvRXZlbnRUYXJnZXRGYWN0b3J5LmNwcAogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRXZlbnRUYXJnZXRIZWFkZXJzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0V2ZW50VGFyZ2V0SW50
ZXJmYWNlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9H
ZXN0dXJlRXZlbnQuaWRsCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9HbG9iYWxFdmVudEhhbmRsZXJzQ1NTQW5pbWF0aW9ucy5jcHAKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0dsb2JhbEV2ZW50SGFuZGxlcnNDU1NBbmlt
YXRpb25zLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0ds
b2JhbEV2ZW50SGFuZGxlcnNDU1NUcmFuc2l0aW9ucy5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0dsb2JhbEV2ZW50SGFuZGxlcnNDU1NUcmFuc2l0aW9u
cy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9HbG9iYWxF
dmVudEhhbmRsZXJzUG9pbnRlckV2ZW50cy5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJDb3JlL0dsb2JhbEV2ZW50SGFuZGxlcnNQb2ludGVyRXZlbnRzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0hUTUxFbGVtZW50RmFj
dG9yeS5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0hU
TUxFbGVtZW50RmFjdG9yeS5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9IVE1MRWxlbWVudFR5cGVIZWxwZXJzLmgKQEAgLTc3NiwxMiArNzgyLDEyIEBAICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTR2xvYmFsQ3J5cHRv
LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNHbG9i
YWxDcnlwdG8uaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNHbG9iYWxFdmVudEhhbmRsZXJzLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNHbG9iYWxFdmVudEhhbmRsZXJzLmgKLSQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0dsb2JhbEV2ZW50SGFuZGxlcnNDU1NBbmltYXRp
b25zLmNwcAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvR2xv
YmFsRXZlbnRIYW5kbGVyc0NTU0FuaW1hdGlvbnMuaAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvR2xvYmFsRXZlbnRIYW5kbGVyc0NTU1RyYW5zaXRpb25zLmNw
cAotJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvR2xvYmFsRXZl
bnRIYW5kbGVyc0NTU1RyYW5zaXRpb25zLmgKLSQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJDb3JlL0dsb2JhbEV2ZW50SGFuZGxlcnNQb2ludGVyRXZlbnRzLmNwcAotJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvR2xvYmFsRXZlbnRIYW5k
bGVyc1BvaW50ZXJFdmVudHMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNHbG9iYWxFdmVudEhhbmRsZXJzQ1NTQW5pbWF0aW9ucy5jcHAKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTR2xvYmFsRXZlbnRIYW5kbGVy
c0NTU0FuaW1hdGlvbnMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNHbG9iYWxFdmVudEhhbmRsZXJzQ1NTVHJhbnNpdGlvbnMuY3BwCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0dsb2JhbEV2ZW50SGFuZGxlcnND
U1NUcmFuc2l0aW9ucy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0dsb2JhbEV2ZW50SGFuZGxlcnNQb2ludGVyRXZlbnRzLmNwcAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNHbG9iYWxFdmVudEhhbmRsZXJzUG9p
bnRlckV2ZW50cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0dsb2JhbFBlcmZvcm1hbmNlLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNHbG9iYWxQZXJmb3JtYW5jZS5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxBbGxDb2xsZWN0aW9uLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZDk0ZmQ2OWNkN2VkZWNhM2M4NjA2MWFm
MzIwYWJiY2FiMjhjODAzZi4uMmMzNzUxMTQ3N2ZmODI1YjFjM2JhMmNiYmI1ZWY0MTNkNWNlYTcy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xNTAsMTQgKzE1MCwx
NyBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmNw
cAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKKwogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNHLmNwcAogCi0gICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhQ0dXaW4uY3BwCiAKICAgICAgICAgcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAog
ICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYmIyMTdiYjNkNDZlOWMwZmU1Njkw
MzMzOThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3
YTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTMwNiw3ICszMDYsNyBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9h
dFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYWNoZUNvcmVU
ZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0K
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMyMSw2ICszMjEsMTEgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xM
YXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCiAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
R2x5cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVJv
dGF0aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvUGl4ZWxCdWZmZXJD
b25mb3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5t
bQpAQCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VN
YWMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW50
UG9pbnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDcyNjA0MTE5MjI0MDVhZmQw
YmJiNTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4MTBmMGUxZDAwOTRiZmYzZmI0MmZj
OGVlZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzQ3LDcgKzM0Nyw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVD
b3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0K
LXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0
aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNh
dGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0
YUNvY29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dl
YkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
R0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR1BVTGF5ZXIubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9G
b250Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29y
ZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBsYXRmb3JtL2dy
YXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
di9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L21hYy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
RmxvYXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCi1wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQogcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVm
NDMwNTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMzZjU0NTFkODBiMTU5N2NjMGIwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBG
b250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFj
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFC
NTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250
RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzZCOTVERDIyQzg1OEE0MDBF
NkYxNEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1bmN0aW9uTWFwLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1MEEyOTREMDBENkU5MjAgLyogRm9u
dFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRQbGF0Zm9y
bURhdGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFE
MjUwQTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2FzY2FkZUNvcmVUZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5MjAgLyogRm9udENvcmVUZXh0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyog
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYgQEAKIAkJN0M0Qzk2REExQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0Qzk2REIxQUQ0NDgzNTAwMzYz
NTcyIC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1Jl
YWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYgLyogQ29sb3JDb252ZXJzaW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0QjZCRiAvKiBET01Qcm9taXNlUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJCUIyQUZGQzc1MEQwMEE1QzEwMDMw
MDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzgw
RDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZU1h
Yy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhQYWdlTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDOEMwRDAwQTVERjAwMzAw
NzREIC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVs
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNTBEMDBDQUE4MDA0
QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQluYW1lID0gSW5zcGVjdG9yOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2RkQ4QUEyNTBBMjkyNDAwRDZFOTIw
IC8qIGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkx
QzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgKi8sCisJ
CQkJMUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRDb3JlVGV4dC5jcHAgKi8sCisJCQkJ
MUM2RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAg
Ki8sCisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8qIEdseXBoUGFnZUNvcmVUZXh0LmNw
cCAqLywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyogaW5zcGVjdG9yICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTI1ODE3LDcgKzI1ODMxLDYgQEAK
IAkJCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplTWFjLm1tICovLAogCQkJ
CUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAq
LywKIAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5oICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3Bw
ICovLAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAvKiBJY29uTWFjLm1tICovLAogCQkJ
CUIyNzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1hYy5tbSAqLywKIAkJCQlCMjc1MzU0
RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0gKi8sCkBAIC0yNTg0NCw2ICsyNTg1
Nyw3IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQwIC8qIGNvY29hICovLAogCQkJCTJD
RTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2UgKi8sCiAJCQkJOTMzMkFCM0IxNjUx
NUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhBQTI1MEEyOTI0MDBENkU5MjAgLyog
Y3QgKi8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2IC8qIGN2ICovLAogCQkJCTBGRTVG
QkM5MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMgKi8sCiAJCQkJQTc1RThCN0YwRTFE
RTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIwNCw3ICsyNjIxOCw3IEBACiAJCQkJ
MUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLywKIAkJ
CQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLywKIAkJ
CQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5tbSAqLywKLQkJ
CQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENvY29hLm1tICovLAorCQkJCTFDNkZE
OEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3BwICovLAogCQkJCTFDMTJBQzJDMUVF
Nzc5OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2NvYS5jcHAgKi8sCiAJCQkJMUMxMkFD
MjgxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3Bw
ICovLAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNh
dGlvbkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuaAppbmRleCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDEx
ZWU5Li5kZDc4OWQ0MjY5Njg5MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgx
LDExIEBAIHN0cnVjdCBHbHlwaE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBm
YWxzZSB9OwogfTsKIAorI2lmIFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNX
aXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBDR0dseXBoKiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291
bnQpOwordm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8
Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRl
ciB7CiBwdWJsaWM6CiAgICAgdm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0
YS5jcHAKaW5kZXggZDRiYzJhNGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uZjA1
ZTZmMWI3ZDY4ZDZlYzZmZWIwMjgwOWM4OTQ5MjAyM2NlM2Y1NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTUy
LDE1ICs1Miw2IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpCiB7CiB9CiAKLSNpZiBVU0UoQ0cp
ICYmIFBMQVRGT1JNKFdJTikKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dG
b250UmVmIGNnRm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRo
ZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFu
dCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQotICAg
IDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVl
LCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBt
X2NnRm9udCA9IGNnRm9udDsKLSAgICBBU1NFUlQobV9jZ0ZvbnQpOwotfQotI2VuZGlmCi0KICNp
ZiAhVVNFKEZSRUVUWVBFKQogRm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9u
ZVdpdGhPcmllbnRhdGlvbihjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlhOTY0NGIxMzFj
NTM2ZTIwYmIwOGE0YzA0ZGFjLi5jZDk4ZjE3ZWVjZjEwYjg2OTJjMGUxODZjMzBlNTZjMWY4MGZl
ZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxh
dGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBs
YXRmb3JtRGF0YS5oCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogICAgIEZvbnRQbGF0Zm9y
bURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlx
dWUsIEZvbnRPcmllbnRhdGlvbiA9IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgRm9udFdp
ZHRoVmFyaWFudCA9IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCwgVGV4dFJlbmRlcmlu
Z01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0b1RleHRSZW5kZXJpbmcpOwogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogICAgIFdFQkNPUkVfRVhQT1JUIEZvbnRQbGF0Zm9y
bURhdGEoQ1RGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQgPSBmYWxzZSwg
Ym9vbCBzeW50aGV0aWNPYmxpcXVlID0gZmFsc2UsIEZvbnRPcmllbnRhdGlvbiA9IEZvbnRPcmll
bnRhdGlvbjo6SG9yaXpvbnRhbCwgRm9udFdpZHRoVmFyaWFudCA9IEZvbnRXaWR0aFZhcmlhbnQ6
OlJlZ3VsYXJXaWR0aCwgVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTo6QXV0
b1RleHRSZW5kZXJpbmcpOwogI2VuZGlmCiAKQEAgLTkwLDE2ICs5MCwxMiBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEgY2xvbmVXaXRoU3ludGhldGljT2JsaXF1ZShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCk7CiAgICAgc3RhdGljIEZvbnRQbGF0Zm9ybURhdGEg
Y2xvbmVXaXRoU2l6ZShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgZmxvYXQpOwogCi0jaWYgVVNF
KENHKSAmJiBQTEFURk9STShXSU4pCi0gICAgRm9udFBsYXRmb3JtRGF0YShDR0ZvbnRSZWYsIGZs
b2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250
T3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlKTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhG
T05UPiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlx
dWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ0cp
Ci0gICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBDR0ZvbnRSZWYsIGZsb2F0
IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVz
ZUdESSk7CisjaWYgUExBVEZPUk0oV0lOKSAmJiBVU0UoQ1QpCisgICAgRm9udFBsYXRmb3JtRGF0
YShHRElPYmplY3Q8SEZPTlQ+LCBDVEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgVVNFKERJUkVDVDJEKQpAQCAtMTE1LDExICsxMTEsMTEgQEAgcHVi
bGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgSEZPTlQgaGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmdldCgpIDogMDsgfQorICAgIEhGT05UIGhmb250
KCkgY29uc3QgeyByZXR1cm4gbV9oRm9udCA/IG1faEZvbnQtPmdldCgpIDogMDsgfQogICAgIGJv
b2wgdXNlR0RJKCkgY29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogICAgIENURm9udFJlZiBmb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgQ1RGb250UmVmIHJlZ2lz
dGVyZWRGb250KCkgY29uc3Q7IC8vIFJldHVybnMgbnVsbHB0ciBpZmYgdGhlIGZvbnQgaXMgbm90
IHJlZ2lzdGVyZWQsIHN1Y2ggYXMgd2ViIGZvbnRzIChvdGhlcndpc2UgcmV0dXJucyBmb250KCkp
LgogCkBAIC0xMzYsMTAgKzEzMiw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzVmFyaWF0aW9u
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFzVmFyaWF0aW9uczsgfQogCi0jaWYgVVNFKENHKSAmJiBQ
TEFURk9STShXSU4pCi0gICAgQ0dGb250UmVmIGNnRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dG
b250LmdldCgpOyB9Ci0jZW5kaWYKLQogI2lmIFVTRShESVJFQ1QyRCkKICAgICBJRFdyaXRlRm9u
dCogZHdGb250KCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnQuZ2V0KCk7IH0KICAgICBJRFdyaXRl
Rm9udEZhY2UqIGR3Rm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udEZhY2UuZ2V0KCk7
IH0KQEAgLTIyMiwxNiArMjE0LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZFNjYWxlZEZv
bnQoY2Fpcm9fZm9udF9mYWNlX3QqKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisj
aWYgVVNFKENUKQogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIG9uZSBvZiB0aGVzZS4gVGhlc2Ug
dHdvIGZvbnRzIGFyZSBzdWJ0bHkgZGlmZmVyZW50LCBhbmQgaXQgaXMgbm90IG9idmlvdXMgd2hp
Y2ggb25lIHRvIHVzZSB3aGVyZS4KICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBtX2ZvbnQ7CiAg
ICAgbXV0YWJsZSBSZXRhaW5QdHI8Q1RGb250UmVmPiBtX2N0Rm9udDsKLSNlbGlmIFBMQVRGT1JN
KFdJTikKLSAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05UPj4gbV9mb250OwogI2VuZGlm
CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JNKFdJTikKLSAgICBSZXRhaW5QdHI8Q0dGb250UmVm
PiBtX2NnRm9udDsKKyNpZiBQTEFURk9STShXSU4pCisgICAgUmVmUHRyPFNoYXJlZEdESU9iamVj
dDxIRk9OVD4+IG1faEZvbnQ7CiAjZW5kaWYKIAogI2lmIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2Fk
ZUNvY29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRmNTgu
LjNkNjMyOGNiMWMwMzFhNTdmMTNhNTA0MWFhYWJiMmUyYjY1NjMyY2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVD
b2NvYS5tbQpAQCAtMjMsMTkgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAi
Rm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW1w
b3J0ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVmZmVy
LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3QuaCIK
LSNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQUEtJ
VCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01hdGhF
eHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJ
S2l0U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszNyw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3JlVUks
IENVSVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0v
LyBDb25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdE
aXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBz
dGlsbCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rp
b24gdXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGlu
ZyIgdGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5n
QXZhaWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09U
SElOR19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJs
ZWQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJs
ZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRGT1JN
KE1BQykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4
VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDcsNyBAQCBib29sIEZvbnRD
YXNjYWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250
YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17
Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQo
Q0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0gQ0dQ
b2ludFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNl
c1tpIC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kg
LSAxXS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlv
bnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0LnRl
eHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOwot
I2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2Vu
ZGlmCi19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2Vz
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRl
eHQmIGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhB
ZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhp
Y3NDb250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1Np
emUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1Mp
CiAgICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzk5LDQgQEAgc3RhdGljIHZvaWQgc2hvd0xl
dHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEYKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNp
Z25lZCBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
R0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwot
Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9y
bURhdGEoKTsKLSAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOwotICAg
IGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsKSB7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBD
R0FmZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEsIDAsIDAsIDApOwotICAgICAgICBDR0FmZmlu
ZVRyYW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsK
LSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVuTWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1D
b25jYXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRyYW5zZm9ybSk7Ci0gICAgICAgIFNjb3BlZFRl
eHRNYXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4LCBjb250ZXh0KTsKLQotICAgICAgICBWZWN0
b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7Ci0gICAgICAgIENURm9udEdldFZl
cnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhz
LCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7Ci0KLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1h
dHJpeChjb250ZXh0KSk7Ci0KLSAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQo
cG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRl
b2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAg
ICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xh
dGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICAgICAgcG9zaXRpb25zW2ld
ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0
cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5z
Zm9ybSk7Ci0gICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOwotICAg
ICAgICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNlc1tpXS5oZWlnaHQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9z
aXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZp
bGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwg
YWR2YW5jZXMsIGNvdW50KTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAg
IH0KLX0KLQotc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dD
b250ZXh0LCB0cnVlKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0g
PSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKLSAgICBib29sIGlzVHJhbnNsYXRpb25Pcklu
dGVncmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6
OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5kKSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0g
MC5mICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAwLmY7Ci0gICAgYm9vbCBpc1JvdGF0ZWQgPSAo
KGNvbnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJh
bnNmb3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5kKSk7Ci0gICAgYm9vbCBkb1N1YnBpeGVsUXVh
bnRpemF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAm
JiBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpKTsKLQotICAgIENHQ29udGV4
dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIHRydWUpOwotICAgIENH
Q29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4
ZWxRdWFudGl6YXRpb24pOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQot
ewotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZv
cm1EYXRhKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KTsKLQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICBib29sIHNob3VsZFNt
b290aEZvbnRzID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5n
KCkpCi0gICAgICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhp
bmc7Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhp
bmdNb2RlOjpBbnRpYWxpYXNlZDoKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGlu
ZzoKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAg
ICAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZv
bnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0g
ZmFsc2U7Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIGlmICghc2hvdWxkVXNlU21vb3RoaW5nKCkpCi0gICAgICAgIHNob3Vs
ZFNtb290aEZvbnRzID0gZmFsc2U7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBi
b29sIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyA9IENHQ29udGV4dEdldFNob3VsZFNt
b290aEZvbnRzKGNnQ29udGV4dCk7Ci0gICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdp
bmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21v
b3RoRm9udHMoY2dDb250ZXh0LCBzaG91bGRTbW9vdGhGb250cyk7Ci0jZW5kaWYKLQotICAgIGJv
b2wgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMgPSBDR0NvbnRleHRHZXRTaG91bGRBbnRpYWxpYXMo
Y2dDb250ZXh0KTsKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50
aWFsaWFzKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBz
aG91bGRBbnRpYWxpYXMpOwotCi0gICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3Vs
ZFVzZUxldHRlcnByZXNzRWZmZWN0KGNvbnRleHQpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBh
bmNob3JQb2ludDsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJh
bnNmb3JtSWRlbnRpdHk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQo
KSkKLSAgICAgICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkp
OwotICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwot
ICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRp
YyBmbG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZs
b2F0IC8gMTgwKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9y
aWVudGF0aW9uRmFsbGJhY2soKSkKLSAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRy
YW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tl
dywgMCwgMSwgMCwgMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1hdHJp
eCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtl
KDEsIC1vYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFu
c2Zvcm1NYWtlKDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOwotICAgIH0KLSAgICBTY29w
ZWRUZXh0TWF0cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKLQotICAgIHNldENHRm9u
dFJlbmRlcmluZ01vZGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250
ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7
Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250
ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQot
ICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKLSAgICBm
bG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0g
ICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKSkgewotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRT
aXplSW5EZXZpY2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsK
LSAgICAgICAgZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRm
KGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5p
dFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQ
aXhlbHMuaGVpZ2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQo
KSk7Ci0gICAgICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7Ci0g
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3Qg
YmxvdyB1cCB0aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4gCi0gICAgICAgICAgICBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9mZnNldCwgc3ludGhldGljQm9s
ZE9mZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2lu
Z01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgp
ICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAo
IWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRp
dHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lM
YXllcigpOwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2lt
cGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0
byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBjb250ZXh0LmNs
ZWFyU2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9y
KCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGNv
bnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRv
d1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElm
IHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVk
IHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAg
IGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICog
KGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkp
LCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zm
c2V0KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRv
d1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRl
eHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSks
IG51bUdseXBocyk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0g
ICAgfQotCi0gICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQotICAgICAgICBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
LSAgICBlbHNlCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNn
Q29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhm
cm9tKSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0Jv
bGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLQotICAgIGlm
IChoYXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
Ci0gICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290
aGluZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBv
cmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOwotI2VuZGlmCi0KLSAgICBpZiAoc2hvdWxk
QW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQotICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Ci19
Ci0KLWJvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKLXsK
LSAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIGlz
U3lzdGVtRm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Ci19Ci0KLS8vIEZJ
WE1FOiBVc2UgdGhpcyBvbiBhbGwgcG9ydHMuCi1jb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9u
dEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplX3QgbGVuZ3RoKSBjb25zdAotewotICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKLSAgICBz
aXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7Ci0gICAgVTE2X05FWFQoY2hhcmFjdGVycywg
YmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLQotICAgIEdseXBo
RGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsKLQotICAgIGlmICghYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobGVu
Z3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVy
R2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxz
ZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVs
bCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQo
aSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250KQot
ICAgICAgICAgICAgY29udGludWU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAg
aWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYm
IGZvbnQtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQotICAgICAgICAgICAgY29udGludWU7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkg
PT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICAgICAgaWYgKGlzQ0pLSWRl
b2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhz
KCkpCi0gICAgICAgICAgICAgICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVu
dGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRP
cmllbnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5
cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsK
LSAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdo
dEZvbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQm
IHVwcmlnaHRGb250ID0gZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAg
ICAgICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVy
KGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1
cHJpZ2h0Rm9udDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb250
ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkKLSAgICAgICAgICAgIHRyaWVkQmFzZUNo
YXJhY3RlckZvbnQgPSB0cnVlOwotCi0gICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0
dXJuIGZvbnQ7Ci0gICAgfQotCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQt
PmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkp
Ci0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICByZXR1
cm4gRm9udDo6c3lzdGVtRmFsbGJhY2soKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmEy
YTM5Y2ExYjE5MDllOTlkMGIwYjNlYWYzYjBhZTYyODcxYTc3OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIkZvbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OnBsYXRmb3Jt
RGVzdHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlMzg0NDdmY2E4NDdjNWZjNTBjZDJjY2EyYjQ1YjdhYjUw
NTg2OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIC9kZXYv
bnVsbApAQCAtMSw3NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwg
MjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcu
aCIKLSNpbXBvcnQgIkZvbnQuaCIKLQotI2ltcG9ydCAiQ29sb3IuaCIKLSNpbXBvcnQgIkZsb2F0
UmVjdC5oIgotI2ltcG9ydCAiRm9udENhY2hlLmgiCi0jaW1wb3J0ICJGb250Q2FzY2FkZS5oIgot
I2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgotI2lt
cG9ydCAiT3BlblR5cGVDRy5oIgotI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0IDxD
b3JlVGV4dC9Db3JlVGV4dC5oPgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJ
Lmg+Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5o
PgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgot
Ci0KLSNpZiBVU0UoQVBQS0lUKQotQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQ
SSkKLS0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShD
RlN0cmluZ1JlZiBhLCBDRlN0cmluZ1JlZiBiKQotewotICAgIHJldHVybiBhICYmIENGU3RyaW5n
Q29tcGFyZShhLCBiLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbzsKLX0KLQotc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBm
b250KQotewotICAgIHJldHVybiBmb250SGFzRWl0aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxl
VmhlYSwga0NURm9udFRhYmxlVk9SRyk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQot
Ym9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRG
YW1pbHlOYW1lKQotewotICAgIGlmICghZm9udEZhbWlseU5hbWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFRpbWVzIE5ldyBSb21hbiBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3Jt
YW50IGVub3VnaCB0byB1c2UuIDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMyNj4KLSAgICAvLyBGSVhN
RSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhl
IGFib3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigi
VGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxU
bykKLSAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWls
eU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0
IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOwotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VB
ZGp1c3RtZW50KENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4g
ZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOwotCi0gICAg
aWYgKCFmYW1pbHlOYW1lIHx8ICFDRlN0cmluZ0dldExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIlRpbWVzIikpCi0gICAgICAgIHx8IGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhlbHZldGljYSIpKQotICAg
ICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIu
SGVsdmV0aWNhIE5ldWVVSSIpKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgbmVlZHNBc2Nl
bnRBZGp1c3RtZW50KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWls
eU5hbWUgJiYgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVz
IikpCi0gICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIo
IkhlbHZldGljYSIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5h
bWUsIENGU1RSKCJDb3VyaWVyIikpKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGlzQWhl
bUZvbnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkKLXsKLSAgICByZXR1cm4gZmFtaWx5TmFtZSAm
JiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJBaGVtIikpOwotfQot
Ci1ib29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykK
LXsKLSAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxl
cyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmICghdGFibGVU
YWdzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFy
cmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAw
OyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewotICAgICAgICBhdXRvIHRhZyA9IHN0YXRp
Y19jYXN0PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOwotICAgICAgICBpZiAo
dGFnID09IHRhYmxlVGFnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9u
dCwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpCi17Ci0gICAgYXV0byB0
YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RG
b250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRh
YmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1U
YWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRU
YWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRh
ZzEgfHwgdGFnID09IHRhYmxlVGFnMikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAv
IDI0LjBmKSA6IDAuZjsKLSNlbHNlCi0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSNlbmRpZgotCi0gICAgdW5z
aWduZWQgdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuZm9u
dCgpKTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAg
Q0dGbG9hdCBjYXBIZWlnaHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBIZWlnaHQobV9wbGF0
Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBsaW5lR2FwID0gcG9pbnRTaXplID8g
Q1RGb250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLSAgICBDR0Zsb2F0
IGFzY2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5mb250
KCkpIDogMDsKLSAgICBDR0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXREZXNj
ZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotCi0gICAgLy8gVGhlIE9wZW4gRm9udCBG
b3JtYXQgZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dz
OgotICAgIC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8y
LnNUeXBvQXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBh
cyBhIHZhbHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKLSAgICAv
LyBPbiBPUyBYLCB3ZSBvbmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1wb3J0YW50IGNhc2Ug
b2YgZm9udHMgd2l0aCBhIE1BVEggdGFibGUuCi0gICAgaWYgKGZvbnRIYXNUYWJsZShtX3BsYXRm
b3JtRGF0YS5jdEZvbnQoKSwga0NURm9udFRhYmxlTUFUSCkpIHsKLSAgICAgICAgc2hvcnQgdHlw
b0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwOwotICAgICAgICBpZiAoT3BlblR5cGU6
OnRyeUdldFR5cG9NZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlwb0FzY2VudCwgdHlw
b0Rlc2NlbnQsIHR5cG9MaW5lR2FwKSkgewotICAgICAgICAgICAgYXNjZW50ID0gc2NhbGVFbVRv
VW5pdHModHlwb0FzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBk
ZXNjZW50ID0gLXNjYWxlRW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50
U2l6ZTsKLSAgICAgICAgICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0eXBvTGluZUdhcCwg
dW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGZh
bWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSkpOwotCi0gICAgLy8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiByZW5kZXJpbmcgd2l0
aCBBaGVtIGJlY2F1c2UgbWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCi0gICAgaWYgKGlzQWhlbUZv
bnQoZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIG1fYWxsb3dzQW50aWFsaWFzaW5nID0gZmFs
c2U7Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgVGltZXMs
IEhlbHZldGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUKLSAgICAvLyB2ZXJ0
aWNhbCBtZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMgdGhhdCBhcmUgdGhl
IGRlIGZhY3RvCi0gICAgLy8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFkanVzdG1lbnQgb2Yg
MjAlIGlzIHRvbyBiaWcgYW5kIGlzCi0gICAgLy8gaW5jb3JyZWN0bHkgYWRkZWQgdG8gbGluZSBz
cGFjaW5nLCBzbyB3ZSB1c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIGFk
ZCBpdCB0byB0aGUgYXNjZW50LgotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsICYm
IG5lZWRzQXNjZW50QWRqdXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgYXNjZW50
ICs9IHN0ZDo6cm91bmQoKGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOwotI2VuZGlmCi0KLSAg
ICAvLyBDb21wdXRlIGxpbmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBh
cmUgYXBwbGllZC4KLSAgICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYoYXNjZW50KSArIGxy
b3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtl
ZCB0ZXh0IHVuZGVybGluZXMuCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAg
aWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1lICYmIENGU3RyaW5n
SGFzUHJlZml4KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIpKSkgewotICAgICAg
ICBsaW5lR2FwIC09IDMgLSBkZXNjZW50OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0j
ZW5kaWYKLSAgICAKLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0g
ICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0
Zm9ybURhdGEuY3RGb250KCkpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBDR0Zs
b2F0IGFkanVzdG1lbnQgPSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkgPyBjZWlsKChhc2NlbnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRqdXN0bWVudCkgOiAw
OwotCi0gICAgbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOwotICAgIGxpbmVTcGFjaW5nID0gY2Vp
bChhc2NlbnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5lR2FwOwotICAgIGFz
Y2VudCA9IGNlaWxmKGFzY2VudCArIGFkanVzdG1lbnQpOwotICAgIGRlc2NlbnQgPSBjZWlsZihk
ZXNjZW50KTsKLQotICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNo
b3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLSNlbmRpZgotCi0gICAg
Q0dGbG9hdCB4SGVpZ2h0ID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0g
ICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlv
bjo6SG9yaXpvbnRhbCkgewotICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJh
Y3RlciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUg
YmFzZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWln
aHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3Zl
IHRoZSBiYXNlbGluZS4KLSAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFj
dGVyKCd4Jyk7Ci0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIHhIZWln
aHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZvbnRHZXRYSGVpZ2h0
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeEhl
aWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0cmljcygpLnhIZWln
aHQoKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJF
bSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRy
aWNzLnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQo
Y2FwSGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAg
bV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5l
UG9zaXRpb24oLUNURm9udEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNzKENURm9udEdldFVu
ZGVybGluZVRoaWNrbmVzcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLX0KLQotdm9pZCBGb250
OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAg
ICBtX21heENoYXJXaWR0aCA9IDA7Ci0KLSAgICBhdXRvIG9zMlRhYmxlID0gYWRvcHRDRihDVEZv
bnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVPUzIsIGtDVEZv
bnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRM
ZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKLSAgICAgICAgY29uc3QgVUludDgqIG9zMiA9
IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwotICAgICAgICBTSW50MTYgb3MyQXZn
Q2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0
aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1Bl
ckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIGF1dG8gaGVhZFRh
YmxlID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RG
b250VGFibGVIZWFkLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoaGVh
ZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7Ci0gICAg
ICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkp
OwotICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwotICAg
ICAgICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOwotICAgICAgICBT
SW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOwotICAgICAgICBTSW50MTYg
eE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOwotICAgICAgICBmbG9hdCBkaWZmID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1w
bGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhl
eSBhcmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLXZvaWQgRm9u
dDo6cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBv
cnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMs
IFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAm
JiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCi0gICAgR2x5cGggZ2x5cGggPSBnbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmICghZ2x5cGgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7Ci0gICAgY2FzZSBGb250
VmFyaWFudENhcHM6OlNtYWxsOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4g
Z2x5cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlh
bnRDYXBzOjpQZXRpdGU6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9y
dGVkQnlQZXRpdGVDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5
cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpBbGxTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6QWxsUGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5QWxsUGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+
IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBs
aXN0ZWQgYWJvdmUuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKGNoYXJhY3Rlcik7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0j
ZW5kaWYKLX0KLQotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8
fCBQTEFURk9STShNQUMpCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxD
YXBzT3BlblR5cGVEaWN0aW9uYXJ5KENGU3RyaW5nUmVmIGtleSwgaW50IHJhd1ZhbHVlKQotewot
ICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gdmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOwotICAg
IENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRP
cGVuVHlwZUZlYXR1cmVWYWx1ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2
YWx1ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fw
c1RydWVUeXBlRGljdGlvbmFyeShpbnQgcmF3S2V5LCBpbnQgcmF3VmFsdWUpCi17Ci0gICAgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiBrZXkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdLZXkpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5
c1tdID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5Lmdl
dCgpLCB2YWx1ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5
cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIHZvaWQgdW5pb25CaXRWZWN0b3JzKEJpdFZlY3Rv
ciYgcmVzdWx0LCBDRkJpdFZlY3RvclJlZiBzb3VyY2UpCi17Ci0gICAgQ0ZJbmRleCBsZW5ndGgg
PSBDRkJpdFZlY3RvckdldENvdW50KHNvdXJjZSk7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUobGVu
Z3RoKTsKLSAgICBDRkluZGV4IG1pbiA9IDA7Ci0gICAgd2hpbGUgKG1pbiA8IGxlbmd0aCkgewot
ICAgICAgICBDRkluZGV4IG5leHRJbmRleCA9IENGQml0VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0
KHNvdXJjZSwgQ0ZSYW5nZU1ha2UobWluLCBsZW5ndGggLSBtaW4pLCAxKTsKLSAgICAgICAgaWYg
KG5leHRJbmRleCA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBy
ZXN1bHQuc2V0KG5leHRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIG1pbiA9IG5leHRJbmRleCArIDE7
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU3RyaW5n
UmVmIGZlYXR1cmUsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBS
ZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBo
Q292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShmZWF0
dXJlLCAxKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQo
KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGluamVjdFRydWVUeXBlQ292ZXJhZ2UoaW50IHR5cGUsIGlu
dCBzZWxlY3RvciwgQ1RGb250UmVmIGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQotewotICAgIFJl
dGFpblB0cjxDRkJpdFZlY3RvclJlZj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhD
b3ZlcmFnZUZvckZlYXR1cmUoZm9udCwgc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUs
IHNlbGVjdG9yKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5n
ZXQoKSk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFs
bENhcHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcykg
ewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0g
ICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRh
KCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAg
ICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxD
YXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNt
YWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlT
bWFsbENhcHMudmFsdWUoKTsKLX0KLQotY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBw
b3J0ZWRCeUFsbFNtYWxsQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMgPSBCaXRWZWN0b3IoKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigi
c21jcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFs
bENhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMy
c2MiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VU
eXBlLCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwg
bV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0
VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVj
dG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9y
dGVkQnlQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQ
ZXRpdGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzID0gQml0
VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwg
cGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1
ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xv
d2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5
cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYg
Rm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5U
eXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0T3BlblR5
cGVDb3ZlcmFnZShDRlNUUigiYzJwYyIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhz
U3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlw
ZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBw
bGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZh
bHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBlckNhc2VUeXBlLCBr
VXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5
cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4g
bV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKTsKLX0KLSNlbmRpZgotCi1z
dGF0aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2YXRpdmVGb250KENURm9udFJlZiBmb250LCBm
bG9hdCBzaXplLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIENURm9udFN5bWJvbGljVHJh
aXRzIGZvbnRUcmFpdHMsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMp
Ci17Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChz
eW50aGV0aWNCb2xkKQotICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7Ci0g
ICAgaWYgKHN5bnRoZXRpY0l0YWxpYykKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRh
bGljVHJhaXQ7Ci0KLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0g
Q1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7Ci0KLSAgICBib29sIHVzZWRTeW50aGV0aWNC
b2xkID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFp
dHMgJiBrQ1RGb250VHJhaXRCb2xkKTsKLSAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0g
KGZvbnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAm
IGtDVEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0
YShmb250LCBzaXplLCB1c2VkU3ludGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9y
aWVudGF0aW9uKTsKLQotICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNPcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVm
IGZlYXR1cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUs
IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZl
YXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc1RydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKLXsKLSAgICBy
ZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBl
SWRlbnRpZmllcktleSkgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlv
bmFsPENGU3RyaW5nUmVmPiBvcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUp
Ci17Ci0gICAgQVNTRVJUKGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKLSAgICBDRlN0cmlu
Z1JlZiB0YWcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgIGludCByYXdWYWx1ZTsK
LSAgICBDRk51bWJlclJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rp
b25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpKTsKLSAg
ICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmF3VmFsdWUpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAg
cmV0dXJuIHJhd1ZhbHVlID8gT3B0aW9uYWw8Q0ZTdHJpbmdSZWY+KHRhZykgOiBXVEY6Om51bGxv
cHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpwYWlyPGludCwgaW50PiB0cnVlVHlwZUZlYXR1
cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0
dXJlKGZlYXR1cmUpKTsKLSAgICBpbnQgcmF3VHlwZTsKLSAgICBDRk51bWJlclJlZiB0eXBlID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtD
VEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51
bWJlckdldFZhbHVlKHR5cGUsIGtDRk51bWJlckludFR5cGUsICZyYXdUeXBlKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGludCByYXdTZWxlY3RvcjsKLSAgICBD
Rk51bWJlclJlZiBzZWxlY3RvciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkp
OwotICAgIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmcmF3U2VsZWN0b3IpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhd1R5cGUsIHJhd1NlbGVjdG9yKTsKLX0KLQot
c3RhdGljIGlubGluZSBDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1
cmUoaW50IGtleSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IGZlYXR1cmVzID0gYWRvcHRDRihDVEZvbnRDb3B5RmVhdHVyZXMoZm9udCkpOwotICAgIENGSW5k
ZXggZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBm
b3IgKENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAgICAgICBDRkRp
Y3Rpb25hcnlSZWYgZmVhdHVyZVR5cGUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENG
QXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgQ0ZOdW1i
ZXJSZWYgZmVhdHVyZUtleSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwot
ICAgICAgICBpZiAoIWZlYXR1cmVLZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aW50IHJhd0ZlYXR1cmVLZXk7Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUoZmVhdHVyZUtleSwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd0ZlYXR1cmVLZXkpOwotICAgICAgICBpZiAocmF3RmVhdHVy
ZUtleSAhPSBrZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRkFycmF5UmVm
IGZlYXR1cmVTZWxlY3RvcnMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlU2VsZWN0b3JzS2V5KSk7Ci0g
ICAgICAgIGlmICghZmVhdHVyZVNlbGVjdG9ycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBDRkluZGV4IHNlbGVjdG9yc0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVTZWxl
Y3RvcnMpOwotICAgICAgICBmb3IgKENGSW5kZXggaiA9IDA7IGogPCBzZWxlY3RvcnNDb3VudDsg
KytqKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVNlbGVjdG9yID0gc3Rh
dGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVT
ZWxlY3RvcnMsIGopKTsKLSAgICAgICAgICAgIENGTnVtYmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRp
Y19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3Is
IGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JEZWZhdWx0S2V5KSk7Ci0gICAgICAgICAgICBpZiAoIWlz
RGVmYXVsdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCByYXdJ
c0RlZmF1bHQ7Ci0gICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKGlzRGVmYXVsdCwga0NGTnVt
YmVySW50VHlwZSwgJnJhd0lzRGVmYXVsdCk7Ci0gICAgICAgICAgICBpZiAoIXJhd0lzRGVmYXVs
dCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHJlbW92ZWRGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRS
ZWYgZm9udCkKLXsKLSAgICBib29sIGlzT3BlblR5cGUgPSBpc09wZW5UeXBlRmVhdHVyZShmZWF0
dXJlKTsKLSAgICBib29sIGlzVHJ1ZVR5cGUgPSBpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsK
LSAgICBpZiAoIWlzT3BlblR5cGUgJiYgIWlzVHJ1ZVR5cGUpCi0gICAgICAgIHJldHVybiBmZWF0
dXJlOyAvLyBXZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgZm9udCBmb3JtYXQuCi0gICAgUmV0YWlu
UHRyPENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgaWYg
KGlzT3BlblR5cGUpIHsKLSAgICAgICAgYXV0byBmZWF0dXJlVGFnID0gb3BlblR5cGVGZWF0dXJl
KGZlYXR1cmUpOwotICAgICAgICBpZiAoZmVhdHVyZVRhZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFn
LnZhbHVlKCksIENGU1RSKCJzbWNwIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVU
YWcudmFsdWUoKSwgQ0ZTVFIoImMyc2MiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVy
ZVRhZy52YWx1ZSgpLCBDRlNUUigicGNhcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0
dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnBjIikpKSkgewotICAgICAgICAgICAgaW50IHJhd1pl
cm8gPSAwOwotICAgICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRD
RihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3WmVybykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBmZWF0dXJlVGFnLnZhbHVlKCkpOwotICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVG
ZWF0dXJlVmFsdWUsIHplcm8uZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VGFnLCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VGFnKSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtD
VEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KGlzVHJ1ZVR5cGUpIHsKLSAgICAgICAgYXV0byB0cnVlVHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5
cGVGZWF0dXJlKGZlYXR1cmUpOwotICAgICAgICBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJz
dCA9PSBrTG93ZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xv
d2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09
IGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXks
IENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBk
ZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQot
ICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0Lmdl
dCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtVcHBlckNhc2VU
eXBlICYmICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0
ZUNhcHNTZWxlY3RvcikpIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAg
ICAgICAgaWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZv
clRydWVUeXBlRmVhdHVyZShrVXBwZXJDYXNlVHlwZSwgZm9udCkpCi0gICAgICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9y
SWRlbnRpZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0
dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVh
dHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RG
b250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5
LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRl
bnRpZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXN0YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6
YWJsZUZlYXR1cmVzKENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBmZWF0dXJlcyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0
dHJpYnV0ZShmb250LCBrQ1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlKSkpOwotICAgIGlm
ICghZmVhdHVyZXMpCi0gICAgICAgIHJldHVybiBmb250OwotICAgIENGSW5kZXggZmVhdHVyZUNv
dW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZN
dXRhYmxlQXJyYXlSZWY+IG5ld0ZlYXR1cmVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmZWF0dXJlQ291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFj
a3MpKTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewot
ICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFy
eVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOwotICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUobmV3RmVhdHVyZXMuZ2V0KCksIHJlbW92ZWRGZWF0dXJlKGZl
YXR1cmUsIGZvbnQpLmdldCgpKTsKLSAgICB9Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NU
Rm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9
IHsgbmV3RmVhdHVyZXMuZ2V0KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBh
dHRyaWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAg
UmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENU
Rm9udEdldFNpemUoZm9udCksIG51bGxwdHIsIG5ld0Rlc2NyaXB0b3IuZ2V0KCkpKTsKLX0KLQot
UmVmUHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVz
KCkgY29uc3QKLXsKLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAg
IENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9u
dCA9IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMobV9wbGF0Zm9ybURh
dGEuZm9udCgpKTsKLSAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoY3RGb250LmdldCgp
LCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRm
b3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUo
KSk7Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29u
c3QgRm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3Bs
YXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBm
b250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBh
ZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQo
KSwgc2l6ZSwgbnVsbHB0cikpOwotCi0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KHNj
YWxlZEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCksIGZvbnRU
cmFpdHMsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpKTsKLX0KLQotdm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25l
ZCBiZWdpbm5pbmdTdHJpbmdJbmRleCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVz
U2hhcGluZywgY29uc3QgQXRvbVN0cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFRleHRE
aXJlY3Rpb24gdGV4dERpcmVjdGlvbikgY29uc3QKLXsKLSAgICBVTlVTRURfUEFSQU0ocmVxdWly
ZXNTaGFwaW5nKTsKLQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgR2x5cGhCdWZmZXIgaW5pdGlh
bCBhZHZhbmNlLgotI2lmIFVTRShDVEZPTlRTSEFQRUdMWVBIUykKLSAgICBhdXRvIGhhbmRsZXIg
PSBeKENGUmFuZ2UgcmFuZ2UsIENHR2x5cGgqKiBuZXdHbHlwaHNQb2ludGVyLCBDR1NpemUqKiBu
ZXdBZHZhbmNlc1BvaW50ZXIsIENHUG9pbnQqKiBuZXdPZmZzZXRzUG9pbnRlciwgQ0ZJbmRleCoq
IG5ld0luZGljZXNQb2ludGVyKSB7Ci0gICAgICAgIHJhbmdlLmxvY2F0aW9uID0gc3RkOjptaW4o
c3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19jYXN0PENGSW5kZXg+KDApKSwgc3RhdGlj
X2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChyYW5nZS5s
ZW5ndGggPCAwKSB7Ci0gICAgICAgICAgICByYW5nZS5sZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5s
b2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7Ci0gICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHJh
bmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOwotICAgICAgICAgICAgZ2x5cGhCdWZmZXIucmVt
b3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5p
bmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgdGhpcyk7Ci0KLSAg
ICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5
cGhJbmRleCk7Ci0gICAgICAgICpuZXdBZHZhbmNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICAgICAgKm5ld09mZnNldHNQb2ludGVyID0g
Z2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICAgICAgKm5ld0lu
ZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBo
SW5kZXgpOwotICAgIH07Ci0KLSAgICBhdXRvIHN1YnN0cmluZyA9IHRleHQuc3Vic3RyaW5nKGJl
Z2lubmluZ1N0cmluZ0luZGV4KTsKLSAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN1
YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBhdXRvIGxvY2FsZVN0cmluZyA9
IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGxvY2Fs
ZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0
aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KLSAgICAgICAgfCAoZW5h
YmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKLSAgICAgICAgfCAodGV4
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVm
dCA6IDApOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKLSAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0
c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4
OwotCi0gICAgQ1RGb250U2hhcGVHbHlwaHMoCi0gICAgICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9u
dCgpLAotICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCksCi0g
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVn
aW5uaW5nR2x5cGhJbmRleCkpLAotICAgICAgICByZWludGVycHJldF9jYXN0PENHUG9pbnQqPihn
bHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAgICAgZ2x5cGhC
dWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpLAotICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNvbnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkp
LAotICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4LAotICAg
ICAgICBvcHRpb25zLAotICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0KCksCi0gICAgICAgIGhhbmRs
ZXIpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAt
IGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKLSAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0lu
U3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9IGJlZ2lubmluZ1N0cmluZ0luZGV4Owot
Ci0jZWxzZQotCi0gICAgVU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKLSAgICBV
TlVTRURfUEFSQU0obG9jYWxlKTsKLSAgICBVTlVTRURfUEFSQU0odGV4dCk7Ci0KLSAgICAvLyBD
VEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0
aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3JkZXIuCi0gICAgLy8gVGVtcG9yYXJpbHkg
cHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFj
ayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgotICAgIC8vIHRoZSBjYWxsIGlzIGRvbmUuCi0gICAg
Ly8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7
IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGNodW5rIG9mIGl0LgotICAgIC8vIFdp
ZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtzIG91dCBpbiBsb2dpY2FsIG9yZGVyLCBz
byB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJpYW50LgotICAgIC8vIEV2ZW50dWFsbHks
IEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkgd2lsbCByZXZlcnNlIHRoZSB3aG9sZSBi
dWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKLSAgICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1
dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1
ZmZlci4KLSAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hhcGVHbHlwaHMoKSBhY2Nl
cHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJucyBpdCBpbiBwaHlzaWNh
bAotICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJldmVyc2UoKSBpbiB0aGlz
IGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgotICAgIC8vIENURm9udFNoYXBl
R2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KLSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGly
ZWN0aW9uOjpSVEwpCi0gICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJ
bmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0KLSAgICBD
VEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRU
cmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFw
aW5nOwotICAgIENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLCByZWludGVycHJldF9jYXN0
PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5
cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwgb3B0aW9ucyk7Ci0jZW5kaWYK
LQotICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRo
ZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KLSAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpSVEwpCi0gICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5n
R2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci19
Ci0KLXN0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51bWJlclJlZiBudW1iZXIpCi17Ci0gICAg
aW50IHJlc3VsdCA9IDA7Ci0gICAgaWYgKG51bWJlcikKLSAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQotewotICAgIENURm9udFJlZiBjdEZv
bnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7Ci0gICAgQVNTRVJUKGN0Rm9udCk7Ci0KLSAgICAv
LyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9w
cm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRj
aC4KLSAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9u
byBhcyBmaXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgotICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3Qg
dHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBwS2l0
IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBTcGVjaWFs
IGNhc2UgTW9ub3R5cGVDb3JzaXZhCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxl
bS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQg
cGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNp
dmEgYXMgZml4ZWQgcGl0Y2guCi0KLSAgICBhdXRvIGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5RnVsbE5hbWUoY3RGb250KSk7Ci0gICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZv
bnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKLQotICAgIGludCBmaXhlZFBpdGNoID0gZXh0cmFj
dE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnRDb3B5QXR0cmli
dXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkp
KS5nZXQoKSk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChDVEZvbnRHZXRTeW1ib2xpY1Ry
YWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8fCBmaXhlZFBpdGNoIHx8IChj
YXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIp
KSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdv
dGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigi
TW9ub3R5cGVDb3JzaXZhIikpKTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChm
YW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZT
VFIoIkNvdXJpZXIgTmV3IikpKSB7Ci0gICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5l
dyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNl
IG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25l
IChzZWUgcmRhcjovLzYyNjk3ODMpLgotICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFs
c2U7Ci0gICAgfQotI2VuZGlmCi19Ci0KLUZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0Zv
ckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsK
LSAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0
Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9u
dE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAwLCAxKTsKLSAgICBib3VuZGluZ0JveC5z
ZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOwotICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQp
Ci0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi1mbG9h
dCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAg
Q0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNp
emUoKSkgewotICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKLSAgICAgICAgQ1RGb250T3Jp
ZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhG
YWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBrQ1RGb250T3JpZW50YXRp
b25WZXJ0aWNhbDsKLSNpZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09SS0FST1VORCkKLSAgICAg
ICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRp
YWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFz
aW5nU3R5bGVVbmZpbHRlcmVkOwotICAgICAgICBpZiAoIUNURm9udElzQXBwbGVDb2xvckVtb2pp
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9u
cygpKQotICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1tZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0
eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgc3R5bGUsICZnbHlwaCwg
JmFkdmFuY2UsIDEpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgewotICAgICAgICAg
ICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIG9y
aWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0KLQotUGF0aCBG
b250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBhdXRv
IHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKHBsYXRmb3JtRGF0YSgp
LmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOwotICAgIGF1dG8gc3ludGhldGljQm9sZE9mZnNl
dCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9m
ZnNldCkgewotICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFi
bGUoKSk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVz
dWx0LmdldCgpKTsKLSAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3Jt
TWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOwotICAgICAgICBDR1BhdGhB
ZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9OwotICAgIH0KLSAgICByZXR1cm4geyBhZG9w
dENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpIH07Ci19Ci0KLWJvb2wg
Rm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlciwgT3B0aW9u
YWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAotewotICAgIGlmICh2YXJpYXRpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFVuaUNoYXIgY29kZVVuaXRzWzJdOwotICAgIENHR2x5
cGggZ2x5cGhzWzJdOwotICAgIENGSW5kZXggY291bnQgPSAwOwotICAgIFUxNl9BUFBFTkRfVU5T
QUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7Ci0gICAgcmV0dXJuIENURm9udEdldEds
eXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGNvZGVVbml0cywgZ2x5
cGhzLCBjb3VudCk7Ci19Ci0KLWJvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJ
Y29ucygpIGNvbnN0Ci17Ci0gICAgYXV0byBwbGF0Zm9ybUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5m
b250KCk7Ci0gICAgaWYgKCFwbGF0Zm9ybUZvbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMgdG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRl
c3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwg
YmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KLSAgICBVbmlDaGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIg
PSAnYSc7Ci0gICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5cGg7Ci0gICAgaWYgKENURm9udEdldEds
eXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAmbG93ZXJjYXNlQUNoYXJhY3RlciwgJmxv
d2VyY2FzZUFHbHlwaCwgMSkpIHsKLSAgICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KENURm9udEdl
dEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25E
ZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRyLCAxKSkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYXV0byBzdXBwb3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRD
RihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3JtRm9udCkpOwotICAgIGlmIChDRkNoYXJh
Y3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMSkgfHwg
Q0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCks
IDIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGlzIGVuY29tcGFzc2VzIGFs
bCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0ZXJzLgotICAgIGNvbnN0ZXhwciBVbmlD
aGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOwotICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxh
c3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7Ci0gICAgY29uc3RleHByIGF1dG8gbnVtYmVyT2ZDaGFy
YWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVzdCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0
ICsgMTsKLQotICAgIFZlY3RvcjxDR0dseXBoPiBnbHlwaHM7Ci0gICAgZ2x5cGhzLmZpbGwoMCwg
bnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKLSAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0
ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdpbigpLCBDRlJhbmdlTWFrZShmaXJzdENo
YXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KSk7Ci0gICAgZ2x5cGhzLnJl
bW92ZUFsbCgwKTsKLQotICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBWZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1JlY3RzOwotICAgIGJvdW5kaW5n
UmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICBDVEZvbnRHZXRCb3Vu
ZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVs
dCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMuYmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1
dG8mIHJlY3QpIHsKLSAgICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5KHJlY3QpOwotICAgIH0p
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2Eu
bW0KaW5kZXggZGIxYjRmZjRhMTZhNDIzZmU4NjNjZTczYjU4YzY2MjhjMWIwOGU2NC4uYmJlMjk3
YzQ3MzE2YzNiYTk1NTJiOWVmNzNkZTUxMGFiOTljYjk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbQpAQCAtNDQsMjQgKzQ0LDYgQEAgYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250UmVm
IGZvbnQpCiAjZW5kaWYKIH0KIAotLy8gVGhlc2UgQ29yZVRleHQgVGV4dCBTcGFjaW5nIGZlYXR1
cmUgc2VsZWN0b3JzIGFyZSBub3QgZGVmaW5lZCBpbiBDb3JlVGV4dC4KLWVudW0gVGV4dFNwYWNp
bmdDVEZlYXR1cmVTZWxlY3RvciB7IFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsLCBUZXh0U3BhY2lu
Z0Z1bGxXaWR0aCwgVGV4dFNwYWNpbmdIYWxmV2lkdGgsIFRleHRTcGFjaW5nVGhpcmRXaWR0aCwg
VGV4dFNwYWNpbmdRdWFydGVyV2lkdGggfTsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdp
ZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdN
b2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkK
LXsKLSAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwotICAgIG1fZm9udCA9IGZvbnQ7Ci0gICAg
bV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpICYga0NU
Rm9udFRyYWl0Q29sb3JHbHlwaHM7Ci0gICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJDb3JlOjppc1N5
c3RlbUZvbnQobV9mb250LmdldCgpKTsKLSAgICBhdXRvIHZhcmlhdGlvbnMgPSBhZG9wdENGKHN0
YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBrQ1RG
b250VmFyaWF0aW9uQXR0cmlidXRlKSkpOwotICAgIG1faGFzVmFyaWF0aW9ucyA9IHZhcmlhdGlv
bnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQoKSk7Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xvckVtb2pp
KG1fZm9udC5nZXQoKSk7Ci0jZW5kaWYKLX0KLQogdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6
aGFzaCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8dWludHB0
cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKQEAgLTk2LDIw
ICs3OCwyMCBAQCBpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVj
dG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKIHsKICAgICBzd2l0Y2godmFyaWFudCkgewog
ICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOgotICAgICAgICByZXR1cm4g
VGV4dFNwYWNpbmdQcm9wb3J0aW9uYWw7CisgICAgICAgIHJldHVybiBrUHJvcG9ydGlvbmFsVGV4
dFNlbGVjdG9yOwogCiAgICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpIYWxmV2lkdGg6Ci0gICAg
ICAgIHJldHVybiBUZXh0U3BhY2luZ0hhbGZXaWR0aDsKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lk
dGhUZXh0U2VsZWN0b3I7CiAKICAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6
Ci0gICAgICAgIHJldHVybiBUZXh0U3BhY2luZ1RoaXJkV2lkdGg7CisgICAgICAgIHJldHVybiBr
VGhpcmRXaWR0aFRleHRTZWxlY3RvcjsKIAogICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVh
cnRlcldpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdRdWFydGVyV2lkdGg7CisgICAg
ICAgIHJldHVybiBrUXVhcnRlcldpZHRoVGV4dFNlbGVjdG9yOwogICAgIH0KIAogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbDsKKyAg
ICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvcjsKIH0KIAogc3RhdGljIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFy
eSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCmluZGV4IGQ4MTU0OGEzMGI5ZDIy
Y2FmZjhhYTc4NzBkYWI0YmVmYjIzNGI5MDQuLjhhZWMyZWEzZDRmMTc1OWRmN2NlNjQyMzZjMzJi
NjgxNTY0NGRmNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwCkBAIC01Myw5
ICs1Myw2IEBAIFdURl9XRUFLX0xJTktfRk9SQ0VfSU1QT1JUKHdlYm06OnN3YXApOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGtDTVZpZGVvQ29k
ZWNUeXBlX1ZQOSBpcyBhZGRlZCB0byBDTUZvcm1hdERlc2NyaXB0aW9uLmgKLWNvbnN0ZXhwciBD
TVZpZGVvQ29kZWNUeXBlIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSB7ICd2cDA5JyB9OwotCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCiBzdGF0aWMgYm9vbCBpc1dlYm1QYXJzZXJBdmFpbGFibGUoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q2FzY2FkZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGU0MGQ0MGMzMDUxMjc2ODA5YjY1Mzk0
OWEwZjcxZTNjMDM2MGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSwzMTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAq
ICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNi0yMDExLCAyMDE2IEFwcGxlIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2ltcG9ydCAiY29u
ZmlnLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgorCisjaW1wb3J0ICJDb21wbGV4VGV4dENv
bnRyb2xsZXIuaCIKKyNpbXBvcnQgIkRhc2hBcnJheS5oIgorI2ltcG9ydCAiRm9udC5oIgorI2lt
cG9ydCAiR2x5cGhCdWZmZXIuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9y
dCAiTGF5b3V0UmVjdC5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEku
aD4KKy8qI2lmIFVTRShBUFBLSVQpCisjaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CisjZW5kaWYq
LworI2ltcG9ydCA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBDb25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdE
aXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBz
dGlsbCBpbXBhY3RzIHRleHQKKy8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rp
b24gdXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGlu
ZyIgdGVybWlub2xvZ3kuCitib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5n
QXZhaWxhYmxlKCkKK3sKKyNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09U
SElOR19ESVNBQkxFRCkKKyAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJs
ZWQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2VGbGFnLCBbJl0gKCkgeworICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJs
ZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7CisgICAgfSk7
CisgICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKKyNlbGlmIFBMQVRGT1JN
KE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlm
Cit9CisKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9y
PENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgo
Y29udGV4dCkpOworICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENHU2l6ZSBhZHZhbmNlID0g
Q0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBtYXRyaXgpOworICAg
ICAgICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFkdmFuY2Uud2lkdGg7
CisgICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55ICsgYWR2YW5jZS5o
ZWlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJl
c3NFZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIEVOQUJMRShM
RVRURVJQUkVTUykKKyAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKS5jb250YWlu
cyhUZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBz
aG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250
JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25z
dCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBpZiAoIWNvdW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4dCwg
cG9pbnQueCgpLCBwb2ludC55KCkpOworCisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxh
dGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBWZWN0b3I8Q0dQb2ludCwgMjU2
PiBwb3NpdGlvbnMoY291bnQpOworICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEsIDAs
IDAsIDApOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250ZXh0
R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVuTWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRyYW5z
Zm9ybSk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4LCBj
b250ZXh0KTsKKworICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3Vu
dCk7CisgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRm
b3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CisK
KyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1J
bnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisKKyAgICAgICAgQ0dQb2lu
dCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250LmZvbnRN
ZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRy
aWNzKCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7CisgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBs
eUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwor
ICAgICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENH
UG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRy
YW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CisgICAgICAgICAgICBwb3NpdGlvbi54ICs9
IGFkdmFuY2VzW2ldLndpZHRoOworICAgICAgICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNlc1tp
XS5oZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURh
dGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRp
b25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50KTsKKyAgICAgICAgQ1RGb250
RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEo
KSwgY291bnQsIGNvbnRleHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q0dGb250UmVu
ZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKKworICAgIENHQWZmaW5lVHJh
bnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKKyAg
ICBib29sIGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwoY29u
dGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5kKSAm
JiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5mICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAwLmY7
CisgICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNvbnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0VHJh
bnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNmb3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5kKSk7
CisgICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50ZWdy
YWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cygpKTsKKworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhj
Z0NvbnRleHQsIHRydWUpOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOworfQorCit2b2lkIEZvbnRD
YXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKCFwbGF0Zm9ybURhdGEu
c2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0g
dHJ1ZTsKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAo
IWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIHNtb290aGluZ01vZGUgPSBGb250
U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUp
IHsKKyAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDoKKyAgICAgICAgc2hv
dWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250U21v
b3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoKKyAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpT
dWJwaXhlbEFudGlhbGlhc2VkOgorICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKKyAg
ICAgICAgc2hvdWxkQW50aWFsaWFzID0gZmFsc2U7CisgICAgICAgIHNob3VsZFNtb290aEZvbnRz
ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghc2hvdWxkVXNlU21v
b3RoaW5nKCkpCisgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7CisKKyNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGlu
ZyA9IENHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCk7CisgICAgaWYgKHNo
b3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKKyAgICAg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBzaG91bGRTbW9vdGhG
b250cyk7CisjZW5kaWYKKworICAgIGJvb2wgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMgPSBDR0Nv
bnRleHRHZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0KTsKKyAgICBpZiAoc2hvdWxkQW50aWFs
aWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBzaG91bGRBbnRpYWxpYXMpOworCisgICAgYm9vbCB1c2VM
ZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KGNvbnRleHQpOwor
ICAgIFVOVVNFRF9WQVJJQUJMRSh1c2VMZXR0ZXJwcmVzc0VmZmVjdCk7CisgICAgRmxvYXRQb2lu
dCBwb2ludCA9IGFuY2hvclBvaW50OworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YS5pc0NvbG9y
Qml0bWFwRm9udCgpKQorICAgICAgICBtYXRyaXggPSBDVEZvbnRHZXRNYXRyaXgocGxhdGZvcm1E
YXRhLmZvbnQoKSk7CisgICAgbWF0cml4LmIgPSAtbWF0cml4LmI7CisgICAgbWF0cml4LmQgPSAt
bWF0cml4LmQ7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKKyAg
ICAgICAgc3RhdGljIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihzeW50aGV0aWNPYmxpcXVlQW5n
bGUoKSAqIHBpRmxvYXQgLyAxODApOworICAgICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgaWYgKGZv
bnQuaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICAgICAgICAgIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEs
IG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgLW9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBD
R0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgLW9ibGlxdWVTa2V3LCAxLCAwLCAwKSk7CisgICAg
fQorICAgIFNjb3BlZFRleHRNYXRyaXggcmVzdG9yZXIobWF0cml4LCBjZ0NvbnRleHQpOworCisg
ICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKKyAgICBDR0NvbnRleHRTZXRGb250
U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOworCisgICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKKyAgICBmbG9hdCBzaGFkb3dCbHVyOworICAgIENvbG9yIHNoYWRvd0NvbG9y
OworICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0LmdldENU
TSgpOworICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKTsKKyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAhY29udGV4dENUTS5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSB7CisgICAgICAgIEZsb2F0U2l6ZSBob3Jp
em9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscyA9IGNvbnRleHRDVE0ubWFwU2l6ZShGbG9hdFNp
emUoMSwgMCkpOworICAgICAgICBmbG9hdCBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4
ZWxzID0gc3FydGYoaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSAqIGhv
cml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKyBob3Jpem9udGFsVW5pdFNp
emVJbkRldmljZVBpeGVscy5oZWlnaHQoKSAqIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4
ZWxzLmhlaWdodCgpKTsKKyAgICAgICAgaWYgKGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQ
aXhlbHMpIHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2NhbGVkIGRvd24gY29u
dGV4dCB3b24ndCBibG93IHVwIHRoZSBnYXAgYmV0d2VlbiB0aGUgZ2x5cGhzLgorICAgICAgICAg
ICAgc3ludGhldGljQm9sZE9mZnNldCA9IHN0ZDo6bWluKHN5bnRoZXRpY0JvbGRPZmZzZXQsIHN5
bnRoZXRpY0JvbGRPZmZzZXQgLyBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQu
dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9y
LmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENU
TS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7CisgICAgICAgIC8v
IFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cg
c2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KKyAgICAgICAg
Y29udGV4dC5jbGVhclNoYWRvdygpOworICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0
LmZpbGxDb2xvcigpOworICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xv
ci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwor
ICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOworICAgICAgICBm
bG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOworICAg
ICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVu
J3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZl
LgorICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5o
ZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwor
ICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNo
YWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGds
eXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgICAgICBpZiAoc3ludGhl
dGljQm9sZE9mZnNldCkKKyAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQ
b2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9u
dCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxs
Q29sb3IpOworICAgIH0KKworI2lmIEVOQUJMRShMRVRURVJQUkVTUykKKyAgICBpZiAodXNlTGV0
dGVycHJlc3NFZmZlY3QpCisgICAgICAgIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFu
Y2VzKHBvaW50LCBmb250LCBjb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBo
QnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworICAgIGVsc2UKKyNlbmRpZgorICAg
IHsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY2dDb250ZXh0
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMpOworICAgIH0KKworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAg
ICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsgc3ludGhldGlj
Qm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlw
aHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOworCisgICAg
aWYgKGhhc1NpbXBsZVNoYWRvdykKKyAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7CisKKyNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21v
b3RoaW5nKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQs
IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyk7CisjZW5kaWYKKworICAgIGlmIChzaG91
bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKTsK
K30KKworYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQoKSBjb25zdAor
eworICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnQoKTsKKyAgICByZXR1cm4g
aXNTeXN0ZW1Gb250KGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsKK30KKworLy8g
RklYTUU6IFVzZSB0aGlzIG9uIGFsbCBwb3J0cy4KK2NvbnN0IEZvbnQqIEZvbnRDYXNjYWRlOjpm
b250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOworICAg
IHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKKyAgICBVMTZfTkVYVChjaGFyYWN0ZXJz
LCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOworCisgICAgR2x5
cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFz
ZUNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQpOworCisgICAgaWYgKCFiYXNlQ2hhcmFj
dGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChs
ZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEuZm9udDsKKworICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IGZh
bHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2VzQXQoaSkuaXNO
dWxsKCk7ICsraSkgeworICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFsbGJhY2tSYW5nZXNB
dChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICBpZiAoIWZvbnQp
CisgICAgICAgICAgICBjb250aW51ZTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAg
ICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJhY3RlciA8PSAweDA2ZmYg
JiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyNlbmRpZgorICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24o
KSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBpZiAoaXNDSktJ
ZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVydGljYWxHbHlw
aHMoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gJmZvbnQtPmJyb2tlbklkZW9ncmFwaEZvbnQo
KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3Jp
ZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRGb250ID0gZm9udC0+dmVydGljYWxSaWdo
dE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAgIEdseXBoIHZlcnRpY2FsUmlnaHRH
bHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIp
OworICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFzZUNoYXJhY3Rl
ckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ2ZXJ0aWNhbFJp
Z2h0Rm9udDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgRm9u
dCYgdXByaWdodEZvbnQgPSBmb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCk7CisgICAgICAg
ICAgICAgICAgR2x5cGggdXByaWdodEdseXBoID0gdXByaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0
ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRHbHlwaCAhPSBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICBmb250ID0g
JnVwcmlnaHRGb250OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZv
bnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQorICAgICAgICAgICAgdHJpZWRCYXNl
Q2hhcmFjdGVyRm9udCA9IHRydWU7CisKKyAgICAgICAgaWYgKGZvbnQtPmNhblJlbmRlckNvbWJp
bmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gZm9udDsKKyAgICB9CisKKyAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3RlckZvbnQgJiYg
YmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9u
dC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3Ro
KSkKKyAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKKworICAgIHJl
dHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
NjQ3NTVlZWVlZjQ0ZDdiMmYzNDRhZjE4YjQxNTk4MTVkY2UxOTVkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcApA
QCAtMCwwICsxLDc2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNp
bXBvcnQgIkZvbnQuaCIKKworI2ltcG9ydCAiQ29sb3IuaCIKKyNpbXBvcnQgIkZsb2F0UmVjdC5o
IgorI2ltcG9ydCAiRm9udENhY2hlLmgiCisjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgorI2ltcG9y
dCAiRm9udERlc2NyaXB0aW9uLmgiCisjaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgorI2ltcG9ydCAi
T3BlblR5cGVDRy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0IDxDb3JlVGV4
dC9Db3JlVGV4dC5oPgorI2ltcG9ydCA8ZmxvYXQuaD4KKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CisjaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Cisj
aW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+CisjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKENGU3RyaW5nUmVmIGEsIENGU3RyaW5nUmVmIGIpCit7CisgICAgcmV0dXJuIGEgJiYg
Q0ZTdHJpbmdDb21wYXJlKGEsIGIsIGtDRkNvbXBhcmVDYXNlSW5zZW5zaXRpdmUpID09IGtDRkNv
bXBhcmVFcXVhbFRvOworfQorCitzdGF0aWMgYm9vbCBmb250SGFzVmVydGljYWxHbHlwaHMoQ1RG
b250UmVmIGZvbnQpCit7CisgICAgcmV0dXJuIGZvbnRIYXNFaXRoZXJUYWJsZShmb250LCBrQ1RG
b250VGFibGVWaGVhLCBrQ1RGb250VGFibGVWT1JHKTsKK30KKworI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCitib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoQ0ZTdHJpbmdS
ZWYgZm9udEZhbWlseU5hbWUpCit7CisgICAgaWYgKCFmb250RmFtaWx5TmFtZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgLy8gVGltZXMgTmV3IFJvbWFuIGFuZCBBcmlhbCBhcmUgbm90
IHBlcmZvcm1hbnQgZW5vdWdoIHRvIHVzZS4gPHJkYXI6Ly9wcm9ibGVtLzIxMzMzMzI2PgorICAg
IC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4gcmVtb3ZlIHRoaXMgZnVuY3Rpb24g
b25jZSB0aGUgYWJvdmUgYnVnIGlzIGZpeGVkLgorICAgIHJldHVybiAoQ0ZTdHJpbmdDb21wYXJl
KENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBh
cmVFcXVhbFRvKQorICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJBcmlhbCIpLCBm
b250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pOworfQorCitzdGF0aWMgY29u
c3QgZmxvYXQga0xpbmVIZWlnaHRBZGp1c3RtZW50ID0gMC4xNWY7CisKK3N0YXRpYyBib29sIHNo
b3VsZFVzZUFkanVzdG1lbnQoQ1RGb250UmVmIGZvbnQpCit7CisgICAgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShmb250KSk7
CisKKyAgICBpZiAoIWZhbWlseU5hbWUgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKGZhbWlseU5hbWUu
Z2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiVGltZXMiKSkKKyAgICAgICAgfHwg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGVsdmV0aWNh
IikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwg
Q0ZTVFIoIi5IZWx2ZXRpY2EgTmV1ZVVJIikpOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBu
ZWVkc0FzY2VudEFkanVzdG1lbnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkKK3sKKyAgICByZXR1
cm4gZmFtaWx5TmFtZSAmJiAoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNU
UigiVGltZXMiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1l
LCBDRlNUUigiSGVsdmV0aWNhIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZmFtaWx5TmFtZSwgQ0ZTVFIoIkNvdXJpZXIiKSkpOworfQorCisjZW5kaWYKKworc3RhdGljIGJv
b2wgaXNBaGVtRm9udChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQoreworICAgIHJldHVybiBmYW1p
bHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkFoZW0i
KSk7Cit9CisKK2Jvb2wgZm9udEhhc1RhYmxlKENURm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRh
YmxlVGFnKQoreworICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxh
YmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYg
KCF0YWJsZVRhZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDRkluZGV4IG51bVRhYmxl
cyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gdGFn
ID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7CisgICAg
ICAgIGlmICh0YWcgPT0gdGFibGVUYWcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGZvbnRIYXNFaXRoZXJUYWJsZShDVEZvbnRS
ZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZzEsIHVuc2lnbmVkIHRhYmxlVGFnMikKK3sKKyAg
ICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZv
bnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmICghdGFibGVUYWdzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0
Q291bnQodGFibGVUYWdzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRl
eCA8IG51bVRhYmxlczsgKytpbmRleCkgeworICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19jYXN0
PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdldFZh
bHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOworICAgICAgICBpZiAodGFnID09
IHRhYmxlVGFnMSB8fCB0YWcgPT0gdGFibGVUYWcyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGb250OjpwbGF0Zm9ybUluaXQo
KQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gY2VpbGYobV9wbGF0Zm9ybURhdGEu
c2l6ZSgpIC8gMjQuMGYpIDogMC5mOworI2Vsc2UKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQg
PSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOworI2VuZGlmCisK
KyNpZiBQTEFURk9STShXSU4pCisgICAgbV9zY3JpcHRDYWNoZSA9IDA7CisgICAgbV9zY3JpcHRG
b250UHJvcGVydGllcyA9IG51bGxwdHI7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgp
KQorICAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKKyNlbmRpZgorCisgICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuZm9udCgpKTsK
KyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgQ0dGbG9h
dCBjYXBIZWlnaHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9ybURh
dGEuZm9udCgpKSA6IDA7CisgICAgQ0dGbG9hdCBsaW5lR2FwID0gcG9pbnRTaXplID8gQ1RGb250
R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKyAgICBDR0Zsb2F0IGFzY2Vu
dCA9IHBvaW50U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDog
MDsKKyAgICBDR0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXREZXNjZW50KG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworCisgICAgLy8gVGhlIE9wZW4gRm9udCBGb3JtYXQg
ZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgorICAg
IC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8yLnNUeXBv
QXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBhcyBhIHZh
bHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKKyAgICAvLyBPbiBP
UyBYLCB3ZSBvbmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1wb3J0YW50IGNhc2Ugb2YgZm9u
dHMgd2l0aCBhIE1BVEggdGFibGUuCisgICAgaWYgKGZvbnRIYXNUYWJsZShtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwga0NURm9udFRhYmxlTUFUSCkpIHsKKyAgICAgICAgc2hvcnQgdHlwb0FzY2Vu
dCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwOworICAgICAgICBpZiAoT3BlblR5cGU6OnRyeUdl
dFR5cG9NZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlwb0FzY2VudCwgdHlwb0Rlc2Nl
bnQsIHR5cG9MaW5lR2FwKSkgeworICAgICAgICAgICAgYXNjZW50ID0gc2NhbGVFbVRvVW5pdHMo
dHlwb0FzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgICAgICAgICBkZXNjZW50
ID0gLXNjYWxlRW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsK
KyAgICAgICAgICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0eXBvTGluZUdhcCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGZhbWlseU5h
bWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkp
OworCisgICAgLy8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiByZW5kZXJpbmcgd2l0aCBBaGVt
IGJlY2F1c2UgbWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCisgICAgaWYgKGlzQWhlbUZvbnQoZmFt
aWx5TmFtZS5nZXQoKSkpCisgICAgICAgIG1fYWxsb3dzQW50aWFsaWFzaW5nID0gZmFsc2U7CisK
KyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgVGltZXMsIEhlbHZl
dGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUKKyAgICAvLyB2ZXJ0aWNhbCBt
ZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMgdGhhdCBhcmUgdGhlIGRlIGZh
Y3RvCisgICAgLy8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFkanVzdG1lbnQgb2YgMjAlIGlz
IHRvbyBiaWcgYW5kIGlzCisgICAgLy8gaW5jb3JyZWN0bHkgYWRkZWQgdG8gbGluZSBzcGFjaW5n
LCBzbyB3ZSB1c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCisgICAgLy8gYW5kIGFkZCBpdCB0
byB0aGUgYXNjZW50LgorICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsICYmIG5lZWRz
QXNjZW50QWRqdXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgYXNjZW50ICs9IHN0
ZDo6cm91bmQoKGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOworI2VuZGlmCisKKyAgICAvLyBD
b21wdXRlIGxpbmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUgYXBw
bGllZC4KKyAgICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYoYXNjZW50KSArIGxyb3VuZGYo
ZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8v
IEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0ZXh0
IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+CisgICAgaWYgKGRl
c2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1lICYmIENGU3RyaW5nSGFzUHJl
Zml4KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIpKSkgeworICAgICAgICBsaW5l
R2FwIC09IDMgLSBkZXNjZW50OworICAgICAgICBkZXNjZW50ID0gMzsKKyAgICB9CisjZW5kaWYK
KyAgICAKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50
YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAg
IG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9ybURh
dGEuY3RGb250KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDR0Zsb2F0IGFk
anVzdG1lbnQgPSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgPyBj
ZWlsKChhc2NlbnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRqdXN0bWVudCkgOiAwOworCisg
ICAgbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOworICAgIGxpbmVTcGFjaW5nID0gY2VpbChhc2Nl
bnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5lR2FwOworICAgIGFzY2VudCA9
IGNlaWxmKGFzY2VudCArIGFkanVzdG1lbnQpOworICAgIGRlc2NlbnQgPSBjZWlsZihkZXNjZW50
KTsKKworICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKyNlbmRpZgorCisgICAgQ0dGbG9h
dCB4SGVpZ2h0ID0gMDsKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7CisgICAgICAg
IGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9y
aXpvbnRhbCkgeworICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAi
eCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxp
bmUsIGFuZCB3ZSBuZWVkIHRoZQorICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8g
b25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBi
YXNlbGluZS4KKyAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKCd4
Jyk7CisgICAgICAgICAgICBpZiAoeEdseXBoKQorICAgICAgICAgICAgICAgIHhIZWlnaHQgPSAt
Q0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZvbnRHZXRYSGVpZ2h0KG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeEhlaWdodCA9
IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKTsK
KyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNl
dERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2FwSGVp
Z2h0KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7CisgICAgbV9mb250
TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNw
YWNpbmcobGluZVNwYWNpbmcpOworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lUG9zaXRp
b24oLUNURm9udEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNzKENURm9udEdldFVuZGVybGlu
ZVRoaWNrbmVzcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKK30KKwordm9pZCBGb250OjpwbGF0
Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKKyAgICBtX21h
eENoYXJXaWR0aCA9IDA7CisKKyAgICBhdXRvIG9zMlRhYmxlID0gYWRvcHRDRihDVEZvbnRDb3B5
VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVPUzIsIGtDVEZvbnRUYWJs
ZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgo
b3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAgICAgY29uc3QgVUludDgqIG9zMiA9IENGRGF0
YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOworICAgICAgICBTSW50MTYgb3MyQXZnQ2hhcldp
ZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOworICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9IHNj
YWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkp
ICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIH0KKworICAgIGF1dG8gaGVhZFRhYmxlID0g
YWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFi
bGVIZWFkLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoaGVhZFRhYmxl
ICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7CisgICAgICAgIGNv
bnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOworICAg
ICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOworICAgICAgICB1
c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYg
eE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9
IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2Fs
ZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3Jt
RGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9y
bSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUg
bm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK2Jvb2wgRm9udDo6dmFy
aWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9u
dFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyNpZiAoUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIEdseXBo
IGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAoIWdseXBoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewor
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogeworICAgICAgICBhdXRvJiBzdXBwb3J0
ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9y
dGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBj
YXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9
IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVk
LnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0g
Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRl
ZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2Fz
ZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQg
PSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBv
cnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworCisgICAgc3dpdGNoIChmb250VmFy
aWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBG
b250VmFyaWFudENhcHM6OlBldGl0ZToKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21h
bGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRz
IHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorI2VuZGlmCit9CisKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFS
R0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCBy
YXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3
VmFsdWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVz
W10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVl
KQoreworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7Cisg
ICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAg
Q0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVz
W10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaW9uQml0VmVj
dG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQoreworICAgIENG
SW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOworICAgIHJlc3VsdC5l
bnN1cmVTaXplKGxlbmd0aCk7CisgICAgQ0ZJbmRleCBtaW4gPSAwOworICAgIHdoaWxlIChtaW4g
PCBsZW5ndGgpIHsKKyAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZp
cnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7
CisgICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOworICAgICAgICBtaW4gPSBu
ZXh0SW5kZXggKyAxOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3Zl
cmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1
bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENU
Rm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURp
Y3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0
LCBzb3VyY2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdl
KGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3Vs
dCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RG
b250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGlj
dGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVz
dWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVk
QnlTbWFsbENhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJp
dFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiks
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1
ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xv
d2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhz
U3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBo
c1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9u
dDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAoreworICAgIGlmICghbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292
ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVy
YWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFn
ZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURh
dGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Cisg
ICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VT
bWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6
OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBo
c1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0
aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENG
U1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBl
dGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2Vy
Q2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAg
IHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorCitjb25z
dCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgeworICAgICAg
ICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAg
ICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAg
IGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9u
dCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAg
aW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNh
cHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBw
ZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Cit9
CisjZW5kaWYKKworc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZv
bnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3lu
dGhldGljSXRhbGljKQoreworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoc3ludGhldGljQm9sZCkKKyAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250
Qm9sZFRyYWl0OworICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCisgICAgICAgIGZvbnRUcmFpdHMg
fD0ga0NURm9udEl0YWxpY1RyYWl0OworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVk
Rm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOworCisgICAgYm9vbCB1
c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShz
Y2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CisgICAgYm9vbCB1c2VkU3ludGhl
dGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxl
ZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEg
c2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0
aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7CisKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxl
ZEZvbnREYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENG
RGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWlu
c0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlD
b250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1
cmUpCit7CisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZl
YXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKK30KKworc3RhdGlj
IGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFy
eVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7
CisgICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICBp
bnQgcmF3VmFsdWU7CisgICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlKSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NG
TnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOworICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcp
IDogV1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4g
dHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChp
c1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgaW50IHJhd1R5cGU7CisgICAgQ0ZOdW1i
ZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1
ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgYXV0byBz
dWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlw
ZSk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpbnQgcmF3U2Vs
ZWN0b3I7CisgICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rvcklk
ZW50aWZpZXJLZXkpKTsKKyAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nl
c3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxl
Y3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9y
VHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQp
KTsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5n
ZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsK
KyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0
aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7Cisg
ICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpKTsKKyAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGludCByYXdGZWF0dXJlS2V5OworICAgICAgICBDRk51bWJlckdldFZhbHVl
KGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKKyAgICAgICAg
aWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVj
dG9yc0tleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChmZWF0dXJlU2VsZWN0b3JzKTsKKyAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2Vs
ZWN0b3JzQ291bnQ7ICsraikgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVT
ZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJ
bmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7CisgICAgICAgICAgICBDRk51bWJlclJlZiBpc0Rl
ZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOworICAgICAg
ICAgICAgaWYgKCFpc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpbnQgcmF3SXNEZWZhdWx0OworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0Rl
ZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOworICAgICAgICAgICAgaWYg
KCFyYXdJc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGluZSBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVh
dHVyZSwgQ1RGb250UmVmIGZvbnQpCit7CisgICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlw
ZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1
cmUoZmVhdHVyZSk7CisgICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQorICAgICAg
ICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0
LgorICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIGlmIChpc09wZW5UeXBlKSB7CisgICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9w
ZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1
YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQorICAgICAgICAgICAgfHwgQ0ZF
cXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCisgICAgICAgICAgICB8fCBD
RkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKKyAgICAgICAgICAgIHx8
IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKKyAgICAgICAg
ICAgIGludCByYXdaZXJvID0gMDsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4g
emVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVt
YmVySW50VHlwZSwgJnJhd1plcm8pKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1
ZSgpKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9w
ZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9w
ZW5UeXBlRmVhdHVyZVRhZykpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVz
dWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChpc1RydWVUeXBlKSB7CisgICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJl
UGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKHRydWVUeXBlRmVh
dHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIu
c2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQ
YWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJ
ZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVs
dFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VU
eXBlLCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQu
Z2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0
b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlm
aWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9
PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVy
Q2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtV
cHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXkpKTsKKyAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZh
dWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQorICAg
ICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9y
SWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1
cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0
aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+
KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0
ZSkpKTsKKyAgICBpZiAoIWZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZm9udDsKKyAgICBDRklu
ZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAg
UmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJh
eUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlw
ZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNv
dW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2Fz
dDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCks
IGkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1v
dmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7CisgICAgfQorICAgIENGVHlwZVJlZiBr
ZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVS
ZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07CisgICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRl
cy5nZXQoKSkpOworICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmli
dXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdl
dCgpKSk7Cit9CisKK1JlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNp
emFibGVGZWF0dXJlcygpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0
U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RG
b250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVz
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250
KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRy
YWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNPYmxpcXVlKCkpOworfQorCitSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVT
Y2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25z
dAoreworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3Rv
cjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3Jp
cHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBz
Y2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERl
c2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKKworICAgIHJldHVybiBjcmVhdGVEZXJp
dmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRh
dGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9CisKK3ZvaWQgRm9udDo6YXBwbHlUcmFu
c2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJ
bmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywg
Ym9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmll
dyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgVU5VU0VE
X1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdseXBo
QnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KKyNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCisgICAg
YXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9pbnRl
ciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1BvaW50
ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikKKyAgICB7CisgICAgICAgIHJhbmdlLmxv
Y2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19jYXN0PENG
SW5kZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgpKSk7Cisg
ICAgICAgIGlmIChyYW5nZS5sZW5ndGggPCAwKSB7CisgICAgICAgICAgICByYW5nZS5sZW5ndGgg
PSBzdGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICBy
YW5nZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOworICAgICAgICAg
ICAgZ2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnbHlwaEJ1ZmZl
ci5tYWtlSG9sZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxl
bmd0aCwgdGhpcyk7CisKKyAgICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5n
bHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdBZHZhbmNlc1BvaW50ZXIg
PSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5l
d09mZnNldHNQb2ludGVyID0gZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4
KTsKKyAgICAgICAgKm5ld0luZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3Ry
aW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgIH07CisKKyAgICBhdXRvIHN1YnN0cmluZyA9
IHRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBhdXRvIHVwY29udmVy
dGVkQ2hhcmFjdGVycyA9IHN1YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBh
dXRvIGxvY2FsZVN0cmluZyA9IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZp
ZXJGcm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZv
bnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRp
b24KKyAgICAgICAgfCAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDog
MCkKKyAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RG
b250U2hhcGVSaWdodFRvTGVmdCA6IDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAg
Z2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJl
Z2lubmluZ1N0cmluZ0luZGV4OworCisgICAgQ1RGb250U2hhcGVHbHlwaHMoCisgICAgICAgIG1f
cGxhdGZvcm1EYXRhLmN0Rm9udCgpLAorICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5u
aW5nR2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAorICAgICAgICByZWludGVycHJl
dF9jYXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgp
KSwKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5k
ZXgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNvbnZlcnRl
ZENoYXJhY3RlcnMuZ2V0KCkpLAorICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5p
bmdHbHlwaEluZGV4LAorICAgICAgICBvcHRpb25zLAorICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0
KCksCisgICAgICAgIGhhbmRsZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGds
eXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5
cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9IGJlZ2lu
bmluZ1N0cmluZ0luZGV4OworCisjZWxzZQorCisgICAgVU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0
cmluZ0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0obG9jYWxlKTsKKyAgICBVTlVTRURfUEFSQU0o
dGV4dCk7CisKKyAgICAvLyBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1
YWwgb3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3JkZXIuCisg
ICAgLy8gVGVtcG9yYXJpbHkgcHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0aGUgY2Fs
bCwgdGhlbiBwdXQgdXMgYmFjayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgorICAgIC8vIHRoZSBj
YWxsIGlzIGRvbmUuCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBl
bnRpcmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGNodW5r
IG9mIGl0LgorICAgIC8vIFdpZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtzIG91dCBp
biBsb2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJpYW50Lgor
ICAgIC8vIEV2ZW50dWFsbHksIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkgd2lsbCBy
ZXZlcnNlIHRoZSB3aG9sZSBidWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKKyAgICAvLyBp
biB2aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2Yg
dGhlIGVudGlyZSBHbHlwaEJ1ZmZlci4KKyAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250
U2hhcGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0
dXJucyBpdCBpbiBwaHlzaWNhbAorICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25k
IHJldmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgor
ICAgIC8vIENURm9udFNoYXBlR2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAodGV4dERp
cmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVy
c2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5
cGhJbmRleCk7CisKKyAgICBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxl
S2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250
VHJhbnNmb3JtQXBwbHlTaGFwaW5nOworICAgIENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRm
b3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgp
LCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmlu
Z0dseXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwg
b3B0aW9ucyk7CisjZW5kaWYKKworICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlz
IGZ1bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KKyAgICBpZiAo
dGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVy
LnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5u
aW5nR2x5cGhJbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51bWJlclJl
ZiBudW1iZXIpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaWYgKG51bWJlcikKKyAgICAg
ICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQorewor
ICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgQVNTRVJU
KGN0Rm9udCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KKyAgICAvLyBBY2Nv
cmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2Et
TW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5v
dCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2Fz
ZSBNUy1QR290aGljLgorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkz
OD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKyAgICAv
LyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2gu
CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTW9ub3R5cGVDb3JzaXZhCisgICAgLy8gQWNjb3JkaW5n
IHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlw
ZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJl
cG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisKKyAgICBhdXRvIGZ1bGxOYW1l
ID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CisgICAgYXV0byBmYW1pbHlO
YW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIGludCBm
aXhlZFBpdGNoID0gZXh0cmFjdE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVm
PihDVEZvbnRDb3B5QXR0cmlidXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udEZpeGVk
QWR2YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8
fCBmaXhlZFBpdGNoIHx8IChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBD
RlNUUigiT3Nha2EtTW9ubyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdl
dCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxO
YW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIikpKTsKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIGlmIChmYW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFt
aWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IikpKSB7CisgICAgICAgIC8vIFNwZWNp
YWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMg
dGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVz
aXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0
QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAgfQorI2VuZGlmCit9CisKK0Zsb2F0UmVjdCBGb250
OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0
UmVjdCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVj
dHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVu
dGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlv
blZlcnRpY2FsIDoga0NURm9udE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAwLCAxKTsK
KyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOworICAgIGlmIChtX3N5
bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5n
Qm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworCisgICAgcmV0dXJuIGJvdW5k
aW5nQm94OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworCisgICAgaWYg
KHBsYXRmb3JtRGF0YSgpLnNpemUoKSkgeworICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0
Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsK
KyAgICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFsIHx8IG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwg
OiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKKyNpZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNf
V09SS0FST1VORCkKKyAgICAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250
UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhl
bFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24g
fCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOworICAgICAgICBpZiAoIUNURm9u
dElzQXBwbGVDb2xvckVtb2ppKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9y
bURhdGEuaGFzVmFyaWF0aW9ucygpKQorICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1tZWRBZHZh
bmNlc0ZvckdseXBoc0FuZFN0eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlv
biwgc3R5bGUsICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAg
ICAgICAgeworICAgICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIG9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9m
ZnNldDsKK30KKworUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkg
Y29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckds
eXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOworICAgIGF1dG8g
c3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBp
ZiAoc3ludGhldGljQm9sZE9mZnNldCkgeworICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENG
KENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5n
ZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9
IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDAp
OworICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVz
dWx0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9OworICAgIH0K
KyAgICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQo
KSkpIH07Cit9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMy
IGNoYXJhY3RlciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAoreworICAgIGlm
ICh2YXJpYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVuaUNoYXIgY29kZVVu
aXRzWzJdOworICAgIENHR2x5cGggZ2x5cGhzWzJdOworICAgIENGSW5kZXggY291bnQgPSAwOwor
ICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7CisgICAg
cmV0dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250
KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7Cit9CisKK2Jvb2wgRm9udDo6aXNQcm9iYWJs
eU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0Cit7CisgICAgYXV0byBwbGF0Zm9ybUZvbnQg
PSBwbGF0Zm9ybURhdGEoKS5mb250KCk7CisgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMgdG8gYmFp
bCBlYXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0aG91dCBp
dGVyYXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KKyAgICBVbmlDaGFyIGxv
d2VyY2FzZUFDaGFyYWN0ZXIgPSAnYSc7CisgICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5cGg7Cisg
ICAgaWYgKENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAmbG93ZXJj
YXNlQUNoYXJhY3RlciwgJmxvd2VyY2FzZUFHbHlwaCwgMSkpIHsKKyAgICAgICAgaWYgKCFDR1Jl
Y3RJc0VtcHR5KENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1Gb250LCBr
Q1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRyLCAxKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBzdXBwb3J0ZWRD
aGFyYWN0ZXJzID0gYWRvcHRDRihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3JtRm9udCkp
OworICAgIGlmIChDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFj
dGVycy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRl
ZENoYXJhY3RlcnMuZ2V0KCksIDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBU
aGlzIGVuY29tcGFzc2VzIGFsbCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0ZXJzLgor
ICAgIGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOworICAgIGNv
bnN0ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7CisgICAgY29uc3RleHBy
IGF1dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVzdCAtIGZp
cnN0Q2hhcmFjdGVyVG9UZXN0ICsgMTsKKworICAgIFZlY3RvcjxDR0dseXBoPiBnbHlwaHM7Cisg
ICAgZ2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKKyAgICBDVEZvbnRH
ZXRHbHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdpbigpLCBD
RlJhbmdlTWFrZShmaXJzdENoYXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0
KSk7CisgICAgZ2x5cGhzLnJlbW92ZUFsbCgwKTsKKworICAgIGlmIChnbHlwaHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1Jl
Y3RzOworICAgIGJvdW5kaW5nUmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsK
KyAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9u
dE9yaWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMuYmVnaW4o
KSwgZ2x5cGhzLnNpemUoKSk7CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMu
ZmluZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuICFDR1JlY3RJc0Vt
cHR5KHJlY3QpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRh
Q29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBs
YXRmb3JtRGF0YUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzQ0MTgxYzVhNDIyYTI2MDUyZGE2
MmM0OGE2NTI0YWYxODJkNDIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1w
bGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRm9udFBsYXRm
b3JtRGF0YS5oIgorCisjaW1wb3J0IDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVm
IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxp
cXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhW
YXJpYW50LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKKyAgICA6IEZvbnRQ
bGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50
YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCit7CisgICAgQVNTRVJUX0FS
Ryhmb250LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1faXNDb2xvckJpdG1hcEZv
bnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRUcmFpdENvbG9yR2x5
cGhzOworICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5n
ZXQoKSk7CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rp
b25hcnlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlhdGlvbkF0dHJp
YnV0ZSkpKTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENGRGljdGlvbmFy
eUdldENvdW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyAgICBtX2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQuZ2V0KCkpOwor
I2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNjgxNDdiMTk4ZjgyMzU3YzM2ZTk3OTM5ODAwNjJkNjI4ZjU4NjJhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdl
Q29yZVRleHQuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdseXBoUGFnZS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFm
b250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFG
b250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25z
dGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpm
aWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQo
YnVmZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEds
eXBoUGFnZTo6c2l6ZSk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwor
ICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2ln
bmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlm
IChzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250
KSkKKyAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxh
dGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciks
IGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRH
ZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0
aCk7CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9
IGdseXBoc1tpICogZ2x5cGhTdGVwXTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBo
ICE9IGRlbGV0ZWRHbHlwaCkgeworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVH
bHlwaCk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1h
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFj
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhNTM1ZGM0MDNlNDMyNDNhYjgx
M2M2YzE0ZmRlY2FkNjdlOGRlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdl
TWFjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBV
Q2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCi17
Ci0gICAgaWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBjb25zdCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7Ci0KLWJvb2wg
R2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsK
LSAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5n
dGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gdGhp
cy0+Zm9udCgpOwotICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgp
OwotICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6
ZTsKLQotICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVy
TGVuZ3RoLCBmb250KSkKLSAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0
ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hh
cio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0gICAgZWxzZQotICAg
ICAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RG
b250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCks
IGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgYXV0
byB0aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVwXTsKLSAgICAgICAgaWYgKHRoZUdseXBo
ICYmIHRoZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJ
bmRleChpLCB0aGVHbHlwaCk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlOTI0Y2NjMzYyNDlk
NWFkM2M3OTQzNjZhMzYyZWNmNGYzZWI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dENHV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0jaWYgVVNFKENHKQot
Ci0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIldl
YkNvcmVUZXh0UmVuZGVyZXIuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGlubGluZSBDR0Zsb2F0IHRvQ0dGbG9hdChGSVhFRCBmKQotewotICAgIHJldHVy
biBmLnZhbHVlICsgZi5mcmFjdCAvIENHRmxvYXQoNjU1MzYuMCk7Ci19Ci0KLXN0YXRpYyBDR1Bh
dGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyBoZGMsIEdseXBoIGdseXBoKQotewotICAgIENH
TXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLQotICAgIHN0YXRp
YyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07Ci0g
ICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmljczsKLSAgICAvLyBHR09fTkFUSVZFIG1hdGNoZXMg
dGhlIG91dGxpbmUgcGVyZmVjdGx5IHdoZW4gV2luZG93cyBmb250IHNtb290aGluZyBpcyBvZmYu
Ci0gICAgLy8gR0dPX05BVElWRSB8IEdHT19VTkhJTlRFRCBkb2VzIG5vdCBtYXRjaCBwZXJmZWN0
bHkgZWl0aGVyIHdoZW4gV2luZG93cyBmb250IHNtb290aGluZyBpcyBvbiBvciBvZmYuCi0gICAg
RFdPUkQgb3V0bGluZUxlbmd0aCA9IEdldEdseXBoT3V0bGluZShoZGMsIGdseXBoLCBHR09fR0xZ
UEhfSU5ERVggfCBHR09fTkFUSVZFLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpOwot
ICAgIEFTU0VSVChvdXRsaW5lTGVuZ3RoID49IDApOwotICAgIGlmIChvdXRsaW5lTGVuZ3RoIDwg
MCkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBWZWN0b3I8VUludDg+IG91dGxpbmUob3V0
bGluZUxlbmd0aCk7Ci0gICAgR2V0R2x5cGhPdXRsaW5lKGhkYywgZ2x5cGgsIEdHT19HTFlQSF9J
TkRFWCB8IEdHT19OQVRJVkUsICZnbHlwaE1ldHJpY3MsIG91dGxpbmVMZW5ndGgsIG91dGxpbmUu
ZGF0YSgpLCAmaWRlbnRpdHkpOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKLSAgICB3aGls
ZSAob2Zmc2V0IDwgb3V0bGluZUxlbmd0aCkgewotICAgICAgICBMUFRUUE9MWUdPTkhFQURFUiBz
dWJwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxMUFRUUE9MWUdPTkhFQURFUj4ob3V0bGluZS5kYXRh
KCkgKyBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoc3VicGF0aC0+ZHdUeXBlID09IFRUX1BPTFlH
T05fVFlQRSk7Ci0gICAgICAgIGlmIChzdWJwYXRoLT5kd1R5cGUgIT0gVFRfUE9MWUdPTl9UWVBF
KQotICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQo
cGF0aCwgMCwgdG9DR0Zsb2F0KHN1YnBhdGgtPnBmeFN0YXJ0LngpLCB0b0NHRmxvYXQoc3VicGF0
aC0+cGZ4U3RhcnQueSkpOwotCi0gICAgICAgIHVuc2lnbmVkIHN1YnBhdGhPZmZzZXQgPSBzaXpl
b2YoKnN1YnBhdGgpOwotICAgICAgICB3aGlsZSAoc3VicGF0aE9mZnNldCA8IHN1YnBhdGgtPmNi
KSB7Ci0gICAgICAgICAgICBMUFRUUE9MWUNVUlZFIHNlZ21lbnQgPSByZWludGVycHJldF9jYXN0
PExQVFRQT0xZQ1VSVkU+KHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihzdWJwYXRoKSArIHN1YnBh
dGhPZmZzZXQpOwotICAgICAgICAgICAgc3dpdGNoIChzZWdtZW50LT53VHlwZSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgVFRfUFJJTV9MSU5FOgotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHNlZ21lbnQtPmFw
ZnhbaV0ueCksIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFRUX1BSSU1fUVNQTElORToKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnQtPmNwZng7
IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9DR0Zsb2F0KHNl
Z21lbnQtPmFwZnhbaV0ueCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IHkgPSB0
b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENH
RmxvYXQgY3B4OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcHk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpID09IHNlZ21lbnQtPmNwZnggLSAyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3B4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFd
LngpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHRvQ0dGbG9hdChzZWdtZW50
LT5hcGZ4W2kgKyAxXS55KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNweCA9ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KSArIHRvQ0dGbG9hdChzZWdtZW50
LT5hcGZ4W2kgKyAxXS54KSkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9
ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KSArIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4
W2kgKyAxXS55KSkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBDR1BhdGhBZGRRdWFkQ3VydmVUb1BvaW50KHBhdGgsIDAsIHgsIHksIGNw
eCwgY3B5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJTV9DU1BMSU5FOgotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSArPSAzKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IGNwMXggPSB0b0NHRmxvYXQoc2VnbWVu
dC0+YXBmeFtpXS54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgY3AxeSA9IHRv
Q0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dG
bG9hdCBjcDJ4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLngpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgQ0dGbG9hdCBjcDJ5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSAr
IDFdLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9DR0Zsb2F0KHNl
Z21lbnQtPmFwZnhbaSArIDJdLngpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB5
ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLnkpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQocGF0aCwgMCwgY3AxeCwgY3AxeSwgY3AyeCwg
Y3AyeSwgeCwgeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN1YnBhdGhPZmZzZXQgKz0gc2l6ZW9mKCpzZWdt
ZW50KSArIChzZWdtZW50LT5jcGZ4IC0gMSkgKiBzaXplb2Yoc2VnbWVudC0+YXBmeFswXSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGgpOwotICAgICAgICBvZmZz
ZXQgKz0gc3VicGF0aC0+Y2I7Ci0gICAgfQotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lkIEZv
bnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGJvb2wgc2hv
dWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7Ci0K
LSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2Rl
OjpBbnRpYWxpYXNlZDogewotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFs
aWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFu
dGlhbGlhc2VkOiB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMo
dHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6IHsK
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0gICAg
ICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6IHsKLSAgICAgICAg
Ly8gRm9yIHRoZSBBdXRvU21vb3RoIGNhc2UsIGRvbid0IGRvIGFueXRoaW5nISBLZWVwIHRoZSBk
ZWZhdWx0IHNldHRpbmdzLgotICAgICAgICBicmVhazsgCi0gICAgfQotICAgIGRlZmF1bHQ6IAot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBvbGRG
b250U21vb3RoaW5nU3R5bGUgPSBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKGNn
Q29udGV4dCwgc2hvdWxkVXNlRm9udFNtb290aGluZyk7Ci0KLSAgICBjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgQ0dDb250
ZXh0U2V0Rm9udChjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0KLSAgICBDR0Fm
ZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OwotICAgIG1h
dHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwotCi0gICAgaWYg
KHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0
IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYp
OwotICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZm
aW5lVHJhbnNmb3JtTWFrZSgxLCAwLCBza2V3LCAxLCAwLCAwKSk7Ci0gICAgfQotCi0gICAgQ0dB
ZmZpbmVUcmFuc2Zvcm0gc2F2ZWRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNnQ29u
dGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1hdHJpeCk7Ci0K
LSAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkp
OwotICAgIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoY2dDb250
ZXh0LCBmb250LnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpLCBmYWxzZSwgZm9udC5wbGF0
Zm9ybURhdGEoKS51c2VHREkoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAg
IGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3ND
b250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsK
LQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5n
TW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkg
JiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWlu
dCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRv
d3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBo
aWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFw
aGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9
IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFz
RmxvYXQoKSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93Rmls
bENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dP
ZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNm
b3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwg
c28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55
KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRp
b24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwotICAgICAgICBDR0NvbnRl
eHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkg
ewotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQu
eCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwg
cG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4
dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
KSwgbnVtR2x5cGhzKTsKLSAgICAgICAgfQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0Rmls
bENvbG9yKGZpbGxDb2xvcik7Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9u
KGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotICAgIENHQ29udGV4dFNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRp
Y19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5
cGhzKTsKLSAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgQ0dD
b250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNX
aXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19j
YXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhz
KTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwot
Ci0gICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIG9sZEZv
bnRTbW9vdGhpbmdTdHlsZSk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQs
IHNhdmVkTWF0cml4KTsKLX0KLQotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdT
dHlsZU1pbmltdW0gPSAoMSA8PCA0KTsKLWNvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3Ro
aW5nU3R5bGVMaWdodCA9ICgyIDw8IDQpOwotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9v
dGhpbmdTdHlsZU1lZGl1bSA9ICgzIDw8IDQpOwotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZUhlYXZ5ID0gKDQgPDwgNCk7Ci0KLWNvbnN0ZXhwciBpbnQgZm9udFNtb290
aGluZ0xldmVsTWVkaXVtID0gMjsKLWNvbnN0ZXhwciBDR0Zsb2F0IGFudGlhbGlhc2luZ0dhbW1h
ID0gMi4zOwotCi1kb3VibGUgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0g
MjsKLXVpbnQzMl90IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdUeXBlID0ga0NHRm9udFNt
b290aGluZ1N0eWxlTWVkaXVtOwotaW50IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdMZXZl
bCA9IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bTsKLWJvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVt
Rm9udFNtb290aGluZ0VuYWJsZWQ7Ci11aW50MzJfdCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250
U21vb3RoaW5nVHlwZTsKLWJvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1Nl
dDsKLQotdm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0xldmVsKGludCBsZXZlbCkK
LXsKLSAgICBjb25zdCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlW10gPSB7IAotICAgICAgICAwLCAv
LyBGb250U21vb3RoaW5nVHlwZVN0YW5kYXJkCi0gICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHls
ZUxpZ2h0LCAvLyBGb250U21vb3RoaW5nVHlwZUxpZ2h0Ci0gICAgICAgIGtDR0ZvbnRTbW9vdGhp
bmdTdHlsZU1lZGl1bSwgLy8gRm9udFNtb290aGluZ1R5cGVNZWRpdW0KLSAgICAgICAga0NHRm9u
dFNtb290aGluZ1N0eWxlSGVhdnksIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Ryb25nCi0gICAgfTsK
LQotICAgIGlmIChsZXZlbCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZXZlbCkgPiBBUlJB
WVNJWkUoc21vb3RoaW5nVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNfZm9udFNtb290
aGluZ1R5cGUgPSBzbW9vdGhpbmdUeXBlW2xldmVsXTsKLSAgICBzX2ZvbnRTbW9vdGhpbmdMZXZl
bCA9IGxldmVsOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShDR0Nv
bnRleHRSZWYgY2dDb250ZXh0LCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlLCBib29sIGZvbnRBbGxv
d3NTbW9vdGhpbmcgPSB0cnVlKQotewotICAgIGlmIChzbW9vdGhpbmdUeXBlKSB7Ci0gICAgICAg
IENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgZm9udEFsbG93c1Ntb290
aGluZyk7Ci0gICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQs
IHNtb290aGluZ1R5cGUpOwotICAgIH0gZWxzZQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRT
bW9vdGhGb250cyhjZ0NvbnRleHQsIGZhbHNlKTsKLX0KLQotdWludDMyX3QgRm9udENhc2NhZGU6
OnNldEZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGZvbnRB
bGxvd3NTbW9vdGhpbmcpCi17Ci0gICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0g
MDsKLSAgICBpZiAoQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KSkKLSAg
ICAgICAgb2xkRm9udFNtb290aGluZ1N0eWxlID0gQ0dDb250ZXh0R2V0Rm9udFNtb290aGluZ1N0
eWxlKGNnQ29udGV4dCk7Ci0gICAgc2V0Q0dGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBz
X2ZvbnRTbW9vdGhpbmdUeXBlLCBmb250QWxsb3dzU21vb3RoaW5nKTsKLQotICAgIHJldHVybiBv
bGRGb250U21vb3RoaW5nU3R5bGU7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9v
dGhpbmdDb250cmFzdChDR0Zsb2F0IGNvbnRyYXN0KQotewotICAgIHNfZm9udFNtb290aGluZ0Nv
bnRyYXN0ID0gY29udHJhc3Q7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjbGVhclR5cGVDb250cmFzdCgp
Ci17Ci0gICAgY29uc3QgV0NIQVIgcmVmZXJlbmNlQ2hhcmFjdGVyID0gJ1xcJzsKLSAgICBzdGF0
aWMgVUlOVCBsYXN0Q29udHJhc3QgPSAyMDAwOwotICAgIHN0YXRpYyBmbG9hdCBnYW1tYSA9IDI7
Ci0gICAgVUlOVCBjb250cmFzdDsKLQotICAgIGlmICghU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVEZPTlRTTU9PVEhJTkdDT05UUkFTVCwgMCwgJmNvbnRyYXN0LCAwKSB8fCBjb250cmFzdCA9
PSBsYXN0Q29udHJhc3QpCi0gICAgICAgIHJldHVybiBnYW1tYTsKLQotICAgIGxhc3RDb250cmFz
dCA9IGNvbnRyYXN0OwotCi0gICAgYXV0byBkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29t
cGF0aWJsZURDKDApKTsKLQotICAgIEhHRElPQkogb2xkSEZPTlQgPSA6OlNlbGVjdE9iamVjdChk
Yy5nZXQoKSwgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkpOwotICAgIEdMWVBITUVU
UklDUyBnbHlwaE1ldHJpY3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsg
MCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwotICAgIGlmICg6OkdldEdseXBoT3V0bGluZShk
Yy5nZXQoKSwgcmVmZXJlbmNlQ2hhcmFjdGVyLCBHR09fTUVUUklDUywgJmdseXBoTWV0cmljcywg
MCwgMCwgJmlkZW50aXR5KSA9PSBHRElfRVJST1IpCi0gICAgICAgIHJldHVybiBjb250cmFzdCAv
IDEwMDAuMGY7Ci0KLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0gICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNv
bXByZXNzaW9uID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdl
ID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpV2lkdGggPSBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFg7Ci0gICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlIZWlnaHQgPSAtc3RhdGljX2Nhc3Q8aW50PihnbHlwaE1ldHJpY3MuZ21CbGFja0Jv
eFkpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOwotCi0gICAgdWludDhfdCogcGl4ZWxzID0g
bnVsbHB0cjsKLSAgICBhdXRvIGJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2Vj
dGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmcGl4ZWxzKSwgMCwgMCkpOwotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4g
Y29udHJhc3QgLyAxMDAwLjBmOwotCi0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9i
amVjdChkYy5nZXQoKSwgYml0bWFwLmdldCgpKTsKLQotICAgIEJJVE1BUCBibXBJbmZvOwotICAg
IDo6R2V0T2JqZWN0KGJpdG1hcC5nZXQoKSwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0g
ICAgbWVtc2V0KHBpeGVscywgMCwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICogYm1wSW5mby5i
bVdpZHRoQnl0ZXMpOwotCi0gICAgOjpTZXRCa01vZGUoZGMuZ2V0KCksIE9QQVFVRSk7Ci0gICAg
OjpTZXRUZXh0QWxpZ24oZGMuZ2V0KCksIFRBX0xFRlQgfCBUQV9UT1ApOwotCi0gICAgOjpTZXRU
ZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7Ci0gICAgOjpTZXRCa0NvbG9y
KGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOwotICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAs
IDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotCi0gICAgdWludDhfdCogcmVm
ZXJlbmNlUGl4ZWwgPSBudWxscHRyOwotICAgIHVpbnQ4X3Qgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkg
JiYgIXJlZmVyZW5jZVBpeGVsOyArK2kpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGog
PCA0ICogZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hYOyArK2opIHsKLSAgICAgICAgICAgIHdoaXRl
UmVmZXJlbmNlVmFsdWUgPSBwaXhlbHNbaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzICsgal07Ci0g
ICAgICAgICAgICAvLyBMb29rIGZvciBhIHBpeGVsIHZhbHVlIGluIHRoZSByYW5nZSB0aGF0IGFs
bG93cyB1cyB0byBlc3RpbWF0ZQotICAgICAgICAgICAgLy8gZ2FtbWEgd2l0aGluIDAuMSB3aXRo
b3V0IGFuIGVycm9yLgotICAgICAgICAgICAgaWYgKHdoaXRlUmVmZXJlbmNlVmFsdWUgPiAzMiAm
JiB3aGl0ZVJlZmVyZW5jZVZhbHVlIDwgMjQwKSB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNl
UGl4ZWwgPSBwaXhlbHMgKyBpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KHJlZmVyZW5jZVBpeGVsKSB7Ci0gICAgICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0Io
MCwgMCwgMCkpOwotICAgICAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwg
MjU1KSk7Ci0gICAgICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZl
cmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotICAgICAgICB1aW50OF90IGJsYWNrUmVmZXJlbmNlVmFs
dWUgPSAqcmVmZXJlbmNlUGl4ZWw7Ci0KLSAgICAgICAgZmxvYXQgbWluRGVsdGEgPSAxOwotICAg
ICAgICBmb3IgKGZsb2F0IGcgPSAxOyBnIDwgMi4zZjsgZyArPSAwLjFmKSB7Ci0gICAgICAgICAg
ICBmbG9hdCBkZWx0YSA9IGZhYnMocG93Zigod2hpdGVSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiks
IGcpICsgcG93ZigoYmxhY2tSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpIC0gMSk7Ci0gICAg
ICAgICAgICBpZiAoZGVsdGEgPCBtaW5EZWx0YSkgewotICAgICAgICAgICAgICAgIG1pbkRlbHRh
ID0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgZ2FtbWEgPSBnOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGdhbW1hID0gY29udHJhc3QgLyAxMDAwLjBmOwot
Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0gICAgOjpTZWxlY3RP
YmplY3QoZGMuZ2V0KCksIG9sZEhGT05UKTsKLQotICAgIHJldHVybiBnYW1tYTsKLX0KLQotdm9p
ZCBGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKQotewotICAgIDo6U3lz
dGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkcsIDAsICZzX3N5c3RlbUZvbnRT
bW9vdGhpbmdFbmFibGVkLCAwKTsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRG
T05UU01PT1RISU5HVFlQRSwgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUsIDApOwotICAg
IHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY2xlYXJUeXBlQ29udHJhc3QoKTsKLSAgICBzX3N5
c3RlbUZvbnRTbW9vdGhpbmdTZXQgPSB0cnVlOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpzZXRD
R0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBp
c1N5c3RlbUZvbnQsIGJvb2wgLyppc1ByaW50ZXJGb250Ki8sIGJvb2wgdXNlUGxhdGZvcm1OYXRp
dmVHbHlwaHMpCi17Ci0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgIGJvb2wg
bWF5U3VicGl4ZWxQb3NpdGlvbiA9IHRydWU7Ci0gICAgQ0dGbG9hdCBjb250cmFzdCA9IDI7Ci0g
ICAgaWYgKHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKSB7Ci0gICAgICAgIC8vIDxyZGFyOi8vNjU2
NDUwMT4gR0RJIGNhbid0IHN1YnBpeGVsLXBvc2l0aW9uLCBzbyBkb24ndCBib3RoZXIgYXNraW5n
LgotICAgICAgICBtYXlTdWJwaXhlbFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmICghc19z
eXN0ZW1Gb250U21vb3RoaW5nU2V0KQotICAgICAgICAgICAgc3lzdGVtRm9udFNtb290aGluZ0No
YW5nZWQoKTsKLSAgICAgICAgY29udHJhc3QgPSBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdDsKLSAg
ICAgICAgc2hvdWxkQW50aWFsaWFzID0gc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKLSAg
ICAgICAgaWYgKHNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNNT09USElOR1NU
QU5EQVJEKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nU3R5bGUoY2dD
b250ZXh0LCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtKTsKLSAgICAgICAgICAgIGNvbnRy
YXN0ID0gYW50aWFsaWFzaW5nR2FtbWE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQ0dDb250ZXh0
U2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNnQ29udGV4dCwgY29udHJhc3QpOwotICAgIENHQ29u
dGV4dFNldFNob3VsZFVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKGNnQ29udGV4dCwgdXNlUGxhdGZv
cm1OYXRpdmVHbHlwaHMpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNn
Q29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0
VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9vbCBpc1B1cmVU
cmFuc2xhdGlvbiA9IGNvbnRleHRUcmFuc2Zvcm0uYSA9PSAxICYmIChjb250ZXh0VHJhbnNmb3Jt
LmQgPT0gMSB8fCBjb250ZXh0VHJhbnNmb3JtLmQgPT0gLTEpICYmICFjb250ZXh0VHJhbnNmb3Jt
LmIgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYzsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhl
bFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCBtYXlTdWJwaXhlbFBvc2l0aW9uICYmIChpc1N5c3Rl
bUZvbnQgfHwgIWlzUHVyZVRyYW5zbGF0aW9uKSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgaXNQdXJlVHJhbnNsYXRpb24pOwotfQotCi1z
dGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlRm9yRm9udChi
b29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250KQotewotICAgIC8vIEZJWE1FOiBO
ZWVkIHRvIHN1cHBvcnQgYSBtaW5pbXVtIGFudGlhbGlhc2VkIGZvbnQgc2l6ZS4KLQotICAgIGlm
IChpc1N5c3RlbUZvbnQgfHwgaXNQcmludGVyRm9udCkKLSAgICAgICAgcmV0dXJuIGtDR0ZvbnRS
ZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsK
LQotICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Ci19Ci0KLXZv
aWQgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhDR0ZvbnRSZWYgZm9udCwg
Y29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJp
bnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkKLXsKLSAgICBDR0ZvbnRS
ZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmluZ1N0eWxlRm9yRm9udChpc1N5c3RlbUZvbnQs
IGlzUHJpbnRlckZvbnQpOwotICAgIENHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShmb250
LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9i
bGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQgaW4gQ29yZSBHcmFwaGljcyBzb21ldGltZXMg
cmV0dXJucyBhZHZhbmNlcyB0aGF0Ci0gICAgLy8gZGlmZmVyIGZyb20gd2hhdCB0aGUgZm9udCdz
IGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9sbG93aW5nIGNvZGUgY29ycmVjdHMgdGhhdC4K
LSAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdo
bXR4Jyk7Ci0gICAgaWYgKCFobXR4VGFibGUpCi0gICAgICAgIHJldHVybjsKLSAgICBDRkRhdGFS
ZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdoaGVhJyk7Ci0gICAg
aWYgKCFoaGVhVGFibGUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBDRkluZGV4IGhoZWFUYWJsZVNpemUgPSAzNjsK
LSAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCA9IDM0
OwotICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhlYVRhYmxlKSA8IGhoZWFUYWJsZVNpemUpIHsK
LSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Ci0gICAgICAgIENGUmVsZWFzZShoaGVhVGFi
bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2hvcnQgbnVtYmVy
T2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZE
YXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNl
dCk7Ci0gICAgbnVtYmVyT2ZITWV0cmljcyA9ICgobnVtYmVyT2ZITWV0cmljcyAmIDB4RkYpIDw8
IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7Ci0gICAgaWYgKCFudW1iZXJPZkhNZXRyaWNz
KSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICBDRlJlbGVhc2UoaGhl
YVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnbHlwaCA+PSBudW1i
ZXJPZkhNZXRyaWNzKQotICAgICAgICBnbHlwaCA9IG51bWJlck9mSE1ldHJpY3MgLSAxOwotCi0g
ICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFibGUpIDwgNCAqIChnbHlwaCArIDEpKSB7Ci0g
ICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNob3J0IGFkdmFuY2VJ
bkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihD
RkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0ICogZ2x5cGgpOwotICAgIGFkdmFuY2VJbkRl
c2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25Vbml0cyAmIDB4RkYpIDw8IDgpIHwgKGFkdmFu
Y2VJbkRlc2lnblVuaXRzID4+IDgpOwotICAgIENHU2l6ZSBob3Jpem9udGFsQWR2YW5jZSA9IENH
U2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYWR2YW5jZUluRGVzaWduVW5pdHMpIC8gQ0dG
b250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7Ci0gICAgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1Np
emVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9udGFsQWR2YW5jZSwgbSk7Ci0gICAgYWR2YW5j
ZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndpZHRoOwotICAgIGlmICghKHN0eWxlICYga0NH
Rm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZykpCi0gICAgICAgIGFkdmFuY2Uu
d2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7Ci0KLSAgICBDRlJlbGVhc2UoaGhlYVRhYmxl
KTsKLSAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAK
aW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4uMDhjYjRkNTFl
YmJkYmI3Zjk1NWU2Nzc3ZDZmODAyYzJiOTIxN2U5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTY3NSw3ICs2
NzUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVu
aXF1ZTxGb250UGxhdGZvcm1EYXRhPihXVEZNb3ZlKGhmb250KSwgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXNpemVCb2xkLCBzeW50aGVzaXplSXRhbGljLCB1c2VH
REkpOwogCiAjaWYgVVNFKENHKQotICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3Vs
dC0+Y2dGb250KCk7CisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5mb250
KCk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCiAgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAh
cmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40OGRjM2VjMTIxY2MwMjIwN2I4Y2IxNjgyNzEzZDZiYjhkOWY2ZDVlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNj
YWRlQ0dXaW4uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVu
ZGVyZXIuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3RleHBy
IHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0KTsKK2NvbnN0
ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8IDQpOworY29u
c3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgzIDw8IDQpOwor
Y29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0gKDQgPDwgNCk7
CisKK2NvbnN0ZXhwciBpbnQgZm9udFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsKK2NvbnN0ZXhw
ciBDR0Zsb2F0IGFudGlhbGlhc2luZ0dhbW1hID0gMi4zOworCitkb3VibGUgRm9udENhc2NhZGU6
OnNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gMjsKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzX2Zv
bnRTbW9vdGhpbmdUeXBlID0ga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtOworaW50IEZvbnRD
YXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bTsK
K2Jvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Cit1aW50MzJf
dCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKK2Jvb2wgRm9udENhc2Nh
ZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1NldDsKKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9u
dFNtb290aGluZ0xldmVsKGludCBsZXZlbCkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBzbW9vdGhp
bmdUeXBlW10gPSB7IAorICAgICAgICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0YW5kYXJkCisg
ICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3RoaW5nVHlwZUxp
Z2h0CisgICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9udFNtb290aGlu
Z1R5cGVNZWRpdW0KKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnksIC8vIEZvbnRT
bW9vdGhpbmdUeXBlU3Ryb25nCisgICAgfTsKKworICAgIGlmIChsZXZlbCA8IDAgfHwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihsZXZlbCkgPiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIHNfZm9udFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdUeXBlW2xldmVs
XTsKKyAgICBzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGxldmVsOworfQorCitzdGF0aWMgdm9pZCBz
ZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1aW50MzJfdCBz
bW9vdGhpbmdUeXBlLCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQoreworICAgIGlm
IChzbW9vdGhpbmdUeXBlKSB7CisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRz
KGNnQ29udGV4dCwgZm9udEFsbG93c1Ntb290aGluZyk7CisgICAgICAgIENHQ29udGV4dFNldEZv
bnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNtb290aGluZ1R5cGUpOworICAgIH0gZWxzZQor
ICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIGZhbHNlKTsK
K30KKwordWludDMyX3QgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRl
eHRSZWYgY2dDb250ZXh0LCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcpCit7CisgICAgdWludDMy
X3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0gMDsKKyAgICBpZiAoQ0dDb250ZXh0R2V0U2hvdWxk
U21vb3RoRm9udHMoY2dDb250ZXh0KSkKKyAgICAgICAgb2xkRm9udFNtb290aGluZ1N0eWxlID0g
Q0dDb250ZXh0R2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCk7CisgICAgc2V0Q0dGb250
U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBmb250QWxsb3dz
U21vb3RoaW5nKTsKKworICAgIHJldHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7Cit9CisKK3Zv
aWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0IGNvbnRyYXN0
KQoreworICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Cit9CisKK3N0YXRp
YyBmbG9hdCBjbGVhclR5cGVDb250cmFzdCgpCit7CisgICAgY29uc3QgV0NIQVIgcmVmZXJlbmNl
Q2hhcmFjdGVyID0gJ1xcJzsKKyAgICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3QgPSAyMDAwOwor
ICAgIHN0YXRpYyBmbG9hdCBnYW1tYSA9IDI7CisgICAgVUlOVCBjb250cmFzdDsKKworICAgIGlm
ICghU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05UUkFTVCwgMCwg
JmNvbnRyYXN0LCAwKSB8fCBjb250cmFzdCA9PSBsYXN0Q29udHJhc3QpCisgICAgICAgIHJldHVy
biBnYW1tYTsKKworICAgIGxhc3RDb250cmFzdCA9IGNvbnRyYXN0OworCisgICAgYXV0byBkYyA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKKworICAgIEhHRElPQkog
b2xkSEZPTlQgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmplY3QoREVGQVVM
VF9HVUlfRk9OVCkpOworICAgIEdMWVBITUVUUklDUyBnbHlwaE1ldHJpY3M7CisKKyAgICBzdGF0
aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9Owor
ICAgIGlmICg6OkdldEdseXBoT3V0bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hhcmFjdGVyLCBH
R09fTUVUUklDUywgJmdseXBoTWV0cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBHRElfRVJST1Ip
CisgICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICBCSVRNQVBJTkZPIGJp
dG1hcEluZm87CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1B
UElORk9IRUFERVIpOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKKyAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVhQZWxzUGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQ
ZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAw
OworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJpY3MuZ21CbGFj
a0JveFg7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3RhdGljX2Nhc3Q8
aW50PihnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkpOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQml0Q291bnQgPSAzMjsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAw
OworCisgICAgdWludDhfdCogcGl4ZWxzID0gbnVsbHB0cjsKKyAgICBhdXRvIGJpdG1hcCA9IGFk
b3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9D
T0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkpOworICAgIGlm
ICghYml0bWFwKQorICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgSEdE
SU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFwLmdldCgpKTsK
KworICAgIEJJVE1BUCBibXBJbmZvOworICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5nZXQoKSwgc2l6
ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7CisgICAgbWVtc2V0KHBpeGVscywgMCwgZ2x5cGhNZXRy
aWNzLmdtQmxhY2tCb3hZICogYm1wSW5mby5ibVdpZHRoQnl0ZXMpOworCisgICAgOjpTZXRCa01v
ZGUoZGMuZ2V0KCksIE9QQVFVRSk7CisgICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0KCksIFRBX0xF
RlQgfCBUQV9UT1ApOworCisgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1
NSwgMjU1KSk7CisgICAgOjpTZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOworICAg
IDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIs
IDEsIDApOworCisgICAgdWludDhfdCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRyOworICAgIHVp
bnQ4X3Qgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyArK2kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hY
OyArK2opIHsKKyAgICAgICAgICAgIHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhlbHNbaSAqIGJt
cEluZm8uYm1XaWR0aEJ5dGVzICsgal07CisgICAgICAgICAgICAvLyBMb29rIGZvciBhIHBpeGVs
IHZhbHVlIGluIHRoZSByYW5nZSB0aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQorICAgICAgICAg
ICAgLy8gZ2FtbWEgd2l0aGluIDAuMSB3aXRob3V0IGFuIGVycm9yLgorICAgICAgICAgICAgaWYg
KHdoaXRlUmVmZXJlbmNlVmFsdWUgPiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVlIDwgMjQwKSB7
CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICogYm1wSW5mby5i
bVdpZHRoQnl0ZXMgKyBqOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7CisgICAgICAgIDo6
U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOworICAgICAgICA6OlNldEJrQ29s
b3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7CisgICAgICAgIDo6RXh0VGV4dE91dFco
ZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOworICAgICAg
ICB1aW50OF90IGJsYWNrUmVmZXJlbmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7CisKKyAgICAg
ICAgZmxvYXQgbWluRGVsdGEgPSAxOworICAgICAgICBmb3IgKGZsb2F0IGcgPSAxOyBnIDwgMi4z
ZjsgZyArPSAwLjFmKSB7CisgICAgICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMocG93Zigod2hp
dGVSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZlcmVuY2VWYWx1
ZSAvIDI1NS4wZiksIGcpIC0gMSk7CisgICAgICAgICAgICBpZiAoZGVsdGEgPCBtaW5EZWx0YSkg
eworICAgICAgICAgICAgICAgIG1pbkRlbHRhID0gZGVsdGE7CisgICAgICAgICAgICAgICAgZ2Ft
bWEgPSBnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGdh
bW1hID0gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCks
IG9sZEJpdG1hcCk7CisgICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhGT05UKTsKKwor
ICAgIHJldHVybiBnYW1tYTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290
aGluZ0NoYW5nZWQoKQoreworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRT
TU9PVEhJTkcsIDAsICZzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsKKyAgICA6OlN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwgJnNfc3lzdGVt
Rm9udFNtb290aGluZ1R5cGUsIDApOworICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY2xl
YXJUeXBlQ29udHJhc3QoKTsKKyAgICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQgPSB0cnVlOwor
fQorCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLyppc1ByaW50ZXJG
b250Ki8sIGJvb2wgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpCit7CisgICAgYm9vbCBzaG91bGRB
bnRpYWxpYXMgPSB0cnVlOworICAgIGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IHRydWU7Cisg
ICAgQ0dGbG9hdCBjb250cmFzdCA9IDI7CisgICAgaWYgKHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhz
KSB7CisgICAgICAgIC8vIDxyZGFyOi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBpeGVsLXBvc2l0
aW9uLCBzbyBkb24ndCBib3RoZXIgYXNraW5nLgorICAgICAgICBtYXlTdWJwaXhlbFBvc2l0aW9u
ID0gZmFsc2U7CisgICAgICAgIGlmICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0KQorICAgICAg
ICAgICAgc3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKTsKKyAgICAgICAgY29udHJhc3QgPSBz
X2ZvbnRTbW9vdGhpbmdDb250cmFzdDsKKyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc19zeXN0
ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKKyAgICAgICAgaWYgKHNfc3lzdGVtRm9udFNtb290aGlu
Z1R5cGUgPT0gRkVfRk9OVFNNT09USElOR1NUQU5EQVJEKSB7CisgICAgICAgICAgICBDR0NvbnRl
eHRTZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3RoaW5nU3R5bGVN
aW5pbXVtKTsKKyAgICAgICAgICAgIGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2FtbWE7CisgICAg
ICAgIH0KKyAgICB9CisgICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNnQ29u
dGV4dCwgY29udHJhc3QpOworICAgIENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRmb3JtTmF0aXZl
R2x5cGhzKGNnQ29udGV4dCwgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpOworICAgIENHQ29udGV4
dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKKyAg
ICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNn
Q29udGV4dCk7CisgICAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRUcmFuc2Zvcm0u
YSA9PSAxICYmIChjb250ZXh0VHJhbnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJhbnNmb3JtLmQg
PT0gLTEpICYmICFjb250ZXh0VHJhbnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYzsKKyAg
ICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCBtYXlT
dWJwaXhlbFBvc2l0aW9uICYmIChpc1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5zbGF0aW9uKSk7
CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwg
aXNQdXJlVHJhbnNsYXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0
eWxlIHJlbmRlcmluZ1N0eWxlRm9yRm9udChib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50
ZXJGb250KQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5pbXVtIGFudGlh
bGlhc2VkIGZvbnQgc2l6ZS4KKworICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQcmludGVyRm9u
dCkKKyAgICAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5n
U3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKKworICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5n
U3R5bGVBbnRpYWxpYXNpbmc7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5
cGhBZHZhbmNlcyhDR0ZvbnRSZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJv
b2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6
ZSYgYWR2YW5jZSkKK3sKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmlu
Z1N0eWxlRm9yRm9udChpc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOworICAgIENHRm9udEdl
dEdseXBoQWR2YW5jZXNGb3JTdHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFu
Y2UpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQg
aW4gQ29yZSBHcmFwaGljcyBzb21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0CisgICAgLy8g
ZGlmZmVyIGZyb20gd2hhdCB0aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9s
bG93aW5nIGNvZGUgY29ycmVjdHMgdGhhdC4KKyAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dG
b250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdobXR4Jyk7CisgICAgaWYgKCFobXR4VGFibGUpCisg
ICAgICAgIHJldHVybjsKKyAgICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKGZvbnQsICdoaGVhJyk7CisgICAgaWYgKCFoaGVhVGFibGUpIHsKKyAgICAgICAgQ0ZS
ZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBD
RkluZGV4IGhoZWFUYWJsZVNpemUgPSAzNjsKKyAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxl
TnVtYmVyT2ZITWV0cmljc09mZnNldCA9IDM0OworICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhl
YVRhYmxlKSA8IGhoZWFUYWJsZVNpemUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7
CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdW5zaWduZWQgc2hvcnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhl
YVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCk7CisgICAgbnVtYmVyT2ZITWV0cmljcyA9ICgo
bnVtYmVyT2ZITWV0cmljcyAmIDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7
CisgICAgaWYgKCFudW1iZXJPZkhNZXRyaWNzKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFi
bGUpOworICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChnbHlwaCA+PSBudW1iZXJPZkhNZXRyaWNzKQorICAgICAgICBnbHlwaCA9
IG51bWJlck9mSE1ldHJpY3MgLSAxOworCisgICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFi
bGUpIDwgNCAqIChnbHlwaCArIDEpKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwor
ICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIHNob3J0IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0
ICogZ2x5cGgpOworICAgIGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25V
bml0cyAmIDB4RkYpIDw8IDgpIHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgpOworICAgIENH
U2l6ZSBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4o
YWR2YW5jZUluRGVzaWduVW5pdHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7Cisg
ICAgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9u
dGFsQWR2YW5jZSwgbSk7CisgICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndp
ZHRoOworICAgIGlmICghKHN0eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3Np
dGlvbmluZykpCisgICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7
CisKKyAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKaW5kZXggMTEyYmY5
NWNjOWFkYmY5OWU0NmI1Y2I1MWRlY2E0MGQ2NGI1ZTE0MS4uNjJjMWFlZjBkMThlOTJjNjY1ZTE5
M2NjMDhiNDY5NTgyYmM2YWE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAKQEAgLTEx
MywxNyArMTEzLDE5IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChI
Rk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUioKIHsKICAgICBMT0dGT05UIGxv
Z2ZvbnQ7CiAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwot
ICAgIG1fY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dm
b250KSk7CisgICAgYXV0byBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9y
bUZvbnQoJmxvZ2ZvbnQpKTsKKyAgICBtX2ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhH
cmFwaGljc0ZvbnQoY2dGb250LmdldCgpLCBzaXplLCBudWxscHRyLCBudWxscHRyKSk7CisgICAg
CiAgICAgaWYgKCFtX3VzZUdESSkKICAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZh
Y2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKIH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDR0ZvbnRSZWYgZm9udCwgZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorRm9udFBsYXRmb3Jt
RGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDVEZvbnRSZWYg
Zm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQog
ICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2Js
aXF1ZSkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxI
Rk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCi0gICAgLCBtX2NnRm9udChmb250KQorICAg
ICwgbV9oRm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkp
KQorICAgICwgbV9mb250KGZvbnQpCiAgICAgLCBtX3VzZUdESSh1c2VHREkpCiB7CiB9CkBAIC0x
MzUsOCArMTM3LDggQEAgdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAK
IGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiBtX2ZvbnQgPT0gb3RoZXIubV9mb250
Ci0gICAgICAgICYmIG1fY2dGb250ID09IG90aGVyLm1fY2dGb250CisgICAgcmV0dXJuIG1faEZv
bnQgPT0gb3RoZXIubV9oRm9udAorICAgICAgICAmJiBtX2ZvbnQgPT0gb3RoZXIubV9mb250CiAg
ICAgICAgICYmIG1fdXNlR0RJID09IG90aGVyLm1fdXNlR0RJOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YVdpbi5jcHAKaW5kZXggZTUzNzNjN2M2ZWM0ODc1NDBjMTYxZDJhYjE5ZDY4MWJlODE4ZjFhMS4u
OWVkMWE5OWEzNjEwNWE5OTUzZDk4Y2YwZjUxMTEzYTdkNjBjOWM5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhV2luLmNwcApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBzdGQ6Om1pbjsKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8
SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlLCBib29sIHVz
ZUdESSkKLSAgICA6IG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92
ZShmb250KSkpCisgICAgOiBtX2hGb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShX
VEZNb3ZlKGZvbnQpKSkKICAgICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9zeW50aGV0aWNCb2xk
KGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNHV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ0YjBkYzk3NDY5
MmRkMjk0MjQ5M2Q2Mjg5M2RhZGNlZWUxODBlYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLQotI2lm
IFVTRShDRykKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpm
aWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsKLSAgICAvLyBidWZm
ZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgZ2x5
cGhzIGlmIHRoZSBidWZmZXIgY29udGFpbnMgc3Vycm9nYXRlIHBhaXJzLgotICAgIC8vIFdlIHdv
bid0IHN1cHBvcnQgdGhpcyBmb3Igbm93LgotICAgIGlmIChidWZmZXJMZW5ndGggPiBHbHlwaFBh
Z2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSB0aGlzLT5mb250KCk7Ci0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgQ0dHbHlw
aCBsb2NhbEdseXBoQnVmZmVyW0dseXBoUGFnZTo6c2l6ZV07Ci0gICAgQ0dGb250R2V0R2x5cGhz
Rm9yVW5pY2hhcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBVbmlDaGFyKj4oYnVmZmVyKSwgbG9jYWxHbHlwaEJ1ZmZlciwgYnVmZmVyTGVuZ3Ro
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsK
LSAgICAgICAgR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVyW2ldOwotICAgICAgICBpZiAo
IWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoKTsKLSAgICAgICAgICAg
IGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBoYXZlR2x5
cGhzOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ZmFiNGNkY2ZkMDM4YmY0ZDdhZDQwYTMwODU0MzllYzhkM2Jh
NGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLSNpbmNs
dWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJPcGVuVHlwZUNHLmgiCi0jaW5jbHVkZSA8bWxhbmcu
aD4KLSNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2luY2x1ZGUgPHVu
aWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+Ci0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNC
b2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsK
LSAgICBtX3NjcmlwdENhY2hlID0gMDsKLSAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsK
LQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGluaXRH
RElGb250KCk7Ci0KLSAgICBDR0ZvbnRSZWYgZm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgp
OwotICAgIGludCBpQXNjZW50ID0gQ0dGb250R2V0QXNjZW50KGZvbnQpOwotICAgIGludCBpRGVz
Y2VudCA9IENHRm9udEdldERlc2NlbnQoZm9udCk7Ci0gICAgaW50IGlMaW5lR2FwID0gQ0dGb250
R2V0TGVhZGluZyhmb250KTsKLSAgICBpbnQgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdo
dChmb250KTsKLQotICAgIC8vIFRoZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1Mv
MiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9sbG93czoKLSAgICAvLyAiSWYgc2V0LCBpdCBp
cyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5z
VHlwb0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBs
aW5lIHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCi0gICAgc2hvcnQgdHlwb0FzY2VudCwgdHlwb0Rl
c2NlbnQsIHR5cG9MaW5lR2FwOwotICAgIGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01ldHJpY3Mo
YWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KG1fcGxhdGZvcm1EYXRhLmNnRm9u
dCgpLCBtX3BsYXRmb3JtRGF0YS5zaXplKCksIG51bGxwdHIsIG51bGxwdHIpKS5nZXQoKSwgdHlw
b0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwKSkgewotICAgICAgICBpQXNjZW50ID0g
dHlwb0FzY2VudDsKLSAgICAgICAgaURlc2NlbnQgPSB0eXBvRGVzY2VudDsKLSAgICAgICAgaUxp
bmVHYXAgPSB0eXBvTGluZUdhcDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0g
Q0dGb250R2V0VW5pdHNQZXJFbShmb250KTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRm
b3JtRGF0YS5zaXplKCk7Ci0gICAgZmxvYXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2Nl
bnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZEZXNjZW50ID0gLXNjYWxl
RW1Ub1VuaXRzKGlEZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBm
Q2FwSGVpZ2h0ID0gc2NhbGVFbVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7Ci0gICAgZmxvYXQgZkxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7Ci0KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2Nh
bCkgewotICAgICAgICBIV25kREMgZGMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNl
bGVjdE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7Ci0gICAgICAgIGludCBmYWNl
TGVuZ3RoID0gR2V0VGV4dEZhY2UoZGMsIDAsIDApOwotICAgICAgICBWZWN0b3I8V0NIQVI+IGZh
Y2VOYW1lKGZhY2VMZW5ndGgpOwotICAgICAgICBHZXRUZXh0RmFjZShkYywgZmFjZUxlbmd0aCwg
ZmFjZU5hbWUuZGF0YSgpKTsKLSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKLQot
ICAgICAgICBmQXNjZW50ID0gYXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGZhY2VOYW1l
LmRhdGEoKSwgZkFzY2VudCwgZkRlc2NlbnQpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Mu
c2V0QXNjZW50KGZBc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChmRGVzY2Vu
dCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoZkNhcEhlaWdodCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRMaW5lR2FwKGZMaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVTcGFjaW5nKGxyb3VuZGYoZkFzY2VudCkgKyBscm91bmRmKGZEZXNjZW50KSArIGxyb3VuZGYo
ZkxpbmVHYXApKTsKLQotICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRGF0YUZvckNoYXJhY3Rlcign
eCcpLmdseXBoOwotICAgIGlmICh4R2x5cGgpIHsKLSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0
dWFsIGNoYXJhY3RlciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBi
ZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4
LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMg
YWJvdmUgdGhlIGJhc2VsaW5lLgotICAgICAgICBDR1JlY3QgeEJveDsKLSAgICAgICAgQ0dGb250
R2V0R2x5cGhCQm94ZXMoZm9udCwgJnhHbHlwaCwgMSwgJnhCb3gpOwotICAgICAgICBtX2ZvbnRN
ZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoQ0dSZWN0R2V0TWF4WSh4Qm94KSwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpWEhlaWdo
dCA9IENHRm9udEdldFhIZWlnaHQoZm9udCk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhl
aWdodChzY2FsZUVtVG9Vbml0cyhpWEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwot
ICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLX0K
LQotRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBG
bG9hdFJlY3QoKTsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAg
cmV0dXJuIGJvdW5kc0ZvckdESUdseXBoKGdseXBoKTsKLQotICAgIENHUmVjdCBib3g7Ci0gICAg
Q0dGb250R2V0R2x5cGhCQm94ZXMobV9wbGF0Zm9ybURhdGEuY2dGb250KCksICZnbHlwaCwgMSwg
JmJveCk7Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAg
IENHRmxvYXQgc2NhbGUgPSBwb2ludFNpemUgLyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKTsK
LSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShi
b3gsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKLSAgICBpZiAo
bV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3Vu
ZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBi
b3VuZGluZ0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAg
cmV0dXJuIHdpZHRoRm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAgQ0dGb250UmVmIGZvbnQgPSBt
X3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCk7Ci0gICAgQ0dTaXplIGFkdmFuY2U7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
bSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKLSAK
LSAgICBib29sIGlzUHJpbnRlckZvbnQgPSBmYWxzZTsKLSAgICBGb250Q2FzY2FkZTo6Z2V0UGxh
dGZvcm1HbHlwaEFkdmFuY2VzKGZvbnQsIG0sIG1fcGxhdGZvcm1EYXRhLmlzU3lzdGVtRm9udCgp
LCBpc1ByaW50ZXJGb250LCBnbHlwaCwgYWR2YW5jZSk7Ci0KLSAgICByZXR1cm4gYWR2YW5jZS53
aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9ybVBh
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBhdXRvIGN0Rm9udCA9IGFkb3B0
Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwg
cGxhdGZvcm1EYXRhKCkuc2l6ZSgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgYXV0byByZXN1
bHQgPSBhZG9wdENGKENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChjdEZvbnQuZ2V0KCksIGdseXBo
LCBudWxscHRyKSk7Ci0gICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhl
dGljQm9sZE9mZnNldCgpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7Ci0gICAgICAg
IGF1dG8gbmV3UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKLSAgICAgICAg
Q0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOwotICAg
ICAgICBhdXRvIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24o
c3ludGhldGljQm9sZE9mZnNldCwgMCk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5n
ZXQoKSwgJnRyYW5zbGF0aW9uLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbmV3UGF0
aDsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVz
dWx0LmdldCgpKSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc0FwcGxlV2luLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5jbWFr
ZQppbmRleCA5OTJlMjM1YmMyZjQzYzAzYmIzMDFhMTc3OGE3NDVhNWU1NWJlMDg2Li5hODJiYmZh
YzFjMjI4ZDI2YzQ1N2UyN2UzYTJjMTNhYWQwMDJjNGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21h
a2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVX
aW4uY21ha2UKQEAgLTQ4LDYgKzQ4LDcgQEAgaWYgKCR7VVNFX0RJUkVDVDJEfSkKIGVsc2UgKCkK
ICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0EgT04pCiAgICAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0NHIE9OKQorICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
VCBPTikKIAogICAgIHNldChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke1dFQktJVF9MSUJSQVJJ
RVNfSU5DTFVERV9ESVJ9KQogICAgIHNldChDTUFLRV9SRVFVSVJFRF9MSUJSQVJJRVMKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBiY2M1M2M3YjIxYzdmZWRiNDViODZm
ZDUxZDk0NjZhZDJlZGMzYmJjLi41NmY1MWU0NjdlNzE3N2NlMWU4ZDkwOTBkM2Q5YTlmOTIzNmU2
N2JkIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
KworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBXaW4gcG9ydCdzIGZvbnQgY29kZSB0
byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21h
a2U6CisKIDIwMjAtMDktMDQgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBbV1BFXSBCdW1wIHZlcnNpb24gbnVtYmVycwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408493</attachid>
            <date>2020-09-10 16:25:52 -0700</date>
            <delta_ts>2020-09-10 21:50:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-216353-20200910162551.patch</filename>
            <type>text/plain</type>
            <size>184730</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2ODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGNkNDcxNzUzNzBlZWNkMDE3MDkxYzY5
Mzg3YzZkYmViNzdjYzhmOTcuLjc4NjFhNzI5NTk4YTFjMjBjODcxOTVlNDAzZjdhZDJiMzc3NGQ5
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBX
aW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bVVzZS5oOgorCiAyMDIwLTA5LTEwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJv
dG9jb2wgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM0YjZmMDNkZThjOTg1OGE4ZmIyMmQyODZkYTdmMmZm
NTYyZGIwMDMuLjZlZGU0YmI5ODdmYzNhMDAxOWY1N2M2MGQyMmQ3ZTJlYjM2YWJkZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAyMC0wOS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIE1pZ3JhdGUgdGhlIEFwcGxlIFdp
biBwb3J0J3MgZm9udCBjb2RlIHRvIENvcmUgVGV4dCBmcm9tIENvcmUgR3JhcGhpY3MKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjM1MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAo
T09QUyEpLgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6Cisg
ICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5j
bWFrZToKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhmb250IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmNnRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEds
eXBoUG9zaXRpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUxldHRl
cnByZXNzRWZmZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNob3dHbHlwaHNXaXRo
QWR2YW5jZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dGb250UmVuZGVyaW5n
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0dseXBo
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJ
c1N5c3RlbUZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2Nh
ZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybURlc3Ryb3kpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
b3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OnNob3dHbHlwaHNXaXRoQWR2YW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q0dG
b250UmVuZGVyaW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6ZHJhd0ds
eXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3Rl
bUZvbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmZvbnRGb3JDb21i
aW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY3QvRm9udENvcmVUZXh0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphcHBseVRyYW5zZm9ybXMg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFD
b3JlVGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQ
YWdlQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q2FzY2FkZUNHV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OnBsYXRmb3JtSXNFcXVhbCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcDogUmVtb3ZlZC4KKwog
MjAyMC0wOS0xMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJldmVydGluZyByMjY2ODQyIGFuZCByMjY2ODgzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgK
aW5kZXggYTZlYmU2NzJmNGE5NTRjMzMyMjQ3ODAzZmJkYWUxYzgyODFhZmZlMi4uOTNjMjVhYTk3
ZWM1NDg1NjgwZTE3MDdjNzA1OGIwODQ0ZjNkODU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvUGxhdGZvcm1Vc2UuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCkBAIC01
NCw2ICs1NCwxMCBAQAogI2RlZmluZSBVU0VfQ0cgMQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShD
T0NPQSkKKyNkZWZpbmUgVVNFX0NUIDEKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
ZGVmaW5lIFVTRV9DQSAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CmluZGV4IGQ5NGZkNjljZDdlZGVjYTNjODYwNjFhZjMyMGFiYmNhYjI4YzgwM2YuLjJjMzc1MTE0
NzdmZjgyNWIxYzNiYTJjYmJiNWVmNDEzZDVjZWE3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQpAQCAtMTUwLDE0ICsxNTAsMTcgQEAgZWxzZSAoKQogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jdC9Gb250Q29yZVRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQ
bGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5
cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVDRy5jcHAKIAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAogCiAgICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKICAgICApCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCmluZGV4IGJiMjE3YmIzZDQ2ZTljMGZlNTY5MDMzMzk4ZjVkNDE0MmM0Njc2MDkuLmQ3N2Q4
M2U3ODE2MjFlNmJjNGYzNjE1ZmNkNjNlYmRiNTU1N2E3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCkBAIC0zMDYsNyArMzA2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRmxvYXRSZWN0Q29jb2EubW0KICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLm1tCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRl
eHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29h
Lm1tCkBAIC0zMjEsNiArMzIxLDExIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9u
dENhc2NhZGVDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRl
eHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcAorCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNlc3Npb25WVC5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTMzNSw3ICszNDAsNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQ
b2ludE1hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL21hYy9JY29uTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAppbmRleCA3MjYwNDExOTIyNDA1YWZkMGJiYjUwNTM3NmZlOWU0ZWJiNTc2NWFlLi45
ZTAyY2Q2ZmZmODEwZjBlMWQwMDk0YmZmM2ZiNDJmYzhlZWU5OGUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKQEAgLTM0Nyw3ICszNDcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Db2xv
ckNvY29hLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCi1wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q29jb2EubW0KK3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNjcmlwdGlvbkNvY29hLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMzY5LDYgKzM2OSwx
MCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21wcmVzc2lvblNlc3Npb24u
bW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WaWRlb1Ry
YWNrUHJpdmF0ZVdlYk0uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVU
ZXh0LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9JbWFnZVRy
YW5zZmVyU2Vzc2lvblZULm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9QaXhlbEJ1ZmZlckNvbmZv
cm1lckNWLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTQw
Miw3ICs0MDYsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvRGlzcGxheVJlZnJlc2hNb25pdG9y
TWFjLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0UG9pbnRNYWMubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9GbG9hdFNpemVNYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1h
Yy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbnRQb2ludE1hYy5tbQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDAwZDU5NTM5OWRlNWNhMDUxOGYyMTA1MjJlZjQzMDUyYjFlODEwMmYuLmQ3NmNjNGZlZDg2
MjY5YjgzN2UzM2Y1NDUxZDgwYjE1OTdjYzBiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY2NDAsNiArNjY0MCwxMSBAQAog
CQkxQzY2MjYwRTFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQzY2MjYwRjFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM2Qjk1REQyMkM4NThBNDAwRTZGMTRGIC8qIFdITFNMQnVpbGRTdGFuZGFy
ZExpYnJhcnlGdW5jdGlvbk1hcC5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IFdITFNMQnVpbGRTdGFu
ZGFyZExpYnJhcnlGdW5jdGlvbk1hcC5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUM2RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBRDI1MEEyRTUzMDBENkU5MjAgLyogR2x5cGhQ
YWdlQ29yZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2x5cGhQYWdlQ29yZVRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAg
LyogRm9udENhc2NhZGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2Fk
ZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QUYyNTBB
MzNDRjAwRDZFOTIwIC8qIEZvbnRDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250
Q29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhCMDI1MEEz
NUYxMDBENkU5MjAgLyogRm9udENvY29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb2Nv
YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2
NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUw
NyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE2NCw3
ICsxMDE2OSw2IEBACiAJCTdDNEM5NkRBMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdFJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2MzU3MiAvKiBKU1JlYWRhYmxlU3RyZWFtQllP
QlJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlU3Ry
ZWFtQllPQlJlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRDOTZEQjFB
RDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0M0RURENzMxQTdCNjA3ODAwMTk4QzRE
IC8qIEZvbnRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEZvbnRDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MTRFMDAyNEFG
ODA1ODAwNTA3MTBGIC8qIENvbG9yQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvckNv
bnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MTRFMDIyNEFGODA1
ODAwNTA3MTBGIC8qIENvbG9yQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xv
ckNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNkFEMjFG
MzUyNTIwMDAzNEI2QkYgLyogRE9NUHJvbWlzZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVBy
b21pc2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMzYsNyArMTMx
NDAsNiBAQAogCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc2
MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2Fz
Y2FkZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZv
bnRDYXNjYWRlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzdC
MEQwMEE1QzEwMDMwMDc0RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdseXBoUGFnZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQUZGQzhDMEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3MTQwRDAwQ0FBODAwNEFFQTY0
IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJCMUY3MTUwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRS
dWxlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckV2ZW50c0hp
dFJ1bGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODEzMCw2ICsxODEzMywx
NyBAQAogCQkJbmFtZSA9IEluc3BlY3RvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTFDNkZEOEFBMjUwQTI5MjQwMEQ2RTkyMCAvKiBjdCAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMUM2RkQ4QUUyNTBBMzExNTAwRDZFOTIwIC8q
IEZvbnRDYXNjYWRlQ29yZVRleHQuY3BwICovLAorCQkJCTFDNkZEOEFGMjUwQTMzQ0YwMEQ2RTky
MCAvKiBGb250Q29yZVRleHQuY3BwICovLAorCQkJCTFDNkZEOEFDMjUwQTI5NEQwMEQ2RTkyMCAv
KiBGb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwICovLAorCQkJCTFDNkZEOEFEMjUwQTJFNTMw
MEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4dC5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGN0
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMUM4MUI5NEQwRTk3MzJEOTAw
MjY2RTA3IC8qIGluc3BlY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC0yNTgxNyw3ICsyNTgzMSw2IEBACiAJCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNF
NjRGIC8qIEZsb2F0U2l6ZU1hYy5tbSAqLywKIAkJCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8sCiAJCQkJQjJBRkZDNzYwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLywKLQkJCQlCMkFGRkM3QjBEMDBB
NUMxMDAzMDA3NEQgLyogR2x5cGhQYWdlTWFjLmNwcCAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2
MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSAqLywKIAkJCQlCMjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYg
LyogSW1hZ2VNYWMubW0gKi8sCiAJCQkJQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBv
aW50TWFjLm1tICovLApAQCAtMjU4NDQsNiArMjU4NTcsNyBAQAogCQkJCUI1MzIwRDY4MTIyQTI0
RTkwMDJEMTQ0MCAvKiBjb2NvYSAqLywKIAkJCQkyQ0UxMTg5ODI0QzI0MDJDMDAzNzcwRTkgLyog
Y29yZWltYWdlICovLAogCQkJCTkzMzJBQjNCMTY1MTVENzcwMEQ4MjdFQyAvKiBjcHUgKi8sCisJ
CQkJMUM2RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8qIGN0ICovLAogCQkJCUNEOUQ4MjdDMUM3QkIy
RUQwMDZGRjA2NiAvKiBjdiAqLywKIAkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0EgLyogZGlz
cGxheWxpc3RzICovLAogCQkJCUE3NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICov
LApAQCAtMjYyMDQsNyArMjYyMTgsNyBAQAogCQkJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAv
KiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8sCiAJCQkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5
IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8sCiAJCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzRE
IC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gKi8sCi0JCQkJN0M0RURENzMxQTdCNjA3ODAwMTk4QzRE
IC8qIEZvbnRDb2NvYS5tbSAqLywKKwkJCQkxQzZGRDhCMDI1MEEzNUYxMDBENkU5MjAgLyogRm9u
dENvY29hLmNwcCAqLywKIAkJCQkxQzEyQUMyQzFFRTc3OTk1MDA3OUUwQTAgLyogRm9udERlc2Ny
aXB0aW9uQ29jb2EuY3BwICovLAogCQkJCTFDMTJBQzI4MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250
RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcCAqLywKIAkJCQkxQzEyQUMyOTFFRTc3OEFF
MDA3OUUwQTAgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5oICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKaW5kZXggMzg3Mzk5
ZjE0NTQzZDZhMDE0NGRkYzlkODUzYzE5ZjE5NDQxMWVlOS4uZGQ3ODlkNDI2OTY4OTM1MWM2ZmQ3
NmExYTFmYjMyMWIwMzVmYjRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZS5oCkBAIC04MSw2ICs4MSwxMSBAQCBzdHJ1Y3QgR2x5cGhPdmVyZmxv
dyB7CiAgICAgYm9vbCBjb21wdXRlQm91bmRzIHsgZmFsc2UgfTsKIH07CiAKKyNpZiBVU0UoQ1Qp
Cit2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGb250JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgQ0dHbHlwaCosIGNvbnN0
IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KTsKK3ZvaWQgZmlsbFZlY3RvcldpdGhI
b3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywg
Q0dDb250ZXh0UmVmLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCk7Cisj
ZW5kaWYKKwogY2xhc3MgVGV4dExheW91dERlbGV0ZXIgewogcHVibGljOgogICAgIHZvaWQgb3Bl
cmF0b3IoKShUZXh0TGF5b3V0KikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCmluZGV4IGQ0YmMyYTRmMTExZDM4
MjBmODA5ZDE4MGZlNjczMjQ5MDljYmU3ZDYuLmYwNWU2ZjFiN2Q2OGQ2ZWM2ZmViMDI4MDljODk0
OTIwMjNjZTNmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwCkBAIC01MiwxNSArNTIsNiBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9v
bCBzeW50aGV0aQogewogfQogCi0jaWYgVVNFKENHKSAmJiBQTEFURk9STShXSU4pCi1Gb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiBjZ0ZvbnQsIGZsb2F0IHNpemUs
IGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRp
b24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBUZXh0UmVuZGVy
aW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKLSAgICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwg
c3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFu
dCwgdGV4dFJlbmRlcmluZ01vZGUpCi17Ci0gICAgbV9jZ0ZvbnQgPSBjZ0ZvbnQ7Ci0gICAgQVNT
RVJUKG1fY2dGb250KTsKLX0KLSNlbmRpZgotCiAjaWYgIVVTRShGUkVFVFlQRSkKIEZvbnRQbGF0
Zm9ybURhdGEgRm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoT3JpZW50YXRpb24oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgc291cmNlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24pCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1E
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRh
LmgKaW5kZXggNDZjOWFjNzc4YWQ5YTk2NDRiMTMxYzUzNmUyMGJiMDhhNGMwNGRhYy4uY2Q5OGYx
N2VlY2YxMGI4NjkyYzBlMTg2YzMwZTU2YzFmODBmZWY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtODIsNyArODIs
NyBAQCBwdWJsaWM6CiAKICAgICBGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBGb250
T3JpZW50YXRpb246Okhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6
OkF1dG9UZXh0UmVuZGVyaW5nKTsKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkK
ICAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFsc2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IGZh
bHNlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIEZvbnRX
aWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5kZXJp
bmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKTsKICNlbmRpZgog
CkBAIC05MCwxNiArOTAsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRh
IGNsb25lV2l0aFN5bnRoZXRpY09ibGlxdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYsIGJvb2wp
OwogICAgIHN0YXRpYyBGb250UGxhdGZvcm1EYXRhIGNsb25lV2l0aFNpemUoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYsIGZsb2F0KTsKIAotI2lmIFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAg
IEZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0Jv
bGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uLCBGb250V2lkdGhWYXJp
YW50LCBUZXh0UmVuZGVyaW5nTW9kZSk7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIGZsb2F0IHNpemUsIGJvb2wgc3lu
dGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBib29sIHVzZUdESSk7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENHKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJ
T2JqZWN0PEhGT05UPiwgQ0dGb250UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQs
IGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9vbCB1c2VHREkpOworI2lmIFBMQVRGT1JNKFdJTikg
JiYgVVNFKENUKQorICAgIEZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiwgQ1RGb250
UmVmLCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1
ZSwgYm9vbCB1c2VHREkpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pICYmIFVTRShESVJF
Q1QyRCkKQEAgLTExNSwxMSArMTExLDExIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKQotICAgIEhGT05UIGhmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250ID8gbV9mb250
LT5nZXQoKSA6IDA7IH0KKyAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faEZvbnQg
PyBtX2hGb250LT5nZXQoKSA6IDA7IH0KICAgICBib29sIHVzZUdESSgpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlR0RJOyB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkK
ICAgICBDVEZvbnRSZWYgZm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5nZXQoKTsgfQogICAg
IFdFQkNPUkVfRVhQT1JUIENURm9udFJlZiByZWdpc3RlcmVkRm9udCgpIGNvbnN0OyAvLyBSZXR1
cm5zIG51bGxwdHIgaWZmIHRoZSBmb250IGlzIG5vdCByZWdpc3RlcmVkLCBzdWNoIGFzIHdlYiBm
b250cyAob3RoZXJ3aXNlIHJldHVybnMgZm9udCgpKS4KIApAQCAtMTM2LDEwICsxMzIsNiBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1ZhcmlhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1Zh
cmlhdGlvbnM7IH0KIAotI2lmIFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAgIENHRm9udFJl
ZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NnRm9udC5nZXQoKTsgfQotI2VuZGlmCi0KICNp
ZiBVU0UoRElSRUNUMkQpCiAgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsgcmV0dXJu
IG1fZHdGb250LmdldCgpOyB9CiAgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9CkBAIC0yMjIsMTYgKzIxNCwxNCBAQCBw
cml2YXRlOgogICAgIHZvaWQgYnVpbGRTY2FsZWRGb250KGNhaXJvX2ZvbnRfZmFjZV90Kik7CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkKICAgICAvLyBGSVhNRTog
R2V0IHJpZCBvZiBvbmUgb2YgdGhlc2UuIFRoZXNlIHR3byBmb250cyBhcmUgc3VidGx5IGRpZmZl
cmVudCwgYW5kIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIG9uZSB0byB1c2Ugd2hlcmUuCiAgICAg
UmV0YWluUHRyPENURm9udFJlZj4gbV9mb250OwogICAgIG11dGFibGUgUmV0YWluUHRyPENURm9u
dFJlZj4gbV9jdEZvbnQ7Ci0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPFNoYXJlZEdE
SU9iamVjdDxIRk9OVD4+IG1fZm9udDsKICNlbmRpZgogCi0jaWYgVVNFKENHKSAmJiBQTEFURk9S
TShXSU4pCi0gICAgUmV0YWluUHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIFJlZlB0cjxTaGFyZWRHRElPYmplY3Q8SEZPTlQ+PiBtX2hGb250OwogI2VuZGlm
CiAKICNpZiBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCAwYTIzZDZhNTE0
ZjBjMWU0MmVhNDNkNzVlODFmMTdmMjMxNjZkZjU4Li4zZDYzMjhjYjFjMDMxYTU3ZjEzYTUwNDFh
YWFiYjJlMmI2NTYzMmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTIzLDE5ICsyMyw3IEBA
CiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQg
IkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgotI2ltcG9ydCAiRGFzaEFycmF5LmgiCi0jaW1wb3J0
ICJGb250LmgiCi0jaW1wb3J0ICJHbHlwaEJ1ZmZlci5oIgogI2ltcG9ydCAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW1wb3J0ICJMYXlvdXRSZWN0LmgiCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1w
b3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2Nv
YS9Db3JlVGV4dFNQSS5oPgotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0
Lmg+Ci0jZW5kaWYKLSNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogI2ltcG9ydCA8cGFsL2lvcy9VSUtpdFNvZnRMaW5rLmg+CkBAIC00OSwyNCAr
MzcsNiBAQCBTT0ZUX0xJTktfQ0xBU1MoQ29yZVVJLCBDVUlTdHlsZUVmZmVjdENvbmZpZ3VyYXRp
b24pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBD
R0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENH
Q29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKCkgc3RpbGwgaW1wYWN0cyB0ZXh0Ci0vLyByZW5k
ZXJpbmcsIHdoaWNoIGlzIHdoeSB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRp
YWxpYXNpbmciIHJhdGhlciB0aGFuICJzbW9vdGhpbmciIHRlcm1pbm9sb2d5LgotYm9vbCBGb250
Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSgpCi17Ci0jaWYgSEFWRShD
R19GT05UX1JFTkRFUklOR19HRVRfRk9OVF9TTU9PVEhJTkdfRElTQUJMRUQpCi0gICAgc3RhdGlj
IGJvb2wgc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOwotICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKLSAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdICgpIHsKLSAg
ICAgICAgc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkID0gIUNHRm9udFJlbmRlcmluZ0dldEZv
bnRTbW9vdGhpbmdEaXNhYmxlZCgpOwotICAgIH0pOwotICAgIHJldHVybiBzdWJwaXhlbEFudGlh
bGlhc2luZ0VuYWJsZWQ7Ci0jZWxpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7Ci0j
ZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCiBib29sIEZvbnRDYXNjYWRlOjpj
YW5SZXR1cm5GYWxsYmFja0ZvbnRzRm9yQ29tcGxleFRleHQoKQogewogICAgIHJldHVybiB0cnVl
OwpAQCAtNzcsMjggKzQ3LDcgQEAgYm9vbCBGb250Q2FzY2FkZTo6Y2FuRXhwYW5kQXJvdW5kSWRl
b2dyYXBoc0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENH
UG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQotewotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29u
dGV4dCkpOwotICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dT
aXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBtYXRyaXgpOwotICAgICAg
ICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFkdmFuY2Uud2lkdGg7Ci0g
ICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55ICsgYWR2YW5jZS5oZWln
aHQ7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJlc3NF
ZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIEVOQUJMRShMRVRU
RVJQUkVTUykKLSAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKS5jb250YWlucyhU
ZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzaG93
TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dH
bHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3Zv
aWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29yZUNvbnRleHQsIGNv
bnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291
bnQpCiB7CiAjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQogICAgIGlmICghY291bnQpCkBAIC0xNTAs
MjI3ICs5OSw0IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFu
Y2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGCiAjZW5kaWYKIH0KIAotc3RhdGlj
IHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGdseXBo
cywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0gICAgaWYgKCFj
b3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNv
bnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0gICAgVmVjdG9yPENHUG9p
bnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKLSAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICBDR0FmZmluZVRy
YW5zZm9ybSByb3RhdGVMZWZ0VHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDAsIC0x
LCAxLCAwLCAwLCAwKTsKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdGV4dE1hdHJpeCA9IENH
Q29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCk7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHJ1bk1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KHRleHRNYXRyaXgsIHJvdGF0ZUxl
ZnRUcmFuc2Zvcm0pOwotICAgICAgICBTY29wZWRUZXh0TWF0cml4IHNhdmVkTWF0cml4KHJ1bk1h
dHJpeCwgY29udGV4dCk7Ci0KLSAgICAgICAgVmVjdG9yPENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlv
bnMoY291bnQpOwotICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBo
cyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgdHJhbnNsYXRpb25zLmRhdGEoKSwgY291
bnQpOwotCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJh
bnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCkpOwotCi0gICAgICAg
IENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50KHBvaW50LngoKSwgcG9pbnQueSgpICsgZm9u
dC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9ncmFwaGljQmFzZWxpbmUpIC0gZm9udC5m
b250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgQ0dTaXplIHRyYW5zbGF0aW9uID0gQ0dT
aXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhbnNsYXRpb25zW2ldLCByb3RhdGVMZWZ0VHJhbnNm
b3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5z
Zm9ybShDR1BvaW50TWFrZShwb3NpdGlvbi54IC0gdHJhbnNsYXRpb24ud2lkdGgsIHBvc2l0aW9u
LnkgKyB0cmFuc2xhdGlvbi5oZWlnaHQpLCB0cmFuc2Zvcm0pOwotICAgICAgICAgICAgcG9zaXRp
b24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsKLSAgICAgICAgICAgIHBvc2l0aW9uLnkgKz0gYWR2
YW5jZXNbaV0uaGVpZ2h0OwotICAgICAgICB9Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250
ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlw
aFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFkdmFuY2VzLCBjb3VudCk7Ci0gICAgICAg
IENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9u
cy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENH
Rm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29udGV4dCwgdHJ1ZSk7Ci0KLSAgICBDR0Fm
ZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4
dCk7Ci0gICAgYm9vbCBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlID0gV1RGOjppc0ludGVn
cmFsKGNvbnRleHRUcmFuc2Zvcm0uYSkgJiYgV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zv
cm0uZCkgJiYgY29udGV4dFRyYW5zZm9ybS5iID09IDAuZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMg
PT0gMC5mOwotICAgIGJvb2wgaXNSb3RhdGVkID0gKChjb250ZXh0VHJhbnNmb3JtLmIgfHwgY29u
dGV4dFRyYW5zZm9ybS5jKSAmJiAoY29udGV4dFRyYW5zZm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zv
cm0uZCkpOwotICAgIGJvb2wgZG9TdWJwaXhlbFF1YW50aXphdGlvbiA9IGlzVHJhbnNsYXRpb25P
ckludGVncmFsU2NhbGUgfHwgKCFpc1JvdGF0ZWQgJiYgY29udGV4dC5zaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9u
Rm9udHMoY2dDb250ZXh0LCB0cnVlKTsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uKTsKLX0KLQotdm9p
ZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9u
dFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotICAgIGlmICghcGxhdGZv
cm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBib29sIHNob3VsZEFudGlh
bGlhcyA9IHRydWU7Ci0gICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA9IHRydWU7Ci0gICAgCi0g
ICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQotICAgICAgICBzbW9vdGhpbmdNb2Rl
ID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwotCi0gICAgc3dpdGNoIChzbW9vdGhp
bmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAg
ICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Rm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhp
bmc6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOwotICAgICAgICBzaG91bGRTbW9v
dGhGb250cyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoIXNob3Vs
ZFVzZVNtb290aGluZygpKQotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotCi0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRT
bW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOwotICAg
IGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcp
Ci0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxk
U21vb3RoRm9udHMpOwotI2VuZGlmCi0KLSAgICBib29sIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFz
ID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCk7Ci0gICAgaWYgKHNob3Vs
ZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250ZXh0
U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKLQotICAgIGJv
b2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb250
ZXh0KTsKLSAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5jaG9yUG9pbnQ7Ci0KLSAgICBDR0FmZmlu
ZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OwotICAgIGlmICgh
cGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkpCi0gICAgICAgIG1hdHJpeCA9IENURm9u
dEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBtYXRyaXguYiA9IC1tYXRyaXgu
YjsKLSAgICBtYXRyaXguZCA9IC1tYXRyaXguZDsKLSAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5m
KHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MCk7Ci0gICAgICAgIGlmIChw
bGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7
Ci0gICAgICAgICAgICBpZiAoZm9udC5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAg
ICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNh
dChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAs
IDApKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNr
ZXcsIDEsIDAsIDApKTsKLSAgICB9Ci0gICAgU2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRy
aXgsIGNnQ29udGV4dCk7Ci0KLSAgICBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOwot
ICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0g
ICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4
dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7Ci0gICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9
IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
ICYmICFjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKLSAg
ICAgICAgRmxvYXRTaXplIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4
dENUTS5tYXBTaXplKEZsb2F0U2l6ZSgxLCAwKSk7Ci0gICAgICAgIGZsb2F0IGhvcml6b250YWxV
bml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMgPSBzcXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmlj
ZVBpeGVscy53aWR0aCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgo
KSArIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRh
bFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkpOwotICAgICAgICBpZiAoaG9yaXpvbnRh
bFVuaXRMZW5ndGhJbkRldmljZVBpeGVscykgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgYSBzY2FsZWQgZG93biBjb250ZXh0IHdvbid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRo
ZSBnbHlwaHMuIAotICAgICAgICAgICAgc3ludGhldGljQm9sZE9mZnNldCA9IHN0ZDo6bWluKHN5
bnRoZXRpY0JvbGRPZmZzZXQsIHN5bnRoZXRpY0JvbGRPZmZzZXQgLyBob3Jpem9udGFsVW5pdExl
bmd0aEluRGV2aWNlUGl4ZWxzKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBib29sIGhhc1Np
bXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdNb2Rl
OjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZv
cm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgp
KSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBpZiAoaGFzU2ltcGxl
U2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0
ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFu
dGlhbGlhc2luZy4KLSAgICAgICAgY29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xv
ciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigpOwotICAgICAgICBDb2xvciBzaGFkb3dG
aWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmaWxsQ29s
b3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dG
aWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRv
d09mZnNldC53aWR0aCgpOwotICAgICAgICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFu
c2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0
LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50
LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChjb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0
UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1
ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMp
OwotICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgICAgIHNob3dHbHlw
aHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwotICAgIH0KLQotICAgIGlmICh1c2VMZXR0ZXJw
cmVzc0VmZmVjdCkKLSAgICAgICAgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMo
cG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgZWxzZQotICAgICAgICBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBo
cyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgaWYg
KHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxv
YXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBwb2ludC55KCkpLCBmb250
LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoZnJvbSksIG51bUdseXBocyk7Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9y
KTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChzaG91bGRTbW9vdGhGb250
cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNl
dFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3Ro
aW5nKTsKLSNlbmRpZgotCi0gICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3Vs
ZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4
dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpOwotfQotCi1ib29sIEZvbnRDYXNjYWRlOjpwcmlt
YXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0Ci17Ci0gICAgY29uc3QgYXV0byYgZm9udERhdGEg
PSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVybiBpc1N5c3RlbUZvbnQoZm9udERhdGEucGxhdGZv
cm1EYXRhKCkuY3RGb250KCkpOwotfQotCi0vLyBGSVhNRTogVXNlIHRoaXMgb24gYWxsIHBvcnRz
LgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1
ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAg
ICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGgg
PSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0
aCwgYmFzZUNoYXJhY3Rlcik7Ci0KLSAgICBHbHlwaERhdGEgYmFzZUNoYXJhY3RlckdseXBoRGF0
YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFy
aWFudCk7Ci0KLSAgICBpZiAoIWJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGxlbmd0aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3Ro
KQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwotCi0gICAgYm9v
bCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNo
YXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9udCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmIChiYXNlQ2hhcmFjdGVyID49IDB4MDYw
MCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBmb250LT5zaG91bGROb3RCZVVzZWRGb3JB
cmFiaWMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotI2VuZGlmCi0gICAgICAgIGlmIChmb250
LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwpIHsKLSAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0
ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygpKQotICAgICAgICAgICAgICAgIGZvbnQg
PSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgpOwotICAgICAgICAgICAgZWxzZSBpZiAobV9m
b250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpID09IE5vbkNKS0dseXBoT3Jp
ZW50YXRpb246Ok1peGVkKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRm9udCYgdmVydGljYWxS
aWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCk7Ci0gICAgICAg
ICAgICAgICAgR2x5cGggdmVydGljYWxSaWdodEdseXBoID0gdmVydGljYWxSaWdodEZvbnQuZ2x5
cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcnRp
Y2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICAg
ICAgICAgICAgICBmb250ID0gJnZlcnRpY2FsUmlnaHRGb250OwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiB1cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmln
aHRPcmllbnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaCB1cHJpZ2h0R2x5cGgg
PSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAg
ICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgp
Ci0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdXByaWdodEZvbnQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9udCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRh
LmZvbnQpCi0gICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gdHJ1ZTsKLQotICAg
ICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFj
dGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiBmb250OwotICAgIH0KLQotICAgIGlm
ICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQg
JiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0
ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5mb250OwotCi0gICAgcmV0dXJuIEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7
Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q29jb2EuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMmEzOWNhMWIxOTA5ZTk5ZDBiMGIzZWFmM2Iw
YWU2Mjg3MWE3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGb250LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTM4
NDQ3ZmNhODQ3YzVmYzUwY2QyY2NhMmI0NWI3YWI1MDU4NjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNzczICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJGb250LmgiCi0KLSNp
bXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJGbG9hdFJlY3QuaCIKLSNpbXBvcnQgIkZvbnRDYWNo
ZS5oIgotI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5o
IgotI2ltcG9ydCAiTG9jYWxlQ29jb2EuaCIKLSNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKLSNpbXBv
cnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBv
cnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2lt
cG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hh
ci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW1w
b3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jZW5kaWYKLQotCi0jaWYgVVNFKEFQUEtJVCkKLUBpbnRl
cmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkpCi0tIChCT09MKV9pc0Zha2VGaXhlZFBp
dGNoOwotQGVuZAotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGlu
ZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYg
YikKLXsKLSAgICByZXR1cm4gYSAmJiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNh
c2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG87Ci19Ci0KLXN0YXRpYyBib29sIGZv
bnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICByZXR1cm4gZm9udEhh
c0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwot
fQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLWJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJl
VXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZv
bnRGYW1pbHlOYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcg
Um9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjov
L3Byb2JsZW0vMjEzMzMzMjY+Ci0gICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1
PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCi0gICAg
cmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFt
aWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCi0gICAgICAgIHx8IChDRlN0cmluZ0Nv
bXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAw
LjE1ZjsKLQotc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkK
LXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9u
dENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKLQotICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJp
bmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RS
KCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUu
Z2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Ci19Ci0K
LSNlbHNlCi0KLXN0YXRpYyBib29sIG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBm
YW1pbHlOYW1lKQotewotICAgIHJldHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Ci19
Ci0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5h
bWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShm
YW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKLX0KLQotYm9vbCBmb250SGFzVGFibGUoQ1RGb250
UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcpCi17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBh
ZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRp
b25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQo
KSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5k
ZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdz
LmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9u
dEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5z
aWduZWQgdGFibGVUYWcyKQotewotICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRD
b3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7
Ci0gICAgaWYgKCF0YWJsZVRhZ3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBDRkluZGV4
IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAo
Q0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAg
IGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgp
KSk7Ci0gICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkg
PyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7Ci0jZWxzZQotICAg
IG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/
IDEuMGYgOiAwLmY7Ci0jZW5kaWYKLQotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRH
ZXRVbml0c1BlckVtKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgZmxvYXQgcG9pbnRTaXpl
ID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRT
aXplID8gQ1RGb250R2V0Q2FwSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotICAg
IENHRmxvYXQgbGluZUdhcCA9IHBvaW50U2l6ZSA/IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9y
bURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZv
bnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBkZXNj
ZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkp
IDogMDsKLQotICAgIC8vIFRoZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBV
U0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9sbG93czoKLSAgICAvLyAiSWYgc2V0LCBpdCBpcyBz
dHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlw
b0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5l
IHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCi0gICAgLy8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0
aGlzIHJ1bGUgaW4gdGhlIGltcG9ydGFudCBjYXNlIG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxl
LgotICAgIGlmIChmb250SGFzVGFibGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRU
YWJsZU1BVEgpKSB7Ci0gICAgICAgIHNob3J0IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBv
TGluZUdhcDsKLSAgICAgICAgaWYgKE9wZW5UeXBlOjp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRm
b3JtRGF0YS5mb250KCksIHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsK
LSAgICAgICAgICAgIGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVy
RW0pICogcG9pbnRTaXplOwotICAgICAgICAgICAgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0
eXBvRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBsaW5lR2Fw
ID0gc2NhbGVFbVRvVW5pdHModHlwb0xpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRD
b3B5RmFtaWx5TmFtZShtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLQotICAgIC8vIERpc2FibGUg
YW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdpdGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMg
cmVxdWlyZSB0aGlzLgotICAgIGlmIChpc0FoZW1Gb250KGZhbWlseU5hbWUuZ2V0KCkpKQotICAg
ICAgICBtX2FsbG93c0FudGlhbGlhc2luZyA9IGZhbHNlOwotCi0jaWYgUExBVEZPUk0oTUFDKQot
ICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRv
IGNsb3NlbHkgbWF0Y2ggdGhlCi0gICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNy
b3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFu
ZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAg
IC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFk
anVzdG1lbnQgaW5zdGVhZAotICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBp
ZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCAmJiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFt
aWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIGFzY2VudCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBk
ZXNjZW50KSAqIDAuMTVmKTsKLSNlbmRpZgotCi0gICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcg
YmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCi0gICAgZmxvYXQgbGlu
ZVNwYWNpbmcgPSBscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihs
aW5lR2FwKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUg
bWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8v
IDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgotICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2Fw
ID49IDMgJiYgZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgp
LCBDRlNUUigiSGlyYWdpbm8iKSkpIHsKLSAgICAgICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsK
LSAgICAgICAgZGVzY2VudCA9IDM7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgaWYgKHBsYXRm
b3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAh
aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhz
ID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNl
QWRqdXN0bWVudChtX3BsYXRmb3JtRGF0YS5mb250KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2Vu
dCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsKLQotICAgIGxpbmVHYXAgPSBjZWlsZihs
aW5lR2FwKTsKLSAgICBsaW5lU3BhY2luZyA9IGNlaWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBj
ZWlsKGRlc2NlbnQpICsgbGluZUdhcDsKLSAgICBhc2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1
c3RtZW50KTsKLSAgICBkZXNjZW50ID0gY2VpbGYoZGVzY2VudCk7Ci0KLSAgICBtX3Nob3VsZE5v
dEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFt
aWx5TmFtZS5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIENHRmxvYXQgeEhlaWdodCA9IDA7Ci0gICAg
aWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewotICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCku
b3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsKLSAgICAgICAg
ICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3Np
YmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUK
LSAgICAgICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9y
dGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgICAg
ICBHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOwotICAgICAgICAgICAgaWYg
KHhHbHlwaCkKLSAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZv
cm1Cb3VuZHNGb3JHbHlwaCh4R2x5cGgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB4SGVpZ2h0ID0gQ1RGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250KCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgbV9mb250
TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwot
ICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4
SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsK
LSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxp
bmVQb3NpdGlvbihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRHZXRVbmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9y
bURhdGEuZm9udCgpKSk7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkK
LXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSAwOwotCi0g
ICAgYXV0byBvczJUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSwga0NURm9udFRhYmxlT1MyLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsK
LSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0
KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxl
LmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiAr
IG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdD
aGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRh
YmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxl
T3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKGhlYWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgo
aGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewotICAgICAgICBjb25zdCBVSW50OCogaGVhZCA9IENG
RGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKLSAgICAgICAgdXNob3J0IHV4TWluID0g
aGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAgICAgICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0
MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAgICAgU0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxT
SW50MTY+KHV4TWluKTsKLSAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+
KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0g
eE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9m
b250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0K
LQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdp
bGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBp
bml0Q2hhcldpZHRocygpOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19
Ci0KLWJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhG
b250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QK
LXsKLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZP
Uk0oTUFDKQotICAgIEdseXBoIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsK
LSAgICBpZiAoIWdseXBoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZv
bnRWYXJpYW50Q2FwcykgewotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogewotICAg
ICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwotICAg
ICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5
cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAg
IGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOwotICAgICAg
ICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgp
OwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKLSAgICAgICAg
YXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKLSAgICAg
ICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBo
KTsKLSAgICB9Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogewotICAgICAg
ICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAg
ICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGds
eXBoKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3Vw
cG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOwotCi0g
ICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
U21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRW
YXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0
ZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRo
ZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0o
SU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotc3RhdGljIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0
cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZO
dW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RG
b250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKLSAg
ICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFs
dWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJh
d0tleSwgaW50IHJhd1ZhbHVlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmcmF3S2V5KSk7Ci0gICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwg
JnJhd1ZhbHVlKSk7Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBl
SWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKLSAg
ICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKLSAgICBy
ZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5
cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYg
c291cmNlKQotewotICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3Vy
Y2UpOwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAw
OwotICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsKLSAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXgg
PSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwg
bGVuZ3RoIC0gbWluKSwgMSk7Ci0gICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUp
OwotICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAxOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg
aW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9u
dCwgQml0VmVjdG9yJiByZXN1bHQpCi17Ci0gICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBz
b3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBz
bWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlv
bkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbmpl
Y3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250
LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNv
dXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNt
YWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1
bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOwotfQotCi1jb25zdCBCaXRWZWN0
b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsKLSAgICAgICAgbV9nbHlwaHNTdXBwb3J0
ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVy
YWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0
ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShr
TG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEo
KS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNv
bnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25z
dAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgewotICAgICAg
ICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAg
IGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9u
dCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBp
bmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQo
KSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5q
ZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1Nl
bGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFs
bENhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2Fz
ZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgp
LCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25z
dCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgewotICAgICAgICBtX2ds
eXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RP
cGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVU
eXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3Is
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFs
dWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52
YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0
aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJp
dFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiks
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMu
dmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwg
cGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52
YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwg
a0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2ds
eXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1
ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3Rv
ciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fw
cy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRp
dGVDYXBzLnZhbHVlKCk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVE
ZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRo
ZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQotewotICAgIGlmICghZm9udCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoc3ludGhldGljQm9sZCkKLSAgICAgICAgZm9u
dFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OwotICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCi0g
ICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OwotCi0gICAgQ1RGb250U3lt
Ym9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZv
bnQpOwotCi0gICAgYm9vbCB1c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9u
dEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0g
ICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxp
Y1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRp
Y0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7Ci0KLSAgICByZXR1cm4g
Rm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlz
T3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIHJldHVybiBD
RkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
KSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0
dXJlVmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZE
aWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5z
S2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlv
bmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVy
S2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVG
ZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc09wZW5UeXBl
RmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZl
YXR1cmVUYWcpKTsKLSAgICBpbnQgcmF3VmFsdWU7Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBz
dGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJH
ZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFs
PENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxsb3B0OwotfQotCi1zdGF0aWMgaW5saW5lIHN0
ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJl
KQotewotICAgIEFTU0VSVChpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgaW50IHJh
d1R5cGU7Ci0gICAgQ0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVy
S2V5KSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcmF3VHlwZSk7Ci0gICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNz
KTsKLSAgICBpbnQgcmF3U2VsZWN0b3I7Ci0gICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0
aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJH
ZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYg
ZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250
KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250
Q29weUZlYXR1cmVzKGZvbnQpKTsKLSAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlH
ZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVh
dHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0g
c3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1
cmVzLmdldCgpLCBpKSk7Ci0gICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCByYXdGZWF0dXJlS2V5OwotICAgICAg
ICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0
dXJlS2V5KTsKLSAgICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGlj
X2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZv
bnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOwotICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3Rv
cnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2VsZWN0b3JzKTsKLSAgICAgICAgZm9yIChDRklu
ZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7ICsraikgewotICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4o
Q0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7Ci0gICAgICAgICAg
ICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVm
YXVsdEtleSkpOwotICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpbnQgcmF3SXNEZWZhdWx0OwotICAgICAgICAgICAgQ0ZO
dW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQp
OwotICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
c3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShD
RkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgYm9vbCBpc09w
ZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBl
ID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7Ci0gICAgaWYgKCFpc09wZW5UeXBlICYmICFp
c1RydWVUeXBlKQotICAgICAgICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFu
ZCB0aGlzIGZvbnQgZm9ybWF0LgotICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVm
PiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIGlmIChpc09wZW5UeXBlKSB7Ci0gICAgICAgIGF1
dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKGZl
YXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQot
ICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikp
Ci0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAi
KSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJw
YyIpKSkpIHsKLSAgICAgICAgICAgIGludCByYXdaZXJvID0gMDsKLSAgICAgICAgICAgIFJldGFp
blB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1plcm8pKTsKLSAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRh
ZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUs
IENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1
ZSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpc1RydWVUeXBlKSB7Ci0gICAgICAgIGF1
dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAg
ICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRy
dWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8
fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVj
dG9yKSkgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBr
Q1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0
dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBpZiAo
Q0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVG
ZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVy
S2V5LCBkZWZhdWx0U2VsZWN0b3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0
dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVG
ZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFp
ci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVy
ZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAg
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0
dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZh
dWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2Fz
ZVR5cGUsIGZvbnQpKQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxl
Y3Rvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwg
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktl
eSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENURm9udFJl
Zj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9u
dCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRp
Y19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1
cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKLSAgICBpZiAoIWZlYXR1cmVzKQotICAgICAgICByZXR1
cm4gZm9udDsKLSAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0
dXJlcy5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJl
cyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVh
dHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkg
PSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0Zl
YXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7Ci0gICAg
fQotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1
dGUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0g
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZ
X0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9y
UmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0
dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwotICAgIHJldHVybiBhZG9wdENGKENURm9udENy
ZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRy
LCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpjcmVhdGVG
b250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250
VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsK
LSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3lu
dGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNy
ZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3Jp
ZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwotfQotCi1SZWZQdHI8Rm9udD4gRm9u
dDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0
IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5z
aXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRz
ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBS
ZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENU
Rm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRh
aW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9u
dERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAg
IHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3Bs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50
aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZv
aWQgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJv
b2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcm
IGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNv
bnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05U
U0hBUEVHTFlQSFMpCi0gICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBo
KiogbmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50
KiogbmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikgewotICAg
ICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJhbmdlLmxvY2F0aW9uLCBz
dGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KGdseXBoQnVmZmVy
LnNpemUoKSkpOwotICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIDwgMCkgewotICAgICAgICAgICAg
cmFuZ2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2UubG9jYXRpb24sIC1yYW5nZS5sZW5ndGgpOwot
ICAgICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbiAtIHJhbmdlLmxlbmd0
aDsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlwaEluZGV4ICsg
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgZ2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJhbmdlLmxvY2F0
aW9uLCByYW5nZS5sZW5ndGgsIHRoaXMpOwotCi0gICAgICAgICpuZXdHbHlwaHNQb2ludGVyID0g
Z2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3QWR2
YW5jZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCk7
Ci0gICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5u
aW5nR2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdJbmRpY2VzUG9pbnRlciA9IGdseXBoQnVmZmVy
Lm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICB9OwotCi0gICAgYXV0
byBzdWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAg
YXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0
ZXJzKCk7Ci0gICAgYXV0byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVDb2NvYTo6Y2Fub25pY2FsTGFu
Z3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5n
KCk7Ci0gICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hhcGVXaXRoQ2x1
c3RlckNvbXBvc2l0aW9uCi0gICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250U2hhcGVX
aXRoS2VybmluZyA6IDApCi0gICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlv
bjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyAr
K2kpCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaElu
ZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotICAgIENURm9udFNoYXBlR2x5cGhz
KAotICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAotICAgICAgICByZWludGVycHJldF9jYXN0PENH
U2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5p
bmdHbHlwaEluZGV4KSksCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdp
bm5pbmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFy
Kj4odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuc2l6
ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKLSAgICAgICAgb3B0aW9ucywKLSAgICAgICAgbG9j
YWxlU3RyaW5nLmdldCgpLAotICAgICAgICBoYW5kbGVyKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kp
Ci0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4
KVtpXSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotI2Vsc2UKLQotICAgIFVOVVNFRF9QQVJB
TShiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHRleHQpOwotCi0gICAgLy8gQ1RGb250VHJhbnNmb3JtR2x5cGhzKCkgb3Bl
cmF0ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lkdGhJdGVyYXRvciBpdGVyYXRlcyBpbiBsb2dp
Y2FsIG9yZGVyLgotICAgIC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBpbiB2aXN1YWwgb3JkZXIganVz
dCBmb3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJhY2sgaW50byBsb2dpY2FsIG9yZGVyIHdoZW4K
LSAgICAvLyB0aGUgY2FsbCBpcyBkb25lLgotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBnbG9iYWwg
dmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBqdXN0IG9wZXJhdGluZyBvbiBh
IHNpbmdsZSBjaHVuayBvZiBpdC4KLSAgICAvLyBXaWR0aEl0ZXJhdG9yIGVuY291bnRlcnMgdGhl
IGNodW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwgc28gd2UgaGF2ZSB0byBtYWludGFpbiB0aGF0
IGludmFyaWFudC4KLSAgICAvLyBFdmVudHVhbGx5LCBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxl
VGV4dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHB1dCB0aGUgZW50aXJlIHRo
aW5nCi0gICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBidXQgdGhhdCdzIG9rYXkgYmVjYXVzZSBpdCBo
YXMgYSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXIuCi0gICAgLy8gT24gdGhlIG90aGVy
IGhhbmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwg
b3JkZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKLSAgICAvLyBvcmRlciwgd2hpY2ggbWVh
bnMgdGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBl
eGVjdXRlIHdoZW4KLSAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0g
ICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlw
aEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAt
IGJlZ2lubmluZ0dseXBoSW5kZXgpOwotCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRp
b25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6
IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKLSAgICBDVEZvbnRUcmFuc2Zvcm1H
bHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5p
bmdHbHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmlu
Z0dseXBoSW5kZXgsIG9wdGlvbnMpOwotI2VuZGlmCi0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQg
YWJvdmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkg
aXMuCi0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAg
ICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNp
emUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGV4dHJhY3ROdW1i
ZXIoQ0ZOdW1iZXJSZWYgbnVtYmVyKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChu
dW1iZXIpCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEZvbnQ6OmRldGVybWlu
ZVBpdGNoKCkKLXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgp
OwotICAgIEFTU0VSVChjdEZvbnQpOwotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8u
Ci0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxk
IHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBB
cHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAv
LyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9w
cm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQg
cGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFz
IGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2YQotICAg
IC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3Qg
dHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBB
cHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotCi0gICAg
YXV0byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAg
IGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7
Ci0KLSAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIoYWRvcHRDRihzdGF0aWNfY2Fz
dDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShtX3BsYXRmb3JtRGF0YS5mb250KCks
IGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkpOwotICAgIG1fdHJlYXRBc0Zp
eGVkUGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtDVEZvbnRNb25v
U3BhY2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxs
TmFtZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkgfHwgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpKSk7Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRp
dmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpKSkgewotICAg
ICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4
ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3
aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KLSAg
ICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIH0KLSNlbmRpZgotfQotCi1G
bG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
LXsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRH
ZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RG
b250T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZn
bHlwaCwgMCwgMSk7Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsK
LSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRX
aWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAg
IHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckds
eXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVy
bzsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jp
em9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246
Okhvcml6b250YWw7Ci0gICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gaG9y
aXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250T3JpZW50YXRp
b25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7Ci0jaWYgVVNFKENURk9O
VEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCi0gICAgICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0
eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKLSAgICAg
ICAgaWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSkg
JiYgIW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlvbnMoKSkKLSAgICAgICAgICAgIENURm9udEdl
dFVuc3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRTdHlsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgb3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKLSAgICAgICAgZWxz
ZQotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5
cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5j
ZSwgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgo
R2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENURm9udENy
ZWF0ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGgsIG51bGxwdHIp
KTsKLSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zm
c2V0KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQ
YXRoKG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8g
dHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNC
b2xkT2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJh
bnNsYXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0
aCkgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29w
eShyZXN1bHQuZ2V0KCkpKSB9OwotfQotCi1ib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2Rl
UG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29u
c3QKLXsKLSAgICBpZiAodmFyaWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBV
bmlDaGFyIGNvZGVVbml0c1syXTsKLSAgICBDR0dseXBoIGdseXBoc1syXTsKLSAgICBDRkluZGV4
IGNvdW50ID0gMDsKLSAgICBVMTZfQVBQRU5EX1VOU0FGRShjb2RlVW5pdHMsIGNvdW50LCBjaGFy
YWN0ZXIpOwotICAgIHJldHVybiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3Jt
RGF0YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGdseXBocywgY291bnQpOwotfQotCi1ib29sIEZv
bnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAotewotICAgIGF1dG8g
cGxhdGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOwotICAgIGlmICghcGxhdGZvcm1G
b250KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbGxvdyBtb3N0IG5vbi1pY29u
IGZvbnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEgc2luZ2xlIGNoYXJhY3RlciAn
YScsIHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxhdGluIGNoYXJhY3RlcnMuCi0g
ICAgVW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVyID0gJ2EnOwotICAgIENHR2x5cGggbG93ZXJj
YXNlQUdseXBoOwotICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3Jt
Rm9udCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VBR2x5cGgsIDEpKSB7Ci0gICAg
ICAgIGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBs
YXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgJmxvd2VyY2FzZUFHbHlwaCwg
bnVsbHB0ciwgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1
dG8gc3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChw
bGF0Zm9ybUZvbnQpKTsKLSAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1
cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5Q
bGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMgTGF0aW4gbm9uLWNvbnRyb2wg
Y2hhcmFjdGVycy4KLSAgICBjb25zdGV4cHIgVW5pQ2hhciBmaXJzdENoYXJhY3RlclRvVGVzdCA9
ICcgJzsKLSAgICBjb25zdGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFjdGVyVG9UZXN0ID0gJ34nOwot
ICAgIGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCA9IGxhc3RDaGFyYWN0
ZXJUb1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVzdCArIDE7Ci0KLSAgICBWZWN0b3I8Q0dHbHlw
aD4gZ2x5cGhzOwotICAgIGdseXBocy5maWxsKDAsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCk7
Ci0gICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UocGxhdGZvcm1Gb250LCBnbHlw
aHMuYmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJUb1Rlc3QsIG51bWJlck9mQ2hh
cmFjdGVyc1RvVGVzdCkpOwotICAgIGdseXBocy5yZW1vdmVBbGwoMCk7Ci0KLSAgICBpZiAoZ2x5
cGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPENHUmVj
dD4gYm91bmRpbmdSZWN0czsKLSAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5
cGhzLnNpemUoKSk7Ci0gICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9y
bUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGlu
Z1JlY3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOwotICAgIHJldHVybiBub3RGb3VuZCA9PSBi
b3VuZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVy
biAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IGRiMWI0ZmY0YTE2YTQyM2Zl
ODYzY2U3M2I1OGM2NjI4YzFiMDhlNjQuLmJiZTI5N2M0NzMxNmMzYmE5NTUyYjllZjczZGU1MTBh
Yjk5Y2I5NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTQ0LDI0ICs0NCw2
IEBAIGJvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBmb250KQogI2VuZGlmCiB9CiAKLS8vIFRo
ZXNlIENvcmVUZXh0IFRleHQgU3BhY2luZyBmZWF0dXJlIHNlbGVjdG9ycyBhcmUgbm90IGRlZmlu
ZWQgaW4gQ29yZVRleHQuCi1lbnVtIFRleHRTcGFjaW5nQ1RGZWF0dXJlU2VsZWN0b3IgeyBUZXh0
U3BhY2luZ1Byb3BvcnRpb25hbCwgVGV4dFNwYWNpbmdGdWxsV2lkdGgsIFRleHRTcGFjaW5nSGFs
ZldpZHRoLCBUZXh0U3BhY2luZ1RoaXJkV2lkdGgsIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoIH07
Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmIGZvbnQsIGZs
b2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBU
ZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKLSAgICA6IEZvbnRQbGF0Zm9ybURh
dGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdp
ZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCi17Ci0gICAgQVNTRVJUX0FSRyhmb250LCBm
b250KTsKLSAgICBtX2ZvbnQgPSBmb250OwotICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRUcmFpdENvbG9yR2x5cGhzOwotICAg
IG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5nZXQoKSk7Ci0g
ICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+
KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZSkpKTsK
LSAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENGRGljdGlvbmFyeUdldENvdW50
KHZhcmlhdGlvbnMuZ2V0KCkpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX2lz
RW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQuZ2V0KCkpOwotI2VuZGlmCi19
Ci0KIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogewogICAgIHVpbnRw
dHJfdCBmbGFncyA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fd2lkdGhWYXJpYW50KSA8PCA2CkBAIC05NiwyMCArNzgsMjAgQEAgaW5saW5lIGludCBtYXBG
b250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihGb250V2lkdGhWYXJpYW50IHZhcmlh
bnQpCiB7CiAgICAgc3dpdGNoKHZhcmlhbnQpIHsKICAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6
OlJlZ3VsYXJXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsOwor
ICAgICAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvcjsKIAogICAgIGNhc2UgRm9u
dFdpZHRoVmFyaWFudDo6SGFsZldpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdIYWxm
V2lkdGg7CisgICAgICAgIHJldHVybiBrSGFsZldpZHRoVGV4dFNlbGVjdG9yOwogCiAgICAgY2Fz
ZSBGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNp
bmdUaGlyZFdpZHRoOworICAgICAgICByZXR1cm4ga1RoaXJkV2lkdGhUZXh0U2VsZWN0b3I7CiAK
ICAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aDoKLSAgICAgICAgcmV0dXJu
IFRleHRTcGFjaW5nUXVhcnRlcldpZHRoOworICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRl
eHRTZWxlY3RvcjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWw7CisgICAgcmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0
U2VsZWN0b3I7CiB9CiAKIHN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjYXNjYWRl
VG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcAppbmRleCBkODE1NDhhMzBiOWQyMmNhZmY4YWE3ODcwZGFiNGJlZmIyMzRiOTA0
Li44YWVjMmVhM2Q0ZjE3NTlkZjdjZTY0MjM2YzMyYjY4MTU2NDRkZjcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmNwcApAQCAtNTMsOSArNTMsNiBAQCBXVEZfV0VBS19MSU5LX0ZP
UkNFX0lNUE9SVCh3ZWJtOjpzd2FwKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhN
RTogUmVtb3ZlIHRoaXMgb25jZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgaXMgYWRkZWQgdG8gQ01G
b3JtYXREZXNjcmlwdGlvbi5oCi1jb25zdGV4cHIgQ01WaWRlb0NvZGVjVHlwZSBrQ01WaWRlb0Nv
ZGVjVHlwZV9WUDkgeyAndnAwOScgfTsKLQogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogc3RhdGlj
IGJvb2wgaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTRlNDBkNDBjMzA1MTI3NjgwOWI2NTM5NDlhMGY3MWUzYzAzNjBiOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRl
Q29yZVRleHQuY3BwCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAx
MSwgMjAxNiBBcHBsZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRm9udENhc2Nh
ZGUuaCIKKworI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW1wb3J0ICJEYXNo
QXJyYXkuaCIKKyNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkdseXBoQnVmZmVyLmgiCisjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkxheW91dFJlY3QuaCIKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW1w
b3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+CisvKiNpZiBVU0UoQVBQS0lUKQorI2lt
cG9ydCA8QXBwS2l0L0FwcEtpdC5oPgorI2VuZGlmKi8KKyNpbXBvcnQgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ29uZnVzaW5nbHksIGV2ZW4gd2hlbiBD
R0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKSByZXR1cm5zIHRydWUsIENH
Q29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKCkgc3RpbGwgaW1wYWN0cyB0ZXh0CisvLyByZW5k
ZXJpbmcsIHdoaWNoIGlzIHdoeSB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlICJzdWJwaXhlbCBhbnRp
YWxpYXNpbmciIHJhdGhlciB0aGFuICJzbW9vdGhpbmciIHRlcm1pbm9sb2d5LgorYm9vbCBGb250
Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2YWlsYWJsZSgpCit7CisjaWYgSEFWRShD
R19GT05UX1JFTkRFUklOR19HRVRfRk9OVF9TTU9PVEhJTkdfRElTQUJMRUQpCisgICAgc3RhdGlj
IGJvb2wgc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgWyZdICgpIHsKKyAg
ICAgICAgc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkID0gIUNHRm9udFJlbmRlcmluZ0dldEZv
bnRTbW9vdGhpbmdEaXNhYmxlZCgpOworICAgIH0pOworICAgIHJldHVybiBzdWJwaXhlbEFudGlh
bGlhc2luZ0VuYWJsZWQ7CisjZWxpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIHRydWU7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIGZpbGxWZWN0b3JXaXRo
SG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKFZlY3RvcjxDR1BvaW50LCAyNTY+JiBwb3NpdGlvbnMs
IENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBj
b3VudCkKK3sKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9y
bUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKKyAgICBwb3NpdGlvbnNb
MF0gPSBDR1BvaW50WmVybzsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY291bnQ7ICsr
aSkgeworICAgICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGFkdmFuY2VzW2kgLSAxXSwgbWF0cml4KTsKKyAgICAgICAgcG9zaXRpb25zW2ldLnggPSBwb3Np
dGlvbnNbaSAtIDFdLnggKyBhZHZhbmNlLndpZHRoOworICAgICAgICBwb3NpdGlvbnNbaV0ueSA9
IHBvc2l0aW9uc1tpIC0gMV0ueSArIGFkdmFuY2UuaGVpZ2h0OworICAgIH0KK30KKworc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCisgICAgcmV0dXJuIGNv
bnRleHQudGV4dERyYXdpbmdNb2RlKCkuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpMZXR0ZXJw
cmVzcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gZmFs
c2U7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWdu
ZWQgY291bnQpCit7CisgICAgaWYgKCFjb3VudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dD
b250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKKwor
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7CisgICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKKyAgICBp
ZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCkgeworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSByb3RhdGVMZWZ0VHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlKDAsIC0xLCAxLCAwLCAwLCAwKTsKKyAgICAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCk7Cisg
ICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJ1bk1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KHRleHRNYXRyaXgsIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOworICAgICAgICBTY29wZWRUZXh0
TWF0cml4IHNhdmVkTWF0cml4KHJ1bk1hdHJpeCwgY29udGV4dCk7CisKKyAgICAgICAgVmVjdG9y
PENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOworICAgICAgICBDVEZvbnRHZXRWZXJ0
aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywg
dHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOworCisgICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRy
aXgoY29udGV4dCkpOworCisgICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9n
cmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAg
Q0dTaXplIHRyYW5zbGF0aW9uID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhbnNsYXRp
b25zW2ldLCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9
IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZShwb3NpdGlvbi54IC0gdHJh
bnNsYXRpb24ud2lkdGgsIHBvc2l0aW9uLnkgKyB0cmFuc2xhdGlvbi5oZWlnaHQpLCB0cmFuc2Zv
cm0pOworICAgICAgICAgICAgcG9zaXRpb24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsKKyAgICAg
ICAgICAgIHBvc2l0aW9uLnkgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0OworICAgICAgICB9CisgICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFk
dmFuY2VzLCBjb3VudCk7CisgICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOworICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29u
dGV4dCwgdHJ1ZSk7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0g
Q0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7CisgICAgYm9vbCBpc1RyYW5zbGF0aW9uT3JJbnRl
Z3JhbFNjYWxlID0gV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uYSkgJiYgV1RGOjpp
c0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uZCkgJiYgY29udGV4dFRyYW5zZm9ybS5iID09IDAu
ZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMgPT0gMC5mOworICAgIGJvb2wgaXNSb3RhdGVkID0gKChj
b250ZXh0VHJhbnNmb3JtLmIgfHwgY29udGV4dFRyYW5zZm9ybS5jKSAmJiAoY29udGV4dFRyYW5z
Zm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCkpOworICAgIGJvb2wgZG9TdWJwaXhlbFF1YW50
aXphdGlvbiA9IGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgfHwgKCFpc1JvdGF0ZWQgJiYg
Y29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSk7CisKKyAgICBDR0NvbnRleHRT
ZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKKyAgICBDR0Nv
bnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVs
UXVhbnRpemF0aW9uKTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKK3sK
KyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3Jt
RGF0YSgpOworICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CisKKyAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA9IHRydWU7CisgICAgCisgICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygp
KQorICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5n
OworCisgICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7CisgICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6QW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6
CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICAg
ICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250
U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlOworICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQorICAgICAgICBzaG91bGRT
bW9vdGhGb250cyA9IGZhbHNlOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9v
bCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9v
dGhGb250cyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOworI2VuZGlmCisKKyAgICBib29s
IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNn
Q29udGV4dCk7CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlh
bGlhcykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hv
dWxkQW50aWFsaWFzKTsKKworICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRV
c2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKKyAgICBVTlVTRURfVkFSSUFCTEUodXNlTGV0
dGVycHJlc3NFZmZlY3QpOworICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNob3JQb2ludDsKKwor
ICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7
CisgICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKKyAgICAgICAgbWF0
cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOworICAgIG1hdHJpeC5i
ID0gLW1hdHJpeC5iOworICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOworICAgIGlmIChwbGF0Zm9y
bURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVl
U2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwKTsKKyAg
ICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVudGF0aW9uRmFsbGJh
Y2soKSkKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCht
YXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywgMCwgMSwgMCwgMCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJh
bnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIC1vYmxpcXVlU2tl
dywgMCwgMSwgMCwgMCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAs
IC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOworICAgIH0KKyAgICBTY29wZWRUZXh0TWF0cml4IHJl
c3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKKworICAgIHNldENHRm9udFJlbmRlcmluZ01vZGUo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURh
dGEuc2l6ZSgpKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hh
ZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBjb250ZXh0LmdldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKKyAgICBmbG9hdCBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgaWYgKHN5bnRoZXRp
Y0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBw
ZWQoKSkgeworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhl
bHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKKyAgICAgICAgZmxvYXQg
aG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhvcml6b250YWxVbml0
U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBp
eGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkg
KiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7CisgICAgICAgIGlm
IChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7CisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxvdyB1cCB0aGUgZ2Fw
IGJldHdlZW4gdGhlIGdseXBocy4KKyAgICAgICAgICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBz
dGQ6Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNCb2xkT2Zmc2V0IC8gaG9yaXpv
bnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
Ym9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHRE
cmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIg
JiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgaWYg
KGhhc1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJz
ZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBz
dWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKKyAg
ICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKKyAgICAgICAgQ29s
b3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVk
QnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29s
b3Ioc2hhZG93RmlsbENvbG9yKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54
KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdu
b3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0
ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAgICAgICAgZmxvYXQgc2hhZG93VGV4
dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZh
bmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4
dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwg
bnVtR2x5cGhzKTsKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgICAg
ICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAg
ICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKKyAgICB9CisKKyNpZiBFTkFC
TEUoTEVUVEVSUFJFU1MpCisgICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQorICAgICAgICBz
aG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVt
R2x5cGhzKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICB9CisKKyAgICBp
ZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhG
bG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZv
bnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCisgICAg
ICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29s
b3IpOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHNob3VsZFNtb290aEZv
bnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKKyAgICAgICAgQ0dDb250ZXh0
U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9v
dGhpbmcpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hv
dWxkQW50aWFsaWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250
ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Cit9CisKK2Jvb2wgRm9udENhc2NhZGU6OnBy
aW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICBjb25zdCBhdXRvJiBmb250RGF0
YSA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJuIGlzU3lzdGVtRm9udChmb250RGF0YS5wbGF0
Zm9ybURhdGEoKS5jdEZvbnQoKSk7Cit9CisKKy8vIEZJWE1FOiBVc2UgdGhpcyBvbiBhbGwgcG9y
dHMuCitjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNl
cXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAorewor
ICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0
aCA9IDA7CisgICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVu
Z3RoLCBiYXNlQ2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCBOb3JtYWxW
YXJpYW50KTsKKworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5n
dGgpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICBi
b29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKKyAgICAgICAgY29u
c3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAgICAgY29udGludWU7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgw
NjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQtPnNob3VsZE5vdEJlVXNlZEZv
ckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgaWYgKGZv
bnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCkgeworICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJh
Y3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICAgICAgZm9u
dCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAgICAgICAgICBlbHNlIGlmICht
X2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhP
cmllbnRhdGlvbjo6TWl4ZWQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2ZXJ0aWNh
bFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKKyAgICAg
ICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5n
bHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodmVy
dGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAg
ICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmlnaHRGb250ID0gZm9udC0+dXBy
aWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAgIEdseXBoIHVwcmlnaHRHbHlw
aCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAg
ICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlw
aCkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0Rm9udDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb250ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZm9udCkKKyAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSB0cnVlOworCisg
ICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFy
YWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQorCisgICAg
aWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9u
dCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBiYXNlQ2hh
cmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJhY2so
KTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y3QvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0
L0ZvbnRDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY0NzU1ZWVlZWY0NGQ3YjJmMzQ0YWYxOGI0
MTU5ODE1ZGNlMTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSw3NjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJGb250LmgiCisKKyNpbXBvcnQg
IkNvbG9yLmgiCisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBvcnQgIkZvbnRDYWNoZS5oIgor
I2ltcG9ydCAiRm9udENhc2NhZGUuaCIKKyNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgorI2lt
cG9ydCAiTG9jYWxlQ29jb2EuaCIKKyNpbXBvcnQgIk9wZW5UeXBlQ0cuaCIKKyNpbXBvcnQgIlNo
YXJlZEJ1ZmZlci5oIgorI2ltcG9ydCA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbXBvcnQgPGZs
b2F0Lmg+CisjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2ltcG9ydCA8
cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgor
I2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNp
bXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBDRlN0
cmluZ1JlZiBiKQoreworICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29tcGFyZShhLCBiLCBrQ0ZD
b21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbzsKK30KKworc3RhdGlj
IGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBmb250KQoreworICAgIHJldHVy
biBmb250SGFzRWl0aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxlVmhlYSwga0NURm9udFRhYmxl
Vk9SRyk7Cit9CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorYm9vbCBmb250RmFtaWx5U2hv
dWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQoreworICAg
IGlmICghZm9udEZhbWlseU5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRp
bWVzIE5ldyBSb21hbiBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3JtYW50IGVub3VnaCB0byB1c2Uu
IDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMyNj4KKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0v
MTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhl
ZC4KKyAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiks
IGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENG
U3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNv
bXBhcmVFcXVhbFRvKTsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IGtMaW5lSGVpZ2h0QWRqdXN0
bWVudCA9IDAuMTVmOworCitzdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1c3RtZW50KENURm9udFJl
ZiBmb250KQoreworICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9IGFkb3B0
Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOworCisgICAgaWYgKCFmYW1pbHlOYW1lIHx8
ICFDRlN0cmluZ0dldExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQo
KSwgQ0ZTVFIoIlRpbWVzIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFt
aWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhlbHZldGljYSIpKQorICAgICAgICB8fCBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIuSGVsdmV0aWNhIE5ldWVVSSIp
KTsKK30KKworI2Vsc2UKKworc3RhdGljIGJvb2wgbmVlZHNBc2NlbnRBZGp1c3RtZW50KENGU3Ry
aW5nUmVmIGZhbWlseU5hbWUpCit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgKGNhc2VJbnNl
bnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVzIikpCisgICAgICAgIHx8IGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkhlbHZldGljYSIpKQorICAg
ICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJDb3VyaWVy
IikpKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBib29sIGlzQWhlbUZvbnQoQ0ZTdHJpbmdSZWYg
ZmFtaWx5TmFtZSkKK3sKKyAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJBaGVtIikpOworfQorCitib29sIGZvbnRIYXNUYWJs
ZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykKK3sKKyAgICBhdXRvIHRhYmxl
VGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmICghdGFibGVUYWdzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVU
YWdzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxl
czsgKytpbmRleCkgeworICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19jYXN0PENURm9udFRhYmxl
VGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0
YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOworICAgICAgICBpZiAodGFnID09IHRhYmxlVGFnKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVU
YWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpCit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENG
KENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09w
dGlvbnMpKTsKKyAgICBpZiAoIXRhYmxlVGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Cisg
ICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsK
KyAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgp
LCBpbmRleCkpKTsKKyAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZzEgfHwgdGFnID09IHRhYmxl
VGFnMikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDI0LjBmKSA6IDAuZjsKKyNl
bHNlCisgICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGlj
Qm9sZCgpID8gMS4wZiA6IDAuZjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIG1f
c2NyaXB0Q2FjaGUgPSAwOworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBudWxscHRyOwor
ICAgIGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIGluaXRHRElG
b250KCk7CisjZW5kaWYKKworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0
c1BlckVtKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8g
Q1RGb250R2V0Q2FwSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxv
YXQgbGluZUdhcCA9IHBvaW50U2l6ZSA/IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKSA6IDA7CisgICAgQ0dGbG9hdCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRB
c2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisgICAgQ0dGbG9hdCBkZXNjZW50ID0g
cG9pbnRTaXplID8gQ1RGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsK
KworICAgIC8vIFRoZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQ
T19NRVRSSUNTIGZsYWcgYXMgZm9sbG93czoKKyAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmds
eSByZWNvbW1lbmRlZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2Nl
bmRlcisgT1MvMi5zVHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNp
bmcgZm9yIHRoaXMgZm9udC4iCisgICAgLy8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1
bGUgaW4gdGhlIGltcG9ydGFudCBjYXNlIG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgorICAg
IGlmIChmb250SGFzVGFibGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1B
VEgpKSB7CisgICAgICAgIHNob3J0IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdh
cDsKKyAgICAgICAgaWYgKE9wZW5UeXBlOjp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0
YS5mb250KCksIHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKKyAgICAg
ICAgICAgIGFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOworICAgICAgICAgICAgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVz
Y2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgICAgICAgICBsaW5lR2FwID0gc2Nh
bGVFbVRvVW5pdHModHlwb0xpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAg
ICB9CisgICAgfQorCisgICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFt
aWx5TmFtZShtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKworICAgIC8vIERpc2FibGUgYW50aWFs
aWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdpdGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWly
ZSB0aGlzLgorICAgIGlmIChpc0FoZW1Gb250KGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICBt
X2FsbG93c0FudGlhbGlhc2luZyA9IGZhbHNlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8v
IFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3Nl
bHkgbWF0Y2ggdGhlCisgICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQg
Y291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4g
VGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGlu
Y29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1l
bnQgaW5zdGVhZAorICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBpZiAob3Jp
Z2luKCkgPT0gT3JpZ2luOjpMb2NhbCAmJiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFt
ZS5nZXQoKSkpCisgICAgICAgIGFzY2VudCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50
KSAqIDAuMTVmKTsKKyNlbmRpZgorCisgICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3Jl
IHRoZSBsaW5lIG1ldHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCisgICAgZmxvYXQgbGluZVNwYWNp
bmcgPSBscm91bmRmKGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2Fw
KTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmlj
cyB0byBhbGxvdyByb29tIGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgorICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS81Mzg2MTgzPgorICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMg
JiYgZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNU
UigiSGlyYWdpbm8iKSkpIHsKKyAgICAgICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKKyAgICAg
ICAgZGVzY2VudCA9IDM7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgaWYgKHBsYXRmb3JtRGF0
YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0
T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9u
dEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0
bWVudChtX3BsYXRmb3JtRGF0YS5mb250KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBr
TGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsKKworICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2Fw
KTsKKyAgICBsaW5lU3BhY2luZyA9IGNlaWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRl
c2NlbnQpICsgbGluZUdhcDsKKyAgICBhc2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50
KTsKKyAgICBkZXNjZW50ID0gY2VpbGYoZGVzY2VudCk7CisKKyAgICBtX3Nob3VsZE5vdEJlVXNl
ZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFt
ZS5nZXQoKSk7CisjZW5kaWYKKworICAgIENHRmxvYXQgeEhlaWdodCA9IDA7CisgICAgaWYgKG1f
cGxhdGZvcm1EYXRhLnNpemUoKSkgeworICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsKKyAgICAgICAgICAgIC8v
IE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZv
ciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAg
ICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBv
ZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICBHbHlw
aCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICAgICAgaWYgKHhHbHlw
aCkKKyAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3Vu
ZHNGb3JHbHlwaCh4R2x5cGgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB4
SGVpZ2h0ID0gQ1RGb250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25G
b250KCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7CisgICAgfQorCisgICAgbV9mb250TWV0cmlj
cy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50
KGFzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOworICAgIG1f
Zm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRMaW5lR2FwKGxpbmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0
KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKKyAgICBt
X2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3Np
dGlvbihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVy
bGluZVRoaWNrbmVzcyhDVEZvbnRHZXRVbmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKSk7Cit9CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAg
ICBtX2F2Z0NoYXJXaWR0aCA9IDA7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwOworCisgICAgYXV0
byBvczJUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSwga0NURm9udFRhYmxlT1MyLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBp
ZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Cisg
ICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgp
KTsKKyAgICAgICAgU0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlsz
XTsKKyAgICAgICAgbV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lk
dGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsK
KyAgICB9CisKKyAgICBhdXRvIGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9u
Tm9PcHRpb25zKSk7CisgICAgaWYgKGhlYWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRh
YmxlLmdldCgpKSA+PSA0MikgeworICAgICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdl
dEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsKKyAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFsz
Nl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAy
NTYgKyBoZWFkWzQxXTsKKyAgICAgICAgU0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+
KHV4TWluKTsKKyAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4
KTsKKyAgICAgICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7
CisgICAgICAgIG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0
cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIH0KKworICAg
IC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9w
dWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KKyAgICBpbml0Q2hh
cldpZHRocygpOworfQorCitib29sIEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJG
b3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMiBjaGFy
YWN0ZXIpIGNvbnN0Cit7CisjaWYgKFBMQVRGT1JNKElPU19GQU1JTFkpICYmIFRBUkdFVF9PU19J
T1MpIHx8IFBMQVRGT1JNKE1BQykKKyAgICBHbHlwaCBnbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVy
KGNoYXJhY3Rlcik7CisgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
U21hbGw6IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlTbWFs
bENhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBw
b3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0
ZTogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0
ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxs
OiB7CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzKCk7CisgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9y
dGVkLmdldChnbHlwaCk7CisgICAgfQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRp
dGU6IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRp
dGVDYXBzKCk7CisgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3Vw
cG9ydGVkLmdldChnbHlwaCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFN5bnRo
ZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2hh
cmFjdGVyKTsKKworICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7CisgICAgY2FzZSBGb250
VmFyaWFudENhcHM6OlNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6Cisg
ICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpBbGxQZXRpdGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBs
aXN0ZWQgYWJvdmUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorfQorCisj
aWYgKFBMQVRGT1JNKElPU19GQU1JTFkpICYmIFRBUkdFVF9PU19JT1MpIHx8IFBMQVRGT1JNKE1B
QykKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNPcGVuVHlwZURp
Y3Rpb25hcnkoQ0ZTdHJpbmdSZWYga2V5LCBpbnQgcmF3VmFsdWUpCit7CisgICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZUeXBlUmVmIGtl
eXNbXSA9IHsga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBrZXksIHZhbHVlLmdldCgpIH07
CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQor
CitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBzVHJ1ZVR5cGVEaWN0
aW9uYXJ5KGludCByYXdLZXksIGludCByYXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1i
ZXJSZWY+IGtleSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd0tleSkpOworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4g
dmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOworICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlm
aWVyS2V5IH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBrZXkuZ2V0KCksIHZhbHVlLmdl
dCgpIH07CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworfQorCitzdGF0aWMgdm9pZCB1bmlvbkJpdFZlY3RvcnMoQml0VmVjdG9yJiByZXN1bHQsIENG
Qml0VmVjdG9yUmVmIHNvdXJjZSkKK3sKKyAgICBDRkluZGV4IGxlbmd0aCA9IENGQml0VmVjdG9y
R2V0Q291bnQoc291cmNlKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShsZW5ndGgpOworICAgIENG
SW5kZXggbWluID0gMDsKKyAgICB3aGlsZSAobWluIDwgbGVuZ3RoKSB7CisgICAgICAgIENGSW5k
ZXggbmV4dEluZGV4ID0gQ0ZCaXRWZWN0b3JHZXRGaXJzdEluZGV4T2ZCaXQoc291cmNlLCBDRlJh
bmdlTWFrZShtaW4sIGxlbmd0aCAtIG1pbiksIDEpOworICAgICAgICBpZiAobmV4dEluZGV4ID09
IGtDRk5vdEZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJlc3VsdC5zZXQobmV4
dEluZGV4LCB0cnVlKTsKKyAgICAgICAgbWluID0gbmV4dEluZGV4ICsgMTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTdHJpbmdSZWYgZmVhdHVyZSwg
Q1RGb250UmVmIGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIFJldGFpblB0cjxDRkJp
dFZlY3RvclJlZj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3ZlcmFnZUZvckZl
YXR1cmUoZm9udCwgc21hbGxDYXBzT3BlblR5cGVEaWN0aW9uYXJ5KGZlYXR1cmUsIDEpLmdldCgp
KSk7CisgICAgdW5pb25CaXRWZWN0b3JzKHJlc3VsdCwgc291cmNlLmdldCgpKTsKK30KKworc3Rh
dGljIHZvaWQgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShpbnQgdHlwZSwgaW50IHNlbGVjdG9yLCBD
VEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0
VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVh
dHVyZShmb250LCBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkodHlwZSwgc2VsZWN0b3IpLmdl
dCgpKSk7CisgICAgdW5pb25CaXRWZWN0b3JzKHJlc3VsdCwgc291cmNlLmdldCgpKTsKK30KKwor
Y29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpIGNvbnN0
Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKSB7CisgICAgICAgIG1f
Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMgPSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5qZWN0
T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1f
Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVU
eXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3Rvciwg
cGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVl
KCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1
ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcyA9IEJpdFZlY3Rv
cigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRm
b3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgp
KTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigiYzJzYyIpLCBwbGF0Zm9y
bURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7
CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNh
c2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVy
YWdlKGtVcHBlckNhc2VUeXBlLCBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUo
KTsKK30KKworY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMpIHsK
KyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMgPSBCaXRWZWN0b3IoKTsKKyAg
ICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigicGNhcCIpLCBwbGF0Zm9ybURhdGEo
KS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCkpOworICAgICAg
ICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRl
Q2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlQ
ZXRpdGVDYXBzLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRC
eVBldGl0ZUNhcHMudmFsdWUoKTsKK30KKworY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNT
dXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBw
b3J0ZWRCeUFsbFBldGl0ZUNhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBl
dGl0ZUNhcHMgPSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShD
RlNUUigicGNhcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENG
U1RSKCJjMnBjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xv
d2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgp
LmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAg
ICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VQZXRp
dGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRC
eUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorI2VuZGlmCisKK3N0YXRpYyBSZWZQdHI8
Rm9udD4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0
cywgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK3sKKyAgICBpZiAo
IWZvbnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHN5bnRoZXRpY0JvbGQp
CisgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICBpZiAoc3ludGhl
dGljSXRhbGljKQorICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRJdGFsaWNUcmFpdDsKKwor
ICAgIENURm9udFN5bWJvbGljVHJhaXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhmb250KTsKKworICAgIGJvb2wgdXNlZFN5bnRoZXRpY0JvbGQgPSAoZm9udFRy
YWl0cyAmIGtDVEZvbnRCb2xkVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRU
cmFpdEJvbGQpOworICAgIGJvb2wgdXNlZFN5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAm
IGtDVEZvbnRJdGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0
SXRhbGljKTsKKyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKGZvbnQsIHNpemUs
IHVzZWRTeW50aGV0aWNCb2xkLCB1c2VkU3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24pOwor
CisgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc09wZW5UeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKK3sK
KyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVRhZykgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9u
dE9wZW5UeXBlRmVhdHVyZVZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzVHJ1ZVR5
cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rp
b25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5
KSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVj
dG9ySWRlbnRpZmllcktleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Q0ZTdHJpbmdS
ZWY+IG9wZW5UeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKK3sKKyAgICBBU1NF
UlQoaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSkpOworICAgIENGU3RyaW5nUmVmIHRhZyA9IHN0
YXRpY19jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RG
b250T3BlblR5cGVGZWF0dXJlVGFnKSk7CisgICAgaW50IHJhd1ZhbHVlOworICAgIENGTnVtYmVy
UmVmIHZhbHVlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgIGF1dG8gc3VjY2Vz
cyA9IENGTnVtYmVyR2V0VmFsdWUodmFsdWUsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSk7
CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICByZXR1cm4gcmF3VmFs
dWUgPyBPcHRpb25hbDxDRlN0cmluZ1JlZj4odGFnKSA6IFdURjo6bnVsbG9wdDsKK30KKworc3Rh
dGljIGlubGluZSBzdGQ6OnBhaXI8aW50LCBpbnQ+IHRydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25h
cnlSZWYgZmVhdHVyZSkKK3sKKyAgICBBU1NFUlQoaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSkp
OworICAgIGludCByYXdUeXBlOworICAgIENGTnVtYmVyUmVmIHR5cGUgPSBzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVU
eXBlSWRlbnRpZmllcktleSkpOworICAgIGF1dG8gc3VjY2VzcyA9IENGTnVtYmVyR2V0VmFsdWUo
dHlwZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1R5cGUpOworICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgaW50IHJhd1NlbGVjdG9yOworICAgIENGTnVtYmVyUmVmIHNl
bGVjdG9yID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZl
YXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgc3VjY2Vz
cyA9IENGTnVtYmVyR2V0VmFsdWUoc2VsZWN0b3IsIGtDRk51bWJlckludFR5cGUsICZyYXdTZWxl
Y3Rvcik7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIocmF3VHlwZSwgcmF3U2VsZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5l
IENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvckZvclRydWVUeXBlRmVhdHVyZShpbnQga2V5LCBD
VEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBh
ZG9wdENGKENURm9udENvcHlGZWF0dXJlcyhmb250KSk7CisgICAgQ0ZJbmRleCBmZWF0dXJlQ291
bnQgPSBDRkFycmF5R2V0Q291bnQoZmVhdHVyZXMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBm
ZWF0dXJlVHlwZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVl
QXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOworICAgICAgICBDRk51bWJlclJlZiBmZWF0dXJl
S2V5ID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmVUeXBlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIGlmICgh
ZmVhdHVyZUtleSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgcmF3RmVhdHVy
ZUtleTsKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShmZWF0dXJlS2V5LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmcmF3RmVhdHVyZUtleSk7CisgICAgICAgIGlmIChyYXdGZWF0dXJlS2V5ICE9IGtleSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENGQXJyYXlSZWYgZmVhdHVyZVNlbGVj
dG9ycyA9IHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1
cmVUeXBlLCBrQ1RGb250RmVhdHVyZVR5cGVTZWxlY3RvcnNLZXkpKTsKKyAgICAgICAgaWYgKCFm
ZWF0dXJlU2VsZWN0b3JzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENGSW5kZXgg
c2VsZWN0b3JzQ291bnQgPSBDRkFycmF5R2V0Q291bnQoZmVhdHVyZVNlbGVjdG9ycyk7CisgICAg
ICAgIGZvciAoQ0ZJbmRleCBqID0gMDsgaiA8IHNlbGVjdG9yc0NvdW50OyArK2opIHsKKyAgICAg
ICAgICAgIENGRGljdGlvbmFyeVJlZiBmZWF0dXJlU2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRkRp
Y3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZVNlbGVjdG9ycywgaikp
OworICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgaXNEZWZhdWx0ID0gc3RhdGljX2Nhc3Q8Q0ZOdW1i
ZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1
cmVTZWxlY3RvckRlZmF1bHRLZXkpKTsKKyAgICAgICAgICAgIGlmICghaXNEZWZhdWx0KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IHJhd0lzRGVmYXVsdDsKKyAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUoaXNEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3SXNEZWZhdWx0KTsKKyAgICAgICAgICAgIGlmICghcmF3SXNEZWZhdWx0KQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtDVEZvbnRGZWF0dXJl
U2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcmVt
b3ZlZEZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUsIENURm9udFJlZiBmb250KQorewor
ICAgIGJvb2wgaXNPcGVuVHlwZSA9IGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgIGJv
b2wgaXNUcnVlVHlwZSA9IGlzVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgIGlmICghaXNP
cGVuVHlwZSAmJiAhaXNUcnVlVHlwZSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmU7IC8vIFdlIGRv
bid0IHVuZGVyc3RhbmQgdGhpcyBmb250IGZvcm1hdC4KKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxl
RGljdGlvbmFyeVJlZj4gcmVzdWx0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBpZiAoaXNPcGVuVHlwZSkg
eworICAgICAgICBhdXRvIGZlYXR1cmVUYWcgPSBvcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7Cisg
ICAgICAgIGlmIChmZWF0dXJlVGFnICYmIChDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZT
VFIoInNtY3AiKSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBD
RlNUUigiYzJzYyIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCks
IENGU1RSKCJwY2FwIikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUo
KSwgQ0ZTVFIoImMycGMiKSkpKSB7CisgICAgICAgICAgICBpbnQgcmF3WmVybyA9IDA7CisgICAg
ICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHplcm8gPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdaZXJvKSk7Cisg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVu
VHlwZUZlYXR1cmVUYWcsIGZlYXR1cmVUYWcudmFsdWUoKSk7CisgICAgICAgICAgICBDRkRpY3Rp
b25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwg
emVyby5nZXQoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIENGRGljdGlv
bmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICAg
ICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlLCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaXNUcnVlVHlwZSkg
eworICAgICAgICBhdXRvIHRydWVUeXBlRmVhdHVyZVBhaXIgPSB0cnVlVHlwZUZlYXR1cmUoZmVh
dHVyZSk7CisgICAgICAgIGlmICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtMb3dlckNh
c2VUeXBlICYmICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlU21hbGxD
YXBzU2VsZWN0b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2VyQ2FzZVBl
dGl0ZUNhcHNTZWxlY3RvcikpIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJl
c3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAg
ICAgICAgICAgaWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3Rv
ckZvclRydWVUeXBlRmVhdHVyZShrTG93ZXJDYXNlVHlwZSwgZm9udCkpCisgICAgICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVj
dG9ySWRlbnRpZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRG
ZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgICAgICB9IGVsc2Ug
aWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga1VwcGVyQ2FzZVR5cGUgJiYgKHRydWVU
eXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0
cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9y
KSkgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RG
b250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
LCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAgICBpZiAoQ0ZO
dW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0
dXJlKGtVcHBlckNhc2VUeXBlLCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5
LCBkZWZhdWx0U2VsZWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3Rvcklk
ZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJl
U2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBD
RkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3Vs
dC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFJldGFp
blB0cjxDVEZvbnRSZWY+IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMo
Q1RGb250UmVmIGZvbnQpCit7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZlYXR1cmVzID0g
YWRvcHRDRihzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQs
IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUpKSk7CisgICAgaWYgKCFmZWF0dXJlcykK
KyAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgQ0ZJbmRleCBmZWF0dXJlQ291bnQgPSBDRkFycmF5
R2V0Q291bnQoZmVhdHVyZXMuZ2V0KCkpOworICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJl
Zj4gbmV3RmVhdHVyZXMgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGZlYXR1cmVDb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZv
ciAoQ0ZJbmRleCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKSB7CisgICAgICAgIENGRGlj
dGlvbmFyeVJlZiBmZWF0dXJlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5
R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAgICAgIENGQXJyYXlBcHBl
bmRWYWx1ZShuZXdGZWF0dXJlcy5nZXQoKSwgcmVtb3ZlZEZlYXR1cmUoZmVhdHVyZSwgZm9udCku
Z2V0KCkpOworICAgIH0KKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250RmVhdHVyZVNl
dHRpbmdzQXR0cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBuZXdGZWF0dXJl
cy5nZXQoKSB9OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1
ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBSZXRhaW5QdHI8Q1RG
b250RGVzY3JpcHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gYWRv
cHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZm9udCwgQ1RGb250R2V0U2l6ZShm
b250KSwgbnVsbHB0ciwgbmV3RGVzY3JpcHRvci5nZXQoKSkpOworfQorCitSZWZQdHI8Rm9udD4g
Rm9udDo6Y3JlYXRlRm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMoKSBjb25zdAorewor
ICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgQ1RGb250U3ltYm9s
aWNUcmFpdHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250ID0gY3JlYXRlQ1RG
b250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwor
ICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChjdEZvbnQuZ2V0KCksIHNpemUsIG1fcGxh
dGZvcm1EYXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKTsKK30KKworUmVm
UHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mLCBmbG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBmbG9hdCBzaXplID0gbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CisgICAgQ1RGb250U3ltYm9saWNUcmFp
dHMgZm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9y
ID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxs
cHRyKSk7CisKKyAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQo
KSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVl
KCkpOworfQorCit2b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIHVuc2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0
cmluZ0luZGV4LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25z
dCBBdG9tU3RyaW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uKSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOwor
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBHbHlwaEJ1ZmZlciBpbml0aWFsIGFkdmFuY2UuCisj
aWYgVVNFKENURk9OVFNIQVBFR0xZUEhTKQorICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZSYW5nZSBy
YW5nZSwgQ0dHbHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFuY2VzUG9p
bnRlciwgQ0dQb2ludCoqIG5ld09mZnNldHNQb2ludGVyLCBDRkluZGV4KiogbmV3SW5kaWNlc1Bv
aW50ZXIpCisgICAgeworICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4
KHJhbmdlLmxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENG
SW5kZXg+KGdseXBoQnVmZmVyLnNpemUoKSkpOworICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIDwg
MCkgeworICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2UubG9jYXRpb24s
IC1yYW5nZS5sZW5ndGgpOworICAgICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSByYW5nZS5sb2Nh
dGlvbiAtIHJhbmdlLmxlbmd0aDsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLnJlbW92ZShiZWdp
bm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgZ2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJ
bmRleCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsIHRoaXMpOworCisgICAgICAgICpu
ZXdHbHlwaHNQb2ludGVyID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgp
OworICAgICAgICAqbmV3QWR2YW5jZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVn
aW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9IGdseXBoQnVm
ZmVyLm9yaWdpbnMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdJbmRpY2VzUG9p
bnRlciA9IGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsK
KyAgICB9OworCisgICAgYXV0byBzdWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdT
dHJpbmdJbmRleCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcu
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVD
b2NvYTo6Y2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmlu
ZygpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBr
Q1RGb250U2hhcGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9uCisgICAgICAgIHwgKGVuYWJsZUtlcm5p
bmcgPyBrQ1RGb250U2hhcGVXaXRoS2VybmluZyA6IDApCisgICAgICAgIHwgKHRleHREaXJlY3Rp
b24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdp
bm5pbmdHbHlwaEluZGV4OyArK2kpCisgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmlu
ZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKKworICAg
IENURm9udFNoYXBlR2x5cGhzKAorICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKKyAg
ICAgICAgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAorICAgICAgICBy
ZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0ds
eXBoSW5kZXgpKSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZm
ZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCisgICAgICAgIGdseXBoQnVmZmVyLm9m
ZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVbmlDaGFyKj4odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwKKyAgICAg
ICAgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKKyAgICAgICAgb3B0
aW9ucywKKyAgICAgICAgbG9jYWxlU3RyaW5nLmdldCgpLAorICAgICAgICBoYW5kbGVyKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5p
bmdHbHlwaEluZGV4OyArK2kpCisgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhi
ZWdpbm5pbmdHbHlwaEluZGV4KVtpXSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKKworI2Vsc2UK
KworICAgIFVOVVNFRF9QQVJBTShiZWdpbm5pbmdTdHJpbmdJbmRleCk7CisgICAgVU5VU0VEX1BB
UkFNKGxvY2FsZSk7CisgICAgVU5VU0VEX1BBUkFNKHRleHQpOworCisgICAgLy8gQ1RGb250VHJh
bnNmb3JtR2x5cGhzKCkgb3BlcmF0ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lkdGhJdGVyYXRv
ciBpdGVyYXRlcyBpbiBsb2dpY2FsIG9yZGVyLgorICAgIC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBp
biB2aXN1YWwgb3JkZXIganVzdCBmb3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJhY2sgaW50byBs
b2dpY2FsIG9yZGVyIHdoZW4KKyAgICAvLyB0aGUgY2FsbCBpcyBkb25lLgorICAgIC8vIFdlIGRv
bid0IGhhdmUgYSBnbG9iYWwgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBq
dXN0IG9wZXJhdGluZyBvbiBhIHNpbmdsZSBjaHVuayBvZiBpdC4KKyAgICAvLyBXaWR0aEl0ZXJh
dG9yIGVuY291bnRlcnMgdGhlIGNodW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwgc28gd2UgaGF2
ZSB0byBtYWludGFpbiB0aGF0IGludmFyaWFudC4KKyAgICAvLyBFdmVudHVhbGx5LCBGb250Q2Fz
Y2FkZTo6bGF5b3V0U2ltcGxlVGV4dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRv
IHB1dCB0aGUgZW50aXJlIHRoaW5nCisgICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBidXQgdGhhdCdz
IG9rYXkgYmVjYXVzZSBpdCBoYXMgYSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXIuCisg
ICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUg
YnVmZmVyIGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKKyAgICAv
LyBvcmRlciwgd2hpY2ggbWVhbnMgdGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlv
biBzdGlsbCBuZWVkcyB0byBleGVjdXRlIHdoZW4KKyAgICAvLyBDVEZvbnRTaGFwZUdseXBocygp
IGlzIGJlaW5nIHVzZWQuCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
UlRMKQorICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGds
eXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOworCisgICAgQ1RGb250VHJh
bnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3Jt
QXBwbHlQb3NpdGlvbmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKKyAg
ICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBoQnVm
ZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUq
PihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGdseXBoQnVmZmVy
LnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsIG9wdGlvbnMpOworI2VuZGlmCisKKyAgICAv
LyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIg
Y2FsbCB0byByZXZlcnNlKCkgaXMuCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVj
dGlvbjo6UlRMKQorICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5k
ZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOworfQorCitzdGF0
aWMgaW50IGV4dHJhY3ROdW1iZXIoQ0ZOdW1iZXJSZWYgbnVtYmVyKQoreworICAgIGludCByZXN1
bHQgPSAwOworICAgIGlmIChudW1iZXIpCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVy
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9w
bGF0Zm9ybURhdGEuZm9udCgpOworICAgIEFTU0VSVChjdEZvbnQpOworCisgICAgLy8gU3BlY2lh
bCBjYXNlIE9zYWthLU1vbm8uCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8z
OTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisgICAg
Ly8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4
ZWQgcGl0Y2guCisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAvLyBBY2Nv
cmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1T
LVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJl
cG9ydCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1v
bm90eXBlQ29yc2l2YQorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcw
ND4sIHdlIHNob3VsZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgor
ICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZp
eGVkIHBpdGNoLgorCisgICAgYXV0byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxO
YW1lKGN0Rm9udCkpOworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZh
bWlseU5hbWUoY3RGb250KSk7CisKKyAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIo
YWRvcHRDRihzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShtX3Bs
YXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkp
OworICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RG
b250KSAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vu
c2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSkgfHwgY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkg
fHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBl
Q29yc2l2YSIpKSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoZmFtaWx5TmFt
ZSAmJiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3Vy
aWVyIE5ldyIpKSkgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90
IGJlIHRyZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhh
Y2tlZCBzcGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJk
YXI6Ly82MjY5NzgzKS4KKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAg
IH0KKyNlbmRpZgorfQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgYm91
bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRh
LmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlv
bjo6VmVydGljYWwgPyBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRh
dGlvbkhvcml6b250YWwsICZnbHlwaCwgMCwgMSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91
bmRpbmdCb3gubWF4WSgpKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAg
ICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNC
b2xkT2Zmc2V0KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKworZmxvYXQgRm9udDo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIENHU2l6ZSBh
ZHZhbmNlID0gQ0dTaXplWmVybzsKKworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5zaXplKCkpIHsK
KyAgICAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWw7CisgICAgICAgIENURm9udE9yaWVudGF0aW9u
IG9yaWVudGF0aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sg
PyBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGlj
YWw7CisjaWYgVVNFKENURk9OVEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCisgICAgICAgIENHRm9u
dFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5n
IHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5k
ZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxl
VW5maWx0ZXJlZDsKKyAgICAgICAgaWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX3BsYXRm
b3JtRGF0YS5jdEZvbnQoKSkgJiYgIW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlvbnMoKSkKKyAg
ICAgICAgICAgIENURm9udEdldFVuc3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRTdHlsZShtX3Bs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNl
LCAxKTsKKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIENURm9u
dEdldEFkdmFuY2VzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlv
biwgJmdseXBoLCAmYWR2YW5jZSwgMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFk
dmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Cit9CisKK1BhdGggRm9udDo6cGxh
dGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQg
PSBhZG9wdENGKENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEoKS5jdEZvbnQo
KSwgZ2x5cGgsIG51bGxwdHIpKTsKKyAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlz
LT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsK
KyAgICAgICAgYXV0byBuZXdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwor
ICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQo
KSk7CisgICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFu
c2xhdGlvbihzeW50aGV0aWNCb2xkT2Zmc2V0LCAwKTsKKyAgICAgICAgQ0dQYXRoQWRkUGF0aChu
ZXdQYXRoLmdldCgpLCAmdHJhbnNsYXRpb24sIHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVy
biB7IFdURk1vdmUobmV3UGF0aCkgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgYWRvcHRDRihDR1Bh
dGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKSB9OworfQorCitib29sIEZvbnQ6OnBs
YXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFy
MzI+IHZhcmlhdGlvbikgY29uc3QKK3sKKyAgICBpZiAodmFyaWF0aW9uKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBVbmlDaGFyIGNvZGVVbml0c1syXTsKKyAgICBDR0dseXBoIGdseXBo
c1syXTsKKyAgICBDRkluZGV4IGNvdW50ID0gMDsKKyAgICBVMTZfQVBQRU5EX1VOU0FGRShjb2Rl
VW5pdHMsIGNvdW50LCBjaGFyYWN0ZXIpOworICAgIHJldHVybiBDVEZvbnRHZXRHbHlwaHNGb3JD
aGFyYWN0ZXJzKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGdseXBocywgY291
bnQpOworfQorCitib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBj
b25zdAoreworICAgIGF1dG8gcGxhdGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOwor
ICAgIGlmICghcGxhdGZvcm1Gb250KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBB
bGxvdyBtb3N0IG5vbi1pY29uIGZvbnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEg
c2luZ2xlIGNoYXJhY3RlciAnYScsIHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxh
dGluIGNoYXJhY3RlcnMuCisgICAgVW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVyID0gJ2EnOwor
ICAgIENHR2x5cGggbG93ZXJjYXNlQUdseXBoOworICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JD
aGFyYWN0ZXJzKHBsYXRmb3JtRm9udCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VB
R2x5cGgsIDEpKSB7CisgICAgICAgIGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRHZXRCb3VuZGlu
Z1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwg
Jmxvd2VyY2FzZUFHbHlwaCwgbnVsbHB0ciwgMSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGF1dG8gc3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250
Q29weUNoYXJhY3RlclNldChwbGF0Zm9ybUZvbnQpKTsKKyAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRI
YXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFj
dGVyU2V0SGFzTWVtYmVySW5QbGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMg
TGF0aW4gbm9uLWNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBjb25zdGV4cHIgVW5pQ2hhciBmaXJz
dENoYXJhY3RlclRvVGVzdCA9ICcgJzsKKyAgICBjb25zdGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFj
dGVyVG9UZXN0ID0gJ34nOworICAgIGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hhcmFjdGVyc1Rv
VGVzdCA9IGxhc3RDaGFyYWN0ZXJUb1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVzdCArIDE7CisK
KyAgICBWZWN0b3I8Q0dHbHlwaD4gZ2x5cGhzOworICAgIGdseXBocy5maWxsKDAsIG51bWJlck9m
Q2hhcmFjdGVyc1RvVGVzdCk7CisgICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2Uo
cGxhdGZvcm1Gb250LCBnbHlwaHMuYmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJU
b1Rlc3QsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCkpOworICAgIGdseXBocy5yZW1vdmVBbGwo
MCk7CisKKyAgICBpZiAoZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgVmVjdG9yPENHUmVjdD4gYm91bmRpbmdSZWN0czsKKyAgICBib3VuZGluZ1JlY3RzLmZp
bGwoQ0dSZWN0WmVybywgZ2x5cGhzLnNpemUoKSk7CisgICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0
c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBo
cy5iZWdpbigpLCBib3VuZGluZ1JlY3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOworICAgIHJl
dHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0
KSB7CisgICAgICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKKyAgICB9KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTc0NDE4MWM1YTQyMmEyNjA1MmRhNjJjNDhhNjUyNGFmMTgyZDQyMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0
Zm9ybURhdGFDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW1wb3J0
ICJjb25maWcuaCIKKyNpbXBvcnQgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2ltcG9ydCA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIHN5
bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBGb250V2lkdGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUg
dGV4dFJlbmRlcmluZ01vZGUpCisgICAgOiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRp
Y0JvbGQsIHN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRS
ZW5kZXJpbmdNb2RlKQoreworICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7CisgICAgbV9mb250
ID0gZm9udDsKKyAgICBtX2lzQ29sb3JCaXRtYXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFp
dHMoZm9udCkgJiBrQ1RGb250VHJhaXRDb2xvckdseXBoczsKKyAgICBtX2lzU3lzdGVtRm9udCA9
IFdlYkNvcmU6OmlzU3lzdGVtRm9udChtX2ZvbnQuZ2V0KCkpOworICAgIGF1dG8gdmFyaWF0aW9u
cyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDVEZvbnRDb3B5QXR0cmli
dXRlKGZvbnQsIGtDVEZvbnRWYXJpYXRpb25BdHRyaWJ1dGUpKSk7CisgICAgbV9oYXNWYXJpYXRp
b25zID0gdmFyaWF0aW9ucyAmJiBDRkRpY3Rpb25hcnlHZXRDb3VudCh2YXJpYXRpb25zLmdldCgp
KTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgbV9pc0Vtb2ppID0gQ1RGb250SXNB
cHBsZUNvbG9yRW1vamkobV9mb250LmdldCgpKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
dC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDY4MTQ3YjE5OGY4MjM1N2Mz
NmU5NzkzOTgwMDYyZDYyOGY1ODYyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKworI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIHNob3VsZEZpbGxXaXRoVmVy
dGljYWxHbHlwaHMoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBj
b25zdCBGb250JiBmb250KQoreworICAgIGlmICghZm9udC5oYXNWZXJ0aWNhbEdseXBocygpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZl
ckxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmICghRm9udENhc2NhZGU6OmlzQ0pLSWRlb2dyYXBo
KGJ1ZmZlcltpXSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgY29uc3RleHByIENHR2x5cGggZGVsZXRlZEdseXBo
ID0gMHhGRkZGOworCitib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpCit7CisgICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA9PSBHbHlwaFBhZ2U6
OnNpemUgfHwgYnVmZmVyTGVuZ3RoID09IDIgKiBHbHlwaFBhZ2U6OnNpemUpOworCisgICAgY29u
c3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKKyAgICBWZWN0b3I8Q0dHbHlwaCwgNTEyPiBn
bHlwaHMoYnVmZmVyTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBnbHlwaFN0ZXAgPSBidWZmZXJMZW5n
dGggLyBHbHlwaFBhZ2U6OnNpemU7CisKKyAgICBpZiAoc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEds
eXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCkpCisgICAgICAgIENURm9udEdldFZlcnRp
Y2FsR2x5cGhzRm9yQ2hhcmFjdGVycyhmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCByZWlu
dGVycHJldF9jYXN0PFVuaUNoYXIqPihidWZmZXIpLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5n
dGgpOworICAgIGVsc2UKKyAgICAgICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhmb250
LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCByZWludGVycHJldF9jYXN0PFVuaUNoYXIqPihidWZm
ZXIpLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOworCisgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsg
KytpKSB7CisgICAgICAgIGF1dG8gdGhlR2x5cGggPSBnbHlwaHNbaSAqIGdseXBoU3RlcF07Cisg
ICAgICAgIGlmICh0aGVHbHlwaCAmJiB0aGVHbHlwaCAhPSBkZWxldGVkR2x5cGgpIHsKKyAgICAg
ICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgdGhlR2x5cGgpOworICAgICAgICAgICAgaGF2ZUds
eXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGUzYTUzNWRjNDAzZTQzMjQzYWI4MTNjNmMxNGZkZWNhZDY3ZThkZWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIK
LQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUg
PHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9D
b3JlVGV4dFNQSS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIHNob3Vs
ZEZpbGxXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBGb250JiBmb250KQotewotICAgIGlmICghZm9udC5oYXNWZXJ0aWNh
bEdseXBocygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1ZmZlckxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmICghRm9udENhc2NhZGU6Omlz
Q0pLSWRlb2dyYXBoKGJ1ZmZlcltpXSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgY29uc3QgY29uc3RleHByIENHR2x5cGgg
ZGVsZXRlZEdseXBoID0gMHhGRkZGOwotCi1ib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17Ci0gICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA9
PSBHbHlwaFBhZ2U6OnNpemUgfHwgYnVmZmVyTGVuZ3RoID09IDIgKiBHbHlwaFBhZ2U6OnNpemUp
OwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKLSAgICBWZWN0b3I8Q0dH
bHlwaCwgNTEyPiBnbHlwaHMoYnVmZmVyTGVuZ3RoKTsKLSAgICB1bnNpZ25lZCBnbHlwaFN0ZXAg
PSBidWZmZXJMZW5ndGggLyBHbHlwaFBhZ2U6OnNpemU7Ci0KLSAgICBpZiAoc2hvdWxkRmlsbFdp
dGhWZXJ0aWNhbEdseXBocyhidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCkpCi0gICAgICAgIENU
Rm9udEdldFZlcnRpY2FsR2x5cGhzRm9yQ2hhcmFjdGVycyhmb250LnBsYXRmb3JtRGF0YSgpLmN0
Rm9udCgpLCByZWludGVycHJldF9jYXN0PFVuaUNoYXIqPihidWZmZXIpLCBnbHlwaHMuZGF0YSgp
LCBidWZmZXJMZW5ndGgpOwotICAgIGVsc2UKLSAgICAgICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hh
cmFjdGVycyhmb250LnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCByZWludGVycHJldF9jYXN0PFVu
aUNoYXIqPihidWZmZXIpLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOwotCi0gICAgYm9v
bCBoYXZlR2x5cGhzID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBo
UGFnZTo6c2l6ZTsgKytpKSB7Ci0gICAgICAgIGF1dG8gdGhlR2x5cGggPSBnbHlwaHNbaSAqIGds
eXBoU3RlcF07Ci0gICAgICAgIGlmICh0aGVHbHlwaCAmJiB0aGVHbHlwaCAhPSBkZWxldGVkR2x5
cGgpIHsKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgdGhlR2x5cGgpOwotICAgICAg
ICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGhh
dmVHbHlwaHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhhZTkyNGNjYzM2MjQ5ZDVhZDNjNzk0MzY2YTM2MmVjZjRmM2ViNmIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5LCAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCi0jaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgQ0dGbG9hdCB0
b0NHRmxvYXQoRklYRUQgZikKLXsKLSAgICByZXR1cm4gZi52YWx1ZSArIGYuZnJhY3QgLyBDR0Zs
b2F0KDY1NTM2LjApOwotfQotCi1zdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChI
REMgaGRjLCBHbHlwaCBnbHlwaCkKLXsKLSAgICBDR011dGFibGVQYXRoUmVmIHBhdGggPSBDR1Bh
dGhDcmVhdGVNdXRhYmxlKCk7Ci0KLSAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsg
MCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwotICAgIEdMWVBITUVUUklDUyBnbHlwaE1ldHJp
Y3M7Ci0gICAgLy8gR0dPX05BVElWRSBtYXRjaGVzIHRoZSBvdXRsaW5lIHBlcmZlY3RseSB3aGVu
IFdpbmRvd3MgZm9udCBzbW9vdGhpbmcgaXMgb2ZmLgotICAgIC8vIEdHT19OQVRJVkUgfCBHR09f
VU5ISU5URUQgZG9lcyBub3QgbWF0Y2ggcGVyZmVjdGx5IGVpdGhlciB3aGVuIFdpbmRvd3MgZm9u
dCBzbW9vdGhpbmcgaXMgb24gb3Igb2ZmLgotICAgIERXT1JEIG91dGxpbmVMZW5ndGggPSBHZXRH
bHlwaE91dGxpbmUoaGRjLCBnbHlwaCwgR0dPX0dMWVBIX0lOREVYIHwgR0dPX05BVElWRSwgJmds
eXBoTWV0cmljcywgMCwgMCwgJmlkZW50aXR5KTsKLSAgICBBU1NFUlQob3V0bGluZUxlbmd0aCA+
PSAwKTsKLSAgICBpZiAob3V0bGluZUxlbmd0aCA8IDApCi0gICAgICAgIHJldHVybiBwYXRoOwot
Ci0gICAgVmVjdG9yPFVJbnQ4PiBvdXRsaW5lKG91dGxpbmVMZW5ndGgpOwotICAgIEdldEdseXBo
T3V0bGluZShoZGMsIGdseXBoLCBHR09fR0xZUEhfSU5ERVggfCBHR09fTkFUSVZFLCAmZ2x5cGhN
ZXRyaWNzLCBvdXRsaW5lTGVuZ3RoLCBvdXRsaW5lLmRhdGEoKSwgJmlkZW50aXR5KTsKLQotICAg
IHVuc2lnbmVkIG9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKG9mZnNldCA8IG91dGxpbmVMZW5ndGgp
IHsKLSAgICAgICAgTFBUVFBPTFlHT05IRUFERVIgc3VicGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
TFBUVFBPTFlHT05IRUFERVI+KG91dGxpbmUuZGF0YSgpICsgb2Zmc2V0KTsKLSAgICAgICAgQVNT
RVJUKHN1YnBhdGgtPmR3VHlwZSA9PSBUVF9QT0xZR09OX1RZUEUpOwotICAgICAgICBpZiAoc3Vi
cGF0aC0+ZHdUeXBlICE9IFRUX1BPTFlHT05fVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBwYXRo
OwotCi0gICAgICAgIENHUGF0aE1vdmVUb1BvaW50KHBhdGgsIDAsIHRvQ0dGbG9hdChzdWJwYXRo
LT5wZnhTdGFydC54KSwgdG9DR0Zsb2F0KHN1YnBhdGgtPnBmeFN0YXJ0LnkpKTsKLQotICAgICAg
ICB1bnNpZ25lZCBzdWJwYXRoT2Zmc2V0ID0gc2l6ZW9mKCpzdWJwYXRoKTsKLSAgICAgICAgd2hp
bGUgKHN1YnBhdGhPZmZzZXQgPCBzdWJwYXRoLT5jYikgewotICAgICAgICAgICAgTFBUVFBPTFlD
VVJWRSBzZWdtZW50ID0gcmVpbnRlcnByZXRfY2FzdDxMUFRUUE9MWUNVUlZFPihyZWludGVycHJl
dF9jYXN0PFVJbnQ4Kj4oc3VicGF0aCkgKyBzdWJwYXRoT2Zmc2V0KTsKLSAgICAgICAgICAgIHN3
aXRjaCAoc2VnbWVudC0+d1R5cGUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFRUX1BSSU1fTElO
RToKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnQt
PmNwZng7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIENHUGF0aEFkZExpbmVUb1BvaW50
KHBhdGgsIDAsIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLngpLCB0b0NHRmxvYXQoc2VnbWVu
dC0+YXBmeFtpXS55KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAgICAgY2FzZSBUVF9QUklNX1FTUExJTkU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzZWdtZW50LT5jcGZ4OyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENHRmxvYXQgeCA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLngpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0u
eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IGNweDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENHRmxvYXQgY3B5OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9
PSBzZWdtZW50LT5jcGZ4IC0gMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9
IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS54KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjcHkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMV0ueSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHggPSAodG9DR0Zsb2F0KHNlZ21lbnQt
PmFwZnhbaV0ueCkgKyB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMV0ueCkpIC8gMjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcHkgPSAodG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhb
aV0ueSkgKyB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMV0ueSkpIC8gMjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgQ0dQYXRoQWRkUXVh
ZEN1cnZlVG9Qb2ludChwYXRoLCAwLCB4LCB5LCBjcHgsIGNweSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNl
IFRUX1BSSU1fQ1NQTElORToKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNlZ21lbnQtPmNwZng7IGkgKz0gMykgewotICAgICAgICAgICAgICAgICAgICAgICAg
Q0dGbG9hdCBjcDF4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0ueCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDR0Zsb2F0IGNwMXkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgY3AyeCA9IHRvQ0dGbG9hdChzZWdt
ZW50LT5hcGZ4W2kgKyAxXS54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgY3Ay
eSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENHRmxvYXQgeCA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAyXS54KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgeSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4
W2kgKyAyXS55KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgQ0dQYXRoQWRkQ3VydmVUb1Bv
aW50KHBhdGgsIDAsIGNwMXgsIGNwMXksIGNwMngsIGNwMnksIHgsIHkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBzdWJwYXRoT2Zmc2V0ICs9IHNpemVvZigqc2VnbWVudCkgKyAoc2VnbWVudC0+Y3BmeCAtIDEp
ICogc2l6ZW9mKHNlZ21lbnQtPmFwZnhbMF0pOwotICAgICAgICB9Ci0gICAgICAgIENHUGF0aENs
b3NlU3VicGF0aChwYXRoKTsKLSAgICAgICAgb2Zmc2V0ICs9IHN1YnBhdGgtPmNiOwotICAgIH0K
LSAgICByZXR1cm4gcGF0aDsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5
cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGlu
Z01vZGUpCi17Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJD
b3JlU2hvdWxkVXNlRm9udFNtb290aGluZygpOwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2Rl
KSB7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6IHsKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDogewotICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VG
b250U21vb3RoaW5nID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRm9u
dFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOiB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRTaG91bGRBbnRpYWxpYXMoZmFsc2UpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5n
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdN
b2RlOjpBdXRvU21vb3RoaW5nOiB7Ci0gICAgICAgIC8vIEZvciB0aGUgQXV0b1Ntb290aCBjYXNl
LCBkb24ndCBkbyBhbnl0aGluZyEgS2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KLSAgICAgICAg
YnJlYWs7IAotICAgIH0KLSAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgfQotCi0gICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0gRm9udENh
c2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNob3VsZFVzZUZvbnRTbW9v
dGhpbmcpOwotCi0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9u
dC5wbGF0Zm9ybURhdGEoKTsKLQotICAgIENHQ29udGV4dFNldEZvbnQoY2dDb250ZXh0LCBwbGF0
Zm9ybURhdGEuY2dGb250KCkpOwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKLSAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICBt
YXRyaXguZCA9IC1tYXRyaXguZDsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2Js
aXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBmbG9hdCBza2V3ID0gLXRhbmYoc3ludGhldGljT2Js
aXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwLjBmKTsKLSAgICAgICAgbWF0cml4ID0gQ0dBZmZp
bmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgc2tl
dywgMSwgMCwgMCkpOwotICAgIH0KLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIHNhdmVkTWF0cml4
ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjZ0NvbnRleHQpOwotICAgIENHQ29udGV4dFNldFRl
eHRNYXRyaXgoY2dDb250ZXh0LCBtYXRyaXgpOwotCi0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUo
Y2dDb250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKLSAgICBGb250Q2FzY2FkZTo6c2V0Q0dD
b250ZXh0Rm9udFJlbmRlcmluZ1N0eWxlKGNnQ29udGV4dCwgZm9udC5wbGF0Zm9ybURhdGEoKS5p
c1N5c3RlbUZvbnQoKSwgZmFsc2UsIGZvbnQucGxhdGZvcm1EYXRhKCkudXNlR0RJKCkpOwotCi0g
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENv
bG9yIHNoYWRvd0NvbG9yOwotICAgIGdyYXBoaWNzQ29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRv
dyA9IGdyYXBoaWNzQ29udGV4dC50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6
OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYmICFzaGFkb3dCbHVyICYmICghZ3JhcGhp
Y3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgZ3JhcGhpY3NDb250ZXh0Lmdl
dENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgIGlmIChoYXNT
aW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVz
IGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBhdm9pZCBsb3Npbmcgc3VicGl4
ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJTaGFkb3coKTsK
LSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gZ3JhcGhpY3NDb250ZXh0LmZpbGxDb2xvcigpOwot
ICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNo
YWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgp
ICogKGdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
LSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgc2hhZG93VGV4dFgs
IHNoYWRvd1RleHRZKTsKLSAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhj
Z0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dT
aXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwotICAgICAgICBp
ZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIENHQ29udGV4dFNl
dFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgp
ICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5o
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNn
Q29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1Np
emUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAgICAgIH0K
LSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwotICAgIH0K
LQotICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSwgcG9p
bnQueSgpKTsKLSAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwg
Z2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAgaWYgKGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0Nv
bnRleHQsIHBvaW50LngoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkp
OwotICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAgfQotCi0gICAgaWYgKGhhc1Np
bXBsZVNoYWRvdykKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIEZvbnRDYXNjYWRlOjpzZXRGb250
U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBvbGRGb250U21vb3RoaW5nU3R5bGUpOwotICAgIENH
Q29udGV4dFNldFRleHRNYXRyaXgoY2dDb250ZXh0LCBzYXZlZE1hdHJpeCk7Ci19Ci0KLWNvbnN0
ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtID0gKDEgPDwgNCk7Ci1j
b25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQgPSAoMiA8PCA0KTsK
LWNvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0gPSAoMyA8PCA0
KTsKLWNvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSA9ICg0IDw8
IDQpOwotCi1jb25zdGV4cHIgaW50IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bSA9IDI7Ci1jb25z
dGV4cHIgQ0dGbG9hdCBhbnRpYWxpYXNpbmdHYW1tYSA9IDIuMzsKLQotZG91YmxlIEZvbnRDYXNj
YWRlOjpzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IDI7Ci11aW50MzJfdCBGb250Q2FzY2FkZTo6
c19mb250U21vb3RoaW5nVHlwZSA9IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bTsKLWludCBG
b250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nTGV2ZWwgPSBmb250U21vb3RoaW5nTGV2ZWxNZWRp
dW07Ci1ib29sIEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOwotdWlu
dDMyX3QgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGU7Ci1ib29sIEZvbnRD
YXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQ7Ci0KLXZvaWQgRm9udENhc2NhZGU6OnNl
dEZvbnRTbW9vdGhpbmdMZXZlbChpbnQgbGV2ZWwpCi17Ci0gICAgY29uc3QgdWludDMyX3Qgc21v
b3RoaW5nVHlwZVtdID0geyAKLSAgICAgICAgMCwgLy8gRm9udFNtb290aGluZ1R5cGVTdGFuZGFy
ZAotICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCwgLy8gRm9udFNtb290aGluZ1R5
cGVMaWdodAotICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0sIC8vIEZvbnRTbW9v
dGhpbmdUeXBlTWVkaXVtCi0gICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5LCAvLyBG
b250U21vb3RoaW5nVHlwZVN0cm9uZwotICAgIH07Ci0KLSAgICBpZiAobGV2ZWwgPCAwIHx8IHN0
YXRpY19jYXN0PHNpemVfdD4obGV2ZWwpID4gQVJSQVlTSVpFKHNtb290aGluZ1R5cGUpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzX2ZvbnRTbW9vdGhpbmdUeXBlID0gc21vb3RoaW5nVHlwZVts
ZXZlbF07Ci0gICAgc19mb250U21vb3RoaW5nTGV2ZWwgPSBsZXZlbDsKLX0KLQotc3RhdGljIHZv
aWQgc2V0Q0dGb250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgdWludDMy
X3Qgc21vb3RoaW5nVHlwZSwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nID0gdHJ1ZSkKLXsKLSAg
ICBpZiAoc21vb3RoaW5nVHlwZSkgewotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhG
b250cyhjZ0NvbnRleHQsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOwotICAgICAgICBDR0NvbnRleHRT
ZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzbW9vdGhpbmdUeXBlKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmYWxz
ZSk7Ci19Ci0KLXVpbnQzMl90IEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nKQotewotICAgIHVp
bnQzMl90IG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9IDA7Ci0gICAgaWYgKENHQ29udGV4dEdldFNo
b3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCkpCi0gICAgICAgIG9sZEZvbnRTbW9vdGhpbmdTdHls
ZSA9IENHQ29udGV4dEdldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQpOwotICAgIHNldENH
Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc19mb250U21vb3RoaW5nVHlwZSwgZm9udEFs
bG93c1Ntb290aGluZyk7Ci0KLSAgICByZXR1cm4gb2xkRm9udFNtb290aGluZ1N0eWxlOwotfQot
Ci12b2lkIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3QoQ0dGbG9hdCBjb250
cmFzdCkKLXsKLSAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNvbnRyYXN0OwotfQotCi1z
dGF0aWMgZmxvYXQgY2xlYXJUeXBlQ29udHJhc3QoKQotewotICAgIGNvbnN0IFdDSEFSIHJlZmVy
ZW5jZUNoYXJhY3RlciA9ICdcXCc7Ci0gICAgc3RhdGljIFVJTlQgbGFzdENvbnRyYXN0ID0gMjAw
MDsKLSAgICBzdGF0aWMgZmxvYXQgZ2FtbWEgPSAyOwotICAgIFVJTlQgY29udHJhc3Q7Ci0KLSAg
ICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HQ09OVFJBU1Qs
IDAsICZjb250cmFzdCwgMCkgfHwgY29udHJhc3QgPT0gbGFzdENvbnRyYXN0KQotICAgICAgICBy
ZXR1cm4gZ2FtbWE7Ci0KLSAgICBsYXN0Q29udHJhc3QgPSBjb250cmFzdDsKLQotICAgIGF1dG8g
ZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7Ci0KLSAgICBIR0RJ
T0JKIG9sZEhGT05UID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIEdldFN0b2NrT2JqZWN0KERF
RkFVTFRfR1VJX0ZPTlQpKTsKLSAgICBHTFlQSE1FVFJJQ1MgZ2x5cGhNZXRyaWNzOwotCi0gICAg
c3RhdGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEg
fTsKLSAgICBpZiAoOjpHZXRHbHlwaE91dGxpbmUoZGMuZ2V0KCksIHJlZmVyZW5jZUNoYXJhY3Rl
ciwgR0dPX01FVFJJQ1MsICZnbHlwaE1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSkgPT0gR0RJX0VS
Uk9SKQotICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOwotCi0gICAgQklUTUFQSU5G
TyBiaXRtYXBJbmZvOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihC
SVRNQVBJTkZPSEVBREVSKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7
Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKLSAgICBi
aXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQ
ZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50
ID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gZ2x5cGhNZXRyaWNzLmdt
QmxhY2tCb3hYOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gLXN0YXRpY19j
YXN0PGludD4oZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZKTsKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaUJpdENvdW50ID0gMzI7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJVc2Vk
ID0gMDsKLQotICAgIHVpbnQ4X3QqIHBpeGVscyA9IG51bGxwdHI7Ci0gICAgYXV0byBiaXRtYXAg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9S
R0JfQ09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnBpeGVscyksIDAsIDApKTsKLSAg
ICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKLQotICAg
IEhHRElPQkogb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIGJpdG1hcC5nZXQo
KSk7Ci0KLSAgICBCSVRNQVAgYm1wSW5mbzsKLSAgICA6OkdldE9iamVjdChiaXRtYXAuZ2V0KCks
IHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwotICAgIG1lbXNldChwaXhlbHMsIDAsIGdseXBo
TWV0cmljcy5nbUJsYWNrQm94WSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzKTsKLQotICAgIDo6U2V0
QmtNb2RlKGRjLmdldCgpLCBPUEFRVUUpOwotICAgIDo6U2V0VGV4dEFsaWduKGRjLmdldCgpLCBU
QV9MRUZUIHwgVEFfVE9QKTsKLQotICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMjU1
LCAyNTUsIDI1NSkpOwotICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsK
LSAgICA6OkV4dFRleHRPdXRXKGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFj
dGVyLCAxLCAwKTsKLQotICAgIHVpbnQ4X3QqIHJlZmVyZW5jZVBpeGVsID0gbnVsbHB0cjsKLSAg
ICB1aW50OF90IHdoaXRlUmVmZXJlbmNlVmFsdWUgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICYmICFyZWZlcmVuY2VQaXhlbDsgKytpKSB7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNCAqIGdseXBoTWV0cmljcy5nbUJsYWNr
Qm94WDsgKytqKSB7Ci0gICAgICAgICAgICB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gcGl4ZWxzW2kg
KiBibXBJbmZvLmJtV2lkdGhCeXRlcyArIGpdOwotICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBw
aXhlbCB2YWx1ZSBpbiB0aGUgcmFuZ2UgdGhhdCBhbGxvd3MgdXMgdG8gZXN0aW1hdGUKLSAgICAg
ICAgICAgIC8vIGdhbW1hIHdpdGhpbiAwLjEgd2l0aG91dCBhbiBlcnJvci4KLSAgICAgICAgICAg
IGlmICh3aGl0ZVJlZmVyZW5jZVZhbHVlID4gMzIgJiYgd2hpdGVSZWZlcmVuY2VWYWx1ZSA8IDI0
MCkgewotICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBpeGVsID0gcGl4ZWxzICsgaSAqIGJtcElu
Zm8uYm1XaWR0aEJ5dGVzICsgajsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZWZlcmVuY2VQaXhlbCkgewotICAgICAg
ICA6OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKLSAgICAgICAgOjpTZXRC
a0NvbG9yKGRjLmdldCgpLCBSR0IoMjU1LCAyNTUsIDI1NSkpOwotICAgICAgICA6OkV4dFRleHRP
dXRXKGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVyLCAxLCAwKTsKLSAg
ICAgICAgdWludDhfdCBibGFja1JlZmVyZW5jZVZhbHVlID0gKnJlZmVyZW5jZVBpeGVsOwotCi0g
ICAgICAgIGZsb2F0IG1pbkRlbHRhID0gMTsKLSAgICAgICAgZm9yIChmbG9hdCBnID0gMTsgZyA8
IDIuM2Y7IGcgKz0gMC4xZikgewotICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSBmYWJzKHBvd2Yo
KHdoaXRlUmVmZXJlbmNlVmFsdWUgLyAyNTUuMGYpLCBnKSArIHBvd2YoKGJsYWNrUmVmZXJlbmNl
VmFsdWUgLyAyNTUuMGYpLCBnKSAtIDEpOwotICAgICAgICAgICAgaWYgKGRlbHRhIDwgbWluRGVs
dGEpIHsKLSAgICAgICAgICAgICAgICBtaW5EZWx0YSA9IGRlbHRhOwotICAgICAgICAgICAgICAg
IGdhbW1hID0gZzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAg
ICBnYW1tYSA9IGNvbnRyYXN0IC8gMTAwMC4wZjsKLQotICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdl
dCgpLCBvbGRCaXRtYXApOwotICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBvbGRIRk9OVCk7
Ci0KLSAgICByZXR1cm4gZ2FtbWE7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OnN5c3RlbUZvbnRT
bW9vdGhpbmdDaGFuZ2VkKCkKLXsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRG
T05UU01PT1RISU5HLCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZCwgMCk7Ci0gICAg
OjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElOR1RZUEUsIDAsICZzX3N5
c3RlbUZvbnRTbW9vdGhpbmdUeXBlLCAwKTsKLSAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9
IGNsZWFyVHlwZUNvbnRyYXN0KCk7Ci0gICAgc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0ID0gdHJ1
ZTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxl
KENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIC8qaXNQcmlu
dGVyRm9udCovLCBib29sIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKQotewotICAgIGJvb2wgc2hv
dWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICBib29sIG1heVN1YnBpeGVsUG9zaXRpb24gPSB0cnVl
OwotICAgIENHRmxvYXQgY29udHJhc3QgPSAyOwotICAgIGlmICh1c2VQbGF0Zm9ybU5hdGl2ZUds
eXBocykgewotICAgICAgICAvLyA8cmRhcjovLzY1NjQ1MDE+IEdESSBjYW4ndCBzdWJwaXhlbC1w
b3NpdGlvbiwgc28gZG9uJ3QgYm90aGVyIGFza2luZy4KLSAgICAgICAgbWF5U3VicGl4ZWxQb3Np
dGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAoIXNfc3lzdGVtRm9udFNtb290aGluZ1NldCkKLSAg
ICAgICAgICAgIHN5c3RlbUZvbnRTbW9vdGhpbmdDaGFuZ2VkKCk7Ci0gICAgICAgIGNvbnRyYXN0
ID0gc19mb250U21vb3RoaW5nQ29udHJhc3Q7Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHNf
c3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Ci0gICAgICAgIGlmIChzX3N5c3RlbUZvbnRTbW9v
dGhpbmdUeXBlID09IEZFX0ZPTlRTTU9PVEhJTkdTVEFOREFSRCkgewotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwga0NHRm9udFNtb290aGluZ1N0
eWxlTWluaW11bSk7Ci0gICAgICAgICAgICBjb250cmFzdCA9IGFudGlhbGlhc2luZ0dhbW1hOwot
ICAgICAgICB9Ci0gICAgfQotICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdDb250cmFzdChj
Z0NvbnRleHQsIGNvbnRyYXN0KTsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRVc2VQbGF0Zm9ybU5h
dGl2ZUdseXBocyhjZ0NvbnRleHQsIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKTsKLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7
Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENU
TShjZ0NvbnRleHQpOwotICAgIGJvb2wgaXNQdXJlVHJhbnNsYXRpb24gPSBjb250ZXh0VHJhbnNm
b3JtLmEgPT0gMSAmJiAoY29udGV4dFRyYW5zZm9ybS5kID09IDEgfHwgY29udGV4dFRyYW5zZm9y
bS5kID09IC0xKSAmJiAhY29udGV4dFRyYW5zZm9ybS5iICYmICFjb250ZXh0VHJhbnNmb3JtLmM7
Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwg
bWF5U3VicGl4ZWxQb3NpdGlvbiAmJiAoaXNTeXN0ZW1Gb250IHx8ICFpc1B1cmVUcmFuc2xhdGlv
bikpOwotICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRl
eHQsIGlzUHVyZVRyYW5zbGF0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBDR0ZvbnRSZW5kZXJp
bmdTdHlsZSByZW5kZXJpbmdTdHlsZUZvckZvbnQoYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQ
cmludGVyRm9udCkKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IGEgbWluaW11bSBh
bnRpYWxpYXNlZCBmb250IHNpemUuCi0KLSAgICBpZiAoaXNTeXN0ZW1Gb250IHx8IGlzUHJpbnRl
ckZvbnQpCi0gICAgICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcg
fCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRl
cmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247Ci0KLSAgICByZXR1cm4ga0NHRm9udFJlbmRl
cmluZ1N0eWxlQW50aWFsaWFzaW5nOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpnZXRQbGF0Zm9y
bUdseXBoQWR2YW5jZXMoQ0dGb250UmVmIGZvbnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiBt
LCBib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250LCBDR0dseXBoIGdseXBoLCBD
R1NpemUmIGFkdmFuY2UpCi17Ci0gICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSByZW5k
ZXJpbmdTdHlsZUZvckZvbnQoaXNTeXN0ZW1Gb250LCBpc1ByaW50ZXJGb250KTsKLSAgICBDR0Zv
bnRHZXRHbHlwaEFkdmFuY2VzRm9yU3R5bGUoZm9udCwgJm0sIHN0eWxlLCAmZ2x5cGgsIDEsICZh
ZHZhbmNlKTsKLQotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83NzYxMTY1PiBUaGUgR0RJIGJhY2sg
ZW5kIGluIENvcmUgR3JhcGhpY3Mgc29tZXRpbWVzIHJldHVybnMgYWR2YW5jZXMgdGhhdAotICAg
IC8vIGRpZmZlciBmcm9tIHdoYXQgdGhlIGZvbnQncyBobXR4IHRhYmxlIHNwZWNpZmllcy4gVGhl
IGZvbGxvd2luZyBjb2RlIGNvcnJlY3RzIHRoYXQuCi0gICAgQ0ZEYXRhUmVmIGhtdHhUYWJsZSA9
IENHRm9udENvcHlUYWJsZUZvclRhZyhmb250LCAnaG10eCcpOwotICAgIGlmICghaG10eFRhYmxl
KQotICAgICAgICByZXR1cm47Ci0gICAgQ0ZEYXRhUmVmIGhoZWFUYWJsZSA9IENHRm9udENvcHlU
YWJsZUZvclRhZyhmb250LCAnaGhlYScpOwotICAgIGlmICghaGhlYVRhYmxlKSB7Ci0gICAgICAg
IENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29u
c3QgQ0ZJbmRleCBoaGVhVGFibGVTaXplID0gMzY7Ci0gICAgY29uc3QgcHRyZGlmZl90IGhoZWFU
YWJsZU51bWJlck9mSE1ldHJpY3NPZmZzZXQgPSAzNDsKLSAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3Ro
KGhoZWFUYWJsZSkgPCBoaGVhVGFibGVTaXplKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFi
bGUpOwotICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIHNob3J0IG51bWJlck9mSE1ldHJpY3MgPSAqcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdldEJ5dGVQdHIoaGhlYVRhYmxlKSAr
IGhoZWFUYWJsZU51bWJlck9mSE1ldHJpY3NPZmZzZXQpOwotICAgIG51bWJlck9mSE1ldHJpY3Mg
PSAoKG51bWJlck9mSE1ldHJpY3MgJiAweEZGKSA8PCA4KSB8IChudW1iZXJPZkhNZXRyaWNzID4+
IDgpOwotICAgIGlmICghbnVtYmVyT2ZITWV0cmljcykgewotICAgICAgICBDRlJlbGVhc2UoaG10
eFRhYmxlKTsKLSAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoZ2x5cGggPj0gbnVtYmVyT2ZITWV0cmljcykKLSAgICAgICAgZ2x5
cGggPSBudW1iZXJPZkhNZXRyaWNzIC0gMTsKLQotICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaG10
eFRhYmxlKSA8IDQgKiAoZ2x5cGggKyAxKSkgewotICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxl
KTsKLSAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICpyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihobXR4VGFibGUp
ICsgNCAqIGdseXBoKTsKLSAgICBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICgoYWR2YW5jZUluRGVz
aWduVW5pdHMgJiAweEZGKSA8PCA4KSB8IChhZHZhbmNlSW5EZXNpZ25Vbml0cyA+PiA4KTsKLSAg
ICBDR1NpemUgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVNYWtlKHN0YXRpY19jYXN0PENHRmxv
YXQ+KGFkdmFuY2VJbkRlc2lnblVuaXRzKSAvIENHRm9udEdldFVuaXRzUGVyRW0oZm9udCksIDAp
OwotICAgIGhvcml6b250YWxBZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oaG9y
aXpvbnRhbEFkdmFuY2UsIG0pOwotICAgIGFkdmFuY2Uud2lkdGggPSBob3Jpem9udGFsQWR2YW5j
ZS53aWR0aDsKLSAgICBpZiAoIShzdHlsZSAmIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVs
UG9zaXRpb25pbmcpKQotICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRmKGFkdmFuY2Uud2lk
dGgpOwotCi0gICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7Ci0gICAgQ0ZSZWxlYXNlKGhtdHhUYWJs
ZSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCmluZGV4IDJiNGI1NTcyYTRkODA4YjgzYjRi
MGY0YWE2NGY5NmM5NjM4MmY2MTMuLjA4Y2I0ZDUxZWJiZGJiN2Y5NTVlNjc3N2Q2ZjgwMmMyYjky
MTdlOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q2FjaGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FjaGVXaW4uY3BwCkBAIC02NzUsNyArNjc1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEZv
bnRQbGF0Zm9ybURhdGE+IEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGUKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8Rm9udFBsYXRmb3JtRGF0YT4oV1RG
TW92ZShoZm9udCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGVz
aXplQm9sZCwgc3ludGhlc2l6ZUl0YWxpYywgdXNlR0RJKTsKIAogI2lmIFVTRShDRykKLSAgICBi
b29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPmNnRm9udCgpOworICAgIGJvb2wgZm9u
dENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Zm9udCgpOwogI2VsaWYgVVNFKERJUkVDVDJEKQog
ICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+ZHdGb250KCk7CiAjZWxpZiBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhc2NhZGVDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDhkYzNlYzEyMWNjMDIyMDdi
OGNiMTY4MjcxM2Q2YmI4ZDlmNmQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcApAQCAtMCwwICsxLDI4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5LCAyMDEzLCAyMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJlbmRlcmVyLmgiCisjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5n
U3R5bGVNaW5pbXVtID0gKDEgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290
aGluZ1N0eWxlTGlnaHQgPSAoMiA8PCA0KTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21v
b3RoaW5nU3R5bGVNZWRpdW0gPSAoMyA8PCA0KTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250
U21vb3RoaW5nU3R5bGVIZWF2eSA9ICg0IDw8IDQpOworCitjb25zdGV4cHIgaW50IGZvbnRTbW9v
dGhpbmdMZXZlbE1lZGl1bSA9IDI7Citjb25zdGV4cHIgQ0dGbG9hdCBhbnRpYWxpYXNpbmdHYW1t
YSA9IDIuMzsKKworZG91YmxlIEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9
IDI7Cit1aW50MzJfdCBGb250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nVHlwZSA9IGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZU1lZGl1bTsKK2ludCBGb250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nTGV2
ZWwgPSBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW07Citib29sIEZvbnRDYXNjYWRlOjpzX3N5c3Rl
bUZvbnRTbW9vdGhpbmdFbmFibGVkOwordWludDMyX3QgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9u
dFNtb290aGluZ1R5cGU7Citib29sIEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdT
ZXQ7CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdMZXZlbChpbnQgbGV2ZWwp
Cit7CisgICAgY29uc3QgdWludDMyX3Qgc21vb3RoaW5nVHlwZVtdID0geyAKKyAgICAgICAgMCwg
Ly8gRm9udFNtb290aGluZ1R5cGVTdGFuZGFyZAorICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5
bGVMaWdodCwgLy8gRm9udFNtb290aGluZ1R5cGVMaWdodAorICAgICAgICBrQ0dGb250U21vb3Ro
aW5nU3R5bGVNZWRpdW0sIC8vIEZvbnRTbW9vdGhpbmdUeXBlTWVkaXVtCisgICAgICAgIGtDR0Zv
bnRTbW9vdGhpbmdTdHlsZUhlYXZ5LCAvLyBGb250U21vb3RoaW5nVHlwZVN0cm9uZworICAgIH07
CisKKyAgICBpZiAobGV2ZWwgPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4obGV2ZWwpID4gQVJS
QVlTSVpFKHNtb290aGluZ1R5cGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBzX2ZvbnRTbW9v
dGhpbmdUeXBlID0gc21vb3RoaW5nVHlwZVtsZXZlbF07CisgICAgc19mb250U21vb3RoaW5nTGV2
ZWwgPSBsZXZlbDsKK30KKworc3RhdGljIHZvaWQgc2V0Q0dGb250U21vb3RoaW5nU3R5bGUoQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCwgdWludDMyX3Qgc21vb3RoaW5nVHlwZSwgYm9vbCBmb250QWxs
b3dzU21vb3RoaW5nID0gdHJ1ZSkKK3sKKyAgICBpZiAoc21vb3RoaW5nVHlwZSkgeworICAgICAg
ICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIGZvbnRBbGxvd3NTbW9v
dGhpbmcpOworICAgICAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0
LCBzbW9vdGhpbmdUeXBlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
U21vb3RoRm9udHMoY2dDb250ZXh0LCBmYWxzZSk7Cit9CisKK3VpbnQzMl90IEZvbnRDYXNjYWRl
OjpzZXRGb250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBmb250
QWxsb3dzU21vb3RoaW5nKQoreworICAgIHVpbnQzMl90IG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9
IDA7CisgICAgaWYgKENHQ29udGV4dEdldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCkpCisg
ICAgICAgIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9IENHQ29udGV4dEdldEZvbnRTbW9vdGhpbmdT
dHlsZShjZ0NvbnRleHQpOworICAgIHNldENHRm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwg
c19mb250U21vb3RoaW5nVHlwZSwgZm9udEFsbG93c1Ntb290aGluZyk7CisKKyAgICByZXR1cm4g
b2xkRm9udFNtb290aGluZ1N0eWxlOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRGb250U21v
b3RoaW5nQ29udHJhc3QoQ0dGbG9hdCBjb250cmFzdCkKK3sKKyAgICBzX2ZvbnRTbW9vdGhpbmdD
b250cmFzdCA9IGNvbnRyYXN0OworfQorCitzdGF0aWMgZmxvYXQgY2xlYXJUeXBlQ29udHJhc3Qo
KQoreworICAgIGNvbnN0IFdDSEFSIHJlZmVyZW5jZUNoYXJhY3RlciA9ICdcXCc7CisgICAgc3Rh
dGljIFVJTlQgbGFzdENvbnRyYXN0ID0gMjAwMDsKKyAgICBzdGF0aWMgZmxvYXQgZ2FtbWEgPSAy
OworICAgIFVJTlQgY29udHJhc3Q7CisKKyAgICBpZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRGT05UU01PT1RISU5HQ09OVFJBU1QsIDAsICZjb250cmFzdCwgMCkgfHwgY29udHJhc3Qg
PT0gbGFzdENvbnRyYXN0KQorICAgICAgICByZXR1cm4gZ2FtbWE7CisKKyAgICBsYXN0Q29udHJh
c3QgPSBjb250cmFzdDsKKworICAgIGF1dG8gZGMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNv
bXBhdGlibGVEQygwKSk7CisKKyAgICBIR0RJT0JKIG9sZEhGT05UID0gOjpTZWxlY3RPYmplY3Qo
ZGMuZ2V0KCksIEdldFN0b2NrT2JqZWN0KERFRkFVTFRfR1VJX0ZPTlQpKTsKKyAgICBHTFlQSE1F
VFJJQ1MgZ2x5cGhNZXRyaWNzOworCisgICAgc3RhdGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7
IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsKKyAgICBpZiAoOjpHZXRHbHlwaE91dGxpbmUo
ZGMuZ2V0KCksIHJlZmVyZW5jZUNoYXJhY3RlciwgR0dPX01FVFJJQ1MsICZnbHlwaE1ldHJpY3Ms
IDAsIDAsICZpZGVudGl0eSkgPT0gR0RJX0VSUk9SKQorICAgICAgICByZXR1cm4gY29udHJhc3Qg
LyAxMDAwLjBmOworCisgICAgQklUTUFQSU5GTyBiaXRtYXBJbmZvOworICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKKyAgICBiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlD
b21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFn
ZSA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKKyAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxzUGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcElu
Zm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaVdpZHRoID0gZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hYOworICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpSGVpZ2h0ID0gLXN0YXRpY19jYXN0PGludD4oZ2x5cGhNZXRyaWNzLmdtQmxhY2tC
b3hZKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMzI7CisgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJVc2VkID0gMDsKKworICAgIHVpbnQ4X3QqIHBpeGVscyA9
IG51bGxwdHI7CisgICAgYXV0byBiaXRtYXAgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNl
Y3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0JfQ09MT1JTLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJnBpeGVscyksIDAsIDApKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIEhHRElPQkogb2xkQml0bWFwID0gOjpTZWxlY3RP
YmplY3QoZGMuZ2V0KCksIGJpdG1hcC5nZXQoKSk7CisKKyAgICBCSVRNQVAgYm1wSW5mbzsKKyAg
ICA6OkdldE9iamVjdChiaXRtYXAuZ2V0KCksIHNpemVvZihibXBJbmZvKSwgJmJtcEluZm8pOwor
ICAgIG1lbXNldChwaXhlbHMsIDAsIGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSAqIGJtcEluZm8u
Ym1XaWR0aEJ5dGVzKTsKKworICAgIDo6U2V0QmtNb2RlKGRjLmdldCgpLCBPUEFRVUUpOworICAg
IDo6U2V0VGV4dEFsaWduKGRjLmdldCgpLCBUQV9MRUZUIHwgVEFfVE9QKTsKKworICAgIDo6U2V0
VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMjU1LCAyNTUsIDI1NSkpOworICAgIDo6U2V0QmtDb2xv
cihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKKyAgICA6OkV4dFRleHRPdXRXKGRjLmdldCgpLCAw
LCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVyLCAxLCAwKTsKKworICAgIHVpbnQ4X3QqIHJl
ZmVyZW5jZVBpeGVsID0gbnVsbHB0cjsKKyAgICB1aW50OF90IHdoaXRlUmVmZXJlbmNlVmFsdWUg
PSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZ
ICYmICFyZWZlcmVuY2VQaXhlbDsgKytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgNCAqIGdseXBoTWV0cmljcy5nbUJsYWNrQm94WDsgKytqKSB7CisgICAgICAgICAgICB3aGl0
ZVJlZmVyZW5jZVZhbHVlID0gcGl4ZWxzW2kgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyArIGpdOwor
ICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBwaXhlbCB2YWx1ZSBpbiB0aGUgcmFuZ2UgdGhhdCBh
bGxvd3MgdXMgdG8gZXN0aW1hdGUKKyAgICAgICAgICAgIC8vIGdhbW1hIHdpdGhpbiAwLjEgd2l0
aG91dCBhbiBlcnJvci4KKyAgICAgICAgICAgIGlmICh3aGl0ZVJlZmVyZW5jZVZhbHVlID4gMzIg
JiYgd2hpdGVSZWZlcmVuY2VWYWx1ZSA8IDI0MCkgeworICAgICAgICAgICAgICAgIHJlZmVyZW5j
ZVBpeGVsID0gcGl4ZWxzICsgaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzICsgajsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChyZWZlcmVuY2VQaXhlbCkgeworICAgICAgICA6OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdC
KDAsIDAsIDApKTsKKyAgICAgICAgOjpTZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMjU1LCAyNTUs
IDI1NSkpOworICAgICAgICA6OkV4dFRleHRPdXRXKGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVm
ZXJlbmNlQ2hhcmFjdGVyLCAxLCAwKTsKKyAgICAgICAgdWludDhfdCBibGFja1JlZmVyZW5jZVZh
bHVlID0gKnJlZmVyZW5jZVBpeGVsOworCisgICAgICAgIGZsb2F0IG1pbkRlbHRhID0gMTsKKyAg
ICAgICAgZm9yIChmbG9hdCBnID0gMTsgZyA8IDIuM2Y7IGcgKz0gMC4xZikgeworICAgICAgICAg
ICAgZmxvYXQgZGVsdGEgPSBmYWJzKHBvd2YoKHdoaXRlUmVmZXJlbmNlVmFsdWUgLyAyNTUuMGYp
LCBnKSArIHBvd2YoKGJsYWNrUmVmZXJlbmNlVmFsdWUgLyAyNTUuMGYpLCBnKSAtIDEpOworICAg
ICAgICAgICAgaWYgKGRlbHRhIDwgbWluRGVsdGEpIHsKKyAgICAgICAgICAgICAgICBtaW5EZWx0
YSA9IGRlbHRhOworICAgICAgICAgICAgICAgIGdhbW1hID0gZzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBnYW1tYSA9IGNvbnRyYXN0IC8gMTAwMC4wZjsK
KworICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBvbGRCaXRtYXApOworICAgIDo6U2VsZWN0
T2JqZWN0KGRjLmdldCgpLCBvbGRIRk9OVCk7CisKKyAgICByZXR1cm4gZ2FtbWE7Cit9CisKK3Zv
aWQgRm9udENhc2NhZGU6OnN5c3RlbUZvbnRTbW9vdGhpbmdDaGFuZ2VkKCkKK3sKKyAgICA6OlN5
c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HLCAwLCAmc19zeXN0ZW1Gb250
U21vb3RoaW5nRW5hYmxlZCwgMCk7CisgICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VU
Rk9OVFNNT09USElOR1RZUEUsIDAsICZzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBlLCAwKTsKKyAg
ICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNsZWFyVHlwZUNvbnRyYXN0KCk7CisgICAgc19z
eXN0ZW1Gb250U21vb3RoaW5nU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c2V0
Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wg
aXNTeXN0ZW1Gb250LCBib29sIC8qaXNQcmludGVyRm9udCovLCBib29sIHVzZVBsYXRmb3JtTmF0
aXZlR2x5cGhzKQoreworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICBib29s
IG1heVN1YnBpeGVsUG9zaXRpb24gPSB0cnVlOworICAgIENHRmxvYXQgY29udHJhc3QgPSAyOwor
ICAgIGlmICh1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocykgeworICAgICAgICAvLyA8cmRhcjovLzY1
NjQ1MDE+IEdESSBjYW4ndCBzdWJwaXhlbC1wb3NpdGlvbiwgc28gZG9uJ3QgYm90aGVyIGFza2lu
Zy4KKyAgICAgICAgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IGZhbHNlOworICAgICAgICBpZiAoIXNf
c3lzdGVtRm9udFNtb290aGluZ1NldCkKKyAgICAgICAgICAgIHN5c3RlbUZvbnRTbW9vdGhpbmdD
aGFuZ2VkKCk7CisgICAgICAgIGNvbnRyYXN0ID0gc19mb250U21vb3RoaW5nQ29udHJhc3Q7Cisg
ICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Cisg
ICAgICAgIGlmIChzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBlID09IEZFX0ZPTlRTTU9PVEhJTkdT
VEFOREFSRCkgeworICAgICAgICAgICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNn
Q29udGV4dCwga0NHRm9udFNtb290aGluZ1N0eWxlTWluaW11bSk7CisgICAgICAgICAgICBjb250
cmFzdCA9IGFudGlhbGlhc2luZ0dhbW1hOworICAgICAgICB9CisgICAgfQorICAgIENHQ29udGV4
dFNldEZvbnRTbW9vdGhpbmdDb250cmFzdChjZ0NvbnRleHQsIGNvbnRyYXN0KTsKKyAgICBDR0Nv
bnRleHRTZXRTaG91bGRVc2VQbGF0Zm9ybU5hdGl2ZUdseXBocyhjZ0NvbnRleHQsIHVzZVBsYXRm
b3JtTmF0aXZlR2x5cGhzKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXNGb250cyhj
Z0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4
dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOworICAgIGJvb2wgaXNQdXJl
VHJhbnNsYXRpb24gPSBjb250ZXh0VHJhbnNmb3JtLmEgPT0gMSAmJiAoY29udGV4dFRyYW5zZm9y
bS5kID09IDEgfHwgY29udGV4dFRyYW5zZm9ybS5kID09IC0xKSAmJiAhY29udGV4dFRyYW5zZm9y
bS5iICYmICFjb250ZXh0VHJhbnNmb3JtLmM7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4
ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgbWF5U3VicGl4ZWxQb3NpdGlvbiAmJiAoaXNTeXN0
ZW1Gb250IHx8ICFpc1B1cmVUcmFuc2xhdGlvbikpOworICAgIENHQ29udGV4dFNldFNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGlzUHVyZVRyYW5zbGF0aW9uKTsKK30KKwor
c3RhdGljIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdTdHlsZSByZW5kZXJpbmdTdHlsZUZvckZvbnQo
Ym9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmludGVyRm9udCkKK3sKKyAgICAvLyBGSVhNRTog
TmVlZCB0byBzdXBwb3J0IGEgbWluaW11bSBhbnRpYWxpYXNlZCBmb250IHNpemUuCisKKyAgICBp
ZiAoaXNTeXN0ZW1Gb250IHx8IGlzUHJpbnRlckZvbnQpCisgICAgICAgIHJldHVybiBrQ0dGb250
UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhl
bFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247
CisKKyAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nOworfQorCit2
b2lkIEZvbnRDYXNjYWRlOjpnZXRQbGF0Zm9ybUdseXBoQWR2YW5jZXMoQ0dGb250UmVmIGZvbnQs
IGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiBtLCBib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1By
aW50ZXJGb250LCBDR0dseXBoIGdseXBoLCBDR1NpemUmIGFkdmFuY2UpCit7CisgICAgQ0dGb250
UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSByZW5kZXJpbmdTdHlsZUZvckZvbnQoaXNTeXN0ZW1Gb250
LCBpc1ByaW50ZXJGb250KTsKKyAgICBDR0ZvbnRHZXRHbHlwaEFkdmFuY2VzRm9yU3R5bGUoZm9u
dCwgJm0sIHN0eWxlLCAmZ2x5cGgsIDEsICZhZHZhbmNlKTsKKworICAgIC8vIDxyZGFyOi8vcHJv
YmxlbS83NzYxMTY1PiBUaGUgR0RJIGJhY2sgZW5kIGluIENvcmUgR3JhcGhpY3Mgc29tZXRpbWVz
IHJldHVybnMgYWR2YW5jZXMgdGhhdAorICAgIC8vIGRpZmZlciBmcm9tIHdoYXQgdGhlIGZvbnQn
cyBobXR4IHRhYmxlIHNwZWNpZmllcy4gVGhlIGZvbGxvd2luZyBjb2RlIGNvcnJlY3RzIHRoYXQu
CisgICAgQ0ZEYXRhUmVmIGhtdHhUYWJsZSA9IENHRm9udENvcHlUYWJsZUZvclRhZyhmb250LCAn
aG10eCcpOworICAgIGlmICghaG10eFRhYmxlKQorICAgICAgICByZXR1cm47CisgICAgQ0ZEYXRh
UmVmIGhoZWFUYWJsZSA9IENHRm9udENvcHlUYWJsZUZvclRhZyhmb250LCAnaGhlYScpOworICAg
IGlmICghaGhlYVRhYmxlKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgQ0ZJbmRleCBoaGVhVGFibGVTaXplID0gMzY7
CisgICAgY29uc3QgcHRyZGlmZl90IGhoZWFUYWJsZU51bWJlck9mSE1ldHJpY3NPZmZzZXQgPSAz
NDsKKyAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3RoKGhoZWFUYWJsZSkgPCBoaGVhVGFibGVTaXplKSB7
CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAgICAgICBDRlJlbGVhc2UoaGhlYVRh
YmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIHNob3J0IG51bWJl
ck9mSE1ldHJpY3MgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENG
RGF0YUdldEJ5dGVQdHIoaGhlYVRhYmxlKSArIGhoZWFUYWJsZU51bWJlck9mSE1ldHJpY3NPZmZz
ZXQpOworICAgIG51bWJlck9mSE1ldHJpY3MgPSAoKG51bWJlck9mSE1ldHJpY3MgJiAweEZGKSA8
PCA4KSB8IChudW1iZXJPZkhNZXRyaWNzID4+IDgpOworICAgIGlmICghbnVtYmVyT2ZITWV0cmlj
cykgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGho
ZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ2x5cGggPj0gbnVt
YmVyT2ZITWV0cmljcykKKyAgICAgICAgZ2x5cGggPSBudW1iZXJPZkhNZXRyaWNzIC0gMTsKKwor
ICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaG10eFRhYmxlKSA8IDQgKiAoZ2x5cGggKyAxKSkgewor
ICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJs
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCBhZHZhbmNl
SW5EZXNpZ25Vbml0cyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
Q0ZEYXRhR2V0Qnl0ZVB0cihobXR4VGFibGUpICsgNCAqIGdseXBoKTsKKyAgICBhZHZhbmNlSW5E
ZXNpZ25Vbml0cyA9ICgoYWR2YW5jZUluRGVzaWduVW5pdHMgJiAweEZGKSA8PCA4KSB8IChhZHZh
bmNlSW5EZXNpZ25Vbml0cyA+PiA4KTsKKyAgICBDR1NpemUgaG9yaXpvbnRhbEFkdmFuY2UgPSBD
R1NpemVNYWtlKHN0YXRpY19jYXN0PENHRmxvYXQ+KGFkdmFuY2VJbkRlc2lnblVuaXRzKSAvIENH
Rm9udEdldFVuaXRzUGVyRW0oZm9udCksIDApOworICAgIGhvcml6b250YWxBZHZhbmNlID0gQ0dT
aXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oaG9yaXpvbnRhbEFkdmFuY2UsIG0pOworICAgIGFkdmFu
Y2Uud2lkdGggPSBob3Jpem9udGFsQWR2YW5jZS53aWR0aDsKKyAgICBpZiAoIShzdHlsZSAmIGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcpKQorICAgICAgICBhZHZhbmNl
LndpZHRoID0gcm91bmRmKGFkdmFuY2Uud2lkdGgpOworCisgICAgQ0ZSZWxlYXNlKGhoZWFUYWJs
ZSk7CisgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhQ0dXaW4uY3BwCmluZGV4IDExMmJmOTVjYzlhZGJmOTllNDZiNWNiNTFkZWNhNDBk
NjRiNWUxNDEuLjYyYzFhZWYwZDE4ZTkyYzY2NWUxOTNjYzA4YjQ2OTU4MmJjNmFhOWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCkBAIC0xMTMsMTcgKzExMywxOSBAQCB2b2lkIEZvbnRQ
bGF0Zm9ybURhdGE6OnBsYXRmb3JtRGF0YUluaXQoSEZPTlQgZm9udCwgZmxvYXQgc2l6ZSwgSERD
IGhkYywgV0NIQVIqCiB7CiAgICAgTE9HRk9OVCBsb2dmb250OwogICAgIEdldE9iamVjdChmb250
LCBzaXplb2YobG9nZm9udCksICZsb2dmb250KTsKLSAgICBtX2NnRm9udCA9IGFkb3B0Q0YoQ0dG
b250Q3JlYXRlV2l0aFBsYXRmb3JtRm9udCgmbG9nZm9udCkpOworICAgIGF1dG8gY2dGb250ID0g
YWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dmb250KSk7CisgICAgbV9m
b250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KGNnRm9udC5nZXQoKSwg
c2l6ZSwgbnVsbHB0ciwgbnVsbHB0cikpOworICAgIAogICAgIGlmICghbV91c2VHREkpCiAgICAg
ICAgIG1faXNTeXN0ZW1Gb250ID0gIXdjc2NtcChmYWNlTmFtZSwgTCJMdWNpZGEgR3JhbmRlIik7
CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05U
PiBoZm9udCwgQ0dGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxp
cXVlLCBib29sIHVzZUdESSkKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJ
T2JqZWN0PEhGT05UPiBoZm9udCwgQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgYm9s
ZCwgYm9vbCBvYmxpcXVlLCBib29sIHVzZUdESSkKICAgICA6IG1fc3ludGhldGljQm9sZChib2xk
KQogICAgICwgbV9zeW50aGV0aWNPYmxpcXVlKG9ibGlxdWUpCiAgICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fZm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9u
dCkpKQotICAgICwgbV9jZ0ZvbnQoZm9udCkKKyAgICAsIG1faEZvbnQoU2hhcmVkR0RJT2JqZWN0
PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQpKSkKKyAgICAsIG1fZm9udChmb250KQogICAg
ICwgbV91c2VHREkodXNlR0RJKQogewogfQpAQCAtMTM1LDggKzEzNyw4IEBAIHVuc2lnbmVkIEZv
bnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBs
YXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udAotICAgICAgICAmJiBtX2NnRm9udCA9PSBv
dGhlci5tX2NnRm9udAorICAgIHJldHVybiBtX2hGb250ID09IG90aGVyLm1faEZvbnQKKyAgICAg
ICAgJiYgbV9mb250ID09IG90aGVyLm1fZm9udAogICAgICAgICAmJiBtX3VzZUdESSA9PSBvdGhl
ci5tX3VzZUdESTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IGU1MzczYzdjNmVj
NDg3NTQwYzE2MWQyYWIxOWQ2ODFiZTgxOGYxYTEuLjllZDFhOTlhMzYxMDVhOTk1M2Q5OGNmMGY1
MTExM2E3ZDYwYzljOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKQEAgLTQyLDcgKzQyLDcg
QEAgdXNpbmcgc3RkOjptaW47CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiBmb250LCBmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBtX2ZvbnQoU2hhcmVk
R0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoZm9udCkpKQorICAgIDogbV9oRm9udChT
aGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShmb250KSkpCiAgICAgLCBtX3Np
emUoc2l6ZSkKICAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQogICAgICwgbV9zeW50aGV0aWNP
YmxpcXVlKG9ibGlxdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDZkNGIwZGM5NzQ2OTJkZDI5NDI0OTNkNjI4OTNkYWRjZWVlMTgw
ZWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJGb250
LmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgpCi17Ci0gICAgLy8gYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0
aGFuIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGdseXBocyBpZiB0aGUgYnVmZmVyIGNvbnRhaW5z
IHN1cnJvZ2F0ZSBwYWlycy4KLSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4K
LSAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAgIGJvb2wg
aGF2ZUdseXBocyA9IGZhbHNlOwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBh
Z2U6OnNpemVdOwotICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnQucGxhdGZvcm1E
YXRhKCkuY2dGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGJ1ZmZlciks
IGxvY2FsR2x5cGhCdWZmZXIsIGJ1ZmZlckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9j
YWxHbHlwaEJ1ZmZlcltpXTsKLSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEds
eXBoRm9ySW5kZXgoaSwgMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhG
b3JJbmRleChpLCBnbHlwaCk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250
RGF0YUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1w
bGVGb250RGF0YUNHV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhYjRj
ZGNmZDAzOGJmNGQ3YWQ0MGEzMDg1NDM5ZWM4ZDNiYTRiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2lm
IFVTRShDRykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5o
IgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
Ci0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAi
T3BlblR5cGVDRy5oIgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS93aW4v
Q29yZVRleHRTUElXaW4uaD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8
dW5pY29kZS91bm9ybS5oPgotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpwbGF0
Zm9ybUluaXQoKQotewotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRh
LnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0gICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0g
ICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IDA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEu
dXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOwotCi0gICAgQ0dGb250UmVm
IGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKTsKLSAgICBpbnQgaUFzY2VudCA9IENHRm9u
dEdldEFzY2VudChmb250KTsKLSAgICBpbnQgaURlc2NlbnQgPSBDR0ZvbnRHZXREZXNjZW50KGZv
bnQpOwotICAgIGludCBpTGluZUdhcCA9IENHRm9udEdldExlYWRpbmcoZm9udCk7Ci0gICAgaW50
IGlDYXBIZWlnaHQgPSBDR0ZvbnRHZXRDYXBIZWlnaHQoZm9udCk7Ci0KLSAgICAvLyBUaGUgT3Bl
biBGb250IEZvcm1hdCBkZXNjcmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGFz
IGZvbGxvd3M6Ci0gICAgLy8gIklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8g
dXNlIE9TLzIuc1R5cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIuc1R5cG9M
aW5lR2FwIGFzIGEgdmFsdWUgZm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlzIGZvbnQu
IgotICAgIHNob3J0IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICBp
ZiAoT3BlblR5cGU6OnRyeUdldFR5cG9NZXRyaWNzKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdy
YXBoaWNzRm9udChtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgbV9wbGF0Zm9ybURhdGEuc2l6ZSgp
LCBudWxscHRyLCBudWxscHRyKSkuZ2V0KCksIHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBv
TGluZUdhcCkpIHsKLSAgICAgICAgaUFzY2VudCA9IHR5cG9Bc2NlbnQ7Ci0gICAgICAgIGlEZXNj
ZW50ID0gdHlwb0Rlc2NlbnQ7Ci0gICAgICAgIGlMaW5lR2FwID0gdHlwb0xpbmVHYXA7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oZm9udCk7
Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGZsb2F0
IGZBc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyhpQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLSAgICBmbG9hdCBmRGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRz
KGlDYXBIZWlnaHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZMaW5lR2Fw
ID0gc2NhbGVFbVRvVW5pdHMoaUxpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotCi0g
ICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwpIHsKLSAgICAgICAgSFduZERDIGRjKDAp
OwotICAgICAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1fcGxhdGZvcm1E
YXRhLmhmb250KCkpOwotICAgICAgICBpbnQgZmFjZUxlbmd0aCA9IEdldFRleHRGYWNlKGRjLCAw
LCAwKTsKLSAgICAgICAgVmVjdG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTGVuZ3RoKTsKLSAgICAg
ICAgR2V0VGV4dEZhY2UoZGMsIGZhY2VMZW5ndGgsIGZhY2VOYW1lLmRhdGEoKSk7Ci0gICAgICAg
IFNlbGVjdE9iamVjdChkYywgb2xkRm9udCk7Ci0KLSAgICAgICAgZkFzY2VudCA9IGFzY2VudENv
bnNpZGVyaW5nTWFjQXNjZW50SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQsIGZEZXNjZW50
KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50KTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZkRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
Q2FwSGVpZ2h0KGZDYXBIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChmTGlu
ZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGZBc2NlbnQp
ICsgbHJvdW5kZihmRGVzY2VudCkgKyBscm91bmRmKGZMaW5lR2FwKSk7Ci0KLSAgICBHbHlwaCB4
R2x5cGggPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLSAgICBpZiAoeEdseXBo
KSB7Ci0gICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBp
dCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2Ug
bmVlZCB0aGUKLSAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRo
ZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KLSAgICAg
ICAgQ0dSZWN0IHhCb3g7Ci0gICAgICAgIENHRm9udEdldEdseXBoQkJveGVzKGZvbnQsICZ4R2x5
cGgsIDEsICZ4Qm94KTsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1U
b1VuaXRzKENHUmVjdEdldE1heFkoeEJveCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbnQgaVhIZWlnaHQgPSBDR0ZvbnRHZXRYSGVpZ2h0KGZvbnQp
OwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoaVhIZWln
aHQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpwbGF0Zm9y
bUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZvcm1E
YXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBpZiAobV9w
bGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChn
bHlwaCk7Ci0KLSAgICBDR1JlY3QgYm94OwotICAgIENHRm9udEdldEdseXBoQkJveGVzKG1fcGxh
dGZvcm1EYXRhLmNnRm9udCgpLCAmZ2x5cGgsIDEsICZib3gpOwotICAgIGZsb2F0IHBvaW50U2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBDR0Zsb2F0IHNjYWxlID0gcG9pbnRTaXpl
IC8gZm9udE1ldHJpY3MoKS51bml0c1BlckVtKCk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oYm94LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VT
Y2FsZShzY2FsZSwgLXNjYWxlKSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAg
ICAgICAgYm91bmRpbmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhl
dGljQm9sZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZsb2F0IEZv
bnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAo
IXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9w
bGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAgIHJldHVybiB3aWR0aEZvckdESUdseXBoKGds
eXBoKTsKLQotICAgIENHRm9udFJlZiBmb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7Ci0g
ICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENHU2l6ZSBh
ZHZhbmNlOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VT
Y2FsZShwb2ludFNpemUsIHBvaW50U2l6ZSk7Ci0gCi0gICAgYm9vbCBpc1ByaW50ZXJGb250ID0g
ZmFsc2U7Ci0gICAgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhmb250LCBt
LCBtX3BsYXRmb3JtRGF0YS5pc1N5c3RlbUZvbnQoKSwgaXNQcmludGVyRm9udCwgZ2x5cGgsIGFk
dmFuY2UpOwotCi0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNv
bnN0Ci17Ci0gICAgYXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGlj
c0ZvbnQocGxhdGZvcm1EYXRhKCkuY2dGb250KCksIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgbnVs
bHB0ciwgbnVsbHB0cikpOwotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVQ
YXRoRm9yR2x5cGgoY3RGb250LmdldCgpLCBnbHlwaCwgbnVsbHB0cikpOwotICAgIGF1dG8gc3lu
dGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCkgewotICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENH
UGF0aENyZWF0ZU11dGFibGUoKSk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQo
KSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOwot
ICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0
LmdldCgpKTsKLSAgICAgICAgcmV0dXJuIG5ld1BhdGg7Ci0gICAgfQotICAgIHJldHVybiBhZG9w
dENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpOwotfQotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5jbWFrZSBiL1Nv
dXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21ha2UKaW5kZXggOTkyZTIzNWJjMmY0M2MwM2Ji
MzAxYTE3NzhhNzQ1YTVlNTViZTA4Ni4uYTgyYmJmYWMxYzIyOGQyNmM0NTdlMjdlM2EyYzEzYWFk
MDAyYzRmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlCkBAIC00OCw2ICs0OCw3IEBA
IGlmICgke1VTRV9ESVJFQ1QyRH0pCiBlbHNlICgpCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0NBIE9OKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DRyBPTikKKyAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1QgT04pCiAKICAgICBzZXQoQ01BS0VfUkVR
VUlSRURfSU5DTFVERVMgJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElSfSkKICAgICBzZXQo
Q01BS0VfUkVRVUlSRURfTElCUkFSSUVTCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggYjEwOTk3ZjEyZmNjMTVhOTMxZDA5ZjcyNTNjZDNkMzk1OTg0OGRiNy4uNTUzMWZi
OTE4NjU4OWYxZTNlM2NmZmVjZjE4OTc3ZTBmM2VkZjU0NSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA5LTEwICBNeWxlcyBDLiBN
YXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gTWlncmF0ZSB0
aGUgQXBwbGUgV2luIHBvcnQncyBmb250IGNvZGUgdG8gQ29yZSBUZXh0IGZyb20gQ29yZSBHcmFw
aGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
MzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlOgorCiAyMDIwLTA5LTEwICBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBV
c2UgaW1wb3J0ZWQgdGFyZ2V0cyBpbiBmaW5kIG1vZHVsZSBmb3IgbGlic2VjY29tcAo=
</data>
<flag name="commit-queue"
          id="423922"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408511</attachid>
            <date>2020-09-10 21:50:04 -0700</date>
            <delta_ts>2020-09-10 22:06:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>203188</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm1Vc2UuaAkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dURi93
dGYvUGxhdGZvcm1Vc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTAgQEAKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIFVTRV9DVCAxCisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKENPQ09BKQogI2RlZmluZSBVU0VfQ0EgMQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCShyZXZpc2lv
biAyNjY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElX
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMjIgKzQyLDEyMCBAQAogQ1RfRVhQT1JUIGNvbnN0
IENGU3RyaW5nUmVmIGtDVEZvcmVncm91bmRDb2xvckZyb21Db250ZXh0QXR0cmlidXRlTmFtZTsK
IENUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWU7
CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NUU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1l
OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWc7
CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmll
cktleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VmFsdWU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udEZlYXR1
cmVUeXBlU2VsZWN0b3JzS2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRG
ZWF0dXJlU2VsZWN0b3JEZWZhdWx0S2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtD
VEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdS
ZWYga0NURm9udEZpeGVkQWR2YW5jZUF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmlu
Z1JlZiBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5n
UmVmIGtDVEZvbnRVUkxBdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NU
Rm9udFJlZmVyZW5jZVVSTEF0dHJpYnV0ZTsKIAotLy8gVGhpcyBlbnVtIGlzIGRlZmluZWQgaW4g
Q1RGb250LmguIFRvIGF2b2lkIHJlZGVmaW5pdGlvbiwgb25seSBkZWZpbmUgaXQgaGVyZSBpZiBD
VEZvbnQuaCBoYXMgbm90IGJlZW4gaW5jbHVkZWQuIAorLy8gVGhlc2UgZW51bXMgYXJlIGRlZmlu
ZWQgaW4gQ1RGb250LmguIFRvIGF2b2lkIHJlZGVmaW5pdGlvbiwgb25seSBkZWZpbmUgdGhlbSBo
ZXJlIGlmIENURm9udC5oIGhhcyBub3QgYmVlbiBpbmNsdWRlZC4gCiAjaWZuZGVmIF9fQ1RGT05U
X18KK3R5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250U3ltYm9saWNUcmFpdHMpIHsK
KyAgICBrQ1RGb250VHJhaXRJdGFsaWMgPSAoMSA8PCAwKSwKKyAgICBrQ1RGb250VHJhaXRCb2xk
ID0gKDEgPDwgMSksCisgICAga0NURm9udFRyYWl0TW9ub1NwYWNlID0gKDEgPDwgMTApLAorICAg
IGtDVEZvbnRUcmFpdENvbG9yR2x5cGhzID0gKDEgPDwgMTMpLAorCisgICAga0NURm9udEl0YWxp
Y1RyYWl0ID0ga0NURm9udFRyYWl0SXRhbGljLAorICAgIGtDVEZvbnRCb2xkVHJhaXQgPSBrQ1RG
b250VHJhaXRCb2xkLAorICAgIGtDVEZvbnRNb25vU3BhY2VUcmFpdCA9IGtDVEZvbnRUcmFpdE1v
bm9TcGFjZSwKKyAgICBrQ1RGb250Q29sb3JHbHlwaHNUcmFpdCA9IGtDVEZvbnRUcmFpdENvbG9y
R2x5cGhzLAorfTsKKwogdHlwZWRlZiBDRl9PUFRJT05TKHVpbnQzMl90LCBDVEZvbnRUYWJsZU9w
dGlvbnMpIHsKICAgICBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMgPSAwLAogICAgIGtDVEZv
bnRUYWJsZU9wdGlvbkV4Y2x1ZGVTeW50aGV0aWMgPSAoMSA8PCAwKQogfTsKKworZW51bSB7Cisg
ICAga0NURm9udFRhYmxlTUFUSCA9ICdNQVRIJywKKyAgICBrQ1RGb250VGFibGVPUzIgID0gJ09T
LzInLAorICAgIGtDVEZvbnRUYWJsZVZPUkcgPSAnVk9SRycsCisgICAga0NURm9udFRhYmxlSGVh
ZCA9ICdoZWFkJywKKyAgICBrQ1RGb250VGFibGVWaGVhID0gJ3ZoZWEnLAorfTsKKwordHlwZWRl
ZiBDRl9PUFRJT05TKHVpbnQzMl90LCBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zKSB7CisgICAga0NU
Rm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZyA9ICgxIDw8IDApLAorICAgIGtDVEZvbnRUcmFuc2Zv
cm1BcHBseVBvc2l0aW9uaW5nID0gKDEgPDwgMSkKK307CisKK2VudW0geworICAgIGtMb3dlckNh
c2VUeXBlID0gMzcsCisgICAga1VwcGVyQ2FzZVR5cGUgPSAzOCwKK307CisKK2VudW0geworICAg
IGtEZWZhdWx0TG93ZXJDYXNlU2VsZWN0b3IgPSAwLAorICAgIGtMb3dlckNhc2VTbWFsbENhcHNT
ZWxlY3RvciA9IDEsCisgICAga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciA9IDIKK307CisK
K2VudW0geworICAgIGtEZWZhdWx0VXBwZXJDYXNlU2VsZWN0b3IgPSAwLAorICAgIGtVcHBlckNh
c2VTbWFsbENhcHNTZWxlY3RvciA9IDEsCisgICAga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3Rv
ciA9IDIKK307CisKK2VudW0geworICAgIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3IgPSAwLAor
ICAgIGtIYWxmV2lkdGhUZXh0U2VsZWN0b3IgPSAyLAorICAgIGtUaGlyZFdpZHRoVGV4dFNlbGVj
dG9yID0gMywKKyAgICBrUXVhcnRlcldpZHRoVGV4dFNlbGVjdG9yID0gNCwKK307CisKK3R5cGVk
ZWYgQ0ZfRU5VTSh1aW50MzJfdCwgQ1RGb250T3JpZW50YXRpb24pIHsKKyAgICBrQ1RGb250T3Jp
ZW50YXRpb25EZWZhdWx0ID0gMCwKKyAgICBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsID0g
MSwKKyAgICBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA9IDIsCit9OwogI2VuZGlmCiAKK3Vu
c2lnbmVkIENURm9udEdldFVuaXRzUGVyRW0oQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0
Q2FwSGVpZ2h0KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdldExlYWRpbmcoQ1RGb250UmVm
KTsKK0NHRmxvYXQgQ1RGb250R2V0QXNjZW50KENURm9udFJlZik7CitDR0Zsb2F0IENURm9udEdl
dERlc2NlbnQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0WEhlaWdodChDVEZvbnRSZWYp
OworQ0dGbG9hdCBDVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihDVEZvbnRSZWYpOworQ0dGbG9h
dCBDVEZvbnRHZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250
R2V0U2l6ZShDVEZvbnRSZWYpOworQ1RGb250U3ltYm9saWNUcmFpdHMgQ1RGb250R2V0U3ltYm9s
aWNUcmFpdHMoQ1RGb250UmVmKTsKK0NGQ2hhcmFjdGVyU2V0UmVmIENURm9udENvcHlDaGFyYWN0
ZXJTZXQoQ1RGb250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGYW1pbHlOYW1lKENURm9u
dFJlZik7CitDRlN0cmluZ1JlZiBDVEZvbnRDb3B5RnVsbE5hbWUoQ1RGb250UmVmKTsKK0NURm9u
dFJlZiBDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoQ1RGb250UmVmLCBDR0Zsb2F0IHNp
emUsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiBtYXRyaXgsIENURm9udERlc2NyaXB0b3JSZWYg
YXR0cmlidXRlcyk7CiBDVEZvbnRSZWYgQ1RGb250Q3JlYXRlV2l0aE5hbWUoQ0ZTdHJpbmdSZWYs
IENHRmxvYXQgc2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENURm9udFJlZiBDVEZv
bnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KENHRm9udFJlZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBD
R0FmZmluZVRyYW5zZm9ybSosIENURm9udERlc2NyaXB0b3JSZWYgYXR0cmlidXRlcyk7CitDVEZv
bnRSZWYgQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKENURm9udERlc2NyaXB0b3JSZWYs
IENHRmxvYXQgc2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKIENUTGluZVJlZiBDVExp
bmVDcmVhdGVXaXRoQXR0cmlidXRlZFN0cmluZyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYpOwogdm9p
ZCBDVExpbmVEcmF3KENUTGluZVJlZiwgQ0dDb250ZXh0UmVmKTsKIENGRGF0YVJlZiBDVEZvbnRD
b3B5VGFibGUoQ1RGb250UmVmLCBDVEZvbnRUYWJsZVRhZywgQ1RGb250VGFibGVPcHRpb25zKTsK
IENGQXJyYXlSZWYgQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhDVEZvbnRSZWYsIENURm9udFRh
YmxlT3B0aW9ucyk7CiBDR1BhdGhSZWYgQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKENURm9udFJl
ZiwgQ0dHbHlwaCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qKTsKK3ZvaWQgQ1RGb250R2V0VmVy
dGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoW10sIENH
U2l6ZSB0cmFuc2xhdGlvbnNbXSwgQ0ZJbmRleCBjb3VudCk7Cit2b2lkIENURm9udERyYXdHbHlw
aHMoQ1RGb250UmVmLCBjb25zdCBDR0dseXBoW10sIGNvbnN0IENHUG9pbnRbXSwgc2l6ZV90IGNv
dW50LCBDR0NvbnRleHRSZWYgY29udGV4dCk7CitDR0FmZmluZVRyYW5zZm9ybSBDVEZvbnRHZXRN
YXRyaXgoQ1RGb250UmVmKTsKK0NGQXJyYXlSZWYgQ1RGb250Q29weUZlYXR1cmVzKENURm9udFJl
Zik7CitDRlR5cGVSZWYgQ1RGb250Q29weUF0dHJpYnV0ZShDVEZvbnRSZWYsIENGU3RyaW5nUmVm
KTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKENURm9udFJl
Zik7Citib29sIENURm9udFRyYW5zZm9ybUdseXBocyhDVEZvbnRSZWYsIENHR2x5cGhbXSwgQ0dT
aXplIGFkdmFuY2VzW10sIENGSW5kZXggY291bnQsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpOwor
Q0dSZWN0IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRP
cmllbnRhdGlvbiwgY29uc3QgQ0dHbHlwaFtdLCBDR1JlY3QgYm91bmRpbmdSZWN0c1tdLCBDRklu
ZGV4IGNvdW50KTsKK2RvdWJsZSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhDVEZvbnRSZWYs
IENURm9udE9yaWVudGF0aW9uLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBD
RkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhDVEZvbnRS
ZWYsIGNvbnN0IFVuaUNoYXJbXSwgQ0dHbHlwaFtdLCBDRkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RG
b250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UoQ1RGb250UmVmLCBDR0dseXBoW10sIENGUmFu
Z2UpOworQ0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFn
LCBDVEZvbnRUYWJsZU9wdGlvbnMpOworYm9vbCBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNo
YXJhY3RlcnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhbXSwgQ0ZJbmRleCBj
b3VudCk7CiAKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhB
dHRyaWJ1dGVzKENGRGljdGlvbmFyeVJlZik7Citib29sIENURm9udERlc2NyaXB0b3JJc1N5c3Rl
bVVJRm9udChDVEZvbnREZXNjcmlwdG9yUmVmKTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250
RGVzY3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlN0cmluZ1JlZiwgQ0dGbG9hdCk7CisK
IFdURl9FWFRFUk5fQ19FTkQKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCShyZXZpc2lvbiAyNjY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsMTQgKzE1MCwxNyBAQAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5jcHAKIAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jdC9Gb250Q29yZVRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQ
bGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5
cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUv
T3BlblR5cGVDRy5jcHAKIAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2lu
LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAogCiAgICAgICAgIHBs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKICAgICApCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw3ICszMDYsNyBAQAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhY2hlQ29yZVRleHQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhc2NhZGVDb2NvYS5tbQotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2Nv
YS5tbQorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RGVzY3JpcHRpb25Db2NvYS5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQpAQCAtMzIx
LDYgKzMyMSwxMSBAQAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQogCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jdC9Gb250Q29yZVRleHQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBs
YXRmb3JtRGF0YUNvcmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFn
ZUNvcmVUZXh0LmNwcAorCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvSW1hZ2VSb3RhdGlvblNl
c3Npb25WVC5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVy
Q1YuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3YvVGV4dHVyZUNhY2hlQ1YubW0KQEAgLTMz
NSw3ICszNDAsNiBAQAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dAkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBACiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhY2hl
Q29yZVRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1t
Ci1wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KK3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDb2NvYS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnREZXNjcmlw
dGlvbkNvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmlj
YXRpb25Db3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURh
dGFDb2NvYS5tbQpAQCAtMzY5LDYgKzM2OSwxMCBAQAogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViR1BVTGF5ZXIubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRlV2ViTS5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRh
Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNzaW9uVlQubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2IEBACiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6
ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
Ci1wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0ljb25NYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjY5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTY2NDAsNiArNjY0MCwxMSBAQAogCQkxQzY2MjYwRTFDNkU3Q0E2MDBB
QjUyN0MgLyogRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2MjYwRjFD
NkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2Qjk1REQy
MkM4NThBNDAwRTZGMTRGIC8qIFdITFNMQnVpbGRTdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1hcC5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgcGF0aCA9IFdITFNMQnVpbGRTdGFuZGFyZExpYnJhcnlGdW5jdGlvbk1h
cC5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QUMyNTBBMjk0RDAwRDZF
OTIwIC8qIEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzZGRDhBRDI1MEEyRTUzMDBENkU5MjAgLyogR2x5cGhQYWdlQ29yZVRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gR2x5cGhQYWdlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2NhZGVDb3JlVGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FzY2FkZUNvcmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRD
b3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q29yZVRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhCMDI1MEEzNUYxMDBENkU5MjAgLyogRm9udENv
Y29hLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb2NvYS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAw
MjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDE2NCw3ICsxMDE2OSw2IEBACiAJCTdDNEM5
NkRBMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVm
YXVsdFJlYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEM5NkRCMUFE
NDQ4MzUwMDM2MzU3MiAvKiBKU1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzRDOTZEQjFBRDQ0ODM1MDAzNjVBNTAgLyogSlNS
ZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJN0M0RURENzMxQTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDb2NvYS5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MTRFMDAyNEFGODA1ODAwNTA3MTBGIC8qIENvbG9y
Q29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2xvckNvbnZlcnNpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M1MTRFMDIyNEFGODA1ODAwNTA3MTBGIC8qIENvbG9yQ29u
dmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckNvbnZlcnNpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNkFEMjFGMzUyNTIwMDAzNEI2QkYgLyogRE9N
UHJvbWlzZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVByb21pc2VQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMzYsNyArMTMxNDAsNiBAQAogCQlCMkFGRkM3NTBE
MDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzc2MEQwMEE1QzEwMDMwMDc0RCAvKiBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQUZGQzc4MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2FzY2FkZUNvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29jb2EubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0RCAvKiBH
bHlwaFBhZ2VNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEds
eXBoUGFnZU1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQUZGQzhDMEQw
MEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBUZXh0Qm91bmRhcmllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJCMUY3MTQwRDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRS
dWxlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2
ZW50c0hpdFJ1bGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJCMUY3MTUw
RDAwQ0FBODAwNEFFQTY0IC8qIFBvaW50ZXJFdmVudHNIaXRSdWxlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xODEzMCw2ICsxODEzMywxNyBAQAogCQkJbmFtZSA9IEluc3Bl
Y3RvcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTFDNkZEOEFBMjUwQTI5
MjQwMEQ2RTkyMCAvKiBjdCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4g
PSAoCisJCQkJMUM2RkQ4QUUyNTBBMzExNTAwRDZFOTIwIC8qIEZvbnRDYXNjYWRlQ29yZVRleHQu
Y3BwICovLAorCQkJCTFDNkZEOEFGMjUwQTMzQ0YwMEQ2RTkyMCAvKiBGb250Q29yZVRleHQuY3Bw
ICovLAorCQkJCTFDNkZEOEFDMjUwQTI5NEQwMEQ2RTkyMCAvKiBGb250UGxhdGZvcm1EYXRhQ29y
ZVRleHQuY3BwICovLAorCQkJCTFDNkZEOEFEMjUwQTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VD
b3JlVGV4dC5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGN0OworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMUM4MUI5NEQwRTk3MzJEOTAwMjY2RTA3IC8qIGluc3BlY3RvciAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNTgxNyw3ICsy
NTgzMSw2IEBACiAJCQkJQjI3NTM1NEQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1hYy5t
bSAqLywKIAkJCQlCMkFGRkM3NTBEMDBBNUMxMDAzMDA3NEQgLyogRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAgKi8sCiAJCQkJQjJBRkZDNzYwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuaCAqLywKLQkJCQlCMkFGRkM3QjBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQ
YWdlTWFjLmNwcCAqLywKIAkJCQlCMjc1MzU4RDBCMDUzQTY2MDAyQ0U2NEYgLyogSWNvbk1hYy5t
bSAqLywKIAkJCQlCMjc1MzU0RTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VNYWMubW0gKi8sCiAJ
CQkJQjI3NTM1NEYwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50TWFjLm1tICovLApAQCAtMjU4
NDQsNiArMjU4NTcsNyBAQAogCQkJCUI1MzIwRDY4MTIyQTI0RTkwMDJEMTQ0MCAvKiBjb2NvYSAq
LywKIAkJCQkyQ0UxMTg5ODI0QzI0MDJDMDAzNzcwRTkgLyogY29yZWltYWdlICovLAogCQkJCTkz
MzJBQjNCMTY1MTVENzcwMEQ4MjdFQyAvKiBjcHUgKi8sCisJCQkJMUM2RkQ4QUEyNTBBMjkyNDAw
RDZFOTIwIC8qIGN0ICovLAogCQkJCUNEOUQ4MjdDMUM3QkIyRUQwMDZGRjA2NiAvKiBjdiAqLywK
IAkJCQkwRkU1RkJDOTFDM0RENTA2MDAwN0EyQ0EgLyogZGlzcGxheWxpc3RzICovLAogCQkJCUE3
NUU4QjdGMEUxREUyQjAwMDdGMjQ4MSAvKiBmaWx0ZXJzICovLApAQCAtMjYyMDQsNyArMjYyMTgs
NyBAQAogCQkJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4dC5j
cHAgKi8sCiAJCQkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0
LmggKi8sCiAJCQkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi8sCi0JCQkJN0M0RURENzMxQTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSAqLywK
KwkJCQkxQzZGRDhCMDI1MEEzNUYxMDBENkU5MjAgLyogRm9udENvY29hLmNwcCAqLywKIAkJCQkx
QzEyQUMyQzFFRTc3OTk1MDA3OUUwQTAgLyogRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwICovLAog
CQkJCTFDMTJBQzI4MUVFNzc4QUUwMDc5RTBBMCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNv
cmVUZXh0LmNwcCAqLywKIAkJCQkxQzEyQUMyOTFFRTc3OEFFMDA3OUUwQTAgLyogRm9udEZhbWls
eVNwZWNpZmljYXRpb25Db3JlVGV4dC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQsNyArNDc0
LDcgQEAKICAgICByZXR1cm4gKmRlcml2ZWRGb250RGF0YS5icm9rZW5JZGVvZ3JhcGhGb250Owog
fQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiAKIGJvb2wgRm9udDo6aXNQ
cm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0CiB7CkBAIC01MTEsNyArNTExLDcg
QEAKICAgICByZXR1cm4gcGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGZvbnREZXNjcmlwdGlvbiwg
c2NhbGVGYWN0b3IpOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiB2
b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25l
ZCwgYm9vbCwgYm9vbCwgY29uc3QgQXRvbVN0cmluZyYsIFN0cmluZ1ZpZXcsIFRleHREaXJlY3Rp
b24pIGNvbnN0CiB7CiB9CkBAIC02MzMsMjcgKzYzMyw2IEBACiAgICAgfQogfQogCi0jaWYgIVBM
QVRGT1JNKENPQ09BKSAmJiAhVVNFKEZSRUVUWVBFKQotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1
cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENh
cHMsIFVDaGFyMzIpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6
OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0gICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNh
cHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQot
Ci1ib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIs
IE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gdmFyaWF0
aW9uID8gZmFsc2UgOiBnbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotfQotI2VuZGlmCi0K
IGJvb2wgRm9udDo6c3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIpIGNvbnN0CiB7
CiAgICAgLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhdGljX2Nhc3Q8Ym9vbD4oZ2x5cGhG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmgJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQAogZW51bSBQ
aXRjaCB7IFVua25vd25QaXRjaCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogZW51bSBj
bGFzcyBJc0ZvclBsYXRmb3JtRm9udCA6IHVpbnQ4X3QgeyBObywgWWVzIH07CiAKLSNpZiBQTEFU
Rk9STShDT0NPQSkKKyNpZiBVU0UoQ1QpCiBib29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYsIHVu
c2lnbmVkIHRhYmxlVGFnKTsKIGJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiwgdW5z
aWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCShyZXZp
c2lvbiAyNjY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fz
Y2FkZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5NSw3ICs1OTUsNyBAQAogICAgIHJldHVybiBz
aG91bGRVc2VGb250U21vb3RoaW5nOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFV
U0UoQ1QpCiBib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxl
KCkKIHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjQ1LDIxICsxNjQ1LDYgQEAKICAgICByZXR1
cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7
CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0UoSEFSRkJVWlopCi0vLyBGSVhNRTog
VW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGltcGxlbWVudGF0aW9uLgotY29uc3Qg
Rm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAgICBVQ2hhcjMy
IGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwotICAg
IFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNo
YXJhY3Rlcik7Ci0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQpOwotCi0g
ICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwotfQotI2VuZGlm
Ci0KIHN0cnVjdCBHbHlwaEl0ZXJhdGlvblN0YXRlIHsKICAgICBGbG9hdFBvaW50IHN0YXJ0aW5n
UG9pbnQ7CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHJldmlzaW9uIDI2NjkwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDYgKzgxLDExIEBACiAgICAgYm9vbCBjb21wdXRlQm91bmRzIHsgZmFs
c2UgfTsKIH07CiAKKyNpZiBVU0UoQ1QpCit2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0
aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGb250JiwgR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgQ0dHbHlwaCosIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50
KTsKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENH
UG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmLCBjb25zdCBDR1NpemUqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCk7CisjZW5kaWYKKwogY2xhc3MgVGV4dExheW91dERlbGV0ZXIg
ewogcHVibGljOgogICAgIHZvaWQgb3BlcmF0b3IoKShUZXh0TGF5b3V0KikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZvcm1EYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmNwcAkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE1ICs1
Miw2IEBACiB7CiB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JNKFdJTikKLUZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGNnRm9udCwgZmxvYXQgc2l6ZSwgYm9v
bCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdN
b2RlIHRleHRSZW5kZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50
aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0
ZXh0UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBtX2NnRm9udCA9IGNnRm9udDsKLSAgICBBU1NFUlQo
bV9jZ0ZvbnQpOwotfQotI2VuZGlmCi0KICNpZiAhVVNFKEZSRUVUWVBFKQogRm9udFBsYXRmb3Jt
RGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKIHsKQEAgLTg0
LDcgKzc1LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0Uo
Q1QpCiAKIFN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250UGxhdGZv
cm1EYXRhLmgJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJ
bmMuCkBAIC00OSw3ICs0OSw3IEBACiBPQkpDX0NMQVNTIE5TRm9udDsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogdHlwZWRlZiBjb25zdCBzdHJ1Y3QgX19DVEZv
bnQqIENURm9udFJlZjsKICNlbmRpZgogCkBAIC04Miw3ICs4Miw3IEBACiAKICAgICBGb250UGxh
dGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNP
YmxpcXVlLCBGb250T3JpZW50YXRpb24gPSBGb250T3JpZW50YXRpb246Okhvcml6b250YWwsIEZv
bnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5k
ZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6OkF1dG9UZXh0UmVuZGVyaW5nKTsKIAotI2lm
IFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkKICAgICBXRUJDT1JFX0VYUE9SVCBGb250UGxh
dGZvcm1EYXRhKENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkID0gZmFs
c2UsIGJvb2wgc3ludGhldGljT2JsaXF1ZSA9IGZhbHNlLCBGb250T3JpZW50YXRpb24gPSBGb250
T3JpZW50YXRpb246Okhvcml6b250YWwsIEZvbnRXaWR0aFZhcmlhbnQgPSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGgsIFRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU6
OkF1dG9UZXh0UmVuZGVyaW5nKTsKICNlbmRpZgogCkBAIC05MCwxNiArOTAsMTIgQEAKICAgICBz
dGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9u
ZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCk7CiAKLSNpZiBVU0UoQ0cp
ICYmIFBMQVRGT1JNKFdJTikKLSAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQg
c2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmll
bnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUpOwotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShXSU4pCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+
LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwg
Ym9vbCB1c2VHREkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLSAg
ICBGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJ
KTsKKyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdE
SU9iamVjdDxIRk9OVD4sIENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xk
LCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCkBAIC0xMTUsMTEgKzExMSwxMSBAQAogI2VuZGlm
CiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgSEZPTlQgaGZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnQgPyBtX2ZvbnQtPmdldCgpIDogMDsgfQorICAgIEhGT05UIGhmb250KCkgY29uc3QgeyBy
ZXR1cm4gbV9oRm9udCA/IG1faEZvbnQtPmdldCgpIDogMDsgfQogICAgIGJvb2wgdXNlR0RJKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VHREk7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0Ep
CisjaWYgVVNFKENUKQogICAgIENURm9udFJlZiBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250
LmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgQ1RGb250UmVmIHJlZ2lzdGVyZWRGb250KCkg
Y29uc3Q7IC8vIFJldHVybnMgbnVsbHB0ciBpZmYgdGhlIGZvbnQgaXMgbm90IHJlZ2lzdGVyZWQs
IHN1Y2ggYXMgd2ViIGZvbnRzIChvdGhlcndpc2UgcmV0dXJucyBmb250KCkpLgogCkBAIC0xMzYs
MTAgKzEzMiw2IEBACiAKICAgICBib29sIGhhc1ZhcmlhdGlvbnMoKSBjb25zdCB7IHJldHVybiBt
X2hhc1ZhcmlhdGlvbnM7IH0KIAotI2lmIFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAgIENH
Rm9udFJlZiBjZ0ZvbnQoKSBjb25zdCB7IHJldHVybiBtX2NnRm9udC5nZXQoKTsgfQotI2VuZGlm
Ci0KICNpZiBVU0UoRElSRUNUMkQpCiAgICAgSURXcml0ZUZvbnQqIGR3Rm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fZHdGb250LmdldCgpOyB9CiAgICAgSURXcml0ZUZvbnRGYWNlKiBkd0ZvbnRGYWNl
KCkgY29uc3QgeyByZXR1cm4gbV9kd0ZvbnRGYWNlLmdldCgpOyB9CkBAIC0yMjIsMTYgKzIxNCwx
NCBAQAogICAgIHZvaWQgYnVpbGRTY2FsZWRGb250KGNhaXJvX2ZvbnRfZmFjZV90Kik7CiAjZW5k
aWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkKICAgICAvLyBGSVhNRTogR2V0
IHJpZCBvZiBvbmUgb2YgdGhlc2UuIFRoZXNlIHR3byBmb250cyBhcmUgc3VidGx5IGRpZmZlcmVu
dCwgYW5kIGl0IGlzIG5vdCBvYnZpb3VzIHdoaWNoIG9uZSB0byB1c2Ugd2hlcmUuCiAgICAgUmV0
YWluUHRyPENURm9udFJlZj4gbV9mb250OwogICAgIG11dGFibGUgUmV0YWluUHRyPENURm9udFJl
Zj4gbV9jdEZvbnQ7Ci0jZWxpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPFNoYXJlZEdESU9i
amVjdDxIRk9OVD4+IG1fZm9udDsKICNlbmRpZgogCi0jaWYgVVNFKENHKSAmJiBQTEFURk9STShX
SU4pCi0gICAgUmV0YWluUHRyPENHRm9udFJlZj4gbV9jZ0ZvbnQ7CisjaWYgUExBVEZPUk0oV0lO
KQorICAgIFJlZlB0cjxTaGFyZWRHRElPYmplY3Q8SEZPTlQ+PiBtX2hGb250OwogI2VuZGlmCiAK
ICNpZiBVU0UoRElSRUNUMkQpCkBAIC0yNzYsNyArMjY2LDcgQEAKICNlbmRpZgogfTsKIAotI2lm
IFBMQVRGT1JNKENPQ09BKQorI2lmIFVTRShDVCkKIGJvb2wgaXNTeXN0ZW1Gb250KENURm9udFJl
Zik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhc2NhZGVDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCShyZXZpc2lvbiAyNjY5MDMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxOSArMjMsNyBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogCi0jaW1wb3J0ICJDb21wbGV4VGV4dENvbnRy
b2xsZXIuaCIKLSNpbXBvcnQgIkRhc2hBcnJheS5oIgotI2ltcG9ydCAiRm9udC5oIgotI2ltcG9y
dCAiR2x5cGhCdWZmZXIuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgotI2ltcG9ydCAi
TGF5b3V0UmVjdC5oIgotI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4K
LSNpZiBVU0UoQVBQS0lUKQotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5oPgotI2VuZGlmCi0jaW1w
b3J0IDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBv
cnQgPHBhbC9pb3MvVUlLaXRTb2Z0TGluay5oPgpAQCAtNDksMjQgKzM3LDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi0vLyBDb25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmlu
Z0dldEZvbnRTbW9vdGhpbmdEaXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hv
dWxkU21vb3RoRm9udHMoKSBzdGlsbCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2gg
aXMgd2h5IHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0
aGVyIHRoYW4gInNtb290aGluZyIgdGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1
YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVS
SU5HX0dFVF9GT05UX1NNT09USElOR19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhl
bEFudGlhbGlhc2luZ0VuYWJsZWQ7Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFn
OwotICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhl
bEFudGlhbGlhc2luZ0VuYWJsZWQgPSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rp
c2FibGVkKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxl
ZDsKLSNlbGlmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0
dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxi
YWNrRm9udHNGb3JDb21wbGV4VGV4dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywzMCAr
NDcsOSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmlsbFZl
Y3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENHUG9pbnQsIDI1Nj4mIHBv
c2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVu
c2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0
JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsK
LSAgICBwb3NpdGlvbnNbMF0gPSBDR1BvaW50WmVybzsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZUFwcGx5
QWZmaW5lVHJhbnNmb3JtKGFkdmFuY2VzW2kgLSAxXSwgbWF0cml4KTsKLSAgICAgICAgcG9zaXRp
b25zW2ldLnggPSBwb3NpdGlvbnNbaSAtIDFdLnggKyBhZHZhbmNlLndpZHRoOwotICAgICAgICBw
b3NpdGlvbnNbaV0ueSA9IHBvc2l0aW9uc1tpIC0gMV0ueSArIGFkdmFuY2UuaGVpZ2h0OwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBib29sIHNob3VsZFVzZUxldHRlcnByZXNzRWZmZWN0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1Mp
Ci0gICAgcmV0dXJuIGNvbnRleHQudGV4dERyYXdpbmdNb2RlKCkuY29udGFpbnMoVGV4dERyYXdp
bmdNb2RlOjpMZXR0ZXJwcmVzcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2hvd0xldHRlcnBy
ZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZv
bnQmIGZvbnQsIEdyYXBoaWNzQ29udGV4dCYgY29yZUNvbnRleHQsIGNvbnN0IENHR2x5cGgqIGds
eXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0jaWYgRU5B
QkxFKExFVFRFUlBSRVNTKQogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MTUwLDIyNyArOTksNCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRo
QWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29u
dGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2
YW5jZXMsIHVuc2lnbmVkIGNvdW50KQotewotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2ludC54KCksIHBv
aW50LnkoKSk7Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBm
b250LnBsYXRmb3JtRGF0YSgpOwotICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhj
b3VudCk7Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRh
dGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90YXRlTGVmdFRy
YW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwgMCk7Ci0gICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4
KGNvbnRleHQpOwotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXggPSBDR0FmZmlu
ZVRyYW5zZm9ybUNvbmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKLSAgICAg
ICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRleHQpOwotCi0g
ICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKLSAgICAgICAg
Q1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9u
dCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKLQotICAgICAgICBDR0Fm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRl
eHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKLQotICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0g
RmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9h
dEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFz
Y2VudCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsK
LSAgICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNm
b3JtKHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7Ci0gICAgICAgICAgICBw
b3NpdGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9z
aXRpb24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVp
Z2h0KSwgdHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0u
d2lkdGg7Ci0gICAgICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhlaWdodDsKLSAg
ICAgICAgfQotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
Z2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25z
LCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQpOwotICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBs
YXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29u
dGV4dCk7Ci0gICAgfQogfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXNGb250cyhjZ0NvbnRleHQsIHRydWUpOwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4
dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOwotICAgIGJvb2wgaXNUcmFu
c2xhdGlvbk9ySW50ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3Jt
LmEpICYmIFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNvbnRleHRUcmFu
c2Zvcm0uYiA9PSAwLmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKLSAgICBib29sIGlz
Um90YXRlZCA9ICgoY29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zvcm0uYykgJiYg
KGNvbnRleHRUcmFuc2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKLSAgICBib29sIGRv
U3VicGl4ZWxRdWFudGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlIHx8ICgh
aXNSb3RhdGVkICYmIGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkpOwotCi0g
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgdHJ1
ZSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4
dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdH
bHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290
aGluZ01vZGUpCi17Ci0gICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0g
Zm9udC5wbGF0Zm9ybURhdGEoKTsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwotCi0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgIGJv
b2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOwotICAgIAotICAgIGlmICghZm9udC5hbGxvd3NB
bnRpYWxpYXNpbmcoKSkKLSAgICAgICAgc21vb3RoaW5nTW9kZSA9IEZvbnRTbW9vdGhpbmdNb2Rl
OjpOb1Ntb290aGluZzsKLQotICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgewotICAgIGNhc2Ug
Rm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgotICAgICAgICBzaG91bGRTbW9vdGhGb250
cyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpB
dXRvU21vb3RoaW5nOgotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFs
aWFzZWQ6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgotICAgICAgICBzaG91bGRB
bnRpYWxpYXMgPSBmYWxzZTsKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKCFzaG91bGRVc2VTbW9vdGhpbmcoKSkKLSAg
ICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLQotI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gQ0dDb250ZXh0
R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KTsKLSAgICBpZiAoc2hvdWxkU21vb3RoRm9u
dHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQotICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3VsZFNtb290aEZvbnRzKTsKLSNlbmRp
ZgotCi0gICAgYm9vbCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyA9IENHQ29udGV4dEdldFNob3Vs
ZEFudGlhbGlhcyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRBbnRpYWxpYXMgIT0gb3JpZ2lu
YWxTaG91bGRBbnRpYWxpYXMpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhj
Z0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7Ci0KLSAgICBib29sIHVzZUxldHRlcnByZXNzRWZm
ZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29udGV4dCk7Ci0gICAgRmxvYXRQb2lu
dCBwb2ludCA9IGFuY2hvclBvaW50OwotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YS5pc0NvbG9y
Qml0bWFwRm9udCgpKQotICAgICAgICBtYXRyaXggPSBDVEZvbnRHZXRNYXRyaXgocGxhdGZvcm1E
YXRhLmZvbnQoKSk7Ci0gICAgbWF0cml4LmIgPSAtbWF0cml4LmI7Ci0gICAgbWF0cml4LmQgPSAt
bWF0cml4LmQ7Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAg
ICAgICAgc3RhdGljIGZsb2F0IG9ibGlxdWVTa2V3ID0gdGFuZihzeW50aGV0aWNPYmxpcXVlQW5n
bGUoKSAqIHBpRmxvYXQgLyAxODApOwotICAgICAgICBpZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICAgICAgaWYgKGZv
bnQuaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAgICAgICAgICAgICAgIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEs
IG9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgLW9ibGlxdWVTa2V3LCAwLCAxLCAwLCAwKSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBD
R0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgLW9ibGlxdWVTa2V3LCAxLCAwLCAwKSk7Ci0gICAg
fQotICAgIFNjb3BlZFRleHRNYXRyaXggcmVzdG9yZXIobWF0cml4LCBjZ0NvbnRleHQpOwotCi0g
ICAgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShjb250ZXh0KTsKLSAgICBDR0NvbnRleHRTZXRGb250
U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwotCi0gICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKLSAgICBmbG9hdCBzaGFkb3dCbHVyOwotICAgIENvbG9yIHNoYWRvd0NvbG9y
OwotICAgIGNvbnRleHQuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRDVE0gPSBjb250ZXh0LmdldENU
TSgpOwotICAgIGZsb2F0IHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCAmJiAhY29udGV4dENUTS5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSB7Ci0gICAgICAgIEZsb2F0U2l6ZSBob3Jp
em9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscyA9IGNvbnRleHRDVE0ubWFwU2l6ZShGbG9hdFNp
emUoMSwgMCkpOwotICAgICAgICBmbG9hdCBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4
ZWxzID0gc3FydGYoaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSAqIGhv
cml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKyBob3Jpem9udGFsVW5pdFNp
emVJbkRldmljZVBpeGVscy5oZWlnaHQoKSAqIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4
ZWxzLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQ
aXhlbHMpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGEgc2NhbGVkIGRvd24gY29u
dGV4dCB3b24ndCBibG93IHVwIHRoZSBnYXAgYmV0d2VlbiB0aGUgZ2x5cGhzLiAKLSAgICAgICAg
ICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBzdGQ6Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBz
eW50aGV0aWNCb2xkT2Zmc2V0IC8gaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xv
ci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFw
Rm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRD
VE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAv
LyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENH
IHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAg
IGNvbnRleHQuY2xlYXJTaGFkb3coKTsKLSAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4
dC5maWxsQ29sb3IoKTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29s
b3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsK
LSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAg
ZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAg
ICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZl
bid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2
ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQu
aGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsK
LSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBz
aGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAgICAgICAgaWYgKHN5bnRo
ZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0
UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZv
bnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmls
bENvbG9yKTsKLSAgICB9Ci0KLSAgICBpZiAodXNlTGV0dGVycHJlc3NFZmZlY3QpCi0gICAgICAg
IHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjb250ZXh0
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMpOwotICAgIGVsc2UKLSAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhwb2lu
dCwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQocG9pbnQueCgpICsg
c3ludGhldGljQm9sZE9mZnNldCwgcG9pbnQueSgpKSwgZm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1
ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMp
OwotCi0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBpZiAoc2hvdWxkU21vb3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRV
c2VGb250U21vb3RoaW5nKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhj
Z0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyk7Ci0jZW5kaWYKLQotICAg
IGlmIChzaG91bGRBbnRpYWxpYXMgIT0gb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCi0gICAgICAg
IENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQsIG9yaWdpbmFsU2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotYm9vbCBGb250Q2FzY2FkZTo6cHJpbWFyeUZvbnRJc1N5c3RlbUZvbnQo
KSBjb25zdAotewotICAgIGNvbnN0IGF1dG8mIGZvbnREYXRhID0gcHJpbWFyeUZvbnQoKTsKLSAg
ICByZXR1cm4gaXNTeXN0ZW1Gb250KGZvbnREYXRhLnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpKTsK
LX0KLQotLy8gRklYTUU6IFVzZSB0aGlzIG9uIGFsbCBwb3J0cy4KLWNvbnN0IEZvbnQqIEZvbnRD
YXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgVUNoYXIzMiBiYXNlQ2hhcmFj
dGVyOwotICAgIHNpemVfdCBiYXNlQ2hhcmFjdGVyTGVuZ3RoID0gMDsKLSAgICBVMTZfTkVYVChj
aGFyYWN0ZXJzLCBiYXNlQ2hhcmFjdGVyTGVuZ3RoLCBsZW5ndGgsIGJhc2VDaGFyYWN0ZXIpOwot
Ci0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFy
YWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2UsIE5vcm1hbFZhcmlhbnQpOwotCi0gICAgaWYgKCFi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGlmIChsZW5ndGggPT0gYmFzZUNoYXJhY3Rlckxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsKLQotICAgIGJvb2wgdHJpZWRCYXNlQ2hhcmFjdGVy
Rm9udCA9IGZhbHNlOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgIWZhbGxiYWNrUmFuZ2Vz
QXQoaSkuaXNOdWxsKCk7ICsraSkgewotICAgICAgICBjb25zdCBGb250KiBmb250ID0gZmFsbGJh
Y2tSYW5nZXNBdChpKS5mb250Rm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOwotICAgICAgICBp
ZiAoIWZvbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgICAgICBpZiAoYmFzZUNoYXJhY3RlciA+PSAweDA2MDAgJiYgYmFzZUNoYXJhY3RlciA8
PSAweDA2ZmYgJiYgZm9udC0+c2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSNlbmRpZgotICAgICAgICBpZiAoZm9udC0+cGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBp
ZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChiYXNlQ2hhcmFjdGVyKSAmJiAhZm9udC0+aGFzVmVy
dGljYWxHbHlwaHMoKSkKLSAgICAgICAgICAgICAgICBmb250ID0gJmZvbnQtPmJyb2tlbklkZW9n
cmFwaEZvbnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fZm9udERlc2NyaXB0aW9uLm5vbkNK
S0dseXBoT3JpZW50YXRpb24oKSA9PSBOb25DSktHbHlwaE9yaWVudGF0aW9uOjpNaXhlZCkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHZlcnRpY2FsUmlnaHRGb250ID0gZm9udC0+dmVy
dGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAgICAgICAgIEdseXBoIHZlcnRp
Y2FsUmlnaHRHbHlwaCA9IHZlcnRpY2FsUmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbFJpZ2h0R2x5cGggPT0gYmFz
ZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ2
ZXJ0aWNhbFJpZ2h0Rm9udDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgRm9udCYgdXByaWdodEZvbnQgPSBmb250LT51cHJpZ2h0T3JpZW50YXRpb25Gb250KCk7
Ci0gICAgICAgICAgICAgICAgR2x5cGggdXByaWdodEdseXBoID0gdXByaWdodEZvbnQuZ2x5cGhG
b3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHVwcmlnaHRH
bHlwaCAhPSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAg
ICBmb250ID0gJnVwcmlnaHRGb250OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGZvbnQgPT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250KQotICAgICAgICAgICAg
dHJpZWRCYXNlQ2hhcmFjdGVyRm9udCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKGZvbnQtPmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0gICAg
ICAgICAgICByZXR1cm4gZm9udDsKLSAgICB9Ci0KLSAgICBpZiAoIXRyaWVkQmFzZUNoYXJhY3Rl
ckZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlw
aERhdGEuZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVy
cywgbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udDsK
LQotICAgIHJldHVybiBGb250OjpzeXN0ZW1GYWxsYmFjaygpOwotfQotCi19CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiRm9udC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQkocmV2aXNpb24gMjY2OTAzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCShub25leGlz
dGVudCkKQEAgLTEsNzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYs
IDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmln
LmgiCi0jaW1wb3J0ICJGb250LmgiCi0KLSNpbXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJGbG9h
dFJlY3QuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgotI2ltcG9ydCAiRm9udENhc2NhZGUuaCIK
LSNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAiTG9jYWxlQ29jb2EuaCIKLSNp
bXBvcnQgIk9wZW5UeXBlQ0cuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCA8
Q29yZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQ
SS5oPgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jZW5kaWYK
LQotCi0jaWYgVVNFKEFQUEtJVCkKLUBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRB
UEkpCi0tIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwotQGVuZAotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
Q0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKLXsKLSAgICByZXR1cm4gYSAmJiBDRlN0cmlu
Z0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVx
dWFsVG87Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYg
Zm9udCkKLXsKLSAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJs
ZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LWJvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250
RmFtaWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9y
bWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+Ci0gICAgLy8gRklY
TUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRo
ZSBhYm92ZSBidWcgaXMgZml4ZWQuCi0gICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIo
IlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8pCi0gICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1p
bHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBmbG9h
dCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKLQotc3RhdGljIGJvb2wgc2hvdWxkVXNl
QWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKLQotICAg
IGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAg
ICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigi
LkhlbHZldGljYSBOZXVlVUkiKSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBib29sIG5lZWRzQXNj
ZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQotewotICAgIHJldHVybiBmYW1p
bHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1l
cyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RS
KCJIZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlO
YW1lLCBDRlNUUigiQ291cmllciIpKSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBpc0Fo
ZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5hbWUg
JiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKLX0K
LQotYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcp
Ci17Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJs
ZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxl
VGFncykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZB
cnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0g
MDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0
aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYg
KHRhZyA9PSB0YWJsZVRhZykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZv
bnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQotewotICAgIGF1dG8g
dGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NU
Rm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKCF0YWJsZVRhZ3MpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0
YWJsZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
VGFibGVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250
VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7Ci0gICAgICAgIGlmICh0YWcgPT0gdGFibGVU
YWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3Bs
YXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkg
LyAyNC4wZikgOiAwLmY7Ci0jZWxzZQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0jZW5kaWYKLQotICAgIHVu
c2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxhdGZvcm1EYXRhLmZv
bnQoKSk7Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAg
IENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2FwSGVpZ2h0KG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotICAgIENHRmxvYXQgbGluZUdhcCA9IHBvaW50U2l6ZSA/
IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9h
dCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9u
dCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0RGVz
Y2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLQotICAgIC8vIFRoZSBPcGVuIEZvbnQg
Rm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9sbG93
czoKLSAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgT1Mv
Mi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVHYXAg
YXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCi0gICAg
Ly8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGltcG9ydGFudCBjYXNl
IG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgotICAgIGlmIChmb250SGFzVGFibGUobV9wbGF0
Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7Ci0gICAgICAgIHNob3J0IHR5
cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICAgICAgaWYgKE9wZW5UeXBl
Ojp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5cG9Bc2NlbnQsIHR5
cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKLSAgICAgICAgICAgIGFzY2VudCA9IHNjYWxlRW1U
b1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICAgICAg
ZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2lu
dFNpemU7Ci0gICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHModHlwb0xpbmVHYXAs
IHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBm
YW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3BsYXRmb3JtRGF0YS5m
b250KCkpKTsKLQotICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdp
dGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgotICAgIGlmIChpc0FoZW1G
b250KGZhbWlseU5hbWUuZ2V0KCkpKQotICAgICAgICBtX2FsbG93c0FudGlhbGlhc2luZyA9IGZh
bHNlOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVz
LCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCi0gICAgLy8gdmVy
dGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRo
ZSBkZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9m
IDIwJSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUg
c3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAotICAgIC8vIGFuZCBh
ZGQgaXQgdG8gdGhlIGFzY2VudC4KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCAm
JiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIGFzY2Vu
dCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsKLSNlbmRpZgotCi0g
ICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFja3Mg
YXJlIGFwcGxpZWQuCi0gICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRmKGFzY2VudCkgKyBs
cm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJr
ZWQgdGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgotICAg
IGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFtZSAmJiBDRlN0cmlu
Z0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8iKSkpIHsKLSAgICAg
ICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKLSAgICAgICAgZGVzY2VudCA9IDM7Ci0gICAgfQot
I2VuZGlmCi0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQot
ICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQ0dG
bG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRmb3JtRGF0YS5mb250
KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDog
MDsKLQotICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKLSAgICBsaW5lU3BhY2luZyA9IGNl
aWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGluZUdhcDsKLSAgICBh
c2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKLSAgICBkZXNjZW50ID0gY2VpbGYo
ZGVzY2VudCk7Ci0KLSAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlT
aG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0jZW5kaWYKLQotICAg
IENHRmxvYXQgeEhlaWdodCA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewot
ICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRp
b246Okhvcml6b250YWwpIHsKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFy
YWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhl
IGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgICAgIC8vIHJlcG9ydGVkIHgtaGVp
Z2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92
ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJh
Y3RlcigneCcpOwotICAgICAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAgICAgICAgICB4SGVp
Z2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4R2x5cGgpKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RGb250R2V0WEhlaWdo
dChtX3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHhI
ZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1ldHJpY3MoKS54SGVp
Z2h0KCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVy
RW0pOwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0
KGNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAg
IG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGlu
ZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRmb3JtRGF0YS5mb250
KCkpKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRHZXRV
bmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci19Ci0KLXZvaWQgRm9u
dDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0g
ICAgbV9tYXhDaGFyV2lkdGggPSAwOwotCi0gICAgYXV0byBvczJUYWJsZSA9IGFkb3B0Q0YoQ1RG
b250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlT1MyLCBrQ1RG
b250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0
TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBvczIg
PSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9zMkF2
Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFyV2lk
dGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQ
ZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGhlYWRU
YWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NU
Rm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKGhl
YWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewotICAg
ICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgp
KTsKLSAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAg
ICAgICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAgICAg
U0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAgICAgICAgU0ludDE2
IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlmZiA9
IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRo
ID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9w
bGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3Mt
cGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRo
ZXkgYXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotCi12b2lkIEZv
bnQ6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBw
b3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBz
LCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkg
JiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotICAgIEdseXBoIGdseXBoID0gZ2x5
cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAoIWdseXBoKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAgIGNhc2UgRm9u
dFZhcmlhbnRDYXBzOjpTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNT
dXBwb3J0ZWRCeVNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+
IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJp
YW50Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5UGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6QWxsU21hbGw6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9y
dGVkQnlBbGxTbWFsbENhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBn
bHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgY2FzZSBGb250VmFyaWFu
dENhcHM6OkFsbFBldGl0ZTogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBw
b3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkg
PiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMg
bGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShjaGFyYWN0ZXIpOwotCi0gICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsK
LSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENh
cHM6OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0gICAgY2Fz
ZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50
LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
I2VuZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykg
fHwgUExBVEZPUk0oTUFDKQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxs
Q2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKLXsK
LSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAg
ICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250
T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwg
dmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENh
cHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQotewotICAgIFJl
dGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7Ci0gICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7Ci0gICAgQ0ZUeXBlUmVmIGtl
eXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVT
ZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5n
ZXQoKSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtl
eXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0
b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQotewotICAgIENGSW5kZXggbGVuZ3Ro
ID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGxl
bmd0aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAwOwotICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsK
LSAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJp
dChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7Ci0gICAgICAgIGlm
IChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
cmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOwotICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAx
OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmlu
Z1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCi17Ci0gICAg
UmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlw
aENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVh
dHVyZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0
KCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBp
bnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBS
ZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBo
Q292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBl
LCBzZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2Uu
Z2V0KCkpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMp
IHsKLSAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOwot
ICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0
YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAg
ICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxs
Q2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlT
bWFsbENhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5
U21hbGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3Vw
cG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIo
InNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21h
bGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJj
MnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxs
Q2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNl
VHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCks
IG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVj
dFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxl
Y3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNt
YWxsQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBv
cnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5
UGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJp
dFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiks
IHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFs
dWUoKSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtM
b3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlw
aHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2ds
eXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3Im
IEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVu
VHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlw
aHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5U
eXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5
cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3Rvciwg
cGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52
YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwg
a1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2ds
eXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0jZW5kaWYKLQot
c3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwg
ZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1Ry
YWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGlj
KQotewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAo
c3ludGhldGljQm9sZCkKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0Owot
ICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCi0gICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0
YWxpY1RyYWl0OwotCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9
IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwotCi0gICAgYm9vbCB1c2VkU3ludGhldGlj
Qm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJh
aXRzICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9
IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMg
JiBrQ1RGb250VHJhaXRJdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERh
dGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBv
cmllbnRhdGlvbik7Ci0KLSAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJl
ZiBmZWF0dXJlKQotewotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJl
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShm
ZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAg
cmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlw
ZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRp
b25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJl
KQotewotICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgQ0ZTdHJp
bmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKLSAgICBpbnQgcmF3VmFsdWU7
Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0
aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0g
ICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlw
ZSwgJnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAg
IHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxs
b3B0OwotfQotCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0
dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc1RydWVUeXBlRmVh
dHVyZShmZWF0dXJlKSk7Ci0gICAgaW50IHJhd1R5cGU7Ci0gICAgQ0ZOdW1iZXJSZWYgdHlwZSA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBr
Q1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZO
dW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7Ci0gICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpbnQgcmF3U2VsZWN0b3I7Ci0gICAg
Q0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkp
KTsKLSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50
VHlwZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3Mp
OwotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0
dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKLSAgICBDRklu
ZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAg
Zm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZE
aWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihD
RkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7Ci0gICAgICAgIENGTnVt
YmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsK
LSAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGludCByYXdGZWF0dXJlS2V5OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXks
IGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKLSAgICAgICAgaWYgKHJhd0ZlYXR1
cmVLZXkgIT0ga2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ0ZBcnJheVJl
ZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOwot
ICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2Vs
ZWN0b3JzKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7
ICsraikgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0
YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJl
U2VsZWN0b3JzLCBqKSk7Ci0gICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0
aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9y
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwotICAgICAgICAgICAgaWYgKCFp
c0RlZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnQgcmF3
SXNEZWZhdWx0OwotICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51
bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOwotICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1
bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0
aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250
UmVmIGZvbnQpCi17Ci0gICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVh
dHVyZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7
Ci0gICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQotICAgICAgICByZXR1cm4gZmVh
dHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgotICAgIFJldGFp
blB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIGlm
IChpc09wZW5UeXBlKSB7Ci0gICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVy
ZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRh
Zy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJl
VGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1
cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVh
dHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKLSAgICAgICAgICAgIGludCByYXda
ZXJvID0gMDsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwg
JnJhd1plcm8pKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVRhZykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBr
Q1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUs
IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChpc1RydWVUeXBlKSB7Ci0gICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVU
eXBlRmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmly
c3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtM
b3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9
PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgewotICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5
LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlm
aWVyS2V5KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0g
ZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkK
LSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZv
bnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5n
ZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdl
dFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNl
VHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fw
c1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRp
dGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1
bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdl
dFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JG
b3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQotICAgICAgICAgICAgICAg
IENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVh
dHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5
QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktl
eSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rvcklk
ZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNp
emFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJl
Zj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlB
dHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKLSAgICBp
ZiAoIWZlYXR1cmVzKQotICAgICAgICByZXR1cm4gZm9udDsKLSAgICBDRkluZGV4IGZlYXR1cmVD
b3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPENG
TXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJh
Y2tzKSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsK
LSAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25h
cnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAg
ICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShm
ZWF0dXJlLCBmb250KS5nZXQoKSk7Ci0gICAgfQotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtD
VEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10g
PSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
YXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihD
VEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwot
ICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBD
VEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Ci19Ci0K
LVJlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJl
cygpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAg
ICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFp
dHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZv
bnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQo
KSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVl
KCkpOwotfQotCi1SZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGZs
b2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9w
bGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4g
Zm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRm
b3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0g
YWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0
KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChz
Y2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250
VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5
bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZvaWQgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWdu
ZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJl
c1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0
RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHJlcXVp
cmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRp
YWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCi0gICAgYXV0byBoYW5kbGVy
ID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiog
bmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgq
KiBuZXdJbmRpY2VzUG9pbnRlcikgewotICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWlu
KHN0ZDo6bWF4KHJhbmdlLmxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRp
Y19jYXN0PENGSW5kZXg+KGdseXBoQnVmZmVyLnNpemUoKSkpOwotICAgICAgICBpZiAocmFuZ2Uu
bGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgcmFuZ2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2Uu
bG9jYXRpb24sIC1yYW5nZS5sZW5ndGgpOwotICAgICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBy
YW5nZS5sb2NhdGlvbiAtIHJhbmdlLmxlbmd0aDsKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLnJl
bW92ZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZ2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5u
aW5nR2x5cGhJbmRleCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsIHRoaXMpOwotCi0g
ICAgICAgICpuZXdHbHlwaHNQb2ludGVyID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0ds
eXBoSW5kZXgpOwotICAgICAgICAqbmV3QWR2YW5jZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9
IGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdJ
bmRpY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlw
aEluZGV4KTsKLSAgICB9OwotCi0gICAgYXV0byBzdWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhi
ZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBz
dWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgYXV0byBsb2NhbGVTdHJpbmcg
PSBMb2NhbGVDb2NvYTo6Y2Fub25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2Nh
bGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0gICAgQ1RGb250U2hhcGVPcHRpb25zIG9w
dGlvbnMgPSBrQ1RGb250U2hhcGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9uCi0gICAgICAgIHwgKGVu
YWJsZUtlcm5pbmcgPyBrQ1RGb250U2hhcGVXaXRoS2VybmluZyA6IDApCi0gICAgICAgIHwgKHRl
eHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xl
ZnQgOiAwKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXpl
KCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNl
dHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRl
eDsKLQotICAgIENURm9udFNoYXBlR2x5cGhzKAotICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZv
bnQoKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAot
ICAgICAgICByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJl
Z2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4o
Z2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCi0gICAgICAgIGdseXBo
QnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgp
KSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKLSAg
ICAgICAgb3B0aW9ucywKLSAgICAgICAgbG9jYWxlU3RyaW5nLmdldCgpLAotICAgICAgICBoYW5k
bGVyKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkg
LSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJ
blN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtpXSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsK
LQotI2Vsc2UKLQotICAgIFVOVVNFRF9QQVJBTShiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGxvY2FsZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHQpOwotCi0gICAgLy8g
Q1RGb250VHJhbnNmb3JtR2x5cGhzKCkgb3BlcmF0ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lk
dGhJdGVyYXRvciBpdGVyYXRlcyBpbiBsb2dpY2FsIG9yZGVyLgotICAgIC8vIFRlbXBvcmFyaWx5
IHB1dCB1cyBpbiB2aXN1YWwgb3JkZXIganVzdCBmb3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJh
Y2sgaW50byBsb2dpY2FsIG9yZGVyIHdoZW4KLSAgICAvLyB0aGUgY2FsbCBpcyBkb25lLgotICAg
IC8vIFdlIGRvbid0IGhhdmUgYSBnbG9iYWwgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVy
OyB3ZSdyZSBqdXN0IG9wZXJhdGluZyBvbiBhIHNpbmdsZSBjaHVuayBvZiBpdC4KLSAgICAvLyBX
aWR0aEl0ZXJhdG9yIGVuY291bnRlcnMgdGhlIGNodW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwg
c28gd2UgaGF2ZSB0byBtYWludGFpbiB0aGF0IGludmFyaWFudC4KLSAgICAvLyBFdmVudHVhbGx5
LCBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUg
YnVmZmVyIHRvIHB1dCB0aGUgZW50aXJlIHRoaW5nCi0gICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBi
dXQgdGhhdCdzIG9rYXkgYmVjYXVzZSBpdCBoYXMgYSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhC
dWZmZXIuCi0gICAgLy8gT24gdGhlIG90aGVyIGhhbmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNj
ZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3JkZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2lj
YWwKLSAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMgdGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhp
cyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVjdXRlIHdoZW4KLSAgICAvLyBDVEZvbnRTaGFw
ZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERp
cmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBo
SW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwotCi0gICAg
Q1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250
VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hh
cGluZzsKLSAgICBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2Fz
dDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGds
eXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsIG9wdGlvbnMpOwotI2VuZGlm
Ci0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0
aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMuCi0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0g
VGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmlu
Z0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwot
fQotCi1zdGF0aWMgaW50IGV4dHJhY3ROdW1iZXIoQ0ZOdW1iZXJSZWYgbnVtYmVyKQotewotICAg
IGludCByZXN1bHQgPSAwOwotICAgIGlmIChudW1iZXIpCi0gICAgICAgIENGTnVtYmVyR2V0VmFs
dWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi12b2lkIEZvbnQ6OmRldGVybWluZVBpdGNoKCkKLXsKLSAgICBDVEZvbnRSZWYgY3RG
b250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwotICAgIEFTU0VSVChjdEZvbnQpOwotCi0gICAg
Ly8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8v
cHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0
Y2guCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1v
bm8gYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KLSAg
ICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90
IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtp
dCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lh
bCBjYXNlIE1vbm90eXBlQ29yc2l2YQotICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2Js
ZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVk
IHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3Jz
aXZhIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgYXV0byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250
Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RG
b250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0KLSAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJh
Y3ROdW1iZXIoYWRvcHRDRihzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJp
YnV0ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUp
KSkuZ2V0KCkpOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMoY3RGb250KSAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAo
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8i
KSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBH
b3RoaWMiKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIo
Ik1vbm90eXBlQ29yc2l2YSIpKSk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAo
ZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENG
U1RSKCJDb3VyaWVyIE5ldyIpKSkgewotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBO
ZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVz
ZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9u
ZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KLSAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZh
bHNlOwotICAgIH0KLSNlbmRpZgotfQotCi1GbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7
Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZv
bnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlwaCwgMCwgMSk7Ci0gICAgYm91bmRpbmdCb3gu
c2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9z
eW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxv
YXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAg
IENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsKLQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5z
aXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50
YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhvcml6b250YWw7Ci0gICAgICAgIENURm9udE9y
aWVudGF0aW9uIG9yaWVudGF0aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBo
RmFsbGJhY2sgPyBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0
aW9uVmVydGljYWw7Ci0jaWYgVVNFKENURk9OVEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCi0gICAg
ICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50
aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlh
c2luZ1N0eWxlVW5maWx0ZXJlZDsKLSAgICAgICAgaWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9q
aShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSkgJiYgIW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlv
bnMoKSkKLSAgICAgICAgICAgIENURm9udEdldFVuc3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRT
dHlsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgs
ICZhZHZhbmNlLCAxKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBv
cmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGgg
Rm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgYXV0
byByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEo
KS5jdEZvbnQoKSwgZ2x5cGgsIG51bGxwdHIpKTsKLSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRP
ZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRh
YmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJl
c3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9y
bU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xkT2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRo
QWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNsYXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAg
ICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgYWRv
cHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKSB9OwotfQotCi1ib29s
IEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlv
bmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QKLXsKLSAgICBpZiAodmFyaWF0aW9uKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVbmlDaGFyIGNvZGVVbml0c1syXTsKLSAgICBDR0ds
eXBoIGdseXBoc1syXTsKLSAgICBDRkluZGV4IGNvdW50ID0gMDsKLSAgICBVMTZfQVBQRU5EX1VO
U0FGRShjb2RlVW5pdHMsIGNvdW50LCBjaGFyYWN0ZXIpOwotICAgIHJldHVybiBDVEZvbnRHZXRH
bHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGds
eXBocywgY291bnQpOwotfQotCi1ib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVy
SWNvbnMoKSBjb25zdAotewotICAgIGF1dG8gcGxhdGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCku
Zm9udCgpOwotICAgIGlmICghcGxhdGZvcm1Gb250KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBBbGxvdyBtb3N0IG5vbi1pY29uIGZvbnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0
ZXN0aW5nIGEgc2luZ2xlIGNoYXJhY3RlciAnYScsIHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxs
IGJhc2ljIGxhdGluIGNoYXJhY3RlcnMuCi0gICAgVW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVy
ID0gJ2EnOwotICAgIENHR2x5cGggbG93ZXJjYXNlQUdseXBoOwotICAgIGlmIChDVEZvbnRHZXRH
bHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRm9udCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZs
b3dlcmNhc2VBR2x5cGgsIDEpKSB7Ci0gICAgICAgIGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRH
ZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9u
RGVmYXVsdCwgJmxvd2VyY2FzZUFHbHlwaCwgbnVsbHB0ciwgMSkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1dG8gc3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0
Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChwbGF0Zm9ybUZvbnQpKTsKLSAgICBpZiAoQ0ZDaGFy
YWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8
IENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgp
LCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBh
bGwgYmFzaWMgTGF0aW4gbm9uLWNvbnRyb2wgY2hhcmFjdGVycy4KLSAgICBjb25zdGV4cHIgVW5p
Q2hhciBmaXJzdENoYXJhY3RlclRvVGVzdCA9ICcgJzsKLSAgICBjb25zdGV4cHIgVW5pQ2hhciBs
YXN0Q2hhcmFjdGVyVG9UZXN0ID0gJ34nOwotICAgIGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hh
cmFjdGVyc1RvVGVzdCA9IGxhc3RDaGFyYWN0ZXJUb1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVz
dCArIDE7Ci0KLSAgICBWZWN0b3I8Q0dHbHlwaD4gZ2x5cGhzOwotICAgIGdseXBocy5maWxsKDAs
IG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCk7Ci0gICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFj
dGVyUmFuZ2UocGxhdGZvcm1Gb250LCBnbHlwaHMuYmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RD
aGFyYWN0ZXJUb1Rlc3QsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCkpOwotICAgIGdseXBocy5y
ZW1vdmVBbGwoMCk7Ci0KLSAgICBpZiAoZ2x5cGhzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVmVjdG9yPENHUmVjdD4gYm91bmRpbmdSZWN0czsKLSAgICBib3VuZGlu
Z1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhzLnNpemUoKSk7Ci0gICAgQ1RGb250R2V0Qm91
bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1
bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGluZ1JlY3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkp
OwotICAgIHJldHVybiBub3RGb3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShh
dXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKLSAgICB9
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5t
bQkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwzMyAr
MzUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNTeXN0ZW1Gb250KENURm9u
dFJlZiBmb250KQotewotI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCi0gICAgcmV0dXJu
IENURm9udElzU3lzdGVtVUlGb250KGZvbnQpOwotI2Vsc2UKLSAgICByZXR1cm4gQ1RGb250RGVz
Y3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZv
bnQpKS5nZXQoKSk7Ci0jZW5kaWYKLX0KLQotLy8gVGhlc2UgQ29yZVRleHQgVGV4dCBTcGFjaW5n
IGZlYXR1cmUgc2VsZWN0b3JzIGFyZSBub3QgZGVmaW5lZCBpbiBDb3JlVGV4dC4KLWVudW0gVGV4
dFNwYWNpbmdDVEZlYXR1cmVTZWxlY3RvciB7IFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsLCBUZXh0
U3BhY2luZ0Z1bGxXaWR0aCwgVGV4dFNwYWNpbmdIYWxmV2lkdGgsIFRleHRTcGFjaW5nVGhpcmRX
aWR0aCwgVGV4dFNwYWNpbmdRdWFydGVyV2lkdGggfTsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
Rm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5k
ZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBz
eW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5n
TW9kZSkKLXsKLSAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwotICAgIG1fZm9udCA9IGZvbnQ7
Ci0gICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQp
ICYga0NURm9udFRyYWl0Q29sb3JHbHlwaHM7Ci0gICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJDb3Jl
Ojppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsKLSAgICBhdXRvIHZhcmlhdGlvbnMgPSBhZG9w
dENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250
LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkpOwotICAgIG1faGFzVmFyaWF0aW9ucyA9IHZh
cmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQoKSk7Ci0KLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIG1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xv
ckVtb2ppKG1fZm9udC5nZXQoKSk7Ci0jZW5kaWYKLX0KLQogdW5zaWduZWQgRm9udFBsYXRmb3Jt
RGF0YTo6aGFzaCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8
dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKQEAg
LTcxLDcgKzQ0LDcgQEAKICAgICAgICAgfCBtX3N5bnRoZXRpY0JvbGQgPDwgMQogICAgICAgICB8
IG1fc3ludGhldGljT2JsaXF1ZSk7CiAKLSAgICB1aW50cHRyX3QgZm9udEhhc2ggPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udC5nZXQoKSkpOworICAgIHVpbnRwdHJf
dCBmb250SGFzaCA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udC5nZXQoKSkp
OwogICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9udEhhc2gsIGZsYWdzIH07CiAgICAg
cmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENv
ZGVzKTsKIH0KQEAgLTgzLDExOCArNTYsNCBAQAogICAgIHJldHVybiBDRkVxdWFsKG1fZm9udC5n
ZXQoKSwgb3RoZXIubV9mb250LmdldCgpKTsKIH0KIAotQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURh
dGE6OnJlZ2lzdGVyZWRGb250KCkgY29uc3QKLXsKLSAgICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250
ID0gZm9udCgpOwotICAgIEFTU0VSVChwbGF0Zm9ybUZvbnQpOwotICAgIGlmIChwbGF0Zm9ybUZv
bnQgJiYgYWRvcHRDRihDVEZvbnRDb3B5QXR0cmlidXRlKHBsYXRmb3JtRm9udCwga0NURm9udFVS
TEF0dHJpYnV0ZSkpKQotICAgICAgICByZXR1cm4gcGxhdGZvcm1Gb250OwotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1pbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNl
bGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKLXsKLSAgICBzd2l0Y2godmFyaWFudCkg
ewotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOgotICAgICAgICByZXR1
cm4gVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWw7Ci0KLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6
OkhhbGZXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nSGFsZldpZHRoOwotCi0gICAg
Y2FzZSBGb250V2lkdGhWYXJpYW50OjpUaGlyZFdpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNw
YWNpbmdUaGlyZFdpZHRoOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFydGVyV2lk
dGg6Ci0gICAgICAgIHJldHVybiBUZXh0U3BhY2luZ1F1YXJ0ZXJXaWR0aDsKLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gVGV4dFNwYWNpbmdQcm9wb3J0aW9u
YWw7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBjYXNjYWRlVG9MYXN0
UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkoKQotewotICAgIGF1dG8gbGFzdFJlc29ydCA9IGFk
b3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlNUUigiTGFzdFJl
c29ydCIpLCAwKSk7Ci0KLSAgICBDRlR5cGVSZWYgZGVzY3JpcHRvcnNbXSA9IHsgbGFzdFJlc29y
dC5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBkZXNjcmlwdG9ycywgV1RGX0FSUkFZX0xF
TkdUSChkZXNjcmlwdG9ycyksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLQotICAgIENGVHlw
ZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSB9OwotICAgIENGVHlw
ZVJlZiB2YWx1ZXNbXSA9IHsgYXJyYXkuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJS
QVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyBDVEZvbnREZXNjcmlwdG9y
UmVmIGNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IoKQotewot
ICAgIHN0YXRpYyBDVEZvbnREZXNjcmlwdG9yUmVmIGRlc2NyaXB0b3IgPSBDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoY2FzY2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0ZXNEaWN0
aW9uYXJ5KCkuZ2V0KCkpOwotICAgIHJldHVybiBkZXNjcmlwdG9yOwotfQotCi1DVEZvbnRSZWYg
Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250KCkgY29uc3QKLXsKLSAgICBpZiAobV9jdEZvbnQpCi0g
ICAgICAgIHJldHVybiBtX2N0Rm9udC5nZXQoKTsKLQotICAgIEFTU0VSVChtX2ZvbnQpOwotICAg
IG1fY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMobV9mb250
LmdldCgpLCBtX3NpemUsIG51bGxwdHIsIGNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25z
Rm9udERlc2NyaXB0b3IoKSkpOwotCi0gICAgaWYgKG1fd2lkdGhWYXJpYW50ICE9IEZvbnRXaWR0
aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aCkgewotICAgICAgICBpbnQgZmVhdHVyZVR5cGVWYWx1ZSA9
IGtUZXh0U3BhY2luZ1R5cGU7Ci0gICAgICAgIGludCBmZWF0dXJlU2VsZWN0b3JWYWx1ZSA9IG1h
cEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKG1fd2lkdGhWYXJpYW50KTsKLSAg
ICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IHNvdXJjZURlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX2N0Rm9udC5nZXQoKSkpOwotICAgICAg
ICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGZlYXR1cmVUeXBlID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZmVhdHVyZVR5cGVW
YWx1ZSkpOwotICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGZlYXR1cmVTZWxlY3RvciA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50
VHlwZSwgJmZlYXR1cmVTZWxlY3RvclZhbHVlKSk7Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnRE
ZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3Jl
YXRlQ29weVdpdGhGZWF0dXJlKHNvdXJjZURlc2NyaXB0b3IuZ2V0KCksIGZlYXR1cmVUeXBlLmdl
dCgpLCBmZWF0dXJlU2VsZWN0b3IuZ2V0KCkpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9udFJl
Zj4gbmV3Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnREZXNjcmlwdG9yKG5ld0Rl
c2NyaXB0b3IuZ2V0KCksIG1fc2l6ZSwgMCkpOwotCi0gICAgICAgIGlmIChuZXdGb250KQotICAg
ICAgICAgICAgbV9jdEZvbnQgPSBuZXdGb250OwotICAgIH0KLQotICAgIHJldHVybiBtX2N0Rm9u
dC5nZXQoKTsKLX0KLQotUmV0YWluUHRyPENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjayhDVEZvbnRSZWYgY3RGb250KQotewotICAgIGF1dG8gZm9udERl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihjdEZvbnQpKTsKLSAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4
MyBUaGlzIGlzIGEgc2hhbGxvdyBwb2ludGVyIGNvbXBhcmUgZm9yIHdlYiBmb250cwotICAgIC8v
IGJlY2F1c2UgdGhlIFVSTCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBt
ZWFucyB3ZSBtaWdodCBlcnJvbmVvdXNseSBnZXQgZmFsc2UgbmVnYXRpdmVzLgotICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udERlc2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZl
cmVuY2VVUkxBdHRyaWJ1dGUpKSk7Ci0gICAgQVNTRVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJs
LmdldCgpKSA9PSBDRlVSTEdldFR5cGVJRCgpKTsKLSAgICByZXR1cm4gdXJsOwotfQotCi1SZXRh
aW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gb2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7
Ci19Ci0KLVJlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFi
bGUodWludDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFi
bGVPcHRpb25Ob09wdGlvbnMpKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEuZ2V0KCkpOwotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi0jaWYgIUxPR19E
SVNBQkxFRAotCi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24oKSBjb25zdAot
ewotICAgIFN0cmluZyBmb250RGVzY3JpcHRpb24geyBhZG9wdENGKENGQ29weURlc2NyaXB0aW9u
KGZvbnQoKSkpLmdldCgpIH07Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoZm9udERlc2NyaXB0aW9u
LCAnICcsIG1fc2l6ZSwKLSAgICAgICAgKG1fc3ludGhldGljQm9sZCA/ICIgc3ludGhldGljIGJv
bGQiIDogIiIpLAotICAgICAgICAobV9zeW50aGV0aWNPYmxpcXVlID8gIiBzeW50aGV0aWMgb2Js
aXF1ZSIgOiAiIiksCi0gICAgICAgIChtX29yaWVudGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6
VmVydGljYWwgPyAiIHZlcnRpY2FsIG9yaWVudGF0aW9uIiA6ICIiKSk7Ci19Ci0KLSNlbmRpZgot
Ci1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5TmFtZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KGF1dG8gcGxhdGZvcm1Gb250ID0gZm9udCgpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDVEZv
bnRDb3B5RmFtaWx5TmFtZShwbGF0Zm9ybUZvbnQpKS5nZXQoKTsKLSAgICByZXR1cm4geyB9Owot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcAkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDkgKzUzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogUmVt
b3ZlIHRoaXMgb25jZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgaXMgYWRkZWQgdG8gQ01Gb3JtYXRE
ZXNjcmlwdGlvbi5oCi1jb25zdGV4cHIgQ01WaWRlb0NvZGVjVHlwZSBrQ01WaWRlb0NvZGVjVHlw
ZV9WUDkgeyAndnAwOScgfTsKLQogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogc3RhdGljIGJvb2wg
aXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYtMjAyMCwgMjAxNiBBcHBsZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+
CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDb25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9u
dFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNhYmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250
ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGlsbCBpbXBhY3RzIHRleHQKKy8vIHJlbmRlcmlu
Zywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlh
c2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIgdGVybWlub2xvZ3kuCitib29sIEZvbnRDYXNj
YWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkKK3sKKyNpZiBIQVZFKENHX0ZP
TlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElOR19ESVNBQkxFRCkKKyAgICBzdGF0aWMgYm9v
bCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAg
IHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9ICFDR0ZvbnRSZW5kZXJpbmdHZXRGb250U21v
b3RoaW5nRGlzYWJsZWQoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gc3VicGl4ZWxBbnRpYWxpYXNp
bmdFbmFibGVkOworI2VsaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiB0cnVlOworI2Vsc2UK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6
b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQp
Cit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZl
cnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisgICAgcG9zaXRpb25zWzBdID0g
Q0dQb2ludFplcm87CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZh
bmNlc1tpIC0gMV0sIG1hdHJpeCk7CisgICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25z
W2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKKyAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3Np
dGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQorICAgIHJldHVybiBjb250ZXh0
LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3Mp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZvbnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBj
b25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50KQoreworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4
dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2ludC54KCksIHBvaW50LnkoKSk7CisKKyAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgp
OworICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBvc2l0aW9ucyhjb3VudCk7CisgICAgaWYgKHBs
YXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsK
KyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90YXRlTGVmdFRyYW5zZm9ybSA9IENHQWZmaW5l
VHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwgMCk7CisgICAgICAgIENHQWZmaW5lVHJhbnNm
b3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpOworICAgICAg
ICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0
ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJp
eCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRleHQpOworCisgICAgICAgIFZlY3RvcjxDR1Np
emUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsKKyAgICAgICAgQ1RGb250R2V0VmVydGljYWxU
cmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5z
bGF0aW9ucy5kYXRhKCksIGNvdW50KTsKKworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNv
bnRleHQpKTsKKworICAgICAgICBDR1BvaW50IHBvc2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54
KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhp
Y0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3MoKS5mbG9hdEFzY2VudCgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIENHU2l6
ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tp
XSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CisgICAgICAgICAgICBwb3NpdGlvbnNbaV0gPSBDR1Bv
aW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2ludE1ha2UocG9zaXRpb24ueCAtIHRyYW5zbGF0
aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNsYXRpb24uaGVpZ2h0KSwgdHJhbnNmb3JtKTsK
KyAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2YW5jZXNbaV0ud2lkdGg7CisgICAgICAgICAg
ICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhlaWdodDsKKyAgICAgICAgfQorICAgICAgICBD
VEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMu
ZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmlsbFZlY3Rv
cldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMocG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNl
cywgY291bnQpOworICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQs
IHRydWUpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29u
dGV4dEdldENUTShjZ0NvbnRleHQpOworICAgIGJvb2wgaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxT
Y2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmEpICYmIFdURjo6aXNJbnRl
Z3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNvbnRleHRUcmFuc2Zvcm0uYiA9PSAwLmYgJiYg
Y29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKKyAgICBib29sIGlzUm90YXRlZCA9ICgoY29udGV4
dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zvcm0uYykgJiYgKGNvbnRleHRUcmFuc2Zvcm0u
YSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKKyAgICBib29sIGRvU3VicGl4ZWxRdWFudGl6YXRp
b24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNjYWxlIHx8ICghaXNSb3RhdGVkICYmIGNvbnRl
eHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkpOworCisgICAgQ0dDb250ZXh0U2V0U2hv
dWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgdHJ1ZSk7CisgICAgQ0dDb250ZXh0
U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50
aXphdGlvbik7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCit7CisgICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEo
KTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9u
dHMgPSB0cnVlOworCisgICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQorICAgICAg
ICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOworCisgICAg
c3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50
aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKKyAgICAgICAgc2hvdWxk
QW50aWFsaWFzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlOworICAg
ICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQorICAgICAgICBzaG91bGRTbW9vdGhGb250
cyA9IGZhbHNlOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhj
Z0NvbnRleHQpOworICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVz
ZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNn
Q29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOworI2VuZGlmCisKKyAgICBib29sIG9yaWdpbmFs
U2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCk7
CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFs
aWFzKTsKKworICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJw
cmVzc0VmZmVjdChjb250ZXh0KTsKKyAgICBVTlVTRURfVkFSSUFCTEUodXNlTGV0dGVycHJlc3NF
ZmZlY3QpOworICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNob3JQb2ludDsKKworICAgIENHQWZm
aW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CisgICAgaWYg
KCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkKKyAgICAgICAgbWF0cml4ID0gQ1RG
b250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOworICAgIG1hdHJpeC5iID0gLW1hdHJp
eC5iOworICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOworICAgIGlmIChwbGF0Zm9ybURhdGEuc3lu
dGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0YXRpYyBmbG9hdCBvYmxpcXVlU2tldyA9IHRh
bmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0IC8gMTgwKTsKKyAgICAgICAgaWYg
KHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwp
IHsKKyAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAg
ICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIC1vYmxpcXVlU2tldywgMCwgMSwg
MCwgMCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJh
bnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIC1vYmxpcXVl
U2tldywgMSwgMCwgMCkpOworICAgIH0KKyAgICBTY29wZWRUZXh0TWF0cml4IHJlc3RvcmVyKG1h
dHJpeCwgY2dDb250ZXh0KTsKKworICAgIHNldENHRm9udFJlbmRlcmluZ01vZGUoY29udGV4dCk7
CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgp
KTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsK
KyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBjb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBjb250
ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKKyAgICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0
ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgewor
ICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMgPSBjb250
ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRh
bFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhvcml6b250YWxVbml0U2l6ZUluRGV2
aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0
aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkgKiBob3Jpem9u
dGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7CisgICAgICAgIGlmIChob3Jpem9u
dGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxvdyB1cCB0aGUgZ2FwIGJldHdlZW4g
dGhlIGdseXBocy4KKyAgICAgICAgICAgIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBzdGQ6Om1pbihz
eW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNCb2xkT2Zmc2V0IC8gaG9yaXpvbnRhbFVuaXRM
ZW5ndGhJbkRldmljZVBpeGVscyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYm9vbCBoYXNT
aW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9k
ZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRm
b3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYmICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQo
KSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgaWYgKGhhc1NpbXBs
ZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5z
dGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBh
bnRpYWxpYXNpbmcuCisgICAgICAgIGNvbnRleHQuY2xlYXJTaGFkb3coKTsKKyAgICAgICAgQ29s
b3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29sb3IoKTsKKyAgICAgICAgQ29sb3Igc2hhZG93
RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENv
bG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93
RmlsbENvbG9yKTsKKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFk
b3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJh
bnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHll
dCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2lu
dC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9h
dFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhC
dWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhz
KTsKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgICAgICBzaG93R2x5
cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgY29u
dGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoTEVUVEVS
UFJFU1MpCisgICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQorICAgICAgICBzaG93TGV0dGVy
cHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZm
ZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsK
KyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMo
cG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICB9CisKKyAgICBpZiAoc3ludGhl
dGljQm9sZE9mZnNldCkKKyAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50
KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKKworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpCisgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9y
aWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
U21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOwor
I2VuZGlmCisKKyAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFs
aWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmln
aW5hbFNob3VsZEFudGlhbGlhcyk7Cit9CisKK2Jvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250
SXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1h
cnlGb250KCk7CisgICAgcmV0dXJuIGlzU3lzdGVtRm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEo
KS5jdEZvbnQoKSk7Cit9CisKKy8vIEZJWE1FOiBVc2UgdGhpcyBvbiBhbGwgcG9ydHMuCitjb25z
dCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAoreworICAgIFVDaGFy
MzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7Cisg
ICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNl
Q2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsK
KworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBpZiAobGVuZ3RoID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCisgICAg
ICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICBib29sIHRyaWVk
QmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFm
YWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgRm9udCog
Zm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVy
KTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAgICAgICAgY29udGludWU7CisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJh
c2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygp
KQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgaWYgKGZvbnQtPnBsYXRm
b3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewor
ICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYg
IWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgICAgICAgICAgZm9udCA9ICZmb250
LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAgICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNj
cmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlv
bjo6TWl4ZWQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9u
dCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKKyAgICAgICAgICAgICAg
ICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNo
YXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdo
dEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgICAgICAgICAg
ICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmlnaHRGb250ID0gZm9udC0+dXByaWdodE9yaWVu
dGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmln
aHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAg
IGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAg
ICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0Rm9udDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChmb250ID09IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkK
KyAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSB0cnVlOworCisgICAgICAgIGlm
IChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBs
ZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZvbnQ7CisgICAgfQorCisgICAgaWYgKCF0cmll
ZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVl
bmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnQ7CisKKyAgICByZXR1cm4gRm9udDo6c3lzdGVtRmFsbGJhY2soKTsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9G
b250Q29yZVRleHQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250Q2Fj
aGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgIk9wZW5UeXBlQ0cuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vj
aGFyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWlu
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09D
T0EpCisvLyNpbmNsdWRlICJMb2NhbGVDb2NvYS5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2Ev
Q29yZVRleHRTUEkuaD4KKyNlbHNlCisjaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElX
aW4uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKENGU3RyaW5nUmVmIGEsIENGU3RyaW5nUmVmIGIpCit7
CisgICAgcmV0dXJuIGEgJiYgQ0ZTdHJpbmdDb21wYXJlKGEsIGIsIGtDRkNvbXBhcmVDYXNlSW5z
ZW5zaXRpdmUpID09IGtDRkNvbXBhcmVFcXVhbFRvOworfQorCitzdGF0aWMgYm9vbCBmb250SGFz
VmVydGljYWxHbHlwaHMoQ1RGb250UmVmIGZvbnQpCit7CisgICAgcmV0dXJuIGZvbnRIYXNFaXRo
ZXJUYWJsZShmb250LCBrQ1RGb250VGFibGVWaGVhLCBrQ1RGb250VGFibGVWT1JHKTsKK30KKwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitib29sIGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRG
b3JBcmFiaWMoQ0ZTdHJpbmdSZWYgZm9udEZhbWlseU5hbWUpCit7CisgICAgaWYgKCFmb250RmFt
aWx5TmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGltZXMgTmV3IFJvbWFu
IGFuZCBBcmlhbCBhcmUgbm90IHBlcmZvcm1hbnQgZW5vdWdoIHRvIHVzZS4gPHJkYXI6Ly9wcm9i
bGVtLzIxMzMzMzI2PgorICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS8xMjA5NjgzNT4gcmVt
b3ZlIHRoaXMgZnVuY3Rpb24gb25jZSB0aGUgYWJvdmUgYnVnIGlzIGZpeGVkLgorICAgIHJldHVy
biAoQ0ZTdHJpbmdDb21wYXJlKENGU1RSKCJUaW1lcyBOZXcgUm9tYW4iKSwgZm9udEZhbWlseU5h
bWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICB8fCAoQ0ZTdHJpbmdDb21wYXJl
KENGU1RSKCJBcmlhbCIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8p
OworfQorCitzdGF0aWMgY29uc3QgZmxvYXQga0xpbmVIZWlnaHRBZGp1c3RtZW50ID0gMC4xNWY7
CisKK3N0YXRpYyBib29sIHNob3VsZFVzZUFkanVzdG1lbnQoQ1RGb250UmVmIGZvbnQpCit7Cisg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5
RmFtaWx5TmFtZShmb250KSk7CisKKyAgICBpZiAoIWZhbWlseU5hbWUgfHwgIUNGU3RyaW5nR2V0
TGVuZ3RoKGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiVGlt
ZXMiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgp
LCBDRlNUUigiSGVsdmV0aWNhIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIi5IZWx2ZXRpY2EgTmV1ZVVJIikpOworfQorCisjZWxz
ZQorCitzdGF0aWMgYm9vbCBuZWVkc0FzY2VudEFkanVzdG1lbnQoQ0ZTdHJpbmdSZWYgZmFtaWx5
TmFtZSkKK3sKKyAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiAoY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmYW1pbHlOYW1lLCBDRlNUUigiVGltZXMiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiSGVsdmV0aWNhIikpCisgICAgICAgIHx8IGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkNvdXJpZXIiKSkpOworfQorCisj
ZW5kaWYKKworc3RhdGljIGJvb2wgaXNBaGVtRm9udChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQor
eworICAgIHJldHVybiBmYW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5
TmFtZSwgQ0ZTVFIoIkFoZW0iKSk7Cit9CisKK2Jvb2wgZm9udEhhc1RhYmxlKENURm9udFJlZiBj
dEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnKQoreworICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRD
RihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9P
cHRpb25zKSk7CisgICAgaWYgKCF0YWJsZVRhZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOwor
ICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7
CisgICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQo
KSwgaW5kZXgpKSk7CisgICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGZvbnRIYXNF
aXRoZXJUYWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZzEsIHVuc2lnbmVk
IHRhYmxlVGFnMikKK3sKKyAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2
YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAg
IGlmICghdGFibGVUYWdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQ0ZJbmRleCBudW1U
YWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKKyAgICBmb3IgKENGSW5k
ZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgeworICAgICAgICBhdXRv
IHRhZyA9IHN0YXRpY19jYXN0PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOwor
ICAgICAgICBpZiAodGFnID09IHRhYmxlVGFnMSB8fCB0YWcgPT0gdGFibGVUYWcyKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBG
b250OjpwbGF0Zm9ybUluaXQoKQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgbV9z
eW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gY2Vp
bGYobV9wbGF0Zm9ybURhdGEuc2l6ZSgpIC8gMjQuMGYpIDogMC5mOworI2Vsc2UKKyAgICBtX3N5
bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBm
IDogMC5mOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgbV9zY3JpcHRDYWNoZSA9
IDA7CisgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyA9IG51bGxwdHI7CisgICAgaWYgKG1fcGxh
dGZvcm1EYXRhLnVzZUdESSgpKQorICAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKKyNlbmRp
ZgorCisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0
Zm9ybURhdGEuZm9udCgpKTsKKyAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5z
aXplKCk7CisgICAgQ0dGbG9hdCBjYXBIZWlnaHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBI
ZWlnaHQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisgICAgQ0dGbG9hdCBsaW5lR2FwID0g
cG9pbnRTaXplID8gQ1RGb250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsK
KyAgICBDR0Zsb2F0IGFzY2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRm
b3JtRGF0YS5mb250KCkpIDogMDsKKyAgICBDR0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBD
VEZvbnRHZXREZXNjZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworCisgICAgLy8gVGhl
IE9wZW4gRm9udCBGb3JtYXQgZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxh
ZyBhcyBmb2xsb3dzOgorICAgIC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVk
IHRvIHVzZSBPUy8yLnNUeXBvQXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNU
eXBvTGluZUdhcCBhcyBhIHZhbHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBm
b250LiIKKyAgICAvLyBPbiBPUyBYLCB3ZSBvbmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1w
b3J0YW50IGNhc2Ugb2YgZm9udHMgd2l0aCBhIE1BVEggdGFibGUuCisgICAgaWYgKGZvbnRIYXNU
YWJsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwga0NURm9udFRhYmxlTUFUSCkpIHsKKyAgICAg
ICAgc2hvcnQgdHlwb0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwOworICAgICAgICBp
ZiAoT3BlblR5cGU6OnRyeUdldFR5cG9NZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlw
b0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwKSkgeworICAgICAgICAgICAgYXNjZW50
ID0gc2NhbGVFbVRvVW5pdHModHlwb0FzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Cisg
ICAgICAgICAgICBkZXNjZW50ID0gLXNjYWxlRW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1Bl
ckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0
eXBvTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkpOworCisgICAgLy8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiBy
ZW5kZXJpbmcgd2l0aCBBaGVtIGJlY2F1c2UgbWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCisgICAg
aWYgKGlzQWhlbUZvbnQoZmFtaWx5TmFtZS5nZXQoKSkpCisgICAgICAgIG1fYWxsb3dzQW50aWFs
aWFzaW5nID0gZmFsc2U7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gV2UgbmVlZCB0byBh
ZGp1c3QgVGltZXMsIEhlbHZldGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUK
KyAgICAvLyB2ZXJ0aWNhbCBtZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMg
dGhhdCBhcmUgdGhlIGRlIGZhY3RvCisgICAgLy8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFk
anVzdG1lbnQgb2YgMjAlIGlzIHRvbyBiaWcgYW5kIGlzCisgICAgLy8gaW5jb3JyZWN0bHkgYWRk
ZWQgdG8gbGluZSBzcGFjaW5nLCBzbyB3ZSB1c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCisg
ICAgLy8gYW5kIGFkZCBpdCB0byB0aGUgYXNjZW50LgorICAgIGlmIChvcmlnaW4oKSA9PSBPcmln
aW46OkxvY2FsICYmIG5lZWRzQXNjZW50QWRqdXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKKyAg
ICAgICAgYXNjZW50ICs9IHN0ZDo6cm91bmQoKGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOwor
I2VuZGlmCisKKyAgICAvLyBDb21wdXRlIGxpbmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0
cmljcyBoYWNrcyBhcmUgYXBwbGllZC4KKyAgICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYo
YXNjZW50KSArIGxyb3VuZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApOworCisjaWYgUExB
VEZPUk0oTUFDKQorICAgIC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJv
b20gZm9yIG1hcmtlZCB0ZXh0IHVuZGVybGluZXMuCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUz
ODYxODM+CisgICAgaWYgKGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1l
ICYmIENGU3RyaW5nSGFzUHJlZml4KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIp
KSkgeworICAgICAgICBsaW5lR2FwIC09IDMgLSBkZXNjZW50OworICAgICAgICBkZXNjZW50ID0g
MzsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRp
b24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZh
bGxiYWNrKCkpCisgICAgICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxH
bHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyAgICBDR0Zsb2F0IGFkanVzdG1lbnQgPSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSkgPyBjZWlsKChhc2NlbnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRq
dXN0bWVudCkgOiAwOworCisgICAgbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOworICAgIGxpbmVT
cGFjaW5nID0gY2VpbChhc2NlbnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5l
R2FwOworICAgIGFzY2VudCA9IGNlaWxmKGFzY2VudCArIGFkanVzdG1lbnQpOworICAgIGRlc2Nl
bnQgPSBjZWlsZihkZXNjZW50KTsKKworICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0g
Zm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKKyNl
bmRpZgorCisgICAgQ0dGbG9hdCB4SGVpZ2h0ID0gMDsKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEu
c2l6ZSgpKSB7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCkgeworICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUg
YWN0dWFsIGNoYXJhY3RlciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVu
ZCBiZWxvdyB0aGUgYmFzZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQorICAgICAgICAgICAgLy8gcmVw
b3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0
aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KKyAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGds
eXBoRm9yQ2hhcmFjdGVyKCd4Jyk7CisgICAgICAgICAgICBpZiAoeEdseXBoKQorICAgICAgICAg
ICAgICAgIHhIZWlnaHQgPSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhH
bHlwaCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZv
bnRHZXRYSGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgeEhlaWdodCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0
cmljcygpLnhIZWlnaHQoKTsKKyAgICB9CisKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVy
RW0odW5pdHNQZXJFbSk7CisgICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKKyAg
ICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7CisgICAgbV9mb250TWV0cmljcy5z
ZXRDYXBIZWlnaHQoY2FwSGVpZ2h0KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGlu
ZUdhcCk7CisgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOworICAgIG1fZm9u
dE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobGluZVNwYWNpbmcpOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0VW5kZXJsaW5lUG9zaXRpb24oLUNURm9udEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSkpOworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNz
KENURm9udEdldFVuZGVybGluZVRoaWNrbmVzcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKK30K
Kwordm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKQoreworICAgIG1fYXZnQ2hhcldp
ZHRoID0gMDsKKyAgICBtX21heENoYXJXaWR0aCA9IDA7CisKKyAgICBhdXRvIG9zMlRhYmxlID0g
YWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFi
bGVPUzIsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmIChvczJUYWJsZSAm
JiBDRkRhdGFHZXRMZW5ndGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKKyAgICAgICAgY29uc3Qg
VUludDgqIG9zMiA9IENGRGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOworICAgICAgICBT
SW50MTYgb3MyQXZnQ2hhcldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOworICAgICAgICBt
X2F2Z0NoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0
cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIH0KKworICAg
IGF1dG8gaGVhZFRhYmxlID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEu
Zm9udCgpLCBrQ1RGb250VGFibGVIZWFkLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsK
KyAgICBpZiAoaGVhZFRhYmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49
IDQyKSB7CisgICAgICAgIGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFk
VGFibGUuZ2V0KCkpOworICAgICAgICB1bnNpZ25lZCB1eE1pbiA9IGhlYWRbMzZdICogMjU2ICsg
aGVhZFszN107CisgICAgICAgIHVuc2lnbmVkIHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFk
WzQxXTsKKyAgICAgICAgU0ludDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsK
KyAgICAgICAgU0ludDE2IHhNYXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKKyAgICAg
ICAgZmxvYXQgZGlmZiA9IHN0YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7CisgICAgICAg
IG1fbWF4Q2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0
c1BlckVtKCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIH0KKworICAgIC8vIEZhbGxi
YWNrIHRvIGEgY3Jvc3MtcGxhdGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhl
c2UgdmFsdWVzIGlmIHRoZXkgYXJlIG5vbi1wb3NpdGl2ZS4KKyAgICBpbml0Q2hhcldpZHRocygp
OworfQorCitib29sIEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVz
aXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50Q2FwcywgVUNoYXIzMiBjaGFyYWN0ZXIpIGNv
bnN0Cit7CisjaWYgKFBMQVRGT1JNKElPU19GQU1JTFkpICYmIFRBUkdFVF9PU19JT1MpIHx8IFBM
QVRGT1JNKE1BQykKKyAgICBHbHlwaCBnbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7CisgICAgaWYgKCFnbHlwaCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNo
IChmb250VmFyaWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6IHsK
KyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMoKTsK
KyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0
KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZTogeworICAg
ICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMoKTsKKyAg
ICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGds
eXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFNtYWxsOiB7CisgICAg
ICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzKCk7Cisg
ICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdldChn
bHlwaCk7CisgICAgfQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQZXRpdGU6IHsKKyAg
ICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCk7
CisgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdl
dChnbHlwaCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5
IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY2hhcmFjdGVyKTsK
KworICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7CisgICAgY2FzZSBGb250VmFyaWFudENh
cHM6OlNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6CisgICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFNtYWxsOgorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxQ
ZXRpdGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBT
eW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJv
dmUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgKFBMQVRG
T1JNKElPU19GQU1JTFkpICYmIFRBUkdFVF9PU19JT1MpIHx8IFBMQVRGT1JNKE1BQykKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnko
Q0ZTdHJpbmdSZWYga2V5LCBpbnQgcmF3VmFsdWUpCit7CisgICAgUmV0YWluUHRyPENGTnVtYmVy
UmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsg
a0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlIH07
CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBrZXksIHZhbHVlLmdldCgpIH07CisgICAgcmV0
dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMs
IHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KGlu
dCByYXdLZXksIGludCByYXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGtl
eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVy
SW50VHlwZSwgJnJhd0tleSkpOworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gdmFsdWUgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5
cGUsICZyYXdWYWx1ZSkpOworICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJl
VHlwZUlkZW50aWZpZXJLZXksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5IH07
CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBrZXkuZ2V0KCksIHZhbHVlLmdldCgpIH07Cisg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitz
dGF0aWMgdm9pZCB1bmlvbkJpdFZlY3RvcnMoQml0VmVjdG9yJiByZXN1bHQsIENGQml0VmVjdG9y
UmVmIHNvdXJjZSkKK3sKKyAgICBDRkluZGV4IGxlbmd0aCA9IENGQml0VmVjdG9yR2V0Q291bnQo
c291cmNlKTsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShsZW5ndGgpOworICAgIENGSW5kZXggbWlu
ID0gMDsKKyAgICB3aGlsZSAobWluIDwgbGVuZ3RoKSB7CisgICAgICAgIENGSW5kZXggbmV4dElu
ZGV4ID0gQ0ZCaXRWZWN0b3JHZXRGaXJzdEluZGV4T2ZCaXQoc291cmNlLCBDRlJhbmdlTWFrZSht
aW4sIGxlbmd0aCAtIG1pbiksIDEpOworICAgICAgICBpZiAobmV4dEluZGV4ID09IGtDRk5vdEZv
dW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJlc3VsdC5zZXQobmV4dEluZGV4LCB0
cnVlKTsKKyAgICAgICAgbWluID0gbmV4dEluZGV4ICsgMTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTdHJpbmdSZWYgZmVhdHVyZSwgQ1RGb250UmVm
IGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIFJldGFpblB0cjxDRkJpdFZlY3RvclJl
Zj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3ZlcmFnZUZvckZlYXR1cmUoZm9u
dCwgc21hbGxDYXBzT3BlblR5cGVEaWN0aW9uYXJ5KGZlYXR1cmUsIDEpLmdldCgpKSk7CisgICAg
dW5pb25CaXRWZWN0b3JzKHJlc3VsdCwgc291cmNlLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQg
aW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShpbnQgdHlwZSwgaW50IHNlbGVjdG9yLCBDVEZvbnRSZWYg
Zm9udCwgQml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVm
PiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250
LCBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkodHlwZSwgc2VsZWN0b3IpLmdldCgpKSk7Cisg
ICAgdW5pb25CaXRWZWN0b3JzKHJlc3VsdCwgc291cmNlLmdldCgpKTsKK30KKworY29uc3QgQml0
VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpIGNvbnN0Cit7CisgICAg
aWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKSB7CisgICAgICAgIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlTbWFsbENhcHMgPSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVD
b3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJh
Z2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1E
YXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOworICAg
IH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpOworfQor
Citjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMpIHsKKyAg
ICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOworICAg
ICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgp
LmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAg
ICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigiYzJzYyIpLCBwbGF0Zm9ybURhdGEoKS5m
b250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAg
IGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VTbWFsbENh
cHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
U21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBl
ckNhc2VUeXBlLCBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZv
bnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKTsKK30KKwor
Y29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMoKSBjb25z
dAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMpIHsKKyAgICAgICAg
bV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMgPSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5q
ZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigicGNhcCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCks
IG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RU
cnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVj
dG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBz
LnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHMudmFsdWUoKTsKK30KKworY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRC
eUFsbFBldGl0ZUNhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFBldGl0ZUNhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMg
PSBCaXRWZWN0b3IoKTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigicGNh
cCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVD
YXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnBj
IiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNh
cHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5
cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwg
bV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVj
dFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VQZXRpdGVDYXBzU2Vs
ZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0
ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxs
UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorI2VuZGlmCisKK3N0YXRpYyBSZWZQdHI8Rm9udD4gY3Jl
YXRlRGVyaXZhdGl2ZUZvbnQoQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIEZvbnRPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRyYWl0cywgYm9vbCBz
eW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK3sKKyAgICBpZiAoIWZvbnQpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKHN5bnRoZXRpY0JvbGQpCisgICAgICAg
IGZvbnRUcmFpdHMgfD0ga0NURm9udEJvbGRUcmFpdDsKKyAgICBpZiAoc3ludGhldGljSXRhbGlj
KQorICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRJdGFsaWNUcmFpdDsKKworICAgIENURm9u
dFN5bWJvbGljVHJhaXRzIHNjYWxlZEZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0
cyhmb250KTsKKworICAgIGJvb2wgdXNlZFN5bnRoZXRpY0JvbGQgPSAoZm9udFRyYWl0cyAmIGtD
VEZvbnRCb2xkVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEJvbGQp
OworICAgIGJvb2wgdXNlZFN5bnRoZXRpY09ibGlxdWUgPSAoZm9udFRyYWl0cyAmIGtDVEZvbnRJ
dGFsaWNUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0SXRhbGljKTsK
KyAgICBGb250UGxhdGZvcm1EYXRhIHNjYWxlZEZvbnREYXRhKGZvbnQsIHNpemUsIHVzZWRTeW50
aGV0aWNCb2xkLCB1c2VkU3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24pOworCisgICAgcmV0
dXJuIEZvbnQ6OmNyZWF0ZShzY2FsZWRGb250RGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc09wZW5UeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKK3sKKyAgICByZXR1
cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVRhZykgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udE9wZW5UeXBl
RmVhdHVyZVZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzVHJ1ZVR5cGVGZWF0dXJl
KENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250
YWluc0tleShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSAmJiBDRkRp
Y3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRp
ZmllcktleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Q0ZTdHJpbmdSZWY+IG9wZW5U
eXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKK3sKKyAgICBBU1NFUlQoaXNPcGVu
VHlwZUZlYXR1cmUoZmVhdHVyZSkpOworICAgIENGU3RyaW5nUmVmIHRhZyA9IHN0YXRpY19jYXN0
PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVGFnKSk7CisgICAgaW50IHJhd1ZhbHVlOworICAgIENGTnVtYmVyUmVmIHZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUs
IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgIGF1dG8gc3VjY2VzcyA9IENGTnVt
YmVyR2V0VmFsdWUodmFsdWUsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSk7CisgICAgQVNT
RVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICByZXR1cm4gcmF3VmFsdWUgPyBPcHRp
b25hbDxDRlN0cmluZ1JlZj4odGFnKSA6IFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIGlubGlu
ZSBzdGQ6OnBhaXI8aW50LCBpbnQ+IHRydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVh
dHVyZSkKK3sKKyAgICBBU1NFUlQoaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSkpOworICAgIGlu
dCByYXdUeXBlOworICAgIENGTnVtYmVyUmVmIHR5cGUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRp
ZmllcktleSkpOworICAgIGF1dG8gc3VjY2VzcyA9IENGTnVtYmVyR2V0VmFsdWUodHlwZSwga0NG
TnVtYmVySW50VHlwZSwgJnJhd1R5cGUpOworICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3Vj
Y2Vzcyk7CisgICAgaW50IHJhd1NlbGVjdG9yOworICAgIENGTnVtYmVyUmVmIHNlbGVjdG9yID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgc3VjY2VzcyA9IENGTnVt
YmVyR2V0VmFsdWUoc2VsZWN0b3IsIGtDRk51bWJlckludFR5cGUsICZyYXdTZWxlY3Rvcik7Cisg
ICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmF3VHlwZSwgcmF3U2VsZWN0b3IpOworfQorCitzdGF0aWMgaW5saW5lIENGTnVtYmVy
UmVmIGRlZmF1bHRTZWxlY3RvckZvclRydWVUeXBlRmVhdHVyZShpbnQga2V5LCBDVEZvbnRSZWYg
Zm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKENU
Rm9udENvcHlGZWF0dXJlcyhmb250KSk7CisgICAgQ0ZJbmRleCBmZWF0dXJlQ291bnQgPSBDRkFy
cmF5R2V0Q291bnQoZmVhdHVyZXMuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8
IGZlYXR1cmVDb3VudDsgKytpKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJlZiBmZWF0dXJlVHlw
ZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChm
ZWF0dXJlcy5nZXQoKSwgaSkpOworICAgICAgICBDRk51bWJlclJlZiBmZWF0dXJlS2V5ID0gc3Rh
dGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVUeXBlLCBr
Q1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIGlmICghZmVhdHVyZUtl
eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgcmF3RmVhdHVyZUtleTsKKyAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShmZWF0dXJlS2V5LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3
RmVhdHVyZUtleSk7CisgICAgICAgIGlmIChyYXdGZWF0dXJlS2V5ICE9IGtleSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIENGQXJyYXlSZWYgZmVhdHVyZVNlbGVjdG9ycyA9IHN0
YXRpY19jYXN0PENGQXJyYXlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVUeXBlLCBr
Q1RGb250RmVhdHVyZVR5cGVTZWxlY3RvcnNLZXkpKTsKKyAgICAgICAgaWYgKCFmZWF0dXJlU2Vs
ZWN0b3JzKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENGSW5kZXggc2VsZWN0b3Jz
Q291bnQgPSBDRkFycmF5R2V0Q291bnQoZmVhdHVyZVNlbGVjdG9ycyk7CisgICAgICAgIGZvciAo
Q0ZJbmRleCBqID0gMDsgaiA8IHNlbGVjdG9yc0NvdW50OyArK2opIHsKKyAgICAgICAgICAgIENG
RGljdGlvbmFyeVJlZiBmZWF0dXJlU2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZVNlbGVjdG9ycywgaikpOworICAgICAg
ICAgICAgQ0ZOdW1iZXJSZWYgaXNEZWZhdWx0ID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3Rv
ckRlZmF1bHRLZXkpKTsKKyAgICAgICAgICAgIGlmICghaXNEZWZhdWx0KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IHJhd0lzRGVmYXVsdDsKKyAgICAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUoaXNEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3SXNEZWZh
dWx0KTsKKyAgICAgICAgICAgIGlmICghcmF3SXNEZWZhdWx0KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJ
ZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyBpbmxpbmUgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcmVtb3ZlZEZlYXR1
cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUsIENURm9udFJlZiBmb250KQoreworICAgIGJvb2wg
aXNPcGVuVHlwZSA9IGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgIGJvb2wgaXNUcnVl
VHlwZSA9IGlzVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgIGlmICghaXNPcGVuVHlwZSAm
JiAhaXNUcnVlVHlwZSkKKyAgICAgICAgcmV0dXJuIGZlYXR1cmU7IC8vIFdlIGRvbid0IHVuZGVy
c3RhbmQgdGhpcyBmb250IGZvcm1hdC4KKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGljdGlvbmFy
eVJlZj4gcmVzdWx0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBpZiAoaXNPcGVuVHlwZSkgeworICAgICAg
ICBhdXRvIGZlYXR1cmVUYWcgPSBvcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgICAgIGlm
IChmZWF0dXJlVGFnICYmIChDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInNtY3Ai
KSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJz
YyIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJw
Y2FwIikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIo
ImMycGMiKSkpKSB7CisgICAgICAgICAgICBpbnQgcmF3WmVybyA9IDA7CisgICAgICAgICAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHplcm8gPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdaZXJvKSk7CisgICAgICAgICAg
ICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1
cmVUYWcsIGZlYXR1cmVUYWcudmFsdWUoKSk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwgemVyby5nZXQo
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZh
bHVlLCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaXNUcnVlVHlwZSkgeworICAgICAg
ICBhdXRvIHRydWVUeXBlRmVhdHVyZVBhaXIgPSB0cnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7Cisg
ICAgICAgIGlmICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtMb3dlckNhc2VUeXBlICYm
ICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0
b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2VyQ2FzZVBldGl0ZUNhcHNT
ZWxlY3RvcikpIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICAgICAg
aWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRydWVU
eXBlRmVhdHVyZShrTG93ZXJDYXNlVHlwZSwgZm9udCkpCisgICAgICAgICAgICAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRp
ZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2Vs
ZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgICAgICB9IGVsc2UgaWYgKHRydWVU
eXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga1VwcGVyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVy
ZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZl
YXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYg
ZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtVcHBl
ckNhc2VUeXBlLCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShy
ZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0
U2VsZWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJL
ZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJ
ZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXks
IENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXkpKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFJldGFpblB0cjxDVEZv
bnRSZWY+IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMoQ1RGb250UmVm
IGZvbnQpCit7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZlYXR1cmVzID0gYWRvcHRDRihz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZvbnRG
ZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUpKSk7CisgICAgaWYgKCFmZWF0dXJlcykKKyAgICAgICAg
cmV0dXJuIGZvbnQ7CisgICAgQ0ZJbmRleCBmZWF0dXJlQ291bnQgPSBDRkFycmF5R2V0Q291bnQo
ZmVhdHVyZXMuZ2V0KCkpOworICAgIFJldGFpblB0cjxDRk11dGFibGVBcnJheVJlZj4gbmV3RmVh
dHVyZXMgPSBhZG9wdENGKENGQXJyYXlDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGZlYXR1cmVDb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworICAgIGZvciAoQ0ZJbmRl
eCBpID0gMDsgaSA8IGZlYXR1cmVDb3VudDsgKytpKSB7CisgICAgICAgIENGRGljdGlvbmFyeVJl
ZiBmZWF0dXJlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVB
dEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShu
ZXdGZWF0dXJlcy5nZXQoKSwgcmVtb3ZlZEZlYXR1cmUoZmVhdHVyZSwgZm9udCkuZ2V0KCkpOwor
ICAgIH0KKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250RmVhdHVyZVNldHRpbmdzQXR0
cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBuZXdGZWF0dXJlcy5nZXQoKSB9
OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9B
UlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdp
dGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDVEZv
bnRDcmVhdGVDb3B5V2l0aEF0dHJpYnV0ZXMoZm9udCwgQ1RGb250R2V0U2l6ZShmb250KSwgbnVs
bHB0ciwgbmV3RGVzY3JpcHRvci5nZXQoKSkpOworfQorCitSZWZQdHI8Rm9udD4gRm9udDo6Y3Jl
YXRlRm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMoKSBjb25zdAoreworICAgIGZsb2F0
IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMg
Zm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSk7CisgICAgUmV0YWluUHRyPENURm9udFJlZj4gY3RGb250ID0gY3JlYXRlQ1RGb250V2l0aG91
dFN5bnRoZXNpemFibGVGZWF0dXJlcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIHJldHVy
biBjcmVhdGVEZXJpdmF0aXZlRm9udChjdEZvbnQuZ2V0KCksIHNpemUsIG1fcGxhdGZvcm1EYXRh
Lm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQo
KSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKTsKK30KKworUmVmUHRyPEZvbnQ+
IEZvbnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mLCBm
bG9hdCBzY2FsZUZhY3RvcikgY29uc3QKK3sKKyAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURh
dGEuc2l6ZSgpICogc2NhbGVGYWN0b3I7CisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgZm9udFRy
YWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7Cisg
ICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGZvbnREZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAg
UmV0YWluUHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEZvbnREZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7CisK
KyAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwg
bV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOworfQor
Cit2b2lkIEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4
LCBib29sIGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3Ry
aW5nJiBsb2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
KSBjb25zdAoreworICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOworCisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBHbHlwaEJ1ZmZlciBpbml0aWFsIGFkdmFuY2UuCisjaWYgVVNFKENU
Rk9OVFNIQVBFR0xZUEhTKQorICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZSYW5nZSByYW5nZSwgQ0dH
bHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFuY2VzUG9pbnRlciwgQ0dQ
b2ludCoqIG5ld09mZnNldHNQb2ludGVyLCBDRkluZGV4KiogbmV3SW5kaWNlc1BvaW50ZXIpCisg
ICAgeworICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJhbmdlLmxv
Y2F0aW9uLCBzdGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KGds
eXBoQnVmZmVyLnNpemUoKSkpOworICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIDwgMCkgeworICAg
ICAgICAgICAgcmFuZ2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2UubG9jYXRpb24sIC1yYW5nZS5s
ZW5ndGgpOworICAgICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbiAtIHJh
bmdlLmxlbmd0aDsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlw
aEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgZ2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJh
bmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgsIHRoaXMpOworCisgICAgICAgICpuZXdHbHlwaHNQ
b2ludGVyID0gZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgICAg
ICAqbmV3QWR2YW5jZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5
cGhJbmRleCk7CisgICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9yaWdp
bnMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdJbmRpY2VzUG9pbnRlciA9IGds
eXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICB9Owor
CisgICAgYXV0byBzdWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdTdHJpbmdJbmRl
eCk7CisgICAgYXV0byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0
ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVDb2NvYTo6Y2Fu
b25pY2FsTGFuZ3VhZ2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0
ZUNGU3RyaW5nKCk7CisgICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hh
cGVXaXRoQ2x1c3RlckNvbXBvc2l0aW9uCisgICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgPyBrQ1RG
b250U2hhcGVXaXRoS2VybmluZyA6IDApCisgICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gVGV4
dERpcmVjdGlvbjo6UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlw
aEluZGV4OyArK2kpCisgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5p
bmdHbHlwaEluZGV4KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKKworICAgIENURm9udFNo
YXBlR2x5cGhzKAorICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKKyAgICAgICAgZ2x5
cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAorICAgICAgICByZWludGVycHJl
dF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgp
KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZmZXIub3JpZ2lu
cyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCisgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0
cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVbmlDaGFyKj4odXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwKKyAgICAgICAgZ2x5cGhC
dWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKKyAgICAgICAgb3B0aW9ucywKKyAg
ICAgICAgbG9jYWxlU3RyaW5nLmdldCgpLAorICAgICAgICBoYW5kbGVyKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaElu
ZGV4OyArK2kpCisgICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdH
bHlwaEluZGV4KVtpXSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKKworI2Vsc2UKKworICAgIFVO
VVNFRF9QQVJBTShiZWdpbm5pbmdTdHJpbmdJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGxvY2Fs
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHRleHQpOworCisgICAgLy8gQ1RGb250VHJhbnNmb3JtR2x5
cGhzKCkgb3BlcmF0ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lkdGhJdGVyYXRvciBpdGVyYXRl
cyBpbiBsb2dpY2FsIG9yZGVyLgorICAgIC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBpbiB2aXN1YWwg
b3JkZXIganVzdCBmb3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJhY2sgaW50byBsb2dpY2FsIG9y
ZGVyIHdoZW4KKyAgICAvLyB0aGUgY2FsbCBpcyBkb25lLgorICAgIC8vIFdlIGRvbid0IGhhdmUg
YSBnbG9iYWwgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBqdXN0IG9wZXJh
dGluZyBvbiBhIHNpbmdsZSBjaHVuayBvZiBpdC4KKyAgICAvLyBXaWR0aEl0ZXJhdG9yIGVuY291
bnRlcnMgdGhlIGNodW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwgc28gd2UgaGF2ZSB0byBtYWlu
dGFpbiB0aGF0IGludmFyaWFudC4KKyAgICAvLyBFdmVudHVhbGx5LCBGb250Q2FzY2FkZTo6bGF5
b3V0U2ltcGxlVGV4dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHB1dCB0aGUg
ZW50aXJlIHRoaW5nCisgICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBidXQgdGhhdCdzIG9rYXkgYmVj
YXVzZSBpdCBoYXMgYSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXIuCisgICAgLy8gT24g
dGhlIG90aGVyIGhhbmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGlu
IGxvZ2ljYWwgb3JkZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKKyAgICAvLyBvcmRlciwg
d2hpY2ggbWVhbnMgdGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBu
ZWVkcyB0byBleGVjdXRlIHdoZW4KKyAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5n
IHVzZWQuCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQorICAg
ICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVy
LnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOworCisgICAgQ1RGb250VHJhbnNmb3JtT3B0
aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3Np
dGlvbmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKKyAgICBDVEZvbnRU
cmFuc2Zvcm1HbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBo
cyhiZWdpbm5pbmdHbHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1
ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAt
IGJlZ2lubmluZ0dseXBoSW5kZXgsIG9wdGlvbnMpOworI2VuZGlmCisKKyAgICAvLyBTZWUgdGhl
IGNvbW1lbnQgYWJvdmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byBy
ZXZlcnNlKCkgaXMuCisgICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRM
KQorICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBo
QnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOworfQorCitzdGF0aWMgaW50IGV4
dHJhY3ROdW1iZXIoQ0ZOdW1iZXJSZWYgbnVtYmVyKQoreworICAgIGludCByZXN1bHQgPSAwOwor
ICAgIGlmIChudW1iZXIpCisgICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEZvbnQ6
OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURh
dGEuZm9udCgpOworICAgIEFTU0VSVChjdEZvbnQpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIE9z
YWthLU1vbm8uCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwg
d2Ugc2hvdWxkIHRyZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBBcHBLaXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2gu
CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KKyAgICAvLyBBY2NvcmRpbmcgdG8g
PHJkYXI6Ly9wcm9ibGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMg
YXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1Q
R290aGljIGFzIGZpeGVkIHBpdGNoLgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29y
c2l2YQorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNo
b3VsZCBub3QgdHJlYXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5v
dGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNo
LgorCisgICAgYXV0byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9u
dCkpOworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUo
Y3RGb250KSk7CisKKyAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIoYWRvcHRDRihz
dGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShtX3BsYXRmb3JtRGF0
YS5mb250KCksIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkpOworICAgIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtD
VEZvbnRNb25vU3BhY2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSkgfHwgY2FzZUluc2Vuc2l0
aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkgfHwgY2FzZUlu
c2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIp
KSk7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBpZiAoZmFtaWx5TmFtZSAmJiBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIp
KSkgeworICAgICAgICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0
ZWQgYXMgZml4ZWQgcGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFj
ZSB3aWR0aCB3aGljaCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5
NzgzKS4KKyAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOworICAgIH0KKyNlbmRp
ZgorfQorCitGbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgYm91bmRpbmdCb3gg
PSBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgp
LCBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGlj
YWwgPyBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6
b250YWwsICZnbHlwaCwgMCwgMSk7CisgICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gu
bWF4WSgpKTsKKyAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQorICAgICAgICBib3VuZGlu
Z0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0
KTsKKworICAgIHJldHVybiBib3VuZGluZ0JveDsKK30KKworZmxvYXQgRm9udDo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIENHU2l6ZSBhZHZhbmNlID0g
Q0dTaXplWmVybzsKKworICAgIGlmIChwbGF0Zm9ybURhdGEoKS5zaXplKCkpIHsKKyAgICAgICAg
Ym9vbCBob3Jpem9udGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246Okhvcml6b250YWw7CisgICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0
aW9uID0gaG9yaXpvbnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250
T3JpZW50YXRpb25Ib3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7CisjaWYg
VVNFKENURk9OVEdFVEFEVkFOQ0VTX1dPUktBUk9VTkQpCisgICAgICAgIENHRm9udFJlbmRlcmlu
Z1N0eWxlIHN0eWxlID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9u
dFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUXVhbnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJl
ZDsKKyAgICAgICAgaWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX3BsYXRmb3JtRGF0YS5j
dEZvbnQoKSkgJiYgIW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlvbnMoKSkKKyAgICAgICAgICAg
IENURm9udEdldFVuc3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRTdHlsZShtX3BsYXRmb3JtRGF0
YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKyAg
ICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIENURm9udEdldEFkdmFu
Y2VzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgJmdseXBo
LCAmYWR2YW5jZSwgMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFkdmFuY2Uud2lk
dGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Cit9CisKK1BhdGggRm9udDo6cGxhdGZvcm1QYXRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdENG
KENURm9udENyZWF0ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGgs
IG51bGxwdHIpKTsKKyAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0
aWNCb2xkT2Zmc2V0KCk7CisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKKyAgICAgICAg
YXV0byBuZXdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOworICAgICAgICBD
R1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7CisgICAg
ICAgIGF1dG8gdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihz
eW50aGV0aWNCb2xkT2Zmc2V0LCAwKTsKKyAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdl
dCgpLCAmdHJhbnNsYXRpb24sIHJlc3VsdC5nZXQoKSk7CisgICAgICAgIHJldHVybiB7IFdURk1v
dmUobmV3UGF0aCkgfTsKKyAgICB9CisgICAgcmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKSB9OworfQorCitib29sIEZvbnQ6OnBsYXRmb3JtU3Vw
cG9ydHNDb2RlUG9pbnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlh
dGlvbikgY29uc3QKK3sKKyAgICBpZiAodmFyaWF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBVbmlDaGFyIGNvZGVVbml0c1syXTsKKyAgICBDR0dseXBoIGdseXBoc1syXTsKKyAg
ICBDRkluZGV4IGNvdW50ID0gMDsKKyAgICBVMTZfQVBQRU5EX1VOU0FGRShjb2RlVW5pdHMsIGNv
dW50LCBjaGFyYWN0ZXIpOworICAgIHJldHVybiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGdseXBocywgY291bnQpOworfQor
Citib29sIEZvbnQ6OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAorewor
ICAgIGF1dG8gcGxhdGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOworICAgIGlmICgh
cGxhdGZvcm1Gb250KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBBbGxvdyBtb3N0
IG5vbi1pY29uIGZvbnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEgc2luZ2xlIGNo
YXJhY3RlciAnYScsIHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxhdGluIGNoYXJh
Y3RlcnMuCisgICAgVW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVyID0gJ2EnOworICAgIENHR2x5
cGggbG93ZXJjYXNlQUdseXBoOworICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KHBsYXRmb3JtRm9udCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VBR2x5cGgsIDEp
KSB7CisgICAgICAgIGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9y
R2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgJmxvd2VyY2Fz
ZUFHbHlwaCwgbnVsbHB0ciwgMSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGF1dG8gc3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJh
Y3RlclNldChwbGF0Zm9ybUZvbnQpKTsKKyAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJ
blBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFjdGVyU2V0SGFz
TWVtYmVySW5QbGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMgTGF0aW4gbm9u
LWNvbnRyb2wgY2hhcmFjdGVycy4KKyAgICBjb25zdGV4cHIgVW5pQ2hhciBmaXJzdENoYXJhY3Rl
clRvVGVzdCA9ICcgJzsKKyAgICBjb25zdGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFjdGVyVG9UZXN0
ID0gJ34nOworICAgIGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCA9IGxh
c3RDaGFyYWN0ZXJUb1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVzdCArIDE7CisKKyAgICBWZWN0
b3I8Q0dHbHlwaD4gZ2x5cGhzOworICAgIGdseXBocy5maWxsKDAsIG51bWJlck9mQ2hhcmFjdGVy
c1RvVGVzdCk7CisgICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UocGxhdGZvcm1G
b250LCBnbHlwaHMuYmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJUb1Rlc3QsIG51
bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCkpOworICAgIGdseXBocy5yZW1vdmVBbGwoMCk7CisKKyAg
ICBpZiAoZ2x5cGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVj
dG9yPENHUmVjdD4gYm91bmRpbmdSZWN0czsKKyAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0
WmVybywgZ2x5cGhzLnNpemUoKSk7CisgICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBo
cyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigp
LCBib3VuZGluZ1JlY3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOworICAgIHJldHVybiBub3RG
b3VuZCA9PSBib3VuZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7CisgICAg
ICAgIHJldHVybiAhQ0dSZWN0SXNFbXB0eShyZWN0KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
Rm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRQbGF0
Zm9ybURhdGFDb3JlVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODIgQEAKKy8q
CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlv
bi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4K
KworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdp
bi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0
aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRS
ZW5kZXJpbmdNb2RlKQorICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xk
LCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVy
aW5nTW9kZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOworICAgIG1fZm9udCA9IGZv
bnQ7CisgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZv
bnQpICYga0NURm9udENvbG9yR2x5cGhzVHJhaXQ7CisgICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJD
b3JlOjppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsKKyAgICBhdXRvIHZhcmlhdGlvbnMgPSBh
ZG9wdENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShm
b250LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkpOworICAgIG1faGFzVmFyaWF0aW9ucyA9
IHZhcmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQoKSk7CisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1faXNFbW9qaSA9IENURm9udElzQXBwbGVD
b2xvckVtb2ppKG1fZm9udC5nZXQoKSk7CisjZW5kaWYKK30KKworYm9vbCBpc1N5c3RlbUZvbnQo
Q1RGb250UmVmIGZvbnQpCit7CisjaWYgSEFWRShDVEZPTlRJU1NZU1RFTVVJRk9OVCkKKyAgICBy
ZXR1cm4gQ1RGb250SXNTeXN0ZW1VSUZvbnQoZm9udCk7CisjZWxzZQorICAgIHJldHVybiBDVEZv
bnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0
b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitDVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0
YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAoreworICAgIENURm9udFJlZiBwbGF0Zm9ybUZvbnQg
PSBmb250KCk7CisgICAgQVNTRVJUKHBsYXRmb3JtRm9udCk7CisgICAgaWYgKHBsYXRmb3JtRm9u
dCAmJiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUocGxhdGZvcm1Gb250LCBrQ1RGb250VVJM
QXR0cmlidXRlKSkpCisgICAgICAgIHJldHVybiBwbGF0Zm9ybUZvbnQ7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK2lubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2Vs
ZWN0b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQoreworICAgIHN3aXRjaCAodmFyaWFudCkg
eworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOgorICAgICAgICByZXR1
cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFu
dDo6SGFsZldpZHRoOgorICAgICAgICByZXR1cm4ga0hhbGZXaWR0aFRleHRTZWxlY3RvcjsKKwor
ICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtU
aGlyZFdpZHRoVGV4dFNlbGVjdG9yOworCisgICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFy
dGVyV2lkdGg6CisgICAgICAgIHJldHVybiBrUXVhcnRlcldpZHRoVGV4dFNlbGVjdG9yOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrUHJvcG9ydGlvbmFs
VGV4dFNlbGVjdG9yOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2Fz
Y2FkZVRvTGFzdFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KCkKK3sKKyAgICBhdXRvIGxhc3RS
ZXNvcnQgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZT
VFIoIkxhc3RSZXNvcnQiKSwgMCkpOworCisgICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7
IGxhc3RSZXNvcnQuZ2V0KCkgfTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdU
Rl9BUlJBWV9MRU5HVEgoZGVzY3JpcHRvcnMpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisK
KyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsK
KyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGFycmF5LmdldCgpIH07CisgICAgcmV0dXJuIGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVl
cywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgQ1RGb250
RGVzY3JpcHRvclJlZiBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlw
dG9yKCkKK3sKKyAgICBzdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RG
b250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRy
aWJ1dGVzRGljdGlvbmFyeSgpLmdldCgpKTsKKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30KKwor
I2lmIFBMQVRGT1JNKENPQ09BKQorQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fY3RGb250KQorICAgICAgICByZXR1cm4gbV9jdEZvbnQuZ2V0
KCk7CisKKyAgICBBU1NFUlQobV9mb250KTsKKyAgICBtX2N0Rm9udCA9IGFkb3B0Q0YoQ1RGb250
Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQoKSwgbV9zaXplLCBudWxscHRyLCBj
YXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkpKTsKKworICAg
IGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGgpIHsK
KyAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4dFNwYWNpbmdUeXBlOworICAgICAg
ICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1
cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2Ny
aXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKKyAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBm
ZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUpKTsKKyAgICAgICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlU2VsZWN0b3JWYWx1
ZSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gbmV3RGVzY3JpcHRv
ciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNvcHlXaXRoRmVhdHVyZShzb3VyY2VE
ZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwgZmVhdHVyZVNlbGVjdG9yLmdldCgp
KSk7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5ld0ZvbnQgPSBhZG9wdENGKENURm9u
dENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlwdG9yLmdldCgpLCBtX3NpemUsIDAp
KTsKKworICAgICAgICBpZiAobmV3Rm9udCkKKyAgICAgICAgICAgIG1fY3RGb250ID0gbmV3Rm9u
dDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7Cit9CisjZWxzZQorQ1RGb250
UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvbnQo
KTsKK30KKyNlbmRpZgorCitSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1EYXRhOjpv
YmplY3RGb3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBjdEZvbnQpCit7CisgICAgYXV0byBmb250
RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGN0Rm9udCkpOwor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4
NjgzIFRoaXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29tcGFyZSBmb3Igd2ViIGZvbnRzCisgICAg
Ly8gYmVjYXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmb250LiBUaGlz
IG1lYW5zIHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBmYWxzZSBuZWdhdGl2ZXMuCisgICAgUmV0
YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGVVJMUmVmPihDVEZv
bnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwga0NURm9udFJl
ZmVyZW5jZVVSTEF0dHJpYnV0ZSkpKTsKKyAgICBBU1NFUlQoIXVybCB8fCBDRkdldFR5cGVJRCh1
cmwuZ2V0KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOworICAgIHJldHVybiB1cmw7Cit9CisKK1Jl
dGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hl
Y2soKSBjb25zdAoreworICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKGN0Rm9udCgp
KTsKK30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVU
YWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKK3sKKyAgICBpZiAoUmV0YWluUHRyPENGRGF0YVJl
Zj4gZGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKGZvbnQoKSwgdGFibGUsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpKQorICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoZGF0YS5nZXQoKSk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworI2lmICFMT0dfRElT
QUJMRUQKKworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICBTdHJpbmcgZm9udERlc2NyaXB0aW9ueyBhZG9wdENGKENGQ29weURlc2NyaXB0aW9uKGZv
bnQoKSkpLmdldCgpIH07CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoZm9udERlc2NyaXB0aW9uLCAn
ICcsIG1fc2l6ZSwKKyAgICAgICAgKG1fc3ludGhldGljQm9sZCA/ICIgc3ludGhldGljIGJvbGQi
IDogIiIpLAorICAgICAgICAobV9zeW50aGV0aWNPYmxpcXVlID8gIiBzeW50aGV0aWMgb2JsaXF1
ZSIgOiAiIiksCisgICAgICAgIChtX29yaWVudGF0aW9uID09IEZvbnRPcmllbnRhdGlvbjo6VmVy
dGljYWwgPyAiIHZlcnRpY2FsIG9yaWVudGF0aW9uIiA6ICIiKSk7Cit9CisKKyNlbmRpZgorCitT
dHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZmFtaWx5TmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8gcGxhdGZvcm1Gb250ID0gZm9udCgpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnRD
b3B5RmFtaWx5TmFtZShwbGF0Zm9ybUZvbnQpKS5nZXQoKTsKKyAgICByZXR1cm4ge307Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29y
ZVRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQ
SS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdpdGhW
ZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVm
ZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3Jh
cGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5
cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBoUGFn
ZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBj
b25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOworICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+
IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxl
bmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRpY2Fs
R2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgQ1RGb250R2V0VmVy
dGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxl
bmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZv
bnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1
ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisKKyAgICBib29sIGhhdmVHbHlw
aHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXpl
OyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVwXTsK
KyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgeworICAg
ICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7CisgICAgICAgICAgICBoYXZl
R2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJKHJldmlzaW9uIDI2
NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VN
YWMuY3BwCShub25leGlzdGVudCkKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2x5cGhQYWdlLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgot
I2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1zdGF0aWMgYm9vbCBzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkKLXsK
LSAgICBpZiAoIWZvbnQuaGFzVmVydGljYWxHbHlwaHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAg
ICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IGNvbnN0IGNvbnN0ZXhwciBDR0dseXBoIGRlbGV0ZWRHbHlwaCA9IDB4RkZGRjsKLQotYm9vbCBH
bHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewot
ICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQYWdlOjpzaXplIHx8IGJ1ZmZlckxlbmd0
aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKLQotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlz
LT5mb250KCk7Ci0gICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7
Ci0gICAgdW5zaWduZWQgZ2x5cGhTdGVwID0gYnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXpl
OwotCi0gICAgaWYgKHNob3VsZEZpbGxXaXRoVmVydGljYWxHbHlwaHMoYnVmZmVyLCBidWZmZXJM
ZW5ndGgsIGZvbnQpKQotICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3Rl
cnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFy
Kj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAg
ICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZv
bnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwg
YnVmZmVyTGVuZ3RoKTsKLQotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgewotICAgICAgICBhdXRv
IHRoZUdseXBoID0gZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdOwotICAgICAgICBpZiAodGhlR2x5cGgg
JiYgdGhlR2x5cGggIT0gZGVsZXRlZEdseXBoKSB7Ci0gICAgICAgICAgICBzZXRHbHlwaEZvcklu
ZGV4KGksIHRoZUdseXBoKTsKLSAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBoYXZlR2x5cGhzOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
Q0dXaW4uY3BwCShyZXZpc2lvbiAyNjY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udENHV2luLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ2MCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgot
Ci0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBDR0Zsb2F0IHRvQ0dGbG9hdChGSVhFRCBm
KQotewotICAgIHJldHVybiBmLnZhbHVlICsgZi5mcmFjdCAvIENHRmxvYXQoNjU1MzYuMCk7Ci19
Ci0KLXN0YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyBoZGMsIEdseXBoIGds
eXBoKQotewotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUo
KTsKLQotICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAs
IDAsICAwLCAxIH07Ci0gICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmljczsKLSAgICAvLyBHR09f
TkFUSVZFIG1hdGNoZXMgdGhlIG91dGxpbmUgcGVyZmVjdGx5IHdoZW4gV2luZG93cyBmb250IHNt
b290aGluZyBpcyBvZmYuCi0gICAgLy8gR0dPX05BVElWRSB8IEdHT19VTkhJTlRFRCBkb2VzIG5v
dCBtYXRjaCBwZXJmZWN0bHkgZWl0aGVyIHdoZW4gV2luZG93cyBmb250IHNtb290aGluZyBpcyBv
biBvciBvZmYuCi0gICAgRFdPUkQgb3V0bGluZUxlbmd0aCA9IEdldEdseXBoT3V0bGluZShoZGMs
IGdseXBoLCBHR09fR0xZUEhfSU5ERVggfCBHR09fTkFUSVZFLCAmZ2x5cGhNZXRyaWNzLCAwLCAw
LCAmaWRlbnRpdHkpOwotICAgIEFTU0VSVChvdXRsaW5lTGVuZ3RoID49IDApOwotICAgIGlmIChv
dXRsaW5lTGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBWZWN0b3I8VUlu
dDg+IG91dGxpbmUob3V0bGluZUxlbmd0aCk7Ci0gICAgR2V0R2x5cGhPdXRsaW5lKGhkYywgZ2x5
cGgsIEdHT19HTFlQSF9JTkRFWCB8IEdHT19OQVRJVkUsICZnbHlwaE1ldHJpY3MsIG91dGxpbmVM
ZW5ndGgsIG91dGxpbmUuZGF0YSgpLCAmaWRlbnRpdHkpOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0
ID0gMDsKLSAgICB3aGlsZSAob2Zmc2V0IDwgb3V0bGluZUxlbmd0aCkgewotICAgICAgICBMUFRU
UE9MWUdPTkhFQURFUiBzdWJwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxMUFRUUE9MWUdPTkhFQURF
Uj4ob3V0bGluZS5kYXRhKCkgKyBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoc3VicGF0aC0+ZHdU
eXBlID09IFRUX1BPTFlHT05fVFlQRSk7Ci0gICAgICAgIGlmIChzdWJwYXRoLT5kd1R5cGUgIT0g
VFRfUE9MWUdPTl9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAgICAgQ0dQ
YXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHN1YnBhdGgtPnBmeFN0YXJ0LngpLCB0
b0NHRmxvYXQoc3VicGF0aC0+cGZ4U3RhcnQueSkpOwotCi0gICAgICAgIHVuc2lnbmVkIHN1YnBh
dGhPZmZzZXQgPSBzaXplb2YoKnN1YnBhdGgpOwotICAgICAgICB3aGlsZSAoc3VicGF0aE9mZnNl
dCA8IHN1YnBhdGgtPmNiKSB7Ci0gICAgICAgICAgICBMUFRUUE9MWUNVUlZFIHNlZ21lbnQgPSBy
ZWludGVycHJldF9jYXN0PExQVFRQT0xZQ1VSVkU+KHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihz
dWJwYXRoKSArIHN1YnBhdGhPZmZzZXQpOwotICAgICAgICAgICAgc3dpdGNoIChzZWdtZW50LT53
VHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJTV9MSU5FOgotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSsrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zs
b2F0KHNlZ21lbnQtPmFwZnhbaV0ueCksIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFRUX1BS
SU1fUVNQTElORToKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNlZ21lbnQtPmNwZng7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4
ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0ueCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBDR0Zsb2F0IHkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIENHRmxvYXQgY3B4OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9h
dCBjcHk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IHNlZ21lbnQtPmNwZngg
LSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gdG9DR0Zsb2F0KHNlZ21l
bnQtPmFwZnhbaSArIDFdLngpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHRv
Q0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNweCA9ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KSArIHRv
Q0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS54KSkgLyAyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNweSA9ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KSArIHRvQ0dGbG9h
dChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KSkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhBZGRRdWFkQ3VydmVUb1BvaW50KHBh
dGgsIDAsIHgsIHksIGNweCwgY3B5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJTV9DU1BMSU5F
OgotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+
Y3BmeDsgaSArPSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IGNwMXggPSB0
b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENH
RmxvYXQgY3AxeSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dGbG9hdCBjcDJ4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFd
LngpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcDJ5ID0gdG9DR0Zsb2F0KHNl
Z21lbnQtPmFwZnhbaSArIDFdLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4
ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLngpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dGbG9hdCB5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLnkpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQocGF0aCwgMCwgY3Ax
eCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHBhdGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN1YnBhdGhPZmZzZXQg
Kz0gc2l6ZW9mKCpzZWdtZW50KSArIChzZWdtZW50LT5jcGZ4IC0gMSkgKiBzaXplb2Yoc2VnbWVu
dC0+YXBmeFswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGgp
OwotICAgICAgICBvZmZzZXQgKz0gc3VicGF0aC0+Y2I7Ci0gICAgfQotICAgIHJldHVybiBwYXRo
OwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhC
dWZmZXIsCi0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250
U21vb3RoaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZv
bnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDogewotICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5n
ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdN
b2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOiB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRT
aG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0
cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6
Tm9TbW9vdGhpbmc6IHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlh
cyhmYWxzZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhp
bmc6IHsKLSAgICAgICAgLy8gRm9yIHRoZSBBdXRvU21vb3RoIGNhc2UsIGRvbid0IGRvIGFueXRo
aW5nISBLZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotICAgICAgICBicmVhazsgCi0gICAgfQot
ICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAg
ICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSBGb250Q2FzY2FkZTo6c2V0Rm9udFNt
b290aGluZ1N0eWxlKGNnQ29udGV4dCwgc2hvdWxkVXNlRm9udFNtb290aGluZyk7Ci0KLSAgICBj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgp
OwotCi0gICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlk
ZW50aXR5OwotICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJp
eC5kOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAg
ICAgc3RhdGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBp
RmxvYXQgLyAxODAuMGYpOwotICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNh
dChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCBza2V3LCAxLCAwLCAwKSk7Ci0g
ICAgfQotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRNYXRyaXggPSBDR0NvbnRleHRHZXRU
ZXh0TWF0cml4KGNnQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRl
eHQsIG1hdHJpeCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRm
b3JtRGF0YS5zaXplKCkpOwotICAgIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVy
aW5nU3R5bGUoY2dDb250ZXh0LCBmb250LnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpLCBm
YWxzZSwgZm9udC5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hh
ZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7
Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIs
IHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250
ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dD
b2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0
eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewot
ICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5
aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcu
Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBm
aWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNo
YWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZp
bGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxs
Q29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2lu
dC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUg
aWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRp
bmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93
VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250
ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBDR0NvbnRl
eHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwot
ICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhC
dWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSkgewotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNn
Q29udGV4dCwgcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAg
ICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1
ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVy
LmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICAgICAgfQotICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0
U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotICAgIENH
Q29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlw
aHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkp
IHsKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgp
ICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIENHQ29u
dGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMo
ZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZy
b20pKSwgbnVtR2x5cGhzKTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwg
c2hhZG93Q29sb3IpOwotCi0gICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShj
Z0NvbnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1h
dHJpeChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKLX0KLQotY29uc3RleHByIHVpbnQzMl90IGtD
R0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0KTsKLWNvbnN0ZXhwciB1aW50MzJf
dCBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8IDQpOwotY29uc3RleHByIHVpbnQz
Ml90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgzIDw8IDQpOwotY29uc3RleHByIHVp
bnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0gKDQgPDwgNCk7Ci0KLWNvbnN0ZXhw
ciBpbnQgZm9udFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsKLWNvbnN0ZXhwciBDR0Zsb2F0IGFu
dGlhbGlhc2luZ0dhbW1hID0gMi4zOwotCi1kb3VibGUgRm9udENhc2NhZGU6OnNfZm9udFNtb290
aGluZ0NvbnRyYXN0ID0gMjsKLXVpbnQzMl90IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdU
eXBlID0ga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtOwotaW50IEZvbnRDYXNjYWRlOjpzX2Zv
bnRTbW9vdGhpbmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bTsKLWJvb2wgRm9udENh
c2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Ci11aW50MzJfdCBGb250Q2FzY2Fk
ZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKLWJvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVt
Rm9udFNtb290aGluZ1NldDsKLQotdm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0xl
dmVsKGludCBsZXZlbCkKLXsKLSAgICBjb25zdCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlW10gPSB7
IAotICAgICAgICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0YW5kYXJkCi0gICAgICAgIGtDR0Zv
bnRTbW9vdGhpbmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3RoaW5nVHlwZUxpZ2h0Ci0gICAgICAg
IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9udFNtb290aGluZ1R5cGVNZWRpdW0K
LSAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnksIC8vIEZvbnRTbW9vdGhpbmdUeXBl
U3Ryb25nCi0gICAgfTsKLQotICAgIGlmIChsZXZlbCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihsZXZlbCkgPiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHNfZm9udFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdUeXBlW2xldmVsXTsKLSAgICBzX2Zv
bnRTbW9vdGhpbmdMZXZlbCA9IGxldmVsOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRTbW9v
dGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1aW50MzJfdCBzbW9vdGhpbmdUeXBl
LCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQotewotICAgIGlmIChzbW9vdGhpbmdU
eXBlKSB7Ci0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwg
Zm9udEFsbG93c1Ntb290aGluZyk7Ci0gICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdT
dHlsZShjZ0NvbnRleHQsIHNtb290aGluZ1R5cGUpOwotICAgIH0gZWxzZQotICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIGZhbHNlKTsKLX0KLQotdWludDMy
X3QgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250
ZXh0LCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcpCi17Ci0gICAgdWludDMyX3Qgb2xkRm9udFNt
b290aGluZ1N0eWxlID0gMDsKLSAgICBpZiAoQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMo
Y2dDb250ZXh0KSkKLSAgICAgICAgb2xkRm9udFNtb290aGluZ1N0eWxlID0gQ0dDb250ZXh0R2V0
Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCk7Ci0gICAgc2V0Q0dGb250U21vb3RoaW5nU3R5
bGUoY2dDb250ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBmb250QWxsb3dzU21vb3RoaW5nKTsK
LQotICAgIHJldHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7Ci19Ci0KLXZvaWQgRm9udENhc2Nh
ZGU6OnNldEZvbnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0IGNvbnRyYXN0KQotewotICAgIHNf
Zm9udFNtb290aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjbGVh
clR5cGVDb250cmFzdCgpCi17Ci0gICAgY29uc3QgV0NIQVIgcmVmZXJlbmNlQ2hhcmFjdGVyID0g
J1xcJzsKLSAgICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3QgPSAyMDAwOwotICAgIHN0YXRpYyBm
bG9hdCBnYW1tYSA9IDI7Ci0gICAgVUlOVCBjb250cmFzdDsKLQotICAgIGlmICghU3lzdGVtUGFy
YW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05UUkFTVCwgMCwgJmNvbnRyYXN0LCAw
KSB8fCBjb250cmFzdCA9PSBsYXN0Q29udHJhc3QpCi0gICAgICAgIHJldHVybiBnYW1tYTsKLQot
ICAgIGxhc3RDb250cmFzdCA9IGNvbnRyYXN0OwotCi0gICAgYXV0byBkYyA9IGFkb3B0R0RJT2Jq
ZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLQotICAgIEhHRElPQkogb2xkSEZPTlQgPSA6
OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkp
OwotICAgIEdMWVBITUVUUklDUyBnbHlwaE1ldHJpY3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgTUFU
MiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwotICAgIGlmICg6Okdl
dEdseXBoT3V0bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hhcmFjdGVyLCBHR09fTUVUUklDUywg
JmdseXBoTWV0cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBHRElfRVJST1IpCi0gICAgICAgIHJl
dHVybiBjb250cmFzdCAvIDEwMDAuMGY7Ci0KLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0g
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIp
OwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVh
ZGVyLmJpU2l6ZUltYWdlID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVy
TWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7
Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAwOwotICAgIGJpdG1h
cEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFg7Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3RhdGljX2Nhc3Q8aW50PihnbHlwaE1l
dHJpY3MuZ21CbGFja0JveFkpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQg
PSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOwotCi0gICAgdWlu
dDhfdCogcGl4ZWxzID0gbnVsbHB0cjsKLSAgICBhdXRvIGJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0
KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkpOwotICAgIGlmICghYml0bWFwKQot
ICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOwotCi0gICAgSEdESU9CSiBvbGRCaXRt
YXAgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFwLmdldCgpKTsKLQotICAgIEJJVE1B
UCBibXBJbmZvOwotICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5nZXQoKSwgc2l6ZW9mKGJtcEluZm8p
LCAmYm1wSW5mbyk7Ci0gICAgbWVtc2V0KHBpeGVscywgMCwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tC
b3hZICogYm1wSW5mby5ibVdpZHRoQnl0ZXMpOwotCi0gICAgOjpTZXRCa01vZGUoZGMuZ2V0KCks
IE9QQVFVRSk7Ci0gICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0KCksIFRBX0xFRlQgfCBUQV9UT1Ap
OwotCi0gICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7Ci0g
ICAgOjpTZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOwotICAgIDo6RXh0VGV4dE91
dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotCi0g
ICAgdWludDhfdCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRyOwotICAgIHVpbnQ4X3Qgd2hpdGVS
ZWZlcmVuY2VWYWx1ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaE1ldHJp
Y3MuZ21CbGFja0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyArK2kpIHsKLSAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hYOyArK2opIHsKLSAg
ICAgICAgICAgIHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhlbHNbaSAqIGJtcEluZm8uYm1XaWR0
aEJ5dGVzICsgal07Ci0gICAgICAgICAgICAvLyBMb29rIGZvciBhIHBpeGVsIHZhbHVlIGluIHRo
ZSByYW5nZSB0aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQotICAgICAgICAgICAgLy8gZ2FtbWEg
d2l0aGluIDAuMSB3aXRob3V0IGFuIGVycm9yLgotICAgICAgICAgICAgaWYgKHdoaXRlUmVmZXJl
bmNlVmFsdWUgPiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVlIDwgMjQwKSB7Ci0gICAgICAgICAg
ICAgICAgcmVmZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMg
KyBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7Ci0gICAgICAgIDo6U2V0VGV4dENvbG9y
KGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOwotICAgICAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCks
IFJHQigyNTUsIDI1NSwgMjU1KSk7Ci0gICAgICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAs
IDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotICAgICAgICB1aW50OF90IGJs
YWNrUmVmZXJlbmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7Ci0KLSAgICAgICAgZmxvYXQgbWlu
RGVsdGEgPSAxOwotICAgICAgICBmb3IgKGZsb2F0IGcgPSAxOyBnIDwgMi4zZjsgZyArPSAwLjFm
KSB7Ci0gICAgICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMocG93Zigod2hpdGVSZWZlcmVuY2VW
YWx1ZSAvIDI1NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiks
IGcpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoZGVsdGEgPCBtaW5EZWx0YSkgewotICAgICAgICAg
ICAgICAgIG1pbkRlbHRhID0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgZ2FtbWEgPSBnOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGdhbW1hID0gY29udHJh
c3QgLyAxMDAwLjBmOwotCi0gICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEJpdG1hcCk7
Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhGT05UKTsKLQotICAgIHJldHVybiBn
YW1tYTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQo
KQotewotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkcsIDAs
ICZzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsKLSAgICA6OlN5c3RlbVBhcmFtZXRl
cnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwgJnNfc3lzdGVtRm9udFNtb290aGlu
Z1R5cGUsIDApOwotICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY2xlYXJUeXBlQ29udHJh
c3QoKTsKLSAgICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQgPSB0cnVlOwotfQotCi12b2lkIEZv
bnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLyppc1ByaW50ZXJGb250Ki8sIGJvb2wg
dXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpCi17Ci0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0
cnVlOwotICAgIGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IHRydWU7Ci0gICAgQ0dGbG9hdCBj
b250cmFzdCA9IDI7Ci0gICAgaWYgKHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKSB7Ci0gICAgICAg
IC8vIDxyZGFyOi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBpeGVsLXBvc2l0aW9uLCBzbyBkb24n
dCBib3RoZXIgYXNraW5nLgotICAgICAgICBtYXlTdWJwaXhlbFBvc2l0aW9uID0gZmFsc2U7Ci0g
ICAgICAgIGlmICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0KQotICAgICAgICAgICAgc3lzdGVt
Rm9udFNtb290aGluZ0NoYW5nZWQoKTsKLSAgICAgICAgY29udHJhc3QgPSBzX2ZvbnRTbW9vdGhp
bmdDb250cmFzdDsKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc19zeXN0ZW1Gb250U21vb3Ro
aW5nRW5hYmxlZDsKLSAgICAgICAgaWYgKHNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUgPT0gRkVf
Rk9OVFNNT09USElOR1NUQU5EQVJEKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRGb250U21v
b3RoaW5nU3R5bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtKTsKLSAg
ICAgICAgICAgIGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2FtbWE7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNnQ29udGV4dCwgY29udHJh
c3QpOwotICAgIENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKGNnQ29u
dGV4dCwgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFu
dGlhbGlhc0ZvbnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDR0FmZmluZVRy
YW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0g
ICAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRUcmFuc2Zvcm0uYSA9PSAxICYmIChj
b250ZXh0VHJhbnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJhbnNmb3JtLmQgPT0gLTEpICYmICFj
b250ZXh0VHJhbnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYzsKLSAgICBDR0NvbnRleHRT
ZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCBtYXlTdWJwaXhlbFBvc2l0
aW9uICYmIChpc1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5zbGF0aW9uKSk7Ci0gICAgQ0dDb250
ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgaXNQdXJlVHJhbnNs
YXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmlu
Z1N0eWxlRm9yRm9udChib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250KQotewot
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5pbXVtIGFudGlhbGlhc2VkIGZvbnQg
c2l6ZS4KLQotICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQcmludGVyRm9udCkKLSAgICAgICAg
cmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJp
bmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhl
bFF1YW50aXphdGlvbjsKLQotICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxp
YXNpbmc7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhD
R0ZvbnRSZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJvb2wgaXNTeXN0ZW1G
b250LCBib29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkK
LXsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmluZ1N0eWxlRm9yRm9u
dChpc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOwotICAgIENHRm9udEdldEdseXBoQWR2YW5j
ZXNGb3JTdHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpOwotCi0gICAg
Ly8gPHJkYXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQgaW4gQ29yZSBHcmFw
aGljcyBzb21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0Ci0gICAgLy8gZGlmZmVyIGZyb20g
d2hhdCB0aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9sbG93aW5nIGNvZGUg
Y29ycmVjdHMgdGhhdC4KLSAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dGb250Q29weVRhYmxl
Rm9yVGFnKGZvbnQsICdobXR4Jyk7Ci0gICAgaWYgKCFobXR4VGFibGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQs
ICdoaGVhJyk7Ci0gICAgaWYgKCFoaGVhVGFibGUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhU
YWJsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBDRkluZGV4IGhoZWFU
YWJsZVNpemUgPSAzNjsKLSAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxlTnVtYmVyT2ZITWV0
cmljc09mZnNldCA9IDM0OwotICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhlYVRhYmxlKSA8IGho
ZWFUYWJsZVNpemUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Ci0gICAgICAgIENG
UmVsZWFzZShoaGVhVGFibGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgc2hvcnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhlYVRhYmxlTnVtYmVy
T2ZITWV0cmljc09mZnNldCk7Ci0gICAgbnVtYmVyT2ZITWV0cmljcyA9ICgobnVtYmVyT2ZITWV0
cmljcyAmIDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7Ci0gICAgaWYgKCFu
dW1iZXJPZkhNZXRyaWNzKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAg
ICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChnbHlwaCA+PSBudW1iZXJPZkhNZXRyaWNzKQotICAgICAgICBnbHlwaCA9IG51bWJlck9mSE1l
dHJpY3MgLSAxOwotCi0gICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFibGUpIDwgNCAqIChn
bHlwaCArIDEpKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICBDRlJl
bGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IHNob3J0IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0ICogZ2x5cGgpOwot
ICAgIGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25Vbml0cyAmIDB4RkYp
IDw8IDgpIHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgpOwotICAgIENHU2l6ZSBob3Jpem9u
dGFsQWR2YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYWR2YW5jZUluRGVz
aWduVW5pdHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7Ci0gICAgaG9yaXpvbnRh
bEFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9udGFsQWR2YW5jZSwg
bSk7Ci0gICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndpZHRoOwotICAgIGlm
ICghKHN0eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZykpCi0g
ICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7Ci0KLSAgICBDRlJl
bGVhc2UoaGhlYVRhYmxlKTsKLSAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKLX0KLQotfQotCi0j
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q0dXaW4uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRD
YWNoZVdpbi5jcHAJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzUsNyAr
Njc1LDcgQEAKICAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWU8Rm9udFBsYXRmb3JtRGF0YT4o
V1RGTW92ZShoZm9udCksIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50
aGVzaXplQm9sZCwgc3ludGhlc2l6ZUl0YWxpYywgdXNlR0RJKTsKIAogI2lmIFVTRShDRykKLSAg
ICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPmNnRm9udCgpOworICAgIGJvb2wg
Zm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Zm9udCgpOwogI2VsaWYgVVNFKERJUkVDVDJE
KQogICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+ZHdGb250KCk7CiAjZWxp
ZiBVU0UoQ0FJUk8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udENhc2NhZGVDR1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlQ0dXaW4uY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDA5LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1
ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJXZWJDb3JlVGV4dFJl
bmRlcmVyLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0ZXhw
ciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtID0gKDEgPDwgNCk7Citjb25z
dGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQgPSAoMiA8PCA0KTsKK2Nv
bnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0gPSAoMyA8PCA0KTsK
K2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSA9ICg0IDw8IDQp
OworCitjb25zdGV4cHIgaW50IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bSA9IDI7Citjb25zdGV4
cHIgQ0dGbG9hdCBhbnRpYWxpYXNpbmdHYW1tYSA9IDIuMzsKKworZG91YmxlIEZvbnRDYXNjYWRl
OjpzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IDI7Cit1aW50MzJfdCBGb250Q2FzY2FkZTo6c19m
b250U21vb3RoaW5nVHlwZSA9IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bTsKK2ludCBGb250
Q2FzY2FkZTo6c19mb250U21vb3RoaW5nTGV2ZWwgPSBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW07
Citib29sIEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOwordWludDMy
X3QgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGU7Citib29sIEZvbnRDYXNj
YWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQ7CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldEZv
bnRTbW9vdGhpbmdMZXZlbChpbnQgbGV2ZWwpCit7CisgICAgY29uc3QgdWludDMyX3Qgc21vb3Ro
aW5nVHlwZVtdID0geyAKKyAgICAgICAgMCwgLy8gRm9udFNtb290aGluZ1R5cGVTdGFuZGFyZAor
ICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCwgLy8gRm9udFNtb290aGluZ1R5cGVM
aWdodAorICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW0sIC8vIEZvbnRTbW9vdGhp
bmdUeXBlTWVkaXVtCisgICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5LCAvLyBGb250
U21vb3RoaW5nVHlwZVN0cm9uZworICAgIH07CisKKyAgICBpZiAobGV2ZWwgPCAwIHx8IHN0YXRp
Y19jYXN0PHNpemVfdD4obGV2ZWwpID4gQVJSQVlTSVpFKHNtb290aGluZ1R5cGUpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzX2ZvbnRTbW9vdGhpbmdUeXBlID0gc21vb3RoaW5nVHlwZVtsZXZl
bF07CisgICAgc19mb250U21vb3RoaW5nTGV2ZWwgPSBsZXZlbDsKK30KKworc3RhdGljIHZvaWQg
c2V0Q0dGb250U21vb3RoaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgdWludDMyX3Qg
c21vb3RoaW5nVHlwZSwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nID0gdHJ1ZSkKK3sKKyAgICBp
ZiAoc21vb3RoaW5nVHlwZSkgeworICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250
cyhjZ0NvbnRleHQsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOworICAgICAgICBDR0NvbnRleHRTZXRG
b250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzbW9vdGhpbmdUeXBlKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmYWxzZSk7
Cit9CisKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBmb250QWxsb3dzU21vb3RoaW5nKQoreworICAgIHVpbnQz
Ml90IG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9IDA7CisgICAgaWYgKENHQ29udGV4dEdldFNob3Vs
ZFNtb290aEZvbnRzKGNnQ29udGV4dCkpCisgICAgICAgIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9
IENHQ29udGV4dEdldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQpOworICAgIHNldENHRm9u
dFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc19mb250U21vb3RoaW5nVHlwZSwgZm9udEFsbG93
c1Ntb290aGluZyk7CisKKyAgICByZXR1cm4gb2xkRm9udFNtb290aGluZ1N0eWxlOworfQorCit2
b2lkIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nQ29udHJhc3QoQ0dGbG9hdCBjb250cmFz
dCkKK3sKKyAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNvbnRyYXN0OworfQorCitzdGF0
aWMgZmxvYXQgY2xlYXJUeXBlQ29udHJhc3QoKQoreworICAgIGNvbnN0IFdDSEFSIHJlZmVyZW5j
ZUNoYXJhY3RlciA9ICdcXCc7CisgICAgc3RhdGljIFVJTlQgbGFzdENvbnRyYXN0ID0gMjAwMDsK
KyAgICBzdGF0aWMgZmxvYXQgZ2FtbWEgPSAyOworICAgIFVJTlQgY29udHJhc3Q7CisKKyAgICBp
ZiAoIVN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HQ09OVFJBU1QsIDAs
ICZjb250cmFzdCwgMCkgfHwgY29udHJhc3QgPT0gbGFzdENvbnRyYXN0KQorICAgICAgICByZXR1
cm4gZ2FtbWE7CisKKyAgICBsYXN0Q29udHJhc3QgPSBjb250cmFzdDsKKworICAgIGF1dG8gZGMg
PSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBhdGlibGVEQygwKSk7CisKKyAgICBIR0RJT0JK
IG9sZEhGT05UID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIEdldFN0b2NrT2JqZWN0KERFRkFV
TFRfR1VJX0ZPTlQpKTsKKyAgICBHTFlQSE1FVFJJQ1MgZ2x5cGhNZXRyaWNzOworCisgICAgc3Rh
dGljIGNvbnN0IE1BVDIgaWRlbnRpdHkgPSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsK
KyAgICBpZiAoOjpHZXRHbHlwaE91dGxpbmUoZGMuZ2V0KCksIHJlZmVyZW5jZUNoYXJhY3Rlciwg
R0dPX01FVFJJQ1MsICZnbHlwaE1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSkgPT0gR0RJX0VSUk9S
KQorICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgQklUTUFQSU5GTyBi
aXRtYXBJbmZvOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRN
QVBJTkZPSEVBREVSKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7Cisg
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsKKyAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaVNpemVJbWFnZSA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFk
ZXIuYmlYUGVsc1Blck1ldGVyID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVlQZWxz
UGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xySW1wb3J0YW50ID0g
MDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVdpZHRoID0gZ2x5cGhNZXRyaWNzLmdtQmxh
Y2tCb3hYOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpSGVpZ2h0ID0gLXN0YXRpY19jYXN0
PGludD4oZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZKTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUJpdENvdW50ID0gMzI7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJVc2VkID0g
MDsKKworICAgIHVpbnQ4X3QqIHBpeGVscyA9IG51bGxwdHI7CisgICAgYXV0byBiaXRtYXAgPSBh
ZG9wdEdESU9iamVjdCg6OkNyZWF0ZURJQlNlY3Rpb24oMCwgJmJpdG1hcEluZm8sIERJQl9SR0Jf
Q09MT1JTLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJnBpeGVscyksIDAsIDApKTsKKyAgICBp
ZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIEhH
RElPQkogb2xkQml0bWFwID0gOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIGJpdG1hcC5nZXQoKSk7
CisKKyAgICBCSVRNQVAgYm1wSW5mbzsKKyAgICA6OkdldE9iamVjdChiaXRtYXAuZ2V0KCksIHNp
emVvZihibXBJbmZvKSwgJmJtcEluZm8pOworICAgIG1lbXNldChwaXhlbHMsIDAsIGdseXBoTWV0
cmljcy5nbUJsYWNrQm94WSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzKTsKKworICAgIDo6U2V0QmtN
b2RlKGRjLmdldCgpLCBPUEFRVUUpOworICAgIDo6U2V0VGV4dEFsaWduKGRjLmdldCgpLCBUQV9M
RUZUIHwgVEFfVE9QKTsKKworICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMjU1LCAy
NTUsIDI1NSkpOworICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKKyAg
ICA6OkV4dFRleHRPdXRXKGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVy
LCAxLCAwKTsKKworICAgIHVpbnQ4X3QqIHJlZmVyZW5jZVBpeGVsID0gbnVsbHB0cjsKKyAgICB1
aW50OF90IHdoaXRlUmVmZXJlbmNlVmFsdWUgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICYmICFyZWZlcmVuY2VQaXhlbDsgKytpKSB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgNCAqIGdseXBoTWV0cmljcy5nbUJsYWNrQm94
WDsgKytqKSB7CisgICAgICAgICAgICB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gcGl4ZWxzW2kgKiBi
bXBJbmZvLmJtV2lkdGhCeXRlcyArIGpdOworICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBwaXhl
bCB2YWx1ZSBpbiB0aGUgcmFuZ2UgdGhhdCBhbGxvd3MgdXMgdG8gZXN0aW1hdGUKKyAgICAgICAg
ICAgIC8vIGdhbW1hIHdpdGhpbiAwLjEgd2l0aG91dCBhbiBlcnJvci4KKyAgICAgICAgICAgIGlm
ICh3aGl0ZVJlZmVyZW5jZVZhbHVlID4gMzIgJiYgd2hpdGVSZWZlcmVuY2VWYWx1ZSA8IDI0MCkg
eworICAgICAgICAgICAgICAgIHJlZmVyZW5jZVBpeGVsID0gcGl4ZWxzICsgaSAqIGJtcEluZm8u
Ym1XaWR0aEJ5dGVzICsgajsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZWZlcmVuY2VQaXhlbCkgeworICAgICAgICA6
OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdCKDAsIDAsIDApKTsKKyAgICAgICAgOjpTZXRCa0Nv
bG9yKGRjLmdldCgpLCBSR0IoMjU1LCAyNTUsIDI1NSkpOworICAgICAgICA6OkV4dFRleHRPdXRX
KGRjLmdldCgpLCAwLCAwLCAwLCAwLCAmcmVmZXJlbmNlQ2hhcmFjdGVyLCAxLCAwKTsKKyAgICAg
ICAgdWludDhfdCBibGFja1JlZmVyZW5jZVZhbHVlID0gKnJlZmVyZW5jZVBpeGVsOworCisgICAg
ICAgIGZsb2F0IG1pbkRlbHRhID0gMTsKKyAgICAgICAgZm9yIChmbG9hdCBnID0gMTsgZyA8IDIu
M2Y7IGcgKz0gMC4xZikgeworICAgICAgICAgICAgZmxvYXQgZGVsdGEgPSBmYWJzKHBvd2YoKHdo
aXRlUmVmZXJlbmNlVmFsdWUgLyAyNTUuMGYpLCBnKSArIHBvd2YoKGJsYWNrUmVmZXJlbmNlVmFs
dWUgLyAyNTUuMGYpLCBnKSAtIDEpOworICAgICAgICAgICAgaWYgKGRlbHRhIDwgbWluRGVsdGEp
IHsKKyAgICAgICAgICAgICAgICBtaW5EZWx0YSA9IGRlbHRhOworICAgICAgICAgICAgICAgIGdh
bW1hID0gZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBn
YW1tYSA9IGNvbnRyYXN0IC8gMTAwMC4wZjsKKworICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgp
LCBvbGRCaXRtYXApOworICAgIDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBvbGRIRk9OVCk7CisK
KyAgICByZXR1cm4gZ2FtbWE7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnN5c3RlbUZvbnRTbW9v
dGhpbmdDaGFuZ2VkKCkKK3sKKyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05U
U01PT1RISU5HLCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZCwgMCk7CisgICAgOjpT
eXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElOR1RZUEUsIDAsICZzX3N5c3Rl
bUZvbnRTbW9vdGhpbmdUeXBlLCAwKTsKKyAgICBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdCA9IGNs
ZWFyVHlwZUNvbnRyYXN0KCk7CisgICAgc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0ID0gdHJ1ZTsK
K30KKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Q0dDb250ZXh0Rm9udFJlbmRlcmluZ1N0eWxlKENH
Q29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIC8qaXNQcmludGVy
Rm9udCovLCBib29sIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKQoreworICAgIGJvb2wgc2hvdWxk
QW50aWFsaWFzID0gdHJ1ZTsKKyAgICBib29sIG1heVN1YnBpeGVsUG9zaXRpb24gPSB0cnVlOwor
ICAgIENHRmxvYXQgY29udHJhc3QgPSAyOworICAgIGlmICh1c2VQbGF0Zm9ybU5hdGl2ZUdseXBo
cykgeworICAgICAgICAvLyA8cmRhcjovLzY1NjQ1MDE+IEdESSBjYW4ndCBzdWJwaXhlbC1wb3Np
dGlvbiwgc28gZG9uJ3QgYm90aGVyIGFza2luZy4KKyAgICAgICAgbWF5U3VicGl4ZWxQb3NpdGlv
biA9IGZhbHNlOworICAgICAgICBpZiAoIXNfc3lzdGVtRm9udFNtb290aGluZ1NldCkKKyAgICAg
ICAgICAgIHN5c3RlbUZvbnRTbW9vdGhpbmdDaGFuZ2VkKCk7CisgICAgICAgIGNvbnRyYXN0ID0g
c19mb250U21vb3RoaW5nQ29udHJhc3Q7CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHNfc3lz
dGVtRm9udFNtb290aGluZ0VuYWJsZWQ7CisgICAgICAgIGlmIChzX3N5c3RlbUZvbnRTbW9vdGhp
bmdUeXBlID09IEZFX0ZPTlRTTU9PVEhJTkdTVEFOREFSRCkgeworICAgICAgICAgICAgQ0dDb250
ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwga0NHRm9udFNtb290aGluZ1N0eWxl
TWluaW11bSk7CisgICAgICAgICAgICBjb250cmFzdCA9IGFudGlhbGlhc2luZ0dhbW1hOworICAg
ICAgICB9CisgICAgfQorICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdDb250cmFzdChjZ0Nv
bnRleHQsIGNvbnRyYXN0KTsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRVc2VQbGF0Zm9ybU5hdGl2
ZUdseXBocyhjZ0NvbnRleHQsIHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKTsKKyAgICBDR0NvbnRl
eHRTZXRTaG91bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7Cisg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShj
Z0NvbnRleHQpOworICAgIGJvb2wgaXNQdXJlVHJhbnNsYXRpb24gPSBjb250ZXh0VHJhbnNmb3Jt
LmEgPT0gMSAmJiAoY29udGV4dFRyYW5zZm9ybS5kID09IDEgfHwgY29udGV4dFRyYW5zZm9ybS5k
ID09IC0xKSAmJiAhY29udGV4dFRyYW5zZm9ybS5iICYmICFjb250ZXh0VHJhbnNmb3JtLmM7Cisg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29udGV4dCwgbWF5
U3VicGl4ZWxQb3NpdGlvbiAmJiAoaXNTeXN0ZW1Gb250IHx8ICFpc1B1cmVUcmFuc2xhdGlvbikp
OworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQs
IGlzUHVyZVRyYW5zbGF0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBDR0ZvbnRSZW5kZXJpbmdT
dHlsZSByZW5kZXJpbmdTdHlsZUZvckZvbnQoYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmlu
dGVyRm9udCkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IGEgbWluaW11bSBhbnRp
YWxpYXNlZCBmb250IHNpemUuCisKKyAgICBpZiAoaXNTeXN0ZW1Gb250IHx8IGlzUHJpbnRlckZv
bnQpCisgICAgICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBr
Q0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmlu
Z1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb247CisKKyAgICByZXR1cm4ga0NHRm9udFJlbmRlcmlu
Z1N0eWxlQW50aWFsaWFzaW5nOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpnZXRQbGF0Zm9ybUds
eXBoQWR2YW5jZXMoQ0dGb250UmVmIGZvbnQsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtJiBtLCBi
b29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250LCBDR0dseXBoIGdseXBoLCBDR1Np
emUmIGFkdmFuY2UpCit7CisgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSByZW5kZXJp
bmdTdHlsZUZvckZvbnQoaXNTeXN0ZW1Gb250LCBpc1ByaW50ZXJGb250KTsKKyAgICBDR0ZvbnRH
ZXRHbHlwaEFkdmFuY2VzRm9yU3R5bGUoZm9udCwgJm0sIHN0eWxlLCAmZ2x5cGgsIDEsICZhZHZh
bmNlKTsKKworICAgIC8vIDxyZGFyOi8vcHJvYmxlbS83NzYxMTY1PiBUaGUgR0RJIGJhY2sgZW5k
IGluIENvcmUgR3JhcGhpY3Mgc29tZXRpbWVzIHJldHVybnMgYWR2YW5jZXMgdGhhdAorICAgIC8v
IGRpZmZlciBmcm9tIHdoYXQgdGhlIGZvbnQncyBobXR4IHRhYmxlIHNwZWNpZmllcy4gVGhlIGZv
bGxvd2luZyBjb2RlIGNvcnJlY3RzIHRoYXQuCisgICAgQ0ZEYXRhUmVmIGhtdHhUYWJsZSA9IENH
Rm9udENvcHlUYWJsZUZvclRhZyhmb250LCAnaG10eCcpOworICAgIGlmICghaG10eFRhYmxlKQor
ICAgICAgICByZXR1cm47CisgICAgQ0ZEYXRhUmVmIGhoZWFUYWJsZSA9IENHRm9udENvcHlUYWJs
ZUZvclRhZyhmb250LCAnaGhlYScpOworICAgIGlmICghaGhlYVRhYmxlKSB7CisgICAgICAgIENG
UmVsZWFzZShobXR4VGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qg
Q0ZJbmRleCBoaGVhVGFibGVTaXplID0gMzY7CisgICAgY29uc3QgcHRyZGlmZl90IGhoZWFUYWJs
ZU51bWJlck9mSE1ldHJpY3NPZmZzZXQgPSAzNDsKKyAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3RoKGho
ZWFUYWJsZSkgPCBoaGVhVGFibGVTaXplKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUp
OworICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHVuc2lnbmVkIHNob3J0IG51bWJlck9mSE1ldHJpY3MgPSAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdldEJ5dGVQdHIoaGhlYVRhYmxlKSArIGho
ZWFUYWJsZU51bWJlck9mSE1ldHJpY3NPZmZzZXQpOworICAgIG51bWJlck9mSE1ldHJpY3MgPSAo
KG51bWJlck9mSE1ldHJpY3MgJiAweEZGKSA8PCA4KSB8IChudW1iZXJPZkhNZXRyaWNzID4+IDgp
OworICAgIGlmICghbnVtYmVyT2ZITWV0cmljcykgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRh
YmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZ2x5cGggPj0gbnVtYmVyT2ZITWV0cmljcykKKyAgICAgICAgZ2x5cGgg
PSBudW1iZXJPZkhNZXRyaWNzIC0gMTsKKworICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaG10eFRh
YmxlKSA8IDQgKiAoZ2x5cGggKyAxKSkgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsK
KyAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBzaG9ydCBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICpyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihobXR4VGFibGUpICsg
NCAqIGdseXBoKTsKKyAgICBhZHZhbmNlSW5EZXNpZ25Vbml0cyA9ICgoYWR2YW5jZUluRGVzaWdu
VW5pdHMgJiAweEZGKSA8PCA4KSB8IChhZHZhbmNlSW5EZXNpZ25Vbml0cyA+PiA4KTsKKyAgICBD
R1NpemUgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVNYWtlKHN0YXRpY19jYXN0PENHRmxvYXQ+
KGFkdmFuY2VJbkRlc2lnblVuaXRzKSAvIENHRm9udEdldFVuaXRzUGVyRW0oZm9udCksIDApOwor
ICAgIGhvcml6b250YWxBZHZhbmNlID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oaG9yaXpv
bnRhbEFkdmFuY2UsIG0pOworICAgIGFkdmFuY2Uud2lkdGggPSBob3Jpem9udGFsQWR2YW5jZS53
aWR0aDsKKyAgICBpZiAoIShzdHlsZSAmIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9z
aXRpb25pbmcpKQorICAgICAgICBhZHZhbmNlLndpZHRoID0gcm91bmRmKGFkdmFuY2Uud2lkdGgp
OworCisgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7CisgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7
Cit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShy
ZXZpc2lvbiAyNjY5MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKIAogI2lmIFVTRShDRykKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAjZW5kaWYKIAogI2lm
IFVTRShESVJFQ1QyRCkKQEAgLTgzLDggKzg0LDkgQEAKIAogICAgIGF1dG8gaGZvbnQgPSBhZG9w
dEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkpOwogI2lmIFVTRShDRykK
LSAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdp
dGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKLSAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShX
VEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmlu
Z01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CisgICAgYXV0byBjZ0ZvbnQg
PSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKKyAgICBh
dXRvIGN0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChjZ0ZvbnQu
Z2V0KCksIHNpemUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gRm9udFBsYXRmb3Jt
RGF0YShXVEZNb3ZlKGhmb250KSwgY3RGb250LmdldCgpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJl
bmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CiAjZWxzZQogICAg
IGF1dG8gZm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxhdGZvcm1Gb250KGxvZ0ZvbnQp
OwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZvbnQpLCBXVEZNb3ZlKGZv
bnQpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01v
ZGU6OkFsdGVybmF0ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAkocmV2aXNp
b24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFDR1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIlNoYXJlZEdESU9iamVjdC5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0xMTMsMTcgKzExNCwxOSBAQAogewogICAgIExPR0ZPTlQg
bG9nZm9udDsKICAgICBHZXRPYmplY3QoZm9udCwgc2l6ZW9mKGxvZ2ZvbnQpLCAmbG9nZm9udCk7
Ci0gICAgbV9jZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxv
Z2ZvbnQpKTsKKyAgICBhdXRvIGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRm
b3JtRm9udCgmbG9nZm9udCkpOworICAgIG1fZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEdyYXBoaWNzRm9udChjZ0ZvbnQuZ2V0KCksIHNpemUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAg
ICAKICAgICBpZiAoIW1fdXNlR0RJKQogICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAo
ZmFjZU5hbWUsIEwiTHVjaWRhIEdyYW5kZSIpOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQsIENHRm9udFJlZiBmb250LCBmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCitGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQsIENURm9udFJl
ZiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkp
CiAgICAgOiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShv
YmxpcXVlKQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0
PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQpKSkKLSAgICAsIG1fY2dGb250KGZvbnQpCisg
ICAgLCBtX2hGb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250
KSkpCisgICAgLCBtX2ZvbnQoZm9udCkKICAgICAsIG1fdXNlR0RJKHVzZUdESSkKIHsKIH0KQEAg
LTEzMCwxMyArMTMzLDI3IEBACiAKIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBj
b25zdAogewotICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6IDA7CisgICAgdWlu
dHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKKyAgICAgICAgfCBtX2lzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlIDw8IDUKKyAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90ZXh0UmVuZGVyaW5n
TW9kZSkgPDwgMworICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29yaWVudGF0aW9u
KSA8PCAyCisgICAgICAgIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEKKyAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9zeW50aGV0aWNPYmxpcXVlKSk7CisKKyAgICB1aW50cHRyX3QgZm9u
dEhhc2gxID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRkhhc2gobV9mb250LmdldCgpKSk7Cisg
ICAgdWludHB0cl90IGZvbnRIYXNoMiA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9oRm9udCA/
IG1faEZvbnQtPmhhc2goKSA6IDApOworICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9u
dEhhc2gxLCBmb250SGFzaDIsIGZsYWdzIH07CisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKIH0KIAogYm9vbCBGb250UGxh
dGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQKLSAgICAgICAgJiYg
bV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQKKyAgICBpZiAoIW1fZm9udCB8fCAhb3RoZXIubV9m
b250KQorICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udDsKKworICAgIHJldHVy
biBDRkVxdWFsKG1fZm9udC5nZXQoKSwgb3RoZXIubV9mb250LmdldCgpKSAKKyAgICAgICAgJiYg
bV9oRm9udCA9PSBvdGhlci5tX2hGb250CisgICAgICAgICYmIG1fZm9udCA9PSBvdGhlci5tX2Zv
bnQKICAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9u
dFBsYXRmb3JtRGF0YVdpbi5jcHAJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gZm9udCwgZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQotICAgIDogbV9mb250KFNo
YXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGZvbnQpKSkKKyAgICA6IG1faEZv
bnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoZm9udCkpKQogICAgICwg
bV9zaXplKHNpemUpCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhl
dGljT2JsaXF1ZShvYmxpcXVlKQpAQCAtNTEsMzggKzUxLDEzIEBACiAgICAgSFduZERDIGhkYygw
KTsKICAgICBTYXZlREMoaGRjKTsKICAgICAKLSAgICA6OlNlbGVjdE9iamVjdChoZGMsIG1fZm9u
dC0+Z2V0KCkpOworICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgbV9oRm9udC0+Z2V0KCkpOwogCiAg
ICAgd2NoYXJfdCBmYWNlTmFtZVtMRl9GQUNFU0laRV07CiAgICAgR2V0VGV4dEZhY2UoaGRjLCBM
Rl9GQUNFU0laRSwgZmFjZU5hbWUpOwotICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQo
KSwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CisgICAgcGxhdGZvcm1EYXRhSW5pdChtX2hGb250LT5n
ZXQoKSwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CiAKICAgICBSZXN0b3JlREMoaGRjLCAtMSk7CiB9
CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUo
dWludDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgSFduZERDIGhkYygwKTsKLSAgICBIR0RJT0JK
IG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCgpKTsKLQotICAgIERXT1JEIHNpemUg
PSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAwLCAwKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBidWZmZXI7Ci0gICAgaWYgKHNpemUgIT0gR0RJX0VSUk9SKSB7Ci0gICAgICAgIFZlY3Rv
cjxjaGFyPiBkYXRhKHNpemUpOwotICAgICAgICBEV09SRCByZXN1bHQgPSBHZXRGb250RGF0YSho
ZGMsIHRhYmxlLCAwLCAoUFZPSUQpZGF0YS5kYXRhKCksIHNpemUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IHNpemUpOwotICAgICAgICBidWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3Qo
aGRjLCBvbGRGb250KTsKLSAgICByZXR1cm4gYnVmZmVyOwogfQotCi0jaWYgIUxPR19ESVNBQkxF
RAotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9k
ZUNHV2luLmNwcAkocmV2aXNpb24gMjY2OTAzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCShub25leGlzdGVudCkKQEAg
LTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQ
YWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17
Ci0gICAgLy8gYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0ZWQg
bnVtYmVyIG9mIGdseXBocyBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHN1cnJvZ2F0ZSBwYWlycy4K
LSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVyTGVu
Z3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25z
dCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIENH
Rm9udEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY2dGb250KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGJ1ZmZlciksIGxvY2FsR2x5cGhCdWZmZXIs
IGJ1ZmZlckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6
c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsK
LSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7
Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQotCi0jZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNH
V2luLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwot
bmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFDR1dpbi5jcHAJKHJldmlzaW9uIDI2NjkwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0x
LDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRm9u
dENhY2hlLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNp
bmNsdWRlICJPcGVuVHlwZUNHLmgiCi0jaW5jbHVkZSA8bWxhbmcuaD4KLSNpbmNsdWRlIDxwYWwv
c3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNp
bmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZv
bnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0
Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSAgICBtX3NjcmlwdENhY2hl
ID0gMDsKLSAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gMDsKLQotICAgIGlmIChtX3BsYXRm
b3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7Ci0KLSAgICBD
R0ZvbnRSZWYgZm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOwotICAgIGludCBpQXNjZW50
ID0gQ0dGb250R2V0QXNjZW50KGZvbnQpOwotICAgIGludCBpRGVzY2VudCA9IENHRm9udEdldERl
c2NlbnQoZm9udCk7Ci0gICAgaW50IGlMaW5lR2FwID0gQ0dGb250R2V0TGVhZGluZyhmb250KTsK
LSAgICBpbnQgaUNhcEhlaWdodCA9IENHRm9udEdldENhcEhlaWdodChmb250KTsKLQotICAgIC8v
IFRoZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNT
IGZsYWcgYXMgZm9sbG93czoKLSAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1l
bmRlZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1Mv
Mi5zVHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRo
aXMgZm9udC4iCi0gICAgc2hvcnQgdHlwb0FzY2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2Fw
OwotICAgIGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01ldHJpY3MoYWRvcHRDRihDVEZvbnRDcmVh
dGVXaXRoR3JhcGhpY3NGb250KG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpLCBtX3BsYXRmb3JtRGF0
YS5zaXplKCksIG51bGxwdHIsIG51bGxwdHIpKS5nZXQoKSwgdHlwb0FzY2VudCwgdHlwb0Rlc2Nl
bnQsIHR5cG9MaW5lR2FwKSkgewotICAgICAgICBpQXNjZW50ID0gdHlwb0FzY2VudDsKLSAgICAg
ICAgaURlc2NlbnQgPSB0eXBvRGVzY2VudDsKLSAgICAgICAgaUxpbmVHYXAgPSB0eXBvTGluZUdh
cDsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gQ0dGb250R2V0VW5pdHNQZXJF
bShmb250KTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0g
ICAgZmxvYXQgZkFzY2VudCA9IHNjYWxlRW1Ub1VuaXRzKGlBc2NlbnQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplOwotICAgIGZsb2F0IGZEZXNjZW50ID0gLXNjYWxlRW1Ub1VuaXRzKGlEZXNjZW50
LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmQ2FwSGVpZ2h0ID0gc2NhbGVF
bVRvVW5pdHMoaUNhcEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQg
ZkxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyhpTGluZUdhcCwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emU7Ci0KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCkgewotICAgICAgICBIV25k
REMgZGMoMCk7Ci0gICAgICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChkYywgbV9w
bGF0Zm9ybURhdGEuaGZvbnQoKSk7Ci0gICAgICAgIGludCBmYWNlTGVuZ3RoID0gR2V0VGV4dEZh
Y2UoZGMsIDAsIDApOwotICAgICAgICBWZWN0b3I8V0NIQVI+IGZhY2VOYW1lKGZhY2VMZW5ndGgp
OwotICAgICAgICBHZXRUZXh0RmFjZShkYywgZmFjZUxlbmd0aCwgZmFjZU5hbWUuZGF0YSgpKTsK
LSAgICAgICAgU2VsZWN0T2JqZWN0KGRjLCBvbGRGb250KTsKLQotICAgICAgICBmQXNjZW50ID0g
YXNjZW50Q29uc2lkZXJpbmdNYWNBc2NlbnRIYWNrKGZhY2VOYW1lLmRhdGEoKSwgZkFzY2VudCwg
ZkRlc2NlbnQpOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGZBc2NlbnQp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChmRGVzY2VudCk7Ci0gICAgbV9mb250TWV0
cmljcy5zZXRDYXBIZWlnaHQoZkNhcEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5l
R2FwKGZMaW5lR2FwKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxyb3VuZGYo
ZkFzY2VudCkgKyBscm91bmRmKGZEZXNjZW50KSArIGxyb3VuZGYoZkxpbmVHYXApKTsKLQotICAg
IEdseXBoIHhHbHlwaCA9IGdseXBoRGF0YUZvckNoYXJhY3RlcigneCcpLmdseXBoOwotICAgIGlm
ICh4R2x5cGgpIHsKLSAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3RlciAieCIs
IHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFzZWxpbmUs
IGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGlu
Y2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5l
LgotICAgICAgICBDR1JlY3QgeEJveDsKLSAgICAgICAgQ0dGb250R2V0R2x5cGhCQm94ZXMoZm9u
dCwgJnhHbHlwaCwgMSwgJnhCb3gpOwotICAgICAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQo
c2NhbGVFbVRvVW5pdHMoQ0dSZWN0R2V0TWF4WSh4Qm94KSwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBpWEhlaWdodCA9IENHRm9udEdldFhIZWln
aHQoZm9udCk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0
cyhpWEhlaWdodCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemUpOwotICAgIH0KLQotICAgIG1fZm9u
dE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLX0KLQotRmxvYXRSZWN0IEZvbnQ6
OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFw
bGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAg
IGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIGJvdW5kc0ZvckdE
SUdseXBoKGdseXBoKTsKLQotICAgIENHUmVjdCBib3g7Ci0gICAgQ0dGb250R2V0R2x5cGhCQm94
ZXMobV9wbGF0Zm9ybURhdGEuY2dGb250KCksICZnbHlwaCwgMSwgJmJveCk7Ci0gICAgZmxvYXQg
cG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENHRmxvYXQgc2NhbGUgPSBw
b2ludFNpemUgLyBmb250TWV0cmljcygpLnVuaXRzUGVyRW0oKTsKLSAgICBGbG9hdFJlY3QgYm91
bmRpbmdCb3ggPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShib3gsIENHQWZmaW5lVHJhbnNm
b3JtTWFrZVNjYWxlKHNjYWxlLCAtc2NhbGUpKTsKLSAgICBpZiAobV9zeW50aGV0aWNCb2xkT2Zm
c2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0aChib3VuZGluZ0JveC53aWR0aCgpICsg
bV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJldHVybiBib3VuZGluZ0JveDsKLX0KLQot
ZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewot
ICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IGlmIChtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkKLSAgICAgICAgcmV0dXJuIHdpZHRoRm9yR0RJ
R2x5cGgoZ2x5cGgpOwotCi0gICAgQ0dGb250UmVmIGZvbnQgPSBtX3BsYXRmb3JtRGF0YS5jZ0Zv
bnQoKTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAg
Q0dTaXplIGFkdmFuY2U7Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5lVHJhbnNm
b3JtTWFrZVNjYWxlKHBvaW50U2l6ZSwgcG9pbnRTaXplKTsKLSAKLSAgICBib29sIGlzUHJpbnRl
ckZvbnQgPSBmYWxzZTsKLSAgICBGb250Q2FzY2FkZTo6Z2V0UGxhdGZvcm1HbHlwaEFkdmFuY2Vz
KGZvbnQsIG0sIG1fcGxhdGZvcm1EYXRhLmlzU3lzdGVtRm9udCgpLCBpc1ByaW50ZXJGb250LCBn
bHlwaCwgYWR2YW5jZSk7Ci0KLSAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGlj
Qm9sZE9mZnNldDsKLX0KLQotUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKLXsKLSAgICBhdXRvIGN0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0
aEdyYXBoaWNzRm9udChwbGF0Zm9ybURhdGEoKS5jZ0ZvbnQoKSwgcGxhdGZvcm1EYXRhKCkuc2l6
ZSgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENURm9u
dENyZWF0ZVBhdGhGb3JHbHlwaChjdEZvbnQuZ2V0KCksIGdseXBoLCBudWxscHRyKSk7Ci0gICAg
YXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhldGljQm9sZE9mZnNldCgpOwot
ICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7Ci0gICAgICAgIGF1dG8gbmV3UGF0aCA9IGFk
b3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQ
YXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICBhdXRvIHRyYW5zbGF0
aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oc3ludGhldGljQm9sZE9mZnNl
dCwgMCk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgJnRyYW5zbGF0aW9u
LCByZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4gbmV3UGF0aDsKLSAgICB9Ci0gICAgcmV0
dXJuIGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSk7Ci19Ci0K
LX0KLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVk
OiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAJKHJldmlzaW9uIDI2NjkwMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxNiArMTA2LDYgQEAKICAgICBTZWxlY3RPYmpl
Y3QoaGRjLCBvbGRGb250KTsKIH0KIAotdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJXaWR0aEluaXQo
KQotewotICAgIC8vIEdESSBGb250cyBpbml0IGNoYXJ3aWR0aHMgaW4gaW5pdEdESUZvbnQuCi0g
ICAgaWYgKCFtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkgewotICAgICAgICBtX2F2Z0NoYXJXaWR0
aCA9IDAuZjsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgICAgIGluaXRDaGFy
V2lkdGhzKCk7Ci0gICAgfQotfQotCiB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7CiAg
ICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKQEAgLTEyMiw0MCArMTEyLDYgQEAK
ICAgICBkZWxldGUgbV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAotUmVmUHRyPEZvbnQ+IEZv
bnQ6OnBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2NhbGVk
U2l6ZSA9IHNjYWxlRmFjdG9yICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGlmIChvcmln
aW4oKSA9PSBPcmlnaW46OlJlbW90ZSkKLSAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShGb250
UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhTaXplKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwg
Rm9udDo6T3JpZ2luOjpSZW1vdGUpOwotCi0gICAgTE9HRk9OVCB3aW5mb250OwotICAgIEdldE9i
amVjdChtX3BsYXRmb3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsK
LSAgICB3aW5mb250LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqIChtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSA/IDEgOiAzMikpOwotICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVj
dCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmd2luZm9udCkpOwotICAgIHJldHVybiBGb250OjpjcmVh
dGUoRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCks
IG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKSwgb3JpZ2luKCkpOwotfQotCi12b2lkIEZvbnQ6OmRl
dGVybWluZVBpdGNoKCkKLXsKLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpSZW1vdGUpIHsK
LSAgICAgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVEVYVE1FVFJJQ1MgaGF2ZSB0aGlzLiAgU2V0IG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggYmFzZWQgb2ZmIHRoYXQuCi0gICAgSFduZERDIGRjKDApOwotICAgIFNhdmVEQyhkYyk7
Ci0gICAgU2VsZWN0T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKLQotICAgIC8v
IFllcywgdGhpcyBsb29rcyBiYWNrd2FyZHMsIGJ1dCB0aGUgZml4ZWQgcGl0Y2ggYml0IGlzIGFj
dHVhbGx5IHNldCBpZiB0aGUgZm9udAotICAgIC8vIGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5i
ZWxpZXZhYmxlIGJ1dCB0cnVlLgotICAgIFRFWFRNRVRSSUMgdG07Ci0gICAgR2V0VGV4dE1ldHJp
Y3MoZGMsICZ0bSk7Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9ICgodG0udG1QaXRjaEFuZEZh
bWlseSAmIFRNUEZfRklYRURfUElUQ0gpID09IDApOwotCi0gICAgUmVzdG9yZURDKGRjLCAtMSk7
Ci19Ci0KIEZsb2F0UmVjdCBGb250Ojpib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKIHsKICAgICBIV25kREMgaGRjKDApOwpJbmRleDogU291cmNlL2NtYWtlL09wdGlvbnNBcHBs
ZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNt
YWtlCShyZXZpc2lvbiAyNjY5MDMpCisrKyBTb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNt
YWtlCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiBlbHNlICgpCiAgICAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NBIE9OKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxE
KFVTRV9DRyBPTikKKyAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1QgT04pCiAKICAg
ICBzZXQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVf
RElSfSkKICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408513</attachid>
            <date>2020-09-10 22:06:37 -0700</date>
            <delta_ts>2020-09-10 22:28:09 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-216353-20200910220636.patch</filename>
            <type>text/plain</type>
            <size>213213</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmQ5M2M2MTQwZjA4ZDM0MTFjYzE4MzZmNWNkZGExNjRkNTllZDky
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBX
aW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bVVzZS5oOgorCiAyMDIwLTA5LTEwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgaGFyZHdhcmUgSlBFRyBkZWNvZGluZyBvbiB4ODYgTWFjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMGI1ZmNmNDdjYTRlZDgzMWJiMDE2Mjc5ZmZhN2ZjMzJiMTUwN2I0NC4uNDFkNGIyNDljYzQ4
MjhjYzBmNzRkMzdlMWI1MTdlM2JjZTRkMjlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMC0wOS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtXaW5dIE1pZ3JhdGUgdGhlIEFwcGxlIFdpbiBwb3J0J3MgZm9udCBjb2RlIHRv
IENvcmUgVGV4dCBmcm9tIENvcmUgR3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjM1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50
aGVzaXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1T
dXBwb3J0c0NvZGVQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGZvbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y2dGb250IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFp
bGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9u
dGFsR2x5cGhQb3NpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNl
TGV0dGVycHJlc3NFZmZlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBo
c1dpdGhBZHZhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5k
ZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3
R2x5cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5
Rm9udElzU3lzdGVtRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjppc1N5c3RlbUZvbnQpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RG
ZWF0dXJlU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFz
dFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFs
aXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hv
d0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5kZXJp
bmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZv
cm1EYXRhQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3lzdGVtRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9udCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1
YWxpdHlDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvYmplY3RG
b3JFcXVhbGl0eUNoZWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZmFtaWx5TmFtZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
R2x5cGhQYWdlQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FzY2FkZUNHV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZGV0ZXJtaW5lUGl0Y2gpOiBEZWxldGVkLgorCiAyMDIwLTA5LTEwICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBS
ZW5kZXJUaGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNzk1ZjQzZjQ0ODllMTdjZGNkY2EyOWRh
NGM5MjAyNWFhZDNkYjRmZC4uZjkzZjNkN2ZjNDAxMGEyNmZjMmNkYTE2MGE4YjM4MGMwOWU4ODFi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdy
YXRlIHRoZSBBcHBsZSBXaW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3Jl
IEdyYXBoaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTYzNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg6CisKIDIwMjAtMDktMTAgIEJlbiBOaGFt
ICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBoYXJkd2FyZSBKUEVHIGRlY29k
aW5nIG9uIHg4NiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCmluZGV4IGE2ZWJlNjcyZjRhOTU0YzMzMjI0
NzgwM2ZiZGFlMWM4MjgxYWZmZTIuLjkzYzI1YWE5N2VjNTQ4NTY4MGUxNzA3YzcwNThiMDg0NGYz
ZDg1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaApAQCAtNTQsNiArNTQsMTAgQEAKICNkZWZpbmUgVVNF
X0NHIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIFVTRV9DVCAxCisj
ZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2RlZmluZSBVU0VfQ0EgMQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4u
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCmluZGV4
IGQyOGIxNmI0Y2E4NDY4N2EzZmIxNWZkOWJhYjQwOWYzMzNmZWRmYTguLjkwZWU5Y2Y4NWE5OWU2
ZWFmZTg0MDJlYjc4MzNmMWM4ODNlYzg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCkBAIC00MiwyMiArNDIsMTIxIEBAIENUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250TmFtZUF0dHJpYnV0ZTsKIENUX0VYUE9SVCBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb3JlZ3JvdW5kQ29sb3JGcm9tQ29udGV4dEF0dHJpYnV0ZU5hbWU7
CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NUU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1l
OwogQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9rZUNvbG9yQXR0cmlidXRlTmFt
ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JJZGVudGlmaWVyS2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0
dXJlVHlwZVNlbGVjdG9yc0tleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBr
Q1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5n
UmVmIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJp
bmdSZWYga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmlu
Z1JlZiBrQ1RGb250VVJMQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtD
VEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGU7CiAKLS8vIFRoaXMgZW51bSBpcyBkZWZpbmVkIGlu
IENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIGl0IGhlcmUgaWYg
Q1RGb250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKKy8vIFRoZXNlIGVudW1zIGFyZSBkZWZp
bmVkIGluIENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIHRoZW0g
aGVyZSBpZiBDVEZvbnQuaCBoYXMgbm90IGJlZW4gaW5jbHVkZWQuIAogI2lmbmRlZiBfX0NURk9O
VF9fCit0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9udFN5bWJvbGljVHJhaXRzKSB7
CisgICAga0NURm9udFRyYWl0SXRhbGljID0gKDEgPDwgMCksCisgICAga0NURm9udFRyYWl0Qm9s
ZCA9ICgxIDw8IDEpLAorICAgIGtDVEZvbnRUcmFpdE1vbm9TcGFjZSA9ICgxIDw8IDEwKSwKKyAg
ICBrQ1RGb250VHJhaXRDb2xvckdseXBocyA9ICgxIDw8IDEzKSwKKworICAgIGtDVEZvbnRJdGFs
aWNUcmFpdCA9IGtDVEZvbnRUcmFpdEl0YWxpYywKKyAgICBrQ1RGb250Qm9sZFRyYWl0ID0ga0NU
Rm9udFRyYWl0Qm9sZCwKKyAgICBrQ1RGb250TW9ub1NwYWNlVHJhaXQgPSBrQ1RGb250VHJhaXRN
b25vU3BhY2UsCisgICAga0NURm9udENvbG9yR2x5cGhzVHJhaXQgPSBrQ1RGb250VHJhaXRDb2xv
ckdseXBocywKK307CisKIHR5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VGFibGVP
cHRpb25zKSB7CiAgICAga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zID0gMCwKICAgICBrQ1RG
b250VGFibGVPcHRpb25FeGNsdWRlU3ludGhldGljID0gKDEgPDwgMCkKIH07CisKK2VudW0gewor
ICAgIGtDVEZvbnRUYWJsZU1BVEggPSAnTUFUSCcsCisgICAga0NURm9udFRhYmxlT1MyICA9ICdP
Uy8yJywKKyAgICBrQ1RGb250VGFibGVWT1JHID0gJ1ZPUkcnLAorICAgIGtDVEZvbnRUYWJsZUhl
YWQgPSAnaGVhZCcsCisgICAga0NURm9udFRhYmxlVmhlYSA9ICd2aGVhJywKK307CisKK3R5cGVk
ZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VHJhbnNmb3JtT3B0aW9ucykgeworICAgIGtD
VEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKKyAgICBrQ1RGb250VHJhbnNm
b3JtQXBwbHlQb3NpdGlvbmluZyA9ICgxIDw8IDEpCit9OworCitlbnVtIHsKKyAgICBrTG93ZXJD
YXNlVHlwZSA9IDM3LAorICAgIGtVcHBlckNhc2VUeXBlID0gMzgsCit9OworCitlbnVtIHsKKyAg
ICBrRGVmYXVsdExvd2VyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrTG93ZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IgPSAxLAorICAgIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IgPSAyCit9Owor
CitlbnVtIHsKKyAgICBrRGVmYXVsdFVwcGVyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrVXBwZXJD
YXNlU21hbGxDYXBzU2VsZWN0b3IgPSAxLAorICAgIGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0
b3IgPSAyCit9OworCitlbnVtIHsKKyAgICBrUHJvcG9ydGlvbmFsVGV4dFNlbGVjdG9yID0gMCwK
KyAgICBrSGFsZldpZHRoVGV4dFNlbGVjdG9yID0gMiwKKyAgICBrVGhpcmRXaWR0aFRleHRTZWxl
Y3RvciA9IDMsCisgICAga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvciA9IDQsCit9OworCit0eXBl
ZGVmIENGX0VOVU0odWludDMyX3QsIENURm9udE9yaWVudGF0aW9uKQoreworICAgIGtDVEZvbnRP
cmllbnRhdGlvbkRlZmF1bHQgPSAwLAorICAgIGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwg
PSAxLAorICAgIGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsID0gMiwKK307CiAjZW5kaWYKIAor
dW5zaWduZWQgQ1RGb250R2V0VW5pdHNQZXJFbShDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRDYXBIZWlnaHQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0TGVhZGluZyhDVEZvbnRS
ZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRBc2NlbnQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250
R2V0RGVzY2VudChDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRYSGVpZ2h0KENURm9udFJl
Zik7CitDR0Zsb2F0IENURm9udEdldFVuZGVybGluZVBvc2l0aW9uKENURm9udFJlZik7CitDR0Zs
b2F0IENURm9udEdldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZv
bnRHZXRTaXplKENURm9udFJlZik7CitDVEZvbnRTeW1ib2xpY1RyYWl0cyBDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhDVEZvbnRSZWYpOworQ0ZDaGFyYWN0ZXJTZXRSZWYgQ1RGb250Q29weUNoYXJh
Y3RlclNldChDVEZvbnRSZWYpOworQ0ZTdHJpbmdSZWYgQ1RGb250Q29weUZhbWlseU5hbWUoQ1RG
b250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGdWxsTmFtZShDVEZvbnRSZWYpOworQ1RG
b250UmVmIENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhDVEZvbnRSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIG1hdHJpeCwgQ1RGb250RGVzY3JpcHRvclJl
ZiBhdHRyaWJ1dGVzKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoTmFtZShDRlN0cmluZ1Jl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RGb250UmVmIENU
Rm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoQ0dGb250UmVmLCBDR0Zsb2F0IHNpemUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiwgQ1RGb250RGVzY3JpcHRvclJlZiBhdHRyaWJ1dGVzKTsKK0NU
Rm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RMaW5lUmVmIENU
TGluZUNyZWF0ZVdpdGhBdHRyaWJ1dGVkU3RyaW5nKENGQXR0cmlidXRlZFN0cmluZ1JlZik7CiB2
b2lkIENUTGluZURyYXcoQ1RMaW5lUmVmLCBDR0NvbnRleHRSZWYpOwogQ0ZEYXRhUmVmIENURm9u
dENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZvbnRUYWJsZU9wdGlvbnMp
OwogQ0ZBcnJheVJlZiBDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKENURm9udFJlZiwgQ1RGb250
VGFibGVPcHRpb25zKTsKIENHUGF0aFJlZiBDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgoQ1RGb250
UmVmLCBDR0dseXBoLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwordm9pZCBDVEZvbnRHZXRW
ZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwg
Q0dTaXplIHRyYW5zbGF0aW9uc1tdLCBDRkluZGV4IGNvdW50KTsKK3ZvaWQgQ1RGb250RHJhd0ds
eXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludFtdLCBzaXplX3Qg
Y291bnQsIENHQ29udGV4dFJlZik7CitDR0FmZmluZVRyYW5zZm9ybSBDVEZvbnRHZXRNYXRyaXgo
Q1RGb250UmVmKTsKK0NGQXJyYXlSZWYgQ1RGb250Q29weUZlYXR1cmVzKENURm9udFJlZik7CitD
RlR5cGVSZWYgQ1RGb250Q29weUF0dHJpYnV0ZShDVEZvbnRSZWYsIENGU3RyaW5nUmVmKTsKK0NU
Rm9udERlc2NyaXB0b3JSZWYgQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKENURm9udFJlZik7Citi
b29sIENURm9udFRyYW5zZm9ybUdseXBocyhDVEZvbnRSZWYsIENHR2x5cGhbXSwgQ0dTaXplIGFk
dmFuY2VzW10sIENGSW5kZXggY291bnQsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpOworQ0dSZWN0
IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRPcmllbnRh
dGlvbiwgY29uc3QgQ0dHbHlwaFtdLCBDR1JlY3QgYm91bmRpbmdSZWN0c1tdLCBDRkluZGV4IGNv
dW50KTsKK2RvdWJsZSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhDVEZvbnRSZWYsIENURm9u
dE9yaWVudGF0aW9uLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4
IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYsIGNv
bnN0IFVuaUNoYXJbXSwgQ0dHbHlwaFtdLCBDRkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0
R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UoQ1RGb250UmVmLCBDR0dseXBoW10sIENGUmFuZ2UpOwor
Q0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZv
bnRUYWJsZU9wdGlvbnMpOworYm9vbCBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3Rl
cnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhbXSwgQ0ZJbmRleCBjb3VudCk7
CisKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1
dGVzKENGRGljdGlvbmFyeVJlZik7Citib29sIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9u
dChDVEZvbnREZXNjcmlwdG9yUmVmKTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3Jp
cHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlN0cmluZ1JlZiwgQ0dGbG9hdCk7CiAKIFdURl9F
WFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZDk0
ZmQ2OWNkN2VkZWNhM2M4NjA2MWFmMzIwYWJiY2FiMjhjODAzZi4uMmMzNzUxMTQ3N2ZmODI1YjFj
M2JhMmNiYmI1ZWY0MTNkNWNlYTcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCkBAIC0xNTAsMTQgKzE1MCwxNyBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0
YUNvcmVUZXh0LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3Jl
VGV4dC5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAogCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCiAKICAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXgg
YmIyMTdiYjNkNDZlOWMwZmU1NjkwMzMzOThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2
YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3YTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAg
LTMwNiw3ICszMDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0KKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMy
MSw2ICszMjEsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdQVUxheWVyLm1tCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNv
cmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDcyNjA0MTE5MjI0MDVhZmQwYmJiNTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4
MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVlZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMzQ3LDcgKzM0Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR1BVTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRl
V2ViTS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlw
aFBhZ2VDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNz
aW9uVlQubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0Zsb2F0U2l6ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1
Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVmNDMwNTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMz
ZjU0NTFkODBiMTU5N2NjMGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBF
MUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzZCOTVERDIyQzg1OEE0MDBFNkYxNEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1
bmN0aW9uTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFy
eUZ1bmN0aW9uTWFwLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1
MEEyOTREMDBENkU5MjAgLyogRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDNkZEOEFEMjUwQTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2Fz
Y2FkZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5
MjAgLyogRm9udENvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTky
MCAvKiBGb250Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1
NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3Bl
Y3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYg
QEAKIAkJN0M0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0
UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFi
bGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M0Qzk2REIxQUQ0NDgzNTAwMzYzNTcyIC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVh
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcx
MEYgLyogQ29sb3JDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYg
LyogQ29sb3JDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0
QjZCRiAvKiBET01Qcm9taXNlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJ
CUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAw
MzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQlu
YW1lID0gSW5zcGVjdG9yOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2
RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8qIGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRD
b3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0
Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8q
IEdseXBoUGFnZUNvcmVUZXh0LmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyog
aW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI1ODE3LDcgKzI1ODMxLDYgQEAKIAkJCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplTWFjLm1tICovLAogCQkJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKIAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0
RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovLAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAv
KiBJY29uTWFjLm1tICovLAogCQkJCUIyNzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1h
Yy5tbSAqLywKIAkJCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0g
Ki8sCkBAIC0yNTg0NCw2ICsyNTg1Nyw3IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQw
IC8qIGNvY29hICovLAogCQkJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2Ug
Ki8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhB
QTI1MEEyOTI0MDBENkU5MjAgLyogY3QgKi8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2
IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMg
Ki8sCiAJCQkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIw
NCw3ICsyNjIxOCw3IEBACiAJCQkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNo
ZUNvcmVUZXh0LmNwcCAqLywKIAkJCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENh
Y2hlQ29yZVRleHQuaCAqLywKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENh
c2NhZGVDb2NvYS5tbSAqLywKLQkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovLAorCQkJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3Bw
ICovLAogCQkJCTFDMTJBQzJDMUVFNzc5OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2Nv
YS5jcHAgKi8sCiAJCQkJMUMxMkFDMjgxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uQ29yZVRleHQuY3BwICovLAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAv
KiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDZlZjk3ODkyN2MzMDI0OTEyN2RmNWNiZDRl
OWE1NWE4NzhkNDQ5YzMuLjY5NmZmMzlmMWExM2QxNDE4OTk0MzIxMWJmMWNjNmZlNTgyMDRiMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC00NzQsNyAr
NDc0LDcgQEAgY29uc3QgRm9udCYgRm9udDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiAg
ICAgcmV0dXJuICpkZXJpdmVkRm9udERhdGEuYnJva2VuSWRlb2dyYXBoRm9udDsKIH0KIAotI2lm
ICFQTEFURk9STShDT0NPQSkKKyNpZiAhVVNFKENUKQogCiBib29sIEZvbnQ6OmlzUHJvYmFibHlP
bmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAogewpAQCAtNTExLDcgKzUxMSw3IEBAIFJlZlB0
cjxGb250PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hCiAgICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChm
b250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkK
KyNpZiAhVVNFKENUKQogdm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdW
aWV3LCBUZXh0RGlyZWN0aW9uKSBjb25zdAogewogfQpAQCAtNjMzLDI3ICs2MzMsNiBAQCB2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKICAgICB9CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCi1ib29sIEZvbnQ6OnZhcmlhbnRDYXBz
U3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50
Q2FwcywgVUNoYXIzMikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3Rl
ciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAotewotICAgIHJldHVybiB2YXJp
YXRpb24gPyBmYWxzZSA6IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci19Ci0jZW5kaWYK
LQogYm9vbCBGb250OjpzdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QK
IHsKICAgICAvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBzdGF0aWNfY2FzdDxib29sPihnbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCmluZGV4IDdhYjUzMTdhYjEyNGVmMjZlNDEyOTY1M2Q2M2Y5ZjY3MzQ3NWEyMzcuLjM4
MmZlYjZjNTExODc2NzdiZGMyNmU3YWRkZjU4YTVmYTg5YWRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBGb250VmFyaWFu
dCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNp
c01hcmtWYXIKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxl
UGl0Y2ggfTsKIGVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFll
cyB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBmb250SGFzVGFi
bGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0YWJsZVRhZyk7CiBib29sIGZvbnRIYXNFaXRoZXJUYWJs
ZShDVEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCmluZGV4IDMyNDMwYTZiNTU0NDk5MGNkYTdiNzYzYWZmOGUwMzYwY2ZjYjNlMzYuLjMxZGNm
OTI5ODdiNjc2NTg1NzAyNDgwZjEzN2I0MTg3ZDJhZjNlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTU5NSw3ICs1OTUsNyBA
QCBib29sIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKQogICAgIHJldHVybiBzaG91
bGRVc2VGb250U21vb3RoaW5nOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0Uo
Q1QpCiBib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjQ1LDIxICsxNjQ1LDYgQEAgaW50IEZvbnRDYXNj
YWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm8KICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBp
bmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0Uo
SEFSRkJVWlopCi0vLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGlt
cGxlbWVudGF0aW9uLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6ZV90IGJhc2VDaGFy
YWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJM
ZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2Us
IE5vcm1hbFZhcmlhbnQpOwotCi0gICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBo
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250OwotfQotI2VuZGlmCi0KIHN0cnVjdCBHbHlwaEl0ZXJhdGlvblN0YXRlIHsKICAg
ICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRl
eCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDExZWU5Li5kZDc4OWQ0MjY5Njg5
MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgxLDExIEBAIHN0cnVjdCBHbHlw
aE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBmYWxzZSB9OwogfTsKIAorI2lm
IFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBDR0dseXBo
KiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOwordm9pZCBmaWxsVmVj
dG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9z
aXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRlciB7CiBwdWJsaWM6CiAgICAg
dm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZDRiYzJh
NGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uOWVmMTIyY2JiZDRjNGY3YjFmYzAw
NzI5Njg2ZDNjZDU5MWE2YzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTUyLDE1ICs1Miw2IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpCiB7CiB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JNKFdJTikK
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGNnRm9udCwgZmxv
YXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRl
eHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0
YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lk
dGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBtX2NnRm9udCA9IGNnRm9udDsK
LSAgICBBU1NFUlQobV9jZ0ZvbnQpOwotfQotI2VuZGlmCi0KICNpZiAhVVNFKEZSRUVUWVBFKQog
Rm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKIHsKQEAgLTg0LDcgKzc1LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRh
OjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSwKIH0KICNlbmRp
ZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiAKIFN0cmluZyBGb250UGxh
dGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlh
OTY0NGIxMzFjNTM2ZTIwYmIwOGE0YzA0ZGFjLi41Njk5NGE4OTI0ZWJkMWYyZDI1ZDNiZjI3ZTlk
ZDcyYWMwNmY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KQEAgLTQ5LDcgKzQ5LDcg
QEAKIE9CSkNfQ0xBU1MgTlNGb250OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBVU0UoQ1QpCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2Vu
ZGlmCiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9u
dE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyk7CiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShD
VEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5
bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxh
cldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJl
bmRlcmluZyk7CiAjZW5kaWYKIApAQCAtOTAsMTYgKzkwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdp
dGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCk7CiAKLSNpZiBVU0UoQ0cpICYm
IFBMQVRGT1JNKFdJTikKLSAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShXSU4pCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9v
bCB1c2VHREkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLSAgICBG
b250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsK
KyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdESU9i
amVjdDxIRk9OVD4sIENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCkBAIC0xMTUsMTEgKzExMSwxMSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udCA/IG1fZm9udC0+Z2V0KCkgOiAwOyB9CisgICAgSEZPTlQgaGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2hGb250ID8gbV9oRm9udC0+Z2V0KCkgOiAwOyB9CiAgICAgYm9vbCB1c2VH
REkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgQ1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnQuZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBDVEZvbnRSZWYgcmVnaXN0ZXJlZEZv
bnQoKSBjb25zdDsgLy8gUmV0dXJucyBudWxscHRyIGlmZiB0aGUgZm9udCBpcyBub3QgcmVnaXN0
ZXJlZCwgc3VjaCBhcyB3ZWIgZm9udHMgKG90aGVyd2lzZSByZXR1cm5zIGZvbnQoKSkuCiAKQEAg
LTEzNiwxMCArMTMyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNWYXJpYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWYXJpYXRpb25zOyB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JN
KFdJTikKLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0
KCk7IH0KLSNlbmRpZgotCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIElEV3JpdGVGb250KiBkd0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5nZXQoKTsgfQogICAgIElEV3JpdGVGb250RmFj
ZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQpAQCAt
MjIyLDE2ICsyMTQsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkU2NhbGVkRm9udChjYWly
b19mb250X2ZhY2VfdCopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2Ygb25lIG9mIHRoZXNlLiBUaGVzZSB0d28gZm9u
dHMgYXJlIHN1YnRseSBkaWZmZXJlbnQsIGFuZCBpdCBpcyBub3Qgb2J2aW91cyB3aGljaCBvbmUg
dG8gdXNlIHdoZXJlLgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fZm9udDsKICAgICBtdXRh
YmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIFJlZlB0cjxTaGFyZWRHRElPYmplY3Q8SEZPTlQ+PiBtX2ZvbnQ7CiAjZW5kaWYKIAotI2lm
IFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dG
b250OworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05U
Pj4gbV9oRm9udDsKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQpAQCAtMjc2LDcgKzI2Niw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiBib29sIGlzU3lzdGVtRm9udChDVEZvbnRSZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRmNTguLjNk
NjMyOGNiMWMwMzFhNTdmMTNhNTA0MWFhYWJiMmUyYjY1NjMyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtMjMsMTkgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVmZmVyLmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3QuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQUEtJVCkK
LSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJS2l0
U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszNyw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3JlVUksIENV
SVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQg
PSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDcsNyBAQCBib29sIEZvbnRDYXNj
YWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0g
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tp
IC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAx
XS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNb
aSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0LnRleHRE
cmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQm
IGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZh
bmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3ND
b250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAg
ICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzk5LDQgQEAgc3RhdGljIHZvaWQgc2hvd0xldHRl
cnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEYKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Nv
bnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotCi0g
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURh
dGEoKTsKLSAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOwotICAgIGlm
IChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
KSB7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEsIDAsIDAsIDApOwotICAgICAgICBDR0FmZmluZVRy
YW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKLSAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVuTWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRyYW5zZm9ybSk7Ci0gICAgICAgIFNjb3BlZFRleHRN
YXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4LCBjb250ZXh0KTsKLQotICAgICAgICBWZWN0b3I8
Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7Ci0gICAgICAgIENURm9udEdldFZlcnRp
Y2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0
cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7Ci0KLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJp
eChjb250ZXh0KSk7Ci0KLSAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dy
YXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBD
R1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlv
bnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICAgICAgcG9zaXRpb25zW2ldID0g
Q0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFu
c2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9y
bSk7Ci0gICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOwotICAgICAg
ICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNlc1tpXS5oZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRp
b25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxW
ZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2
YW5jZXMsIGNvdW50KTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RG
b250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250
ZXh0LCB0cnVlKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBD
R0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKLSAgICBib29sIGlzVHJhbnNsYXRpb25PckludGVn
cmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6Omlz
SW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5kKSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5m
ICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAwLmY7Ci0gICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNv
bnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNm
b3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5kKSk7Ci0gICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRp
emF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBj
b250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpKTsKLQotICAgIENHQ29udGV4dFNl
dFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIHRydWUpOwotICAgIENHQ29u
dGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxR
dWFudGl6YXRpb24pOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewot
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
LQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICBib29sIHNob3VsZFNtb290
aEZvbnRzID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkp
Ci0gICAgICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7
Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdN
b2RlOjpBbnRpYWxpYXNlZDoKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoK
LSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAg
ICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gZmFs
c2U7Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGlmICghc2hvdWxkVXNlU21vb3RoaW5nKCkpCi0gICAgICAgIHNob3VsZFNt
b290aEZvbnRzID0gZmFsc2U7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyA9IENHQ29udGV4dEdldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCk7Ci0gICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFs
U2hvdWxkVXNlRm9udFNtb290aGluZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3Ro
Rm9udHMoY2dDb250ZXh0LCBzaG91bGRTbW9vdGhGb250cyk7Ci0jZW5kaWYKLQotICAgIGJvb2wg
b3JpZ2luYWxTaG91bGRBbnRpYWxpYXMgPSBDR0NvbnRleHRHZXRTaG91bGRBbnRpYWxpYXMoY2dD
b250ZXh0KTsKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFs
aWFzKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBzaG91
bGRBbnRpYWxpYXMpOwotCi0gICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3VsZFVz
ZUxldHRlcnByZXNzRWZmZWN0KGNvbnRleHQpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNo
b3JQb2ludDsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNm
b3JtSWRlbnRpdHk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkK
LSAgICAgICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOwot
ICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwotICAg
IGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBm
bG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0
IC8gMTgwKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkKLSAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywg
MCwgMSwgMCwgMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEs
IC1vYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlKDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOwotICAgIH0KLSAgICBTY29wZWRU
ZXh0TWF0cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKLQotICAgIHNldENHRm9udFJl
bmRlcmluZ01vZGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0
LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0g
ICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0
LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKLSAgICBmbG9h
dCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAg
aWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNs
YXRpb25PckZsaXBwZWQoKSkgewotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXpl
SW5EZXZpY2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKLSAg
ICAgICAgZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhv
cml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNp
emVJbkRldmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhl
bHMuaGVpZ2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7
Ci0gICAgICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7Ci0gICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxv
dyB1cCB0aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4gCi0gICAgICAgICAgICBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9mZnNldCwgc3ludGhldGljQm9sZE9m
ZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01v
ZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYm
ICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxl
IHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBh
dm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBjb250ZXh0LmNsZWFy
U2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7
Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1Rl
eHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElmIHNo
YWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRo
ZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZs
b2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBm
b250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1Rl
eHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51
bUdseXBocyk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0gICAg
fQotCi0gICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQotICAgICAgICBzaG93TGV0dGVycHJl
c3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLQotICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGlu
ZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmln
aW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOwotI2VuZGlmCi0KLSAgICBpZiAoc2hvdWxkQW50
aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQotICAgICAgICBDR0NvbnRleHRTZXRT
aG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Ci19Ci0K
LWJvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKLXsKLSAg
ICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIGlzU3lz
dGVtRm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Ci19Ci0KLS8vIEZJWE1F
OiBVc2UgdGhpcyBvbiBhbGwgcG9ydHMuCi1jb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKSBjb25zdAotewotICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKLSAgICBzaXpl
X3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7Ci0gICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFz
ZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLQotICAgIEdseXBoRGF0
YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsKLQotICAgIGlmICghYmFzZUNoYXJhY3Rlckds
eXBoRGF0YS5nbHlwaCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobGVuZ3Ro
ID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnQ7Ci0KLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSku
Zm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250KQotICAg
ICAgICAgICAgY29udGludWU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYg
KGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZv
bnQtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQotICAgICAgICAgICAgY29udGludWU7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkp
Ci0gICAgICAgICAgICAgICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0
aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGgg
PSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlw
aERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZv
bnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVw
cmlnaHRGb250ID0gZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAgICAg
ICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJh
c2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJp
Z2h0Rm9udDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb250ID09
IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkKLSAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJh
Y3RlckZvbnQgPSB0cnVlOwotCi0gICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJu
IGZvbnQ7Ci0gICAgfQotCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VD
aGFyYWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0g
ICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICByZXR1cm4g
Rm9udDo6c3lzdGVtRmFsbGJhY2soKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmEyYTM5
Y2ExYjE5MDllOTlkMGIwYjNlYWYzYjBhZTYyODcxYTc3OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkZvbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OnBsYXRmb3JtRGVz
dHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTg5YmUxZDRmMzk1MjMyNTMzMDU2NDUwZjdiYzgyYTQ5MzIxM2Ez
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIC9kZXYvbnVs
bApAQCAtMSw3NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIkZvbnQuaCIKLQotI2ltcG9ydCAiQ29sb3IuaCIKLSNpbXBvcnQgIkZsb2F0UmVj
dC5oIgotI2ltcG9ydCAiRm9udENhY2hlLmgiCi0jaW1wb3J0ICJGb250Q2FzY2FkZS5oIgotI2lt
cG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgotI2ltcG9y
dCAiT3BlblR5cGVDRy5oIgotI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0IDxDb3Jl
VGV4dC9Db3JlVGV4dC5oPgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+
Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci0jaWYgVVNFKEFQUEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotCi0K
LSNpZiBVU0UoQVBQS0lUKQotQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkK
LS0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0
cmluZ1JlZiBhLCBDRlN0cmluZ1JlZiBiKQotewotICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29t
cGFyZShhLCBiLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxU
bzsKLX0KLQotc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBmb250
KQotewotICAgIHJldHVybiBmb250SGFzRWl0aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxlVmhl
YSwga0NURm9udFRhYmxlVk9SRyk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotYm9v
bCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1p
bHlOYW1lKQotewotICAgIGlmICghZm9udEZhbWlseU5hbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFRpbWVzIE5ldyBSb21hbiBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3JtYW50
IGVub3VnaCB0byB1c2UuIDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMyNj4KLSAgICAvLyBGSVhNRSA8
cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFi
b3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGlt
ZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
LSAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWlseU5h
bWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtM
aW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOwotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1
c3RtZW50KENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFt
aWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOwotCi0gICAgaWYg
KCFmYW1pbHlOYW1lIHx8ICFDRlN0cmluZ0dldExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIlRpbWVzIikpCi0gICAgICAgIHx8IGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhlbHZldGljYSIpKQotICAgICAg
ICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIuSGVs
dmV0aWNhIE5ldWVVSSIpKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgbmVlZHNBc2NlbnRB
ZGp1c3RtZW50KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5h
bWUgJiYgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVzIikp
Ci0gICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkhl
bHZldGljYSIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUs
IENGU1RSKCJDb3VyaWVyIikpKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGlzQWhlbUZv
bnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkKLXsKLSAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJBaGVtIikpOwotfQotCi1i
b29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykKLXsK
LSAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhj
dEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmICghdGFibGVUYWdz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5
R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBp
bmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewotICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19j
YXN0PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOwotICAgICAgICBpZiAodGFn
ID09IHRhYmxlVGFnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwg
dW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpCi17Ci0gICAgYXV0byB0YWJs
ZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250
VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxl
VGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJs
ZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJs
ZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
dGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZzEg
fHwgdGFnID09IHRhYmxlVGFnMikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDI0
LjBmKSA6IDAuZjsKLSNlbHNlCi0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSNlbmRpZgotCi0gICAgdW5zaWdu
ZWQgdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuZm9udCgp
KTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgQ0dG
bG9hdCBjYXBIZWlnaHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9y
bURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBsaW5lR2FwID0gcG9pbnRTaXplID8gQ1RG
b250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLSAgICBDR0Zsb2F0IGFz
Y2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkp
IDogMDsKLSAgICBDR0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXREZXNjZW50
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotCi0gICAgLy8gVGhlIE9wZW4gRm9udCBGb3Jt
YXQgZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgot
ICAgIC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8yLnNU
eXBvQXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBhcyBh
IHZhbHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKLSAgICAvLyBP
biBPUyBYLCB3ZSBvbmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1wb3J0YW50IGNhc2Ugb2Yg
Zm9udHMgd2l0aCBhIE1BVEggdGFibGUuCi0gICAgaWYgKGZvbnRIYXNUYWJsZShtX3BsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwga0NURm9udFRhYmxlTUFUSCkpIHsKLSAgICAgICAgc2hvcnQgdHlwb0Fz
Y2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwOwotICAgICAgICBpZiAoT3BlblR5cGU6OnRy
eUdldFR5cG9NZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlwb0FzY2VudCwgdHlwb0Rl
c2NlbnQsIHR5cG9MaW5lR2FwKSkgewotICAgICAgICAgICAgYXNjZW50ID0gc2NhbGVFbVRvVW5p
dHModHlwb0FzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBkZXNj
ZW50ID0gLXNjYWxlRW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLSAgICAgICAgICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0eXBvTGluZUdhcCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGZhbWls
eU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkpOwotCi0gICAgLy8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiByZW5kZXJpbmcgd2l0aCBB
aGVtIGJlY2F1c2UgbWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCi0gICAgaWYgKGlzQWhlbUZvbnQo
ZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIG1fYWxsb3dzQW50aWFsaWFzaW5nID0gZmFsc2U7
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgVGltZXMsIEhl
bHZldGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUKLSAgICAvLyB2ZXJ0aWNh
bCBtZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMgdGhhdCBhcmUgdGhlIGRl
IGZhY3RvCi0gICAgLy8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFkanVzdG1lbnQgb2YgMjAl
IGlzIHRvbyBiaWcgYW5kIGlzCi0gICAgLy8gaW5jb3JyZWN0bHkgYWRkZWQgdG8gbGluZSBzcGFj
aW5nLCBzbyB3ZSB1c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIGFkZCBp
dCB0byB0aGUgYXNjZW50LgotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsICYmIG5l
ZWRzQXNjZW50QWRqdXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgYXNjZW50ICs9
IHN0ZDo6cm91bmQoKGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOwotI2VuZGlmCi0KLSAgICAv
LyBDb21wdXRlIGxpbmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUg
YXBwbGllZC4KLSAgICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYoYXNjZW50KSArIGxyb3Vu
ZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0
ZXh0IHVuZGVybGluZXMuCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAgaWYg
KGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1lICYmIENGU3RyaW5nSGFz
UHJlZml4KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIpKSkgewotICAgICAgICBs
aW5lR2FwIC09IDMgLSBkZXNjZW50OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0jZW5k
aWYKLSAgICAKLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAg
ICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCkpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBDR0Zsb2F0
IGFkanVzdG1lbnQgPSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkg
PyBjZWlsKChhc2NlbnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRqdXN0bWVudCkgOiAwOwot
Ci0gICAgbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOwotICAgIGxpbmVTcGFjaW5nID0gY2VpbChh
c2NlbnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5lR2FwOwotICAgIGFzY2Vu
dCA9IGNlaWxmKGFzY2VudCArIGFkanVzdG1lbnQpOwotICAgIGRlc2NlbnQgPSBjZWlsZihkZXNj
ZW50KTsKLQotICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3Vs
ZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ0dG
bG9hdCB4SGVpZ2h0ID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAg
ICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
SG9yaXpvbnRhbCkgewotICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3Rl
ciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFz
ZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQg
dG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRo
ZSBiYXNlbGluZS4KLSAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVy
KCd4Jyk7Ci0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIHhIZWlnaHQg
PSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZvbnRHZXRYSGVpZ2h0KG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeEhlaWdo
dCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0cmljcygpLnhIZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2Fw
SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lUG9z
aXRpb24oLUNURm9udEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNzKENURm9udEdldFVuZGVy
bGluZVRoaWNrbmVzcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLX0KLQotdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICBt
X21heENoYXJXaWR0aCA9IDA7Ci0KLSAgICBhdXRvIG9zMlRhYmxlID0gYWRvcHRDRihDVEZvbnRD
b3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVPUzIsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5n
dGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKLSAgICAgICAgY29uc3QgVUludDgqIG9zMiA9IENG
RGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwotICAgICAgICBTSW50MTYgb3MyQXZnQ2hh
cldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9
IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVt
KCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIGF1dG8gaGVhZFRhYmxl
ID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250
VGFibGVIZWFkLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoaGVhZFRh
YmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7Ci0gICAgICAg
IGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOwot
ICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwotICAgICAg
ICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOwotICAgICAgICBTSW50
MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOwotICAgICAgICBTSW50MTYgeE1h
eCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOwotICAgICAgICBmbG9hdCBkaWZmID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBz
Y2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRm
b3JtRGF0YS5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0
Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBh
cmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLXZvaWQgRm9udDo6
cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRz
Q2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBU
QVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCi0gICAgR2x5cGggZ2x5cGggPSBnbHlwaEZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmICghZ2x5cGgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OlNtYWxsOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5U21hbGxDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5
cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpQZXRpdGU6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVk
QnlQZXRpdGVDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGgg
JiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBz
OjpBbGxTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBo
ICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0
ZWQgYWJvdmUuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGNoYXJhY3Rlcik7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2Fw
cyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQ
TEFURk9STShNQUMpCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBz
T3BlblR5cGVEaWN0aW9uYXJ5KENGU3RyaW5nUmVmIGtleSwgaW50IHJhd1ZhbHVlKQotewotICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gdmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOwotICAgIENG
VHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRPcGVu
VHlwZUZlYXR1cmVWYWx1ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2YWx1
ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc1Ry
dWVUeXBlRGljdGlvbmFyeShpbnQgcmF3S2V5LCBpbnQgcmF3VmFsdWUpCi17Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBrZXkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdLZXkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1td
ID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVyZVNlbGVj
dG9ySWRlbnRpZmllcktleSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LmdldCgp
LCB2YWx1ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyks
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKLX0KLQotc3RhdGljIHZvaWQgdW5pb25CaXRWZWN0b3JzKEJpdFZlY3RvciYg
cmVzdWx0LCBDRkJpdFZlY3RvclJlZiBzb3VyY2UpCi17Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBD
RkJpdFZlY3RvckdldENvdW50KHNvdXJjZSk7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUobGVuZ3Ro
KTsKLSAgICBDRkluZGV4IG1pbiA9IDA7Ci0gICAgd2hpbGUgKG1pbiA8IGxlbmd0aCkgewotICAg
ICAgICBDRkluZGV4IG5leHRJbmRleCA9IENGQml0VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0KHNv
dXJjZSwgQ0ZSYW5nZU1ha2UobWluLCBsZW5ndGggLSBtaW4pLCAxKTsKLSAgICAgICAgaWYgKG5l
eHRJbmRleCA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXN1
bHQuc2V0KG5leHRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIG1pbiA9IG5leHRJbmRleCArIDE7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU3RyaW5nUmVm
IGZlYXR1cmUsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292
ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShmZWF0dXJl
LCAxKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGluamVjdFRydWVUeXBlQ292ZXJhZ2UoaW50IHR5cGUsIGludCBz
ZWxlY3RvciwgQ1RGb250UmVmIGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQotewotICAgIFJldGFp
blB0cjxDRkJpdFZlY3RvclJlZj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3Zl
cmFnZUZvckZlYXR1cmUoZm9udCwgc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUsIHNl
bGVjdG9yKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQo
KSk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENh
cHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcykgewot
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAg
ICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBp
bmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxs
Q2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFs
bENhcHMudmFsdWUoKTsKLX0KLQotY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsU21hbGxDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMg
PSBCaXRWZWN0b3IoKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21j
cCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMyc2Mi
KSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
LnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBl
LCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1
ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9y
LCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMu
dmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVk
QnlQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRp
dGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzID0gQml0VmVj
dG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxh
dGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgp
KTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2Vy
Q2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhz
U3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9u
dDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBl
Q292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVD
b3ZlcmFnZShDRlNUUigiYzJwYyIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNv
dmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0
Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVl
KCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBlckNhc2VUeXBlLCBrVXBw
ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhz
U3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKTsKLX0KLSNlbmRpZgotCi1zdGF0
aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9h
dCBzaXplLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIENURm9udFN5bWJvbGljVHJhaXRz
IGZvbnRUcmFpdHMsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCi17
Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChzeW50
aGV0aWNCb2xkKQotICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7Ci0gICAg
aWYgKHN5bnRoZXRpY0l0YWxpYykKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGlj
VHJhaXQ7Ci0KLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7Ci0KLSAgICBib29sIHVzZWRTeW50aGV0aWNCb2xk
ID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMg
JiBrQ1RGb250VHJhaXRCb2xkKTsKLSAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZv
bnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShm
b250LCBzaXplLCB1c2VkU3ludGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVu
dGF0aW9uKTsKLQotICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNPcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtD
VEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1
cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1RydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKLXsKLSAgICByZXR1
cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRl
bnRpZmllcktleSkgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFs
PENGU3RyaW5nUmVmPiBvcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17
Ci0gICAgQVNTRVJUKGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKLSAgICBDRlN0cmluZ1Jl
ZiB0YWcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgIGludCByYXdWYWx1ZTsKLSAg
ICBDRk51bWJlclJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpKTsKLSAgICBh
dXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3VmFsdWUpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgcmV0
dXJuIHJhd1ZhbHVlID8gT3B0aW9uYWw8Q0ZTdHJpbmdSZWY+KHRhZykgOiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpwYWlyPGludCwgaW50PiB0cnVlVHlwZUZlYXR1cmUo
Q0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0dXJl
KGZlYXR1cmUpKTsKLSAgICBpbnQgcmF3VHlwZTsKLSAgICBDRk51bWJlclJlZiB0eXBlID0gc3Rh
dGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJl
ckdldFZhbHVlKHR5cGUsIGtDRk51bWJlckludFR5cGUsICZyYXdUeXBlKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGludCByYXdTZWxlY3RvcjsKLSAgICBDRk51
bWJlclJlZiBzZWxlY3RvciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwot
ICAgIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmF3U2VsZWN0b3IpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhd1R5cGUsIHJhd1NlbGVjdG9yKTsKLX0KLQotc3Rh
dGljIGlubGluZSBDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUo
aW50IGtleSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZl
YXR1cmVzID0gYWRvcHRDRihDVEZvbnRDb3B5RmVhdHVyZXMoZm9udCkpOwotICAgIENGSW5kZXgg
ZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAgICAgICBDRkRpY3Rp
b25hcnlSZWYgZmVhdHVyZVR5cGUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgQ0ZOdW1iZXJS
ZWYgZmVhdHVyZUtleSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAg
ICAgICBpZiAoIWZlYXR1cmVLZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50
IHJhd0ZlYXR1cmVLZXk7Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUoZmVhdHVyZUtleSwga0NG
TnVtYmVySW50VHlwZSwgJnJhd0ZlYXR1cmVLZXkpOwotICAgICAgICBpZiAocmF3RmVhdHVyZUtl
eSAhPSBrZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRkFycmF5UmVmIGZl
YXR1cmVTZWxlY3RvcnMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlU2VsZWN0b3JzS2V5KSk7Ci0gICAg
ICAgIGlmICghZmVhdHVyZVNlbGVjdG9ycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBDRkluZGV4IHNlbGVjdG9yc0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVTZWxlY3Rv
cnMpOwotICAgICAgICBmb3IgKENGSW5kZXggaiA9IDA7IGogPCBzZWxlY3RvcnNDb3VudDsgKytq
KSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVNlbGVjdG9yID0gc3RhdGlj
X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVTZWxl
Y3RvcnMsIGopKTsKLSAgICAgICAgICAgIENGTnVtYmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JEZWZhdWx0S2V5KSk7Ci0gICAgICAgICAgICBpZiAoIWlzRGVm
YXVsdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCByYXdJc0Rl
ZmF1bHQ7Ci0gICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKGlzRGVmYXVsdCwga0NGTnVtYmVy
SW50VHlwZSwgJnJhd0lzRGVmYXVsdCk7Ci0gICAgICAgICAgICBpZiAoIXJhd0lzRGVmYXVsdCkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHJlbW92ZWRGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRSZWYg
Zm9udCkKLXsKLSAgICBib29sIGlzT3BlblR5cGUgPSBpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJl
KTsKLSAgICBib29sIGlzVHJ1ZVR5cGUgPSBpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAg
ICBpZiAoIWlzT3BlblR5cGUgJiYgIWlzVHJ1ZVR5cGUpCi0gICAgICAgIHJldHVybiBmZWF0dXJl
OyAvLyBXZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgZm9udCBmb3JtYXQuCi0gICAgUmV0YWluUHRy
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgaWYgKGlz
T3BlblR5cGUpIHsKLSAgICAgICAgYXV0byBmZWF0dXJlVGFnID0gb3BlblR5cGVGZWF0dXJlKGZl
YXR1cmUpOwotICAgICAgICBpZiAoZmVhdHVyZVRhZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFnLnZh
bHVlKCksIENGU1RSKCJzbWNwIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcu
dmFsdWUoKSwgQ0ZTVFIoImMyc2MiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRh
Zy52YWx1ZSgpLCBDRlNUUigicGNhcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJl
VGFnLnZhbHVlKCksIENGU1RSKCJjMnBjIikpKSkgewotICAgICAgICAgICAgaW50IHJhd1plcm8g
PSAwOwotICAgICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3
WmVybykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBr
Q1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBmZWF0dXJlVGFnLnZhbHVlKCkpOwotICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0
dXJlVmFsdWUsIHplcm8uZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZv
bnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlz
VHJ1ZVR5cGUpIHsKLSAgICAgICAgYXV0byB0cnVlVHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5cGVG
ZWF0dXJlKGZlYXR1cmUpOwotICAgICAgICBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9
PSBrTG93ZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2Vy
Q2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtM
b3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZh
dWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQotICAg
ICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtVcHBlckNhc2VUeXBl
ICYmICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBzU2Vs
ZWN0b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0ZUNh
cHNTZWxlY3RvcikpIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5n
ZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAg
ICAgaWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRy
dWVUeXBlRmVhdHVyZShrVXBwZXJDYXNlVHlwZSwgZm9udCkpCi0gICAgICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRl
bnRpZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJl
U2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBD
RkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRp
ZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJs
ZUZlYXR1cmVzKENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBm
ZWF0dXJlcyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0dHJp
YnV0ZShmb250LCBrQ1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlKSkpOwotICAgIGlmICgh
ZmVhdHVyZXMpCi0gICAgICAgIHJldHVybiBmb250OwotICAgIENGSW5kZXggZmVhdHVyZUNvdW50
ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRh
YmxlQXJyYXlSZWY+IG5ld0ZlYXR1cmVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBmZWF0dXJlQ291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAg
ICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOwotICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUobmV3RmVhdHVyZXMuZ2V0KCksIHJlbW92ZWRGZWF0dXJlKGZlYXR1
cmUsIGZvbnQpLmdldCgpKTsKLSAgICB9Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9u
dEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsg
bmV3RmVhdHVyZXMuZ2V0KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRy
aWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgUmV0
YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENURm9u
dEdldFNpemUoZm9udCksIG51bGxwdHIsIG5ld0Rlc2NyaXB0b3IuZ2V0KCkpKTsKLX0KLQotUmVm
UHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKCkg
Y29uc3QKLXsKLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENU
Rm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyht
X3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udCA9
IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKTsKLSAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoY3RGb250LmdldCgpLCBz
aXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3Jt
RGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7
Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxvYXQg
c2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9udFN5
bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRm
b3JtRGF0YS5mb250KCkpOwotICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERl
c2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAgIHJl
dHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZvaWQg
Rm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQg
YmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wg
ZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05UU0hB
UEVHTFlQSFMpCi0gICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiog
bmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50Kiog
bmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikgewotICAgICAg
ICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJhbmdlLmxvY2F0aW9uLCBzdGF0
aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KGdseXBoQnVmZmVyLnNp
emUoKSkpOwotICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2UubG9jYXRpb24sIC1yYW5nZS5sZW5ndGgpOwotICAg
ICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbiAtIHJhbmdlLmxlbmd0aDsK
LSAgICAgICAgICAgIGdseXBoQnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Z2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJhbmdlLmxvY2F0aW9u
LCByYW5nZS5sZW5ndGgsIHRoaXMpOwotCi0gICAgICAgICpuZXdHbHlwaHNQb2ludGVyID0gZ2x5
cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3QWR2YW5j
ZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0g
ICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5n
R2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdJbmRpY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9m
ZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICB9OwotCi0gICAgYXV0byBz
dWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgYXV0byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVDb2NvYTo6Y2Fub25pY2FsTGFuZ3Vh
Z2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7
Ci0gICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hhcGVXaXRoQ2x1c3Rl
ckNvbXBvc2l0aW9uCi0gICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250U2hhcGVXaXRo
S2VybmluZyA6IDApCi0gICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kp
Ci0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4
KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotICAgIENURm9udFNoYXBlR2x5cGhzKAot
ICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAotICAgICAgICByZWludGVycHJldF9jYXN0PENHU2l6
ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdH
bHlwaEluZGV4KSksCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5p
bmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4o
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuc2l6ZSgp
IC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKLSAgICAgICAgb3B0aW9ucywKLSAgICAgICAgbG9jYWxl
U3RyaW5nLmdldCgpLAotICAgICAgICBoYW5kbGVyKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0g
ICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtp
XSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotI2Vsc2UKLQotICAgIFVOVVNFRF9QQVJBTShi
ZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHQpOwotCi0gICAgLy8gQ1RGb250VHJhbnNmb3JtR2x5cGhzKCkgb3BlcmF0
ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lkdGhJdGVyYXRvciBpdGVyYXRlcyBpbiBsb2dpY2Fs
IG9yZGVyLgotICAgIC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBpbiB2aXN1YWwgb3JkZXIganVzdCBm
b3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJhY2sgaW50byBsb2dpY2FsIG9yZGVyIHdoZW4KLSAg
ICAvLyB0aGUgY2FsbCBpcyBkb25lLgotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBnbG9iYWwgdmll
dyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBqdXN0IG9wZXJhdGluZyBvbiBhIHNp
bmdsZSBjaHVuayBvZiBpdC4KLSAgICAvLyBXaWR0aEl0ZXJhdG9yIGVuY291bnRlcnMgdGhlIGNo
dW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwgc28gd2UgaGF2ZSB0byBtYWludGFpbiB0aGF0IGlu
dmFyaWFudC4KLSAgICAvLyBFdmVudHVhbGx5LCBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4
dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHB1dCB0aGUgZW50aXJlIHRoaW5n
Ci0gICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBidXQgdGhhdCdzIG9rYXkgYmVjYXVzZSBpdCBoYXMg
YSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXIuCi0gICAgLy8gT24gdGhlIG90aGVyIGhh
bmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3Jk
ZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKLSAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMg
dGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVj
dXRlIHdoZW4KLSAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAg
aWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1
ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJl
Z2lubmluZ0dseXBoSW5kZXgpOwotCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25z
ID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDAp
IHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKLSAgICBDVEZvbnRUcmFuc2Zvcm1HbHlw
aHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdH
bHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0ds
eXBoSW5kZXgsIG9wdGlvbnMpOwotI2VuZGlmCi0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJv
dmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMu
Ci0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBn
bHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGV4dHJhY3ROdW1iZXIo
Q0ZOdW1iZXJSZWYgbnVtYmVyKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChudW1i
ZXIpCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEZvbnQ6OmRldGVybWluZVBp
dGNoKCkKLXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwot
ICAgIEFTU0VSVChjdEZvbnQpOwotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCi0g
ICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxkIHRy
ZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBBcHBL
aXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBT
cGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9i
bGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0
Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFzIGZp
eGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2YQotICAgIC8v
IEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3QgdHJl
YXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBL
aXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgYXV0
byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAgIGF1
dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0K
LSAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIoYWRvcHRDRihzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtD
VEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkpOwotICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtDVEZvbnRNb25vU3Bh
Y2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFt
ZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShm
dWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpKSk7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpKSkgewotICAgICAg
ICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQg
cGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGlj
aCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KLSAgICAg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIH0KLSNlbmRpZgotfQotCi1GbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsK
LSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250
T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlw
aCwgMCwgMSk7Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKLSAg
ICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0
aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJl
dHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsK
LQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9u
dGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhv
cml6b250YWw7Ci0gICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gaG9yaXpv
bnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250T3JpZW50YXRpb25I
b3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7Ci0jaWYgVVNFKENURk9OVEdF
VEFEVkFOQ0VTX1dPUktBUk9VTkQpCi0gICAgICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxl
ID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVh
bnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKLSAgICAgICAg
aWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSkgJiYg
IW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlvbnMoKSkKLSAgICAgICAgICAgIENURm9udEdldFVu
c3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRTdHlsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
b3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKLSAgICAgICAgZWxzZQot
I2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwg
MSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0
ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGgsIG51bGxwdHIpKTsK
LSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0
KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRo
KG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJh
bnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xk
T2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNs
YXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkg
fTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShy
ZXN1bHQuZ2V0KCkpKSB9OwotfQotCi1ib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9p
bnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QK
LXsKLSAgICBpZiAodmFyaWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVbmlD
aGFyIGNvZGVVbml0c1syXTsKLSAgICBDR0dseXBoIGdseXBoc1syXTsKLSAgICBDRkluZGV4IGNv
dW50ID0gMDsKLSAgICBVMTZfQVBQRU5EX1VOU0FGRShjb2RlVW5pdHMsIGNvdW50LCBjaGFyYWN0
ZXIpOwotICAgIHJldHVybiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGdseXBocywgY291bnQpOwotfQotCi1ib29sIEZvbnQ6
OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAotewotICAgIGF1dG8gcGxh
dGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOwotICAgIGlmICghcGxhdGZvcm1Gb250
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbGxvdyBtb3N0IG5vbi1pY29uIGZv
bnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEgc2luZ2xlIGNoYXJhY3RlciAnYScs
IHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxhdGluIGNoYXJhY3RlcnMuCi0gICAg
VW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVyID0gJ2EnOwotICAgIENHR2x5cGggbG93ZXJjYXNl
QUdseXBoOwotICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRm9u
dCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VBR2x5cGgsIDEpKSB7Ci0gICAgICAg
IGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRm
b3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgJmxvd2VyY2FzZUFHbHlwaCwgbnVs
bHB0ciwgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1dG8g
c3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChwbGF0
Zm9ybUZvbnQpKTsKLSAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBv
cnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFu
ZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMgTGF0aW4gbm9uLWNvbnRyb2wgY2hh
cmFjdGVycy4KLSAgICBjb25zdGV4cHIgVW5pQ2hhciBmaXJzdENoYXJhY3RlclRvVGVzdCA9ICcg
JzsKLSAgICBjb25zdGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFjdGVyVG9UZXN0ID0gJ34nOwotICAg
IGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCA9IGxhc3RDaGFyYWN0ZXJU
b1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVzdCArIDE7Ci0KLSAgICBWZWN0b3I8Q0dHbHlwaD4g
Z2x5cGhzOwotICAgIGdseXBocy5maWxsKDAsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCk7Ci0g
ICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UocGxhdGZvcm1Gb250LCBnbHlwaHMu
YmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJUb1Rlc3QsIG51bWJlck9mQ2hhcmFj
dGVyc1RvVGVzdCkpOwotICAgIGdseXBocy5yZW1vdmVBbGwoMCk7Ci0KLSAgICBpZiAoZ2x5cGhz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPENHUmVjdD4g
Ym91bmRpbmdSZWN0czsKLSAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhz
LnNpemUoKSk7Ci0gICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZv
bnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGluZ1Jl
Y3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOwotICAgIHJldHVybiBub3RGb3VuZCA9PSBib3Vu
ZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVybiAh
Q0dSZWN0SXNFbXB0eShyZWN0KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IGRiMWI0ZmY0YTE2YTQyM2ZlODYz
Y2U3M2I1OGM2NjI4YzFiMDhlNjQuLmM5N2Q1MGE1MjZhMmZkNzE4ZGI5Y2M2MjAxNmMzMjVlZDgx
YjNiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTM1LDMzICszNSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250UmVmIGZv
bnQpCi17Ci0jaWYgSEFWRShDVEZPTlRJU1NZU1RFTVVJRk9OVCkKLSAgICByZXR1cm4gQ1RGb250
SXNTeXN0ZW1VSUZvbnQoZm9udCk7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9y
SXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdl
dCgpKTsKLSNlbmRpZgotfQotCi0vLyBUaGVzZSBDb3JlVGV4dCBUZXh0IFNwYWNpbmcgZmVhdHVy
ZSBzZWxlY3RvcnMgYXJlIG5vdCBkZWZpbmVkIGluIENvcmVUZXh0LgotZW51bSBUZXh0U3BhY2lu
Z0NURmVhdHVyZVNlbGVjdG9yIHsgVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWwsIFRleHRTcGFjaW5n
RnVsbFdpZHRoLCBUZXh0U3BhY2luZ0hhbGZXaWR0aCwgVGV4dFNwYWNpbmdUaGlyZFdpZHRoLCBU
ZXh0U3BhY2luZ1F1YXJ0ZXJXaWR0aCB9OwotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lk
dGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01v
ZGUpCi0gICAgOiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y09ibGlxdWUsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRSZW5kZXJpbmdNb2RlKQot
ewotICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7Ci0gICAgbV9mb250ID0gZm9udDsKLSAgICBt
X2lzQ29sb3JCaXRtYXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RG
b250VHJhaXRDb2xvckdseXBoczsKLSAgICBtX2lzU3lzdGVtRm9udCA9IFdlYkNvcmU6OmlzU3lz
dGVtRm9udChtX2ZvbnQuZ2V0KCkpOwotICAgIGF1dG8gdmFyaWF0aW9ucyA9IGFkb3B0Q0Yoc3Rh
dGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZv
bnRWYXJpYXRpb25BdHRyaWJ1dGUpKSk7Ci0gICAgbV9oYXNWYXJpYXRpb25zID0gdmFyaWF0aW9u
cyAmJiBDRkRpY3Rpb25hcnlHZXRDb3VudCh2YXJpYXRpb25zLmdldCgpKTsKLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgbV9pc0Vtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamko
bV9mb250LmdldCgpKTsKLSNlbmRpZgotfQotCiB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpo
YXNoKCkgY29uc3QKIHsKICAgICB1aW50cHRyX3QgZmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3dpZHRoVmFyaWFudCkgPDwgNgpAQCAtNzEsNyAr
NDQsNyBAQCB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKICAgICAgICAg
fCBtX3N5bnRoZXRpY0JvbGQgPDwgMQogICAgICAgICB8IG1fc3ludGhldGljT2JsaXF1ZSk7CiAK
LSAgICB1aW50cHRyX3QgZm9udEhhc2ggPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZI
YXNoKG1fZm9udC5nZXQoKSkpOworICAgIHVpbnRwdHJfdCBmb250SGFzaCA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udC5nZXQoKSkpOwogICAgIHVpbnRwdHJfdCBoYXNoQ29k
ZXNbXSA9IHsgZm9udEhhc2gsIGZsYWdzIH07CiAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKIH0KQEAgLTgzLDExOCArNTYs
NCBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gQ0ZFcXVhbChtX2ZvbnQuZ2V0KCks
IG90aGVyLm1fZm9udC5nZXQoKSk7CiB9CiAKLUNURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpy
ZWdpc3RlcmVkRm9udCgpIGNvbnN0Ci17Ci0gICAgQ1RGb250UmVmIHBsYXRmb3JtRm9udCA9IGZv
bnQoKTsKLSAgICBBU1NFUlQocGxhdGZvcm1Gb250KTsKLSAgICBpZiAocGxhdGZvcm1Gb250ICYm
IGFkb3B0Q0YoQ1RGb250Q29weUF0dHJpYnV0ZShwbGF0Zm9ybUZvbnQsIGtDVEZvbnRVUkxBdHRy
aWJ1dGUpKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRm9udDsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotaW5saW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rv
cihGb250V2lkdGhWYXJpYW50IHZhcmlhbnQpCi17Ci0gICAgc3dpdGNoKHZhcmlhbnQpIHsKLSAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRl
eHRTcGFjaW5nUHJvcG9ydGlvbmFsOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpIYWxm
V2lkdGg6Ci0gICAgICAgIHJldHVybiBUZXh0U3BhY2luZ0hhbGZXaWR0aDsKLQotICAgIGNhc2Ug
Rm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5n
VGhpcmRXaWR0aDsKLQotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgot
ICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdRdWFydGVyV2lkdGg7Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FzY2FkZVRvTGFzdFJlc29y
dEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KCkKLXsKLSAgICBhdXRvIGxhc3RSZXNvcnQgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZTVFIoIkxhc3RSZXNvcnQi
KSwgMCkpOwotCi0gICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7IGxhc3RSZXNvcnQuZ2V0
KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdURl9BUlJBWV9MRU5HVEgo
ZGVzY3JpcHRvcnMpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBDRlR5cGVSZWYg
a2V5c1tdID0geyBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGFycmF5LmdldCgpIH07Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xF
TkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOwotfQotCi1zdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBj
YXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkKLXsKLSAgICBz
dGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RGb250RGVzY3JpcHRvckNy
ZWF0ZVdpdGhBdHRyaWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFy
eSgpLmdldCgpKTsKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQ1RGb250UmVmIEZvbnRQ
bGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY3RGb250KQotICAgICAg
ICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7Ci0KLSAgICBBU1NFUlQobV9mb250KTsKLSAgICBtX2N0
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQo
KSwgbV9zaXplLCBudWxscHRyLCBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnRE
ZXNjcmlwdG9yKCkpKTsKLQotICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGgpIHsKLSAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4
dFNwYWNpbmdUeXBlOwotICAgICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250
V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7Ci0gICAgICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKLSAgICAgICAgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUp
KTsKLSAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUs
ICZmZWF0dXJlU2VsZWN0b3JWYWx1ZSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNv
cHlXaXRoRmVhdHVyZShzb3VyY2VEZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwg
ZmVhdHVyZVNlbGVjdG9yLmdldCgpKSk7Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5l
d0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlw
dG9yLmdldCgpLCBtX3NpemUsIDApKTsKLQotICAgICAgICBpZiAobmV3Rm9udCkKLSAgICAgICAg
ICAgIG1fY3RGb250ID0gbmV3Rm9udDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jdEZvbnQuZ2V0
KCk7Ci19Ci0KLVJldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZv
ckVxdWFsaXR5Q2hlY2soQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICBhdXRvIGZvbnREZXNjcmlw
dG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoY3RGb250KSk7Ci0gICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2ODMgVGhp
cyBpcyBhIHNoYWxsb3cgcG9pbnRlciBjb21wYXJlIGZvciB3ZWIgZm9udHMKLSAgICAvLyBiZWNh
dXNlIHRoZSBVUkwgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZvbnQuIFRoaXMgbWVhbnMg
d2UgbWlnaHQgZXJyb25lb3VzbHkgZ2V0IGZhbHNlIG5lZ2F0aXZlcy4KLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZVUkxSZWY+KENURm9udERlc2Ny
aXB0b3JDb3B5QXR0cmlidXRlKGZvbnREZXNjcmlwdG9yLmdldCgpLCBrQ1RGb250UmVmZXJlbmNl
VVJMQXR0cmlidXRlKSkpOwotICAgIEFTU0VSVCghdXJsIHx8IENGR2V0VHlwZUlEKHVybC5nZXQo
KSkgPT0gQ0ZVUkxHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHVybDsKLX0KLQotUmV0YWluUHRy
PENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG9iamVjdEZvckVxdWFsaXR5Q2hlY2soY3RGb250KCkpOwotfQot
Ci1SZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKHVp
bnQzMl90IHRhYmxlKSBjb25zdAotewotICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRh
ID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUoZm9udCgpLCB0YWJsZSwga0NURm9udFRhYmxlT3B0
aW9uTm9PcHRpb25zKSkpCi0gICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRh
LmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmICFMT0dfRElTQUJM
RUQKLQotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmcgZm9udERlc2NyaXB0aW9uIHsgYWRvcHRDRihDRkNvcHlEZXNjcmlwdGlvbihmb250
KCkpKS5nZXQoKSB9OwotICAgIHJldHVybiBtYWtlU3RyaW5nKGZvbnREZXNjcmlwdGlvbiwgJyAn
LCBtX3NpemUsCi0gICAgICAgIChtX3N5bnRoZXRpY0JvbGQgPyAiIHN5bnRoZXRpYyBib2xkIiA6
ICIiKSwKLSAgICAgICAgKG1fc3ludGhldGljT2JsaXF1ZSA/ICIgc3ludGhldGljIG9ibGlxdWUi
IDogIiIpLAotICAgICAgICAobV9vcmllbnRhdGlvbiA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOwotfQotCi0jZW5kaWYKLQotU3Ry
aW5nIEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUoKSBjb25zdAotewotICAgIGlmIChhdXRv
IHBsYXRmb3JtRm9udCA9IGZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29w
eUZhbWlseU5hbWUocGxhdGZvcm1Gb250KSkuZ2V0KCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApp
bmRleCBkODE1NDhhMzBiOWQyMmNhZmY4YWE3ODcwZGFiNGJlZmIyMzRiOTA0Li44YWVjMmVhM2Q0
ZjE3NTlkZjdjZTY0MjM2YzMyYjY4MTU2NDRkZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcApAQCAtNTMsOSArNTMsNiBAQCBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3
ZWJtOjpzd2FwKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogUmVtb3ZlIHRo
aXMgb25jZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgaXMgYWRkZWQgdG8gQ01Gb3JtYXREZXNjcmlw
dGlvbi5oCi1jb25zdGV4cHIgQ01WaWRlb0NvZGVjVHlwZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkg
eyAndnAwOScgfTsKLQogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogc3RhdGljIGJvb2wgaXNXZWJt
UGFyc2VyQXZhaWxhYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI4YjUx
MjQzZTU3ODVhMDYyZGZlZWJiZTc2MzdlNTMwNjYwNDk2NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3Bw
CkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAyMCwgMjAxNiBBcHBs
ZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisj
aW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5Lmgi
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2lu
L0NvcmVUZXh0U1BJV2luLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKKy8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCitib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKK3sKKyNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKKyAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9
ICFDR0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOworI2VsaWYgUExBVEZPUk0oTUFD
KQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
Kwordm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQ
b2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXpl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250
ZXh0KSk7CisgICAgcG9zaXRpb25zWzBdID0gQ0dQb2ludFplcm87CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1Np
emVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7CisgICAgICAg
IHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKKyAg
ICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdo
dDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0Vm
ZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisjaWYgRU5BQkxFKExFVFRF
UlBSRVNTKQorICAgIHJldHVybiBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIGlmICghY291bnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2lu
dC54KCksIHBvaW50LnkoKSk7CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBv
c2l0aW9ucyhjb3VudCk7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90
YXRlTGVmdFRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwg
MCk7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRU
ZXh0TWF0cml4KGNvbnRleHQpOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3Jt
KTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRl
eHQpOworCisgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsK
KyAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKKworICAg
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVy
dChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKKworICAgICAgICBDR1BvaW50IHBv
c2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJp
Y3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3Mo
KS5mbG9hdEFzY2VudCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZm
aW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CisgICAg
ICAgICAgICBwb3NpdGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2lu
dE1ha2UocG9zaXRpb24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNs
YXRpb24uaGVpZ2h0KSwgdHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2
YW5jZXNbaV0ud2lkdGg7CisgICAgICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhl
aWdodDsKKyAgICAgICAgfQorICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5j
dEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMo
cG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQpOworICAgICAgICBDVEZvbnREcmF3
R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBj
b3VudCwgY29udGV4dCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJp
bmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHRydWUpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOworICAgIGJv
b2wgaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0
VHJhbnNmb3JtLmEpICYmIFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNv
bnRleHRUcmFuc2Zvcm0uYiA9PSAwLmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKKyAg
ICBib29sIGlzUm90YXRlZCA9ICgoY29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zv
cm0uYykgJiYgKGNvbnRleHRUcmFuc2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKKyAg
ICBib29sIGRvU3VicGl4ZWxRdWFudGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNj
YWxlIHx8ICghaXNSb3RhdGVkICYmIGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KCkpOworCisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29u
dGV4dCwgdHJ1ZSk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7Cit9CisKK3ZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVl
OworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOworCisgICAgaWYgKCFmb250LmFs
bG93c0FudGlhbGlhc2luZygpKQorICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGlu
Z01vZGU6Ok5vU21vb3RoaW5nOworCisgICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7CisgICAg
Y2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZFNtb290
aEZvbnRzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01v
ZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDoKKyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgICAgIHNo
b3VsZEFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygp
KQorICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworCisjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0Nv
bnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRTbW9v
dGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwor
I2VuZGlmCisKKyAgICBib29sIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0
U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCk7CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBv
cmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFs
aWFzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGJvb2wgdXNlTGV0dGVycHJl
c3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKKyAgICBVTlVT
RURfVkFSSUFCTEUodXNlTGV0dGVycHJlc3NFZmZlY3QpOworICAgIEZsb2F0UG9pbnQgcG9pbnQg
PSBhbmNob3JQb2ludDsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtSWRlbnRpdHk7CisgICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZv
bnQoKSkKKyAgICAgICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250
KCkpOworICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOworICAgIG1hdHJpeC5kID0gLW1hdHJpeC5k
OworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0
YXRpYyBmbG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBw
aUZsb2F0IC8gMTgwKTsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChmb250LmlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmlu
ZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVl
U2tldywgMCwgMSwgMCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlKDEsIC1vYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOworICAgIH0KKyAgICBT
Y29wZWRUZXh0TWF0cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKKworICAgIHNldENH
Rm9udFJlbmRlcmluZ01vZGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dD
b250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZz
ZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBj
b250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsK
KworICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKKyAg
ICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
CisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9y
VHJhbnNsYXRpb25PckZsaXBwZWQoKSkgeworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVu
aXRTaXplSW5EZXZpY2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDAp
KTsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNx
cnRmKGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFs
VW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZp
Y2VQaXhlbHMuaGVpZ2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWln
aHQoKSk7CisgICAgICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29u
J3QgYmxvdyB1cCB0aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4KKyAgICAgICAgICAgIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBzdGQ6Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNC
b2xkT2Zmc2V0IC8gaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYm
ICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBz
aW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3Ms
IHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGNvbnRleHQu
Y2xlYXJTaGFkb3coKTsKKyAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29s
b3IoKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKKyAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgLy8g
SWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxp
ZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkg
KiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRP
ZmZzZXQpCisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hh
ZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsK
KyAgICB9CisKKyNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCisgICAgaWYgKHVzZUxldHRlcnByZXNz
RWZmZWN0KQorICAgICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2lu
dCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5h
ZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhC
dWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhz
KTsKKyAgICB9CisKKyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKworICAgIGlmIChoYXNT
aW1wbGVTaGFkb3cpCisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
aWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykK
KyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkQW50aWFs
aWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Cit9CisKK2Jv
b2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICBj
b25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJuIGlzU3lzdGVt
Rm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Cit9CisKKy8vIEZJWE1FOiBV
c2UgdGhpcyBvbiBhbGwgcG9ydHMuCitjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKSBjb25zdAoreworICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3Qg
YmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNo
YXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0
ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsKKworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobGVuZ3RoID09
IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmZvbnQ7CisKKyAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAg
ICAgICAgY29udGludWU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGJh
c2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQt
PnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5k
aWYKKyAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisg
ICAgICAgICAgICAgICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9u
KCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbkZvbnQoKTsKKyAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2
ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmln
aHRGb250ID0gZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAg
IEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0
Rm9udDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb250ID09IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkKKyAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3Rl
ckZvbnQgPSB0cnVlOworCisgICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZv
bnQ7CisgICAgfQorCisgICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICByZXR1cm4gRm9u
dDo6c3lzdGVtRmFsbGJhY2soKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWI3MzA2NWRm
ODlmNjNiMGEyYmUxZDYyMDg2N2I0ZjVmNDM5NzcyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTAsMCAr
MSw3NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
dgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250
Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIk9wZW5UeXBlQ0cuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+Cisj
aW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
Q0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKK3sKKyAgICByZXR1cm4gYSAmJiBDRlN0cmlu
Z0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVx
dWFsVG87Cit9CisKK3N0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYg
Zm9udCkKK3sKKyAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJs
ZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOworfQorCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
K2Jvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250
RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9y
bWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+CisgICAgLy8gRklY
TUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRo
ZSBhYm92ZSBidWcgaXMgZml4ZWQuCisgICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIo
IlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFs
VG8pCisgICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1p
bHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9h
dCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKKworc3RhdGljIGJvb2wgc2hvdWxkVXNl
QWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKKworICAg
IGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21w
YXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5z
ZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAg
ICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigi
LkhlbHZldGljYSBOZXVlVUkiKSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29sIG5lZWRzQXNj
ZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQoreworICAgIHJldHVybiBmYW1p
bHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1l
cyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RS
KCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlO
YW1lLCBDRlNUUigiQ291cmllciIpKSk7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgYm9vbCBpc0Fo
ZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUg
JiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKK30K
KworYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcp
Cit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJs
ZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAoIXRhYmxl
VGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZB
cnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0g
MDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0byB0YWcgPSBzdGF0
aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKKyAgICAgICAgaWYg
KHRhZyA9PSB0YWJsZVRhZykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZv
bnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQoreworICAgIGF1dG8g
dGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NU
Rm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKCF0YWJsZVRhZ3MpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0
YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
VGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250
VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdElu
ZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7CisgICAgICAgIGlmICh0YWcgPT0gdGFibGVU
YWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7Cisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3Bs
YXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkg
LyAyNC4wZikgOiAwLmY7CisjZWxzZQorICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxh
dGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKFdJTikKKyAgICBtX3NjcmlwdENhY2hlID0gMDsKKyAgICBtX3NjcmlwdEZvbnRQcm9w
ZXJ0aWVzID0gbnVsbHB0cjsKKyAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAg
ICAgIHJldHVybiBpbml0R0RJRm9udCgpOworI2VuZGlmCisKKyAgICB1bnNpZ25lZCB1bml0c1Bl
ckVtID0gQ1RGb250R2V0VW5pdHNQZXJFbShtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgIGZs
b2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDR0Zsb2F0IGNhcEhl
aWdodCA9IHBvaW50U2l6ZSA/IENURm9udEdldENhcEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250
KCkpIDogMDsKKyAgICBDR0Zsb2F0IGxpbmVHYXAgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRMZWFk
aW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgYXNjZW50ID0gcG9p
bnRTaXplID8gQ1RGb250R2V0QXNjZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAg
IENHRmxvYXQgZGVzY2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldERlc2NlbnQobV9wbGF0Zm9y
bURhdGEuZm9udCgpKSA6IDA7CisKKyAgICAvLyBUaGUgT3BlbiBGb250IEZvcm1hdCBkZXNjcmli
ZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGFzIGZvbGxvd3M6CisgICAgLy8gIklm
IHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5cG9Bc2NlbmRl
ciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEgdmFsdWUgZm9y
IGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlzIGZvbnQuIgorICAgIC8vIE9uIE9TIFgsIHdl
IG9ubHkgYXBwbHkgdGhpcyBydWxlIGluIHRoZSBpbXBvcnRhbnQgY2FzZSBvZiBmb250cyB3aXRo
IGEgTUFUSCB0YWJsZS4KKyAgICBpZiAoZm9udEhhc1RhYmxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9u
dCgpLCBrQ1RGb250VGFibGVNQVRIKSkgeworICAgICAgICBzaG9ydCB0eXBvQXNjZW50LCB0eXBv
RGVzY2VudCwgdHlwb0xpbmVHYXA7CisgICAgICAgIGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01l
dHJpY3MobV9wbGF0Zm9ybURhdGEuZm9udCgpLCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlw
b0xpbmVHYXApKSB7CisgICAgICAgICAgICBhc2NlbnQgPSBzY2FsZUVtVG9Vbml0cyh0eXBvQXNj
ZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgICAgIGRlc2NlbnQgPSAtc2Nh
bGVFbVRvVW5pdHModHlwb0Rlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAg
ICAgICAgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9MaW5lR2FwLCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFk
b3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisKKyAg
ICAvLyBEaXNhYmxlIGFudGlhbGlhc2luZyB3aGVuIHJlbmRlcmluZyB3aXRoIEFoZW0gYmVjYXVz
ZSBtYW55IHRlc3RzIHJlcXVpcmUgdGhpcy4KKyAgICBpZiAoaXNBaGVtRm9udChmYW1pbHlOYW1l
LmdldCgpKSkKKyAgICAgICAgbV9hbGxvd3NBbnRpYWxpYXNpbmcgPSBmYWxzZTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBh
bmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRoZQorICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mg
b2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KKyAg
ICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQgYWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJp
ZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJlY3RseSBhZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdl
IHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQKKyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBh
c2NlbnQuCisgICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6TG9jYWwgJiYgbmVlZHNBc2NlbnRB
ZGp1c3RtZW50KGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICBhc2NlbnQgKz0gc3RkOjpyb3Vu
ZCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1Zik7CisjZW5kaWYKKworICAgIC8vIENvbXB1dGUg
bGluZSBzcGFjaW5nIGJlZm9yZSB0aGUgbGluZSBtZXRyaWNzIGhhY2tzIGFyZSBhcHBsaWVkLgor
ICAgIGZsb2F0IGxpbmVTcGFjaW5nID0gbHJvdW5kZihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50
KSArIGxyb3VuZGYobGluZUdhcCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgLy8gSGFjayBI
aXJhZ2lubyBsaW5lIG1ldHJpY3MgdG8gYWxsb3cgcm9vbSBmb3IgbWFya2VkIHRleHQgdW5kZXJs
aW5lcy4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0vNTM4NjE4Mz4KKyAgICBpZiAoZGVzY2VudCA8
IDMgJiYgbGluZUdhcCA+PSAzICYmIGZhbWlseU5hbWUgJiYgQ0ZTdHJpbmdIYXNQcmVmaXgoZmFt
aWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhpcmFnaW5vIikpKSB7CisgICAgICAgIGxpbmVHYXAgLT0g
MyAtIGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQgPSAzOworICAgIH0KKyNlbmRpZgorICAgIAor
ICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
VmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNW
ZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNhbEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZv
bnQoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENHRmxvYXQgYWRqdXN0bWVu
dCA9IHNob3VsZFVzZUFkanVzdG1lbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA/IGNlaWwoKGFz
Y2VudCArIGRlc2NlbnQpICoga0xpbmVIZWlnaHRBZGp1c3RtZW50KSA6IDA7CisKKyAgICBsaW5l
R2FwID0gY2VpbGYobGluZUdhcCk7CisgICAgbGluZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBh
ZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIGxpbmVHYXA7CisgICAgYXNjZW50ID0gY2VpbGYo
YXNjZW50ICsgYWRqdXN0bWVudCk7CisgICAgZGVzY2VudCA9IGNlaWxmKGRlc2NlbnQpOworCisg
ICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMgPSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2Vk
Rm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOworI2VuZGlmCisKKyAgICBDR0Zsb2F0IHhIZWln
aHQgPSAwOworICAgIGlmIChtX3BsYXRmb3JtRGF0YS5zaXplKCkpIHsKKyAgICAgICAgaWYgKHBs
YXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFs
KSB7CisgICAgICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2lu
Y2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5k
IHdlIG5lZWQgdGhlCisgICAgICAgICAgICAvLyByZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGlu
Y2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBoIHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5l
LgorICAgICAgICAgICAgR2x5cGggeEdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKKyAg
ICAgICAgICAgIGlmICh4R2x5cGgpCisgICAgICAgICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RH
ZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgoeEdseXBoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeEhlaWdodCA9IENURm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURh
dGEuZm9udCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB4SGVpZ2h0ID0gdmVydGlj
YWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpOworICAgIH0K
KworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2Vu
dChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChjYXBIZWlnaHQpOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldFhIZWlnaHQoeEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhs
aW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVQb3NpdGlvbigtQ1RG
b250R2V0VW5kZXJsaW5lUG9zaXRpb24obV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7CisgICAgbV9m
b250TWV0cmljcy5zZXRVbmRlcmxpbmVUaGlja25lc3MoQ1RGb250R2V0VW5kZXJsaW5lVGhpY2tu
ZXNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOworfQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hh
cldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFyV2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldp
ZHRoID0gMDsKKworICAgIGF1dG8gb3MyVGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJsZSht
X3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZU9TMiwga0NURm9udFRhYmxlT3B0aW9u
Tm9PcHRpb25zKSk7CisgICAgaWYgKG9zMlRhYmxlICYmIENGRGF0YUdldExlbmd0aChvczJUYWJs
ZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25zdCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0
ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAgIFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBv
czJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAgIG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRv
VW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3Bs
YXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisgICAgYXV0byBoZWFkVGFibGUgPSBhZG9wdENG
KENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRUYWJsZUhlYWQs
IGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOworICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZE
YXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkgPj0gNDIpIHsKKyAgICAgICAgY29uc3QgVUlu
dDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhlYWRUYWJsZS5nZXQoKSk7CisgICAgICAgIHVu
c2lnbmVkIHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKKyAgICAgICAgdW5zaWdu
ZWQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOworICAgICAgICBTSW50MTYgeE1p
biA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOworICAgICAgICBTSW50MTYgeE1heCA9IHN0
YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAgICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVt
VG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0
YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBl
c3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9u
LXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhzKCk7Cit9CisKK2Jvb2wgRm9udDo6dmFyaWFu
dENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZh
cmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKK3sKKyNpZiAoUExBVEZPUk0oSU9T
X0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorICAgIEdseXBoIGds
eXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAoIWdseXBoKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQg
PSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVk
LnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGds
eXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNp
emUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKKyAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5
cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5z
aXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogeworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBn
bHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMoKTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRl
ZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2Fw
cyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIpOworCisgICAgc3dpdGNoIChmb250VmFyaWFu
dENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6CisgICAgY2FzZSBGb250
VmFyaWFudENhcHM6OlBldGl0ZToKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6
CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRo
ZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorI2VuZGlmCit9CisKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VU
X09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdW
YWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFs
dWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10g
PSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RI
KGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFy
eVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQor
eworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7CisgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZU
eXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10g
PSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlf
TEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9y
cyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQoreworICAgIENGSW5k
ZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOworICAgIHJlc3VsdC5lbnN1
cmVTaXplKGxlbmd0aCk7CisgICAgQ0ZJbmRleCBtaW4gPSAwOworICAgIHdoaWxlIChtaW4gPCBs
ZW5ndGgpIHsKKyAgICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0
SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7Cisg
ICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgsIHRydWUpOworICAgICAgICBtaW4gPSBuZXh0
SW5kZXggKyAxOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFn
ZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQp
Cit7CisgICAgUmV0YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9u
dENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rp
b25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBz
b3VyY2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGlu
dCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkK
K3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250
Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlv
bmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsKKyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0
LCBzb3VyY2UuZ2V0KCkpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBv
cnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlT
bWFsbENhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZl
Y3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBs
YXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgp
KTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2Vy
Q2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6
Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAoreworICAgIGlmICghbV9nbHlw
aHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJh
Z2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRl
ZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdl
KENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShr
TG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEo
KS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAg
ICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFs
bENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6Omds
eXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRl
Q2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RS
KCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0
ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2Fz
ZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQo
KSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgfQorICAgIHJl
dHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBC
aXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgeworICAgICAgICBt
X2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBp
bmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQo
KSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGlu
amVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgp
LCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5q
ZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNT
ZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0
aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJD
YXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9u
dCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Cit9Cisj
ZW5kaWYKKworc3RhdGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRS
ZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRT
eW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhl
dGljSXRhbGljKQoreworICAgIGlmICghZm9udCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBpZiAoc3ludGhldGljQm9sZCkKKyAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9s
ZFRyYWl0OworICAgIGlmIChzeW50aGV0aWNJdGFsaWMpCisgICAgICAgIGZvbnRUcmFpdHMgfD0g
a0NURm9udEl0YWxpY1RyYWl0OworCisgICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9u
dFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOworCisgICAgYm9vbCB1c2Vk
U3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2Fs
ZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9sZCk7CisgICAgYm9vbCB1c2VkU3ludGhldGlj
T2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZv
bnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2Nh
bGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNP
YmxpcXVlLCBvcmllbnRhdGlvbik7CisKKyAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZv
bnREYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGlj
dGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tl
eShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250
YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUp
Cit7CisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRG
ZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1
cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKK30KKworc3RhdGljIGlu
bGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJl
ZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7Cisg
ICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFy
eUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKKyAgICBpbnQg
cmF3VmFsdWU7CisgICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJl
Zj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZh
bHVlKSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVt
YmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nl
c3MpOworICAgIHJldHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDog
V1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1
ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc1Ry
dWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgaW50IHJhd1R5cGU7CisgICAgQ0ZOdW1iZXJS
ZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShm
ZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgYXV0byBzdWNj
ZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7
CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICBpbnQgcmF3U2VsZWN0
b3I7CisgICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXkpKTsKKyAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NG
TnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3Ms
IHN1Y2Nlc3MpOworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rv
cik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1
ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJlZiBmb250KQoreworICAgIFJldGFpblB0cjxD
RkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsK
KyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQo
KSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAg
ICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9u
YXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAg
ICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXkpKTsKKyAgICAgICAgaWYgKCFmZWF0dXJlS2V5KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGludCByYXdGZWF0dXJlS2V5OworICAgICAgICBDRk51bWJlckdldFZhbHVlKGZl
YXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKKyAgICAgICAgaWYg
KHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Q0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9y
c0tleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChm
ZWF0dXJlU2VsZWN0b3JzKTsKKyAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0
b3JzQ291bnQ7ICsraikgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxl
Y3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7CisgICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1
bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVy
ZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOworICAgICAgICAg
ICAgaWYgKCFpc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpbnQgcmF3SXNEZWZhdWx0OworICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1
bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0RlZmF1bHQpOworICAgICAgICAgICAgaWYgKCFy
YXdJc0RlZmF1bHQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVT
ZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGlubGluZSBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVy
ZSwgQ1RGb250UmVmIGZvbnQpCit7CisgICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZl
YXR1cmUoZmVhdHVyZSk7CisgICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUo
ZmVhdHVyZSk7CisgICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQorICAgICAgICBy
ZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0Lgor
ICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgIGlmIChpc09wZW5UeXBlKSB7CisgICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5U
eXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwo
ZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21jcCIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVh
bChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJjMnNjIikpCisgICAgICAgICAgICB8fCBDRkVx
dWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKKyAgICAgICAgICAgIHx8IENG
RXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKKyAgICAgICAgICAg
IGludCByYXdaZXJvID0gMDsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVy
byA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVy
SW50VHlwZSwgJnJhd1plcm8pKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJl
c3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgp
KTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9u
dE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVRhZykpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0
LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChpc1RydWVUeXBlKSB7CisgICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFp
ciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVy
ZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vj
b25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWly
LnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgeworICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVu
dGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5
cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNl
bGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBl
LCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0
KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3Ip
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGlj
dGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVy
S2V5KSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBr
VXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2Fz
ZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBl
ckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGlj
dGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkp
KTsKKyAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0
U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1
cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUo
ZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwg
a0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRl
bnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVT
ZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91
dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8
Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENU
Rm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkp
KTsKKyAgICBpZiAoIWZlYXR1cmVzKQorICAgICAgICByZXR1cm4gZm9udDsKKyAgICBDRkluZGV4
IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgUmV0
YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFy
cmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50
OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxD
RkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkp
KTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVk
RmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7CisgICAgfQorICAgIENGVHlwZVJlZiBrZXlz
W10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgpIH07CisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0g
YWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5n
ZXQoKSkpOworICAgIHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRl
cyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgp
KSk7Cit9CisKK1JlZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFi
bGVGZWF0dXJlcygpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3lt
Ym9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250
UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0
Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0
cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNPYmxpcXVlKCkpOworfQorCitSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2Fs
ZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAor
eworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsK
KyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNU
cmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRv
cihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2Fs
ZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoZm9udERlc2Ny
aXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKKworICAgIHJldHVybiBjcmVhdGVEZXJpdmF0
aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlv
bigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9CisKK3ZvaWQgRm9udDo6YXBwbHlUcmFuc2Zv
cm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRl
eCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9v
bCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0
ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgVU5VU0VEX1BB
UkFNKHJlcXVpcmVzU2hhcGluZyk7CisKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IEdseXBoQnVm
ZmVyIGluaXRpYWwgYWR2YW5jZS4KKyNpZiBVU0UoQ1RGT05UU0hBUEVHTFlQSFMpCisgICAgYXV0
byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiogbmV3R2x5cGhzUG9pbnRlciwg
Q0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50KiogbmV3T2Zmc2V0c1BvaW50ZXIs
IENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikKKyAgICB7CisgICAgICAgIHJhbmdlLmxvY2F0
aW9uID0gc3RkOjptaW4oc3RkOjptYXgocmFuZ2UubG9jYXRpb24sIHN0YXRpY19jYXN0PENGSW5k
ZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oZ2x5cGhCdWZmZXIuc2l6ZSgpKSk7CisgICAg
ICAgIGlmIChyYW5nZS5sZW5ndGggPCAwKSB7CisgICAgICAgICAgICByYW5nZS5sZW5ndGggPSBz
dGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwgLXJhbmdlLmxlbmd0aCk7CisgICAgICAgICAgICByYW5n
ZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uIC0gcmFuZ2UubGVuZ3RoOworICAgICAgICAgICAg
Z2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlvbiwg
cmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5t
YWtlSG9sZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0
aCwgdGhpcyk7CisKKyAgICAgICAgKm5ld0dseXBoc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5nbHlw
aHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgICAgICpuZXdBZHZhbmNlc1BvaW50ZXIgPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld09m
ZnNldHNQb2ludGVyID0gZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KTsK
KyAgICAgICAgKm5ld0luZGljZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5n
KGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgIH07CisKKyAgICBhdXRvIHN1YnN0cmluZyA9IHRl
eHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBhdXRvIHVwY29udmVydGVk
Q2hhcmFjdGVycyA9IHN1YnN0cmluZy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRv
IGxvY2FsZVN0cmluZyA9IExvY2FsZUNvY29hOjpjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJG
cm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5nKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRT
aGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRTaGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24K
KyAgICAgICAgfCAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkK
KyAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250
U2hhcGVSaWdodFRvTGVmdCA6IDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGds
eXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5
cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lu
bmluZ1N0cmluZ0luZGV4OworCisgICAgQ1RGb250U2hhcGVHbHlwaHMoCisgICAgICAgIG1fcGxh
dGZvcm1EYXRhLmN0Rm9udCgpLAorICAgICAgICBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5n
R2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAorICAgICAgICByZWludGVycHJldF9j
YXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwK
KyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgp
LAorICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPih1cGNvbnZlcnRlZENo
YXJhY3RlcnMuZ2V0KCkpLAorICAgICAgICBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdH
bHlwaEluZGV4LAorICAgICAgICBvcHRpb25zLAorICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0KCks
CisgICAgICAgIGhhbmRsZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBo
QnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhC
dWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpW2ldICs9IGJlZ2lubmlu
Z1N0cmluZ0luZGV4OworCisjZWxzZQorCisgICAgVU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0cmlu
Z0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0obG9jYWxlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4
dCk7CisKKyAgICAvLyBDVEZvbnRUcmFuc2Zvcm1HbHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1YWwg
b3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9yIGl0ZXJhdGVzIGluIGxvZ2ljYWwgb3JkZXIuCisgICAg
Ly8gVGVtcG9yYXJpbHkgcHV0IHVzIGluIHZpc3VhbCBvcmRlciBqdXN0IGZvciB0aGUgY2FsbCwg
dGhlbiBwdXQgdXMgYmFjayBpbnRvIGxvZ2ljYWwgb3JkZXIgd2hlbgorICAgIC8vIHRoZSBjYWxs
IGlzIGRvbmUuCisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBlbnRp
cmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1c3Qgb3BlcmF0aW5nIG9uIGEgc2luZ2xlIGNodW5rIG9m
IGl0LgorICAgIC8vIFdpZHRoSXRlcmF0b3IgZW5jb3VudGVycyB0aGUgY2h1bmtzIG91dCBpbiBs
b2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIG1haW50YWluIHRoYXQgaW52YXJpYW50LgorICAg
IC8vIEV2ZW50dWFsbHksIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KCkgd2lsbCByZXZl
cnNlIHRoZSB3aG9sZSBidWZmZXIgdG8gcHV0IHRoZSBlbnRpcmUgdGhpbmcKKyAgICAvLyBpbiB2
aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mgb2theSBiZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2YgdGhl
IGVudGlyZSBHbHlwaEJ1ZmZlci4KKyAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hh
cGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBidWZmZXIgaW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJu
cyBpdCBpbiBwaHlzaWNhbAorICAgIC8vIG9yZGVyLCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJl
dmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9uIHN0aWxsIG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgorICAg
IC8vIENURm9udFNoYXBlR2x5cGhzKCkgaXMgYmVpbmcgdXNlZC4KKyAgICBpZiAodGV4dERpcmVj
dGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2Uo
YmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJ
bmRleCk7CisKKyAgICBDVEZvbnRUcmFuc2Zvcm1PcHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2Vy
bmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBvc2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJh
bnNmb3JtQXBwbHlTaGFwaW5nOworICAgIENURm9udFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLCBy
ZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0ds
eXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCwgb3B0
aW9ucyk7CisjZW5kaWYKKworICAgIC8vIFNlZSB0aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1
bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBjYWxsIHRvIHJldmVyc2UoKSBpcy4KKyAgICBpZiAodGV4
dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJl
dmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5n
R2x5cGhJbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgZXh0cmFjdE51bWJlcihDRk51bWJlclJlZiBu
dW1iZXIpCit7CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaWYgKG51bWJlcikKKyAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51bWJlckludFR5cGUsICZyZXN1bHQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRm9udDo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAg
IENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3JtRGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0
Rm9udCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2UgT3Nha2EtTW9uby4KKyAgICAvLyBBY2NvcmRp
bmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9u
byBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCBy
ZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBN
Uy1QR290aGljLgorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4s
IHdlIHNob3VsZCBub3QgdHJlYXQgTVMtUEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBO
b3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisK
KyAgICAvLyBTcGVjaWFsIGNhc2UgTW9ub3R5cGVDb3JzaXZhCisgICAgLy8gQWNjb3JkaW5nIHRv
IDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNv
cnNpdmEgYXMgZml4ZWQgcGl0Y2guCisgICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9y
dCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisKKyAgICBhdXRvIGZ1bGxOYW1lID0g
YWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RGb250KSk7CisgICAgYXV0byBmYW1pbHlOYW1l
ID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShjdEZvbnQpKTsKKworICAgIGludCBmaXhl
ZFBpdGNoID0gZXh0cmFjdE51bWJlcihhZG9wdENGKHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihD
VEZvbnRDb3B5QXR0cmlidXRlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udEZpeGVkQWR2
YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IChDVEZv
bnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYga0NURm9udE1vbm9TcGFjZVRyYWl0KSB8fCBm
aXhlZFBpdGNoIHx8IChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNU
UigiT3Nha2EtTW9ubyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgp
LCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1l
LmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZhIikpKTsKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIGlmIChmYW1pbHlOYW1lICYmIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5
TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3IikpKSB7CisgICAgICAgIC8vIFNwZWNpYWwg
Y2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJlYXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhp
cyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNwYWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJl
YWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYyNjk3ODMpLgorICAgICAgICBtX3RyZWF0QXNG
aXhlZFBpdGNoID0gZmFsc2U7CisgICAgfQorI2VuZGlmCit9CisKK0Zsb2F0UmVjdCBGb250Ojpw
bGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0JveCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNG
b3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZl
cnRpY2FsIDoga0NURm9udE9yaWVudGF0aW9uSG9yaXpvbnRhbCwgJmdseXBoLCAwLCAxKTsKKyAg
ICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0JveC5tYXhZKCkpOworICAgIGlmIChtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94
LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOworCisgICAgcmV0dXJuIGJvdW5kaW5n
Qm94OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgp
IGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVaZXJvOworCisgICAgaWYgKHBs
YXRmb3JtRGF0YSgpLnNpemUoKSkgeworICAgICAgICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKKyAg
ICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNC
cm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBr
Q1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKKyNpZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09S
S0FST1VORCkKKyAgICAgICAgQ0dGb250UmVuZGVyaW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVu
ZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBv
c2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBr
Q0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRlcmVkOworICAgICAgICBpZiAoIUNURm9udElz
QXBwbGVDb2xvckVtb2ppKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9ybURh
dGEuaGFzVmFyaWF0aW9ucygpKQorICAgICAgICAgICAgQ1RGb250R2V0VW5zdW1tZWRBZHZhbmNl
c0ZvckdseXBoc0FuZFN0eWxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwg
c3R5bGUsICZnbHlwaCwgJmFkdmFuY2UsIDEpOworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAg
ICAgeworICAgICAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURh
dGEuY3RGb250KCksIG9yaWVudGF0aW9uLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNl
dDsKK30KKworUGF0aCBGb250OjpwbGF0Zm9ybVBhdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBo
KHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlwaCwgbnVsbHB0cikpOworICAgIGF1dG8gc3lu
dGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBpZiAo
c3ludGhldGljQm9sZE9mZnNldCkgeworICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENH
UGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQo
KSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENH
QWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOwor
ICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZShuZXdQYXRoKSB9OworICAgIH0KKyAg
ICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkp
IH07Cit9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNo
YXJhY3RlciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAoreworICAgIGlmICh2
YXJpYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFVuaUNoYXIgY29kZVVuaXRz
WzJdOworICAgIENHR2x5cGggZ2x5cGhzWzJdOworICAgIENGSW5kZXggY291bnQgPSAwOworICAg
IFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0cywgY291bnQsIGNoYXJhY3Rlcik7CisgICAgcmV0
dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCks
IGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7Cit9CisKK2Jvb2wgRm9udDo6aXNQcm9iYWJseU9u
bHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0Cit7CisgICAgYXV0byBwbGF0Zm9ybUZvbnQgPSBw
bGF0Zm9ybURhdGEoKS5mb250KCk7CisgICAgaWYgKCFwbGF0Zm9ybUZvbnQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIEFsbG93IG1vc3Qgbm9uLWljb24gZm9udHMgdG8gYmFpbCBl
YXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBzaW5nbGUgY2hhcmFjdGVyICdhJywgd2l0aG91dCBpdGVy
YXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0aW4gY2hhcmFjdGVycy4KKyAgICBVbmlDaGFyIGxvd2Vy
Y2FzZUFDaGFyYWN0ZXIgPSAnYSc7CisgICAgQ0dHbHlwaCBsb3dlcmNhc2VBR2x5cGg7CisgICAg
aWYgKENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMocGxhdGZvcm1Gb250LCAmbG93ZXJjYXNl
QUNoYXJhY3RlciwgJmxvd2VyY2FzZUFHbHlwaCwgMSkpIHsKKyAgICAgICAgaWYgKCFDR1JlY3RJ
c0VtcHR5KENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1Gb250LCBrQ1RG
b250T3JpZW50YXRpb25EZWZhdWx0LCAmbG93ZXJjYXNlQUdseXBoLCBudWxscHRyLCAxKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYXV0byBzdXBwb3J0ZWRDaGFy
YWN0ZXJzID0gYWRvcHRDRihDVEZvbnRDb3B5Q2hhcmFjdGVyU2V0KHBsYXRmb3JtRm9udCkpOwor
ICAgIGlmIChDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVy
cy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENo
YXJhY3RlcnMuZ2V0KCksIDIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlz
IGVuY29tcGFzc2VzIGFsbCBiYXNpYyBMYXRpbiBub24tY29udHJvbCBjaGFyYWN0ZXJzLgorICAg
IGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ID0gJyAnOworICAgIGNvbnN0
ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0ZXJUb1Rlc3QgPSAnfic7CisgICAgY29uc3RleHByIGF1
dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0ID0gbGFzdENoYXJhY3RlclRvVGVzdCAtIGZpcnN0
Q2hhcmFjdGVyVG9UZXN0ICsgMTsKKworICAgIFZlY3RvcjxDR0dseXBoPiBnbHlwaHM7CisgICAg
Z2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KTsKKyAgICBDVEZvbnRHZXRH
bHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShwbGF0Zm9ybUZvbnQsIGdseXBocy5iZWdpbigpLCBDRlJh
bmdlTWFrZShmaXJzdENoYXJhY3RlclRvVGVzdCwgbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KSk7
CisgICAgZ2x5cGhzLnJlbW92ZUFsbCgwKTsKKworICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1JlY3Rz
OworICAgIGJvdW5kaW5nUmVjdHMuZmlsbChDR1JlY3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsKKyAg
ICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9y
aWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhzLmJlZ2luKCksIGJvdW5kaW5nUmVjdHMuYmVnaW4oKSwg
Z2x5cGhzLnNpemUoKSk7CisgICAgcmV0dXJuIG5vdEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmlu
ZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3QpIHsKKyAgICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5
KHJlY3QpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29y
ZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRm
b3JtRGF0YUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDViMGU4NTAxMjE1OWY2MDEzZmY1MjI5
ZGIyNDBhMjdlNjI4MGNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE4
MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxl
bWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRl
eHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJl
cnMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29y
ZVRleHRTUEkuaD4KKyNlbHNlCisjaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4u
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmIGZvbnQsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGlj
Qm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24s
IEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVu
ZGVyaW5nTW9kZSkKKyAgICA6IEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwg
c3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24sIHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmlu
Z01vZGUpCit7CisgICAgQVNTRVJUX0FSRyhmb250LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250
OworICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250
KSAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0OworICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29y
ZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5nZXQoKSk7CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRv
cHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9u
dCwga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZSkpKTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2
YXJpYXRpb25zICYmIENGRGljdGlvbmFyeUdldENvdW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBtX2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29s
b3JFbW9qaShtX2ZvbnQuZ2V0KCkpOworI2VuZGlmCit9CisKK2Jvb2wgaXNTeXN0ZW1Gb250KENU
Rm9udFJlZiBmb250KQoreworI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCisgICAgcmV0
dXJuIENURm9udElzU3lzdGVtVUlGb250KGZvbnQpOworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250
RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9y
KGZvbnQpKS5nZXQoKSk7CisjZW5kaWYKK30KKworQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6
OnJlZ2lzdGVyZWRGb250KCkgY29uc3QKK3sKKyAgICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250ID0g
Zm9udCgpOworICAgIEFTU0VSVChwbGF0Zm9ybUZvbnQpOworICAgIGlmIChwbGF0Zm9ybUZvbnQg
JiYgYWRvcHRDRihDVEZvbnRDb3B5QXR0cmlidXRlKHBsYXRmb3JtRm9udCwga0NURm9udFVSTEF0
dHJpYnV0ZSkpKQorICAgICAgICByZXR1cm4gcGxhdGZvcm1Gb250OworICAgIHJldHVybiBudWxs
cHRyOworfQorCisjaWYgUExBVEZPUk0oQ09DT0EpCitpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZh
cmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKK3sKKyAg
ICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJX
aWR0aDoKKyAgICAgICAgcmV0dXJuIGtQcm9wb3J0aW9uYWxUZXh0U2VsZWN0b3I7CisKKyAgICBj
YXNlIEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lk
dGhUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6
CisgICAgICAgIHJldHVybiBrVGhpcmRXaWR0aFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9u
dFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgorICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0
aFRleHRTZWxlY3RvcjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3RvcjsKK30KKworc3RhdGljIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgp
Cit7CisgICAgYXV0byBsYXN0UmVzb3J0ID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRl
V2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0UmVzb3J0IiksIDApKTsKKworICAgIENGVHlwZVJl
ZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVzb3J0LmdldCgpIH07CisgICAgUmV0YWluUHRyPENG
QXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlfTEVOR1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVB
cnJheUNhbGxCYWNrcykpOworCisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udENhc2Nh
ZGVMaXN0QXR0cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQo
KSB9OworICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
K30KKworc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZh
cmlhdGlvbnNGb250RGVzY3JpcHRvcigpCit7CisgICAgc3RhdGljIENURm9udERlc2NyaXB0b3JS
ZWYgZGVzY3JpcHRvciA9IENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNj
YWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkoKS5nZXQoKSk7CisgICAgcmV0dXJu
IGRlc2NyaXB0b3I7Cit9CisKK0NURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBj
b25zdAoreworICAgIGlmIChtX2N0Rm9udCkKKyAgICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgp
OworCisgICAgQVNTRVJUKG1fZm9udCk7CisgICAgbV9jdEZvbnQgPSBhZG9wdENGKENURm9udENy
ZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQuZ2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2Fz
Y2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpKSk7CisKKyAgICBp
ZiAobV93aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoKSB7Cisg
ICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0ga1RleHRTcGFjaW5nVHlwZTsKKyAgICAgICAg
aW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJl
U2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlw
dG9yKG1fY3RGb250LmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVh
dHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZmZWF0dXJlVHlwZVZhbHVlKSk7CisgICAgICAgIFJldGFpblB0cjxD
Rk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9yID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUp
KTsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3Ig
PSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVz
Y3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUuZ2V0KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkp
OworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRD
cmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3RGVzY3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7
CisKKyAgICAgICAgaWYgKG5ld0ZvbnQpCisgICAgICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7
CisgICAgfQorCisgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworfQorI2Vsc2UKK0NURm9udFJl
ZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBmb250KCk7
Cit9CisjZW5kaWYKKworUmV0YWluUHRyPENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2Jq
ZWN0Rm9yRXF1YWxpdHlDaGVjayhDVEZvbnRSZWYgY3RGb250KQoreworICAgIGF1dG8gZm9udERl
c2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihjdEZvbnQpKTsKKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4
MyBUaGlzIGlzIGEgc2hhbGxvdyBwb2ludGVyIGNvbXBhcmUgZm9yIHdlYiBmb250cworICAgIC8v
IGJlY2F1c2UgdGhlIFVSTCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBt
ZWFucyB3ZSBtaWdodCBlcnJvbmVvdXNseSBnZXQgZmFsc2UgbmVnYXRpdmVzLgorICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250
RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udERlc2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZl
cmVuY2VVUkxBdHRyaWJ1dGUpKSk7CisgICAgQVNTRVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJs
LmdldCgpKSA9PSBDRlVSTEdldFR5cGVJRCgpKTsKKyAgICByZXR1cm4gdXJsOworfQorCitSZXRh
aW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNr
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7
Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFi
bGUodWludDMyX3QgdGFibGUpIGNvbnN0Cit7CisgICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFi
bGVPcHRpb25Ob09wdGlvbnMpKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGRhdGEuZ2V0KCkpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiAhTE9HX0RJU0FC
TEVECisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7Cisg
ICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFkb3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9u
dCgpKSkuZ2V0KCkgfTsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcg
JywgbV9zaXplLAorICAgICAgICAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIg
OiAiIiksCisgICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVl
IiA6ICIiKSwKKyAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsKK30KKworI2VuZGlmCisKK1N0
cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0
byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENv
cHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdldCgpOworICAgIHJldHVybiB7IH07Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzhl
ZTM2ZGM2Yjg1YzQzYTNkNWI5Y2Q5NTRlYzRlMTM3YmVmNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3Bw
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgi
CisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxw
YWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hh
ciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7Cisg
ICAgaWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBj
b25zdCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5
cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAg
ICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGgg
PT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+
Zm9udCgpOworICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOwor
ICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsK
KworICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVu
Z3RoLCBmb250KSkKKyAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJz
KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+
KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisgICAgZWxzZQorICAgICAg
ICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1
ZmZlckxlbmd0aCk7CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0
aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVwXTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYm
IHRoZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgeworICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRl
eChpLCB0aGVHbHlwaCk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ds
eXBoUGFnZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5
cGhQYWdlTWFjLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhNTM1ZGM0MDNl
NDMyNDNhYjgxM2M2YzE0ZmRlY2FkNjdlOGRlZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R2x5cGhQYWdlTWFjLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgot
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBo
cyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQm
IGZvbnQpCi17Ci0gICAgaWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhzKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ld
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBjb25zdCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7
Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxl
bmd0aCkKLXsKLSAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBi
dWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0KLSAgICBjb25zdCBGb250JiBm
b250ID0gdGhpcy0+Zm9udCgpOwotICAgIFZlY3RvcjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZm
ZXJMZW5ndGgpOwotICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBo
UGFnZTo6c2l6ZTsKLQotICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZl
ciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKLSAgICAgICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNG
b3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0gICAg
ZWxzZQotICAgICAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1E
YXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBo
cy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0KLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAg
ICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVwXTsKLSAgICAgICAgaWYg
KHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgewotICAgICAgICAgICAgc2V0
R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENHV2luLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlOTI0
Y2NjMzYyNDlkNWFkM2M3OTQzNjZhMzYyZWNmNGYzZWI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENHV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotCi0jaWYg
VVNFKENHKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBDR0Zsb2F0IHRvQ0dGbG9hdChGSVhFRCBmKQotewot
ICAgIHJldHVybiBmLnZhbHVlICsgZi5mcmFjdCAvIENHRmxvYXQoNjU1MzYuMCk7Ci19Ci0KLXN0
YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyBoZGMsIEdseXBoIGdseXBoKQot
ewotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLQot
ICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAw
LCAxIH07Ci0gICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmljczsKLSAgICAvLyBHR09fTkFUSVZF
IG1hdGNoZXMgdGhlIG91dGxpbmUgcGVyZmVjdGx5IHdoZW4gV2luZG93cyBmb250IHNtb290aGlu
ZyBpcyBvZmYuCi0gICAgLy8gR0dPX05BVElWRSB8IEdHT19VTkhJTlRFRCBkb2VzIG5vdCBtYXRj
aCBwZXJmZWN0bHkgZWl0aGVyIHdoZW4gV2luZG93cyBmb250IHNtb290aGluZyBpcyBvbiBvciBv
ZmYuCi0gICAgRFdPUkQgb3V0bGluZUxlbmd0aCA9IEdldEdseXBoT3V0bGluZShoZGMsIGdseXBo
LCBHR09fR0xZUEhfSU5ERVggfCBHR09fTkFUSVZFLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRl
bnRpdHkpOwotICAgIEFTU0VSVChvdXRsaW5lTGVuZ3RoID49IDApOwotICAgIGlmIChvdXRsaW5l
TGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICBWZWN0b3I8VUludDg+IG91
dGxpbmUob3V0bGluZUxlbmd0aCk7Ci0gICAgR2V0R2x5cGhPdXRsaW5lKGhkYywgZ2x5cGgsIEdH
T19HTFlQSF9JTkRFWCB8IEdHT19OQVRJVkUsICZnbHlwaE1ldHJpY3MsIG91dGxpbmVMZW5ndGgs
IG91dGxpbmUuZGF0YSgpLCAmaWRlbnRpdHkpOwotCi0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsK
LSAgICB3aGlsZSAob2Zmc2V0IDwgb3V0bGluZUxlbmd0aCkgewotICAgICAgICBMUFRUUE9MWUdP
TkhFQURFUiBzdWJwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxMUFRUUE9MWUdPTkhFQURFUj4ob3V0
bGluZS5kYXRhKCkgKyBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoc3VicGF0aC0+ZHdUeXBlID09
IFRUX1BPTFlHT05fVFlQRSk7Ci0gICAgICAgIGlmIChzdWJwYXRoLT5kd1R5cGUgIT0gVFRfUE9M
WUdPTl9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0KLSAgICAgICAgQ0dQYXRoTW92
ZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHN1YnBhdGgtPnBmeFN0YXJ0LngpLCB0b0NHRmxv
YXQoc3VicGF0aC0+cGZ4U3RhcnQueSkpOwotCi0gICAgICAgIHVuc2lnbmVkIHN1YnBhdGhPZmZz
ZXQgPSBzaXplb2YoKnN1YnBhdGgpOwotICAgICAgICB3aGlsZSAoc3VicGF0aE9mZnNldCA8IHN1
YnBhdGgtPmNiKSB7Ci0gICAgICAgICAgICBMUFRUUE9MWUNVUlZFIHNlZ21lbnQgPSByZWludGVy
cHJldF9jYXN0PExQVFRQT0xZQ1VSVkU+KHJlaW50ZXJwcmV0X2Nhc3Q8VUludDgqPihzdWJwYXRo
KSArIHN1YnBhdGhPZmZzZXQpOwotICAgICAgICAgICAgc3dpdGNoIChzZWdtZW50LT53VHlwZSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJTV9MSU5FOgotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgQ0dQYXRoQWRkTGluZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHNl
Z21lbnQtPmFwZnhbaV0ueCksIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFRUX1BSSU1fUVNQ
TElORToKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21l
bnQtPmNwZng7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9D
R0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0ueCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zs
b2F0IHkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENHRmxvYXQgY3B4OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcHk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IHNlZ21lbnQtPmNwZnggLSAyKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFw
ZnhbaSArIDFdLngpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9IHRvQ0dGbG9h
dChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNweCA9ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KSArIHRvQ0dGbG9h
dChzZWdtZW50LT5hcGZ4W2kgKyAxXS54KSkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNweSA9ICh0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS55KSArIHRvQ0dGbG9hdChzZWdt
ZW50LT5hcGZ4W2kgKyAxXS55KSkgLyAyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhBZGRRdWFkQ3VydmVUb1BvaW50KHBhdGgsIDAs
IHgsIHksIGNweCwgY3B5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJTV9DU1BMSU5FOgotICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsg
aSArPSAzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IGNwMXggPSB0b0NHRmxv
YXQoc2VnbWVudC0+YXBmeFtpXS54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQg
Y3AxeSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLnkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0dGbG9hdCBjcDJ4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLngpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcDJ5ID0gdG9DR0Zsb2F0KHNlZ21lbnQt
PmFwZnhbaSArIDFdLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9D
R0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLngpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Q0dGbG9hdCB5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLnkpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBDR1BhdGhBZGRDdXJ2ZVRvUG9pbnQocGF0aCwgMCwgY3AxeCwgY3Ax
eSwgY3AyeCwgY3AyeSwgeCwgeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHBhdGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN1YnBhdGhPZmZzZXQgKz0gc2l6
ZW9mKCpzZWdtZW50KSArIChzZWdtZW50LT5jcGZ4IC0gMSkgKiBzaXplb2Yoc2VnbWVudC0+YXBm
eFswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgQ0dQYXRoQ2xvc2VTdWJwYXRoKHBhdGgpOwotICAg
ICAgICBvZmZzZXQgKz0gc3VicGF0aC0+Y2I7Ci0gICAgfQotICAgIHJldHVybiBwYXRoOwotfQot
Ci12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIs
Ci0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsKLSAgICBDR0NvbnRl
eHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAg
IGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3Ro
aW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9v
dGhpbmdNb2RlOjpBbnRpYWxpYXNlZDogewotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hv
dWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBzaG91bGRVc2VGb250U21vb3RoaW5nID0gZmFs
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpT
dWJwaXhlbEFudGlhbGlhc2VkOiB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRB
bnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9v
dGhpbmc6IHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxz
ZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6IHsK
LSAgICAgICAgLy8gRm9yIHRoZSBBdXRvU21vb3RoIGNhc2UsIGRvbid0IGRvIGFueXRoaW5nISBL
ZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotICAgICAgICBicmVhazsgCi0gICAgfQotICAgIGRl
ZmF1bHQ6IAotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1aW50
MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGlu
Z1N0eWxlKGNnQ29udGV4dCwgc2hvdWxkVXNlRm9udFNtb290aGluZyk7Ci0KLSAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0g
ICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0K
LSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5
OwotICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwot
Ci0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3Rh
dGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQg
LyAxODAuMGYpOwotICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRy
aXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCBza2V3LCAxLCAwLCAwKSk7Ci0gICAgfQot
Ci0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0
cml4KGNnQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1h
dHJpeCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0
YS5zaXplKCkpOwotICAgIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5
bGUoY2dDb250ZXh0LCBmb250LnBsYXRmb3JtRGF0YSgpLmlzU3lzdGVtRm9udCgpLCBmYWxzZSwg
Zm9udC5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAg
Z3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRv
d0NvbG9yKTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRl
eHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5p
c1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgewotICAgICAg
ICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9u
IENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29s
b3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9yKCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0Zp
bGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xv
ci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Io
c2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkg
KyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAgICAgICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3Jp
bmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBm
bGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KLSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkg
PSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBDR0NvbnRleHRTZXRU
ZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpOwotICAgICAg
ICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25zdCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSkgewotICAgICAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4
dCwgcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRP
ZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAg
IENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICAgICAgfQotICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0U2V0VGV4
dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotICAgIENHQ29udGV4
dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJv
bSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20p
KSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAg
ICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgZm9u
dC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50LnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSks
IHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwg
bnVtR2x5cGhzKTsKLSAgICB9Ci0KLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KQotICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93
Q29sb3IpOwotCi0gICAgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRl
eHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7Ci0gICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChj
Z0NvbnRleHQsIHNhdmVkTWF0cml4KTsKLX0KLQotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0KTsKLWNvbnN0ZXhwciB1aW50MzJfdCBrQ0dG
b250U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8IDQpOwotY29uc3RleHByIHVpbnQzMl90IGtD
R0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgzIDw8IDQpOwotY29uc3RleHByIHVpbnQzMl90
IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0gKDQgPDwgNCk7Ci0KLWNvbnN0ZXhwciBpbnQg
Zm9udFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsKLWNvbnN0ZXhwciBDR0Zsb2F0IGFudGlhbGlh
c2luZ0dhbW1hID0gMi4zOwotCi1kb3VibGUgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0Nv
bnRyYXN0ID0gMjsKLXVpbnQzMl90IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdUeXBlID0g
a0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtOwotaW50IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9v
dGhpbmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bTsKLWJvb2wgRm9udENhc2NhZGU6
OnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Ci11aW50MzJfdCBGb250Q2FzY2FkZTo6c19z
eXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKLWJvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNt
b290aGluZ1NldDsKLQotdm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0xldmVsKGlu
dCBsZXZlbCkKLXsKLSAgICBjb25zdCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlW10gPSB7IAotICAg
ICAgICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0YW5kYXJkCi0gICAgICAgIGtDR0ZvbnRTbW9v
dGhpbmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3RoaW5nVHlwZUxpZ2h0Ci0gICAgICAgIGtDR0Zv
bnRTbW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9udFNtb290aGluZ1R5cGVNZWRpdW0KLSAgICAg
ICAga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnksIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Ryb25n
Ci0gICAgfTsKLQotICAgIGlmIChsZXZlbCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZXZl
bCkgPiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNf
Zm9udFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdUeXBlW2xldmVsXTsKLSAgICBzX2ZvbnRTbW9v
dGhpbmdMZXZlbCA9IGxldmVsOwotfQotCi1zdGF0aWMgdm9pZCBzZXRDR0ZvbnRTbW9vdGhpbmdT
dHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlLCBib29s
IGZvbnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQotewotICAgIGlmIChzbW9vdGhpbmdUeXBlKSB7
Ci0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgZm9udEFs
bG93c1Ntb290aGluZyk7Ci0gICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShj
Z0NvbnRleHQsIHNtb290aGluZ1R5cGUpOwotICAgIH0gZWxzZQotICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIGZhbHNlKTsKLX0KLQotdWludDMyX3QgRm9u
dENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBi
b29sIGZvbnRBbGxvd3NTbW9vdGhpbmcpCi17Ci0gICAgdWludDMyX3Qgb2xkRm9udFNtb290aGlu
Z1N0eWxlID0gMDsKLSAgICBpZiAoQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250
ZXh0KSkKLSAgICAgICAgb2xkRm9udFNtb290aGluZ1N0eWxlID0gQ0dDb250ZXh0R2V0Rm9udFNt
b290aGluZ1N0eWxlKGNnQ29udGV4dCk7Ci0gICAgc2V0Q0dGb250U21vb3RoaW5nU3R5bGUoY2dD
b250ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBmb250QWxsb3dzU21vb3RoaW5nKTsKLQotICAg
IHJldHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OnNl
dEZvbnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0IGNvbnRyYXN0KQotewotICAgIHNfZm9udFNt
b290aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Ci19Ci0KLXN0YXRpYyBmbG9hdCBjbGVhclR5cGVD
b250cmFzdCgpCi17Ci0gICAgY29uc3QgV0NIQVIgcmVmZXJlbmNlQ2hhcmFjdGVyID0gJ1xcJzsK
LSAgICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3QgPSAyMDAwOwotICAgIHN0YXRpYyBmbG9hdCBn
YW1tYSA9IDI7Ci0gICAgVUlOVCBjb250cmFzdDsKLQotICAgIGlmICghU3lzdGVtUGFyYW1ldGVy
c0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05UUkFTVCwgMCwgJmNvbnRyYXN0LCAwKSB8fCBj
b250cmFzdCA9PSBsYXN0Q29udHJhc3QpCi0gICAgICAgIHJldHVybiBnYW1tYTsKLQotICAgIGxh
c3RDb250cmFzdCA9IGNvbnRyYXN0OwotCi0gICAgYXV0byBkYyA9IGFkb3B0R0RJT2JqZWN0KDo6
Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLQotICAgIEhHRElPQkogb2xkSEZPTlQgPSA6OlNlbGVj
dE9iamVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkpOwotICAg
IEdMWVBITUVUUklDUyBnbHlwaE1ldHJpY3M7Ci0KLSAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVu
dGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OwotICAgIGlmICg6OkdldEdseXBo
T3V0bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hhcmFjdGVyLCBHR09fTUVUUklDUywgJmdseXBo
TWV0cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBHRElfRVJST1IpCi0gICAgICAgIHJldHVybiBj
b250cmFzdCAvIDEwMDAuMGY7Ci0KLSAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87Ci0gICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhl
YWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJp
U2l6ZUltYWdlID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIg
PSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAg
Yml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAwOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFg7Ci0gICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3RhdGljX2Nhc3Q8aW50PihnbHlwaE1ldHJpY3Mu
Z21CbGFja0JveFkpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsK
LSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOwotCi0gICAgdWludDhfdCog
cGl4ZWxzID0gbnVsbHB0cjsKLSAgICBhdXRvIGJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkpOwotICAgIGlmICghYml0bWFwKQotICAgICAg
ICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOwotCi0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6
OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFwLmdldCgpKTsKLQotICAgIEJJVE1BUCBibXBJ
bmZvOwotICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5nZXQoKSwgc2l6ZW9mKGJtcEluZm8pLCAmYm1w
SW5mbyk7Ci0gICAgbWVtc2V0KHBpeGVscywgMCwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICog
Ym1wSW5mby5ibVdpZHRoQnl0ZXMpOwotCi0gICAgOjpTZXRCa01vZGUoZGMuZ2V0KCksIE9QQVFV
RSk7Ci0gICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0KCksIFRBX0xFRlQgfCBUQV9UT1ApOwotCi0g
ICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7Ci0gICAgOjpT
ZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOwotICAgIDo6RXh0VGV4dE91dFcoZGMu
Z2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotCi0gICAgdWlu
dDhfdCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRyOwotICAgIHVpbnQ4X3Qgd2hpdGVSZWZlcmVu
Y2VWYWx1ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaE1ldHJpY3MuZ21C
bGFja0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyArK2kpIHsKLSAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hYOyArK2opIHsKLSAgICAgICAg
ICAgIHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhlbHNbaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVz
ICsgal07Ci0gICAgICAgICAgICAvLyBMb29rIGZvciBhIHBpeGVsIHZhbHVlIGluIHRoZSByYW5n
ZSB0aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQotICAgICAgICAgICAgLy8gZ2FtbWEgd2l0aGlu
IDAuMSB3aXRob3V0IGFuIGVycm9yLgotICAgICAgICAgICAgaWYgKHdoaXRlUmVmZXJlbmNlVmFs
dWUgPiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVlIDwgMjQwKSB7Ci0gICAgICAgICAgICAgICAg
cmVmZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7Ci0gICAgICAgIDo6U2V0VGV4dENvbG9yKGRjLmdl
dCgpLCBSR0IoMCwgMCwgMCkpOwotICAgICAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigy
NTUsIDI1NSwgMjU1KSk7Ci0gICAgICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAs
IDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOwotICAgICAgICB1aW50OF90IGJsYWNrUmVm
ZXJlbmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7Ci0KLSAgICAgICAgZmxvYXQgbWluRGVsdGEg
PSAxOwotICAgICAgICBmb3IgKGZsb2F0IGcgPSAxOyBnIDwgMi4zZjsgZyArPSAwLjFmKSB7Ci0g
ICAgICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMocG93Zigod2hpdGVSZWZlcmVuY2VWYWx1ZSAv
IDI1NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpIC0g
MSk7Ci0gICAgICAgICAgICBpZiAoZGVsdGEgPCBtaW5EZWx0YSkgewotICAgICAgICAgICAgICAg
IG1pbkRlbHRhID0gZGVsdGE7Ci0gICAgICAgICAgICAgICAgZ2FtbWEgPSBnOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIGdhbW1hID0gY29udHJhc3QgLyAx
MDAwLjBmOwotCi0gICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0gICAg
OjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhGT05UKTsKLQotICAgIHJldHVybiBnYW1tYTsK
LX0KLQotdm9pZCBGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKQotewot
ICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkcsIDAsICZzX3N5
c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsKLSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZv
KFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUs
IDApOwotICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY2xlYXJUeXBlQ29udHJhc3QoKTsK
LSAgICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQgPSB0cnVlOwotfQotCi12b2lkIEZvbnRDYXNj
YWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLyppc1ByaW50ZXJGb250Ki8sIGJvb2wgdXNlUGxh
dGZvcm1OYXRpdmVHbHlwaHMpCi17Ci0gICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwot
ICAgIGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IHRydWU7Ci0gICAgQ0dGbG9hdCBjb250cmFz
dCA9IDI7Ci0gICAgaWYgKHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKSB7Ci0gICAgICAgIC8vIDxy
ZGFyOi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBpeGVsLXBvc2l0aW9uLCBzbyBkb24ndCBib3Ro
ZXIgYXNraW5nLgotICAgICAgICBtYXlTdWJwaXhlbFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAg
IGlmICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0KQotICAgICAgICAgICAgc3lzdGVtRm9udFNt
b290aGluZ0NoYW5nZWQoKTsKLSAgICAgICAgY29udHJhc3QgPSBzX2ZvbnRTbW9vdGhpbmdDb250
cmFzdDsKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc19zeXN0ZW1Gb250U21vb3RoaW5nRW5h
YmxlZDsKLSAgICAgICAgaWYgKHNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNN
T09USElOR1NUQU5EQVJEKSB7Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5n
U3R5bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtKTsKLSAgICAgICAg
ICAgIGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2FtbWE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Q0dDb250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNnQ29udGV4dCwgY29udHJhc3QpOwot
ICAgIENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKGNnQ29udGV4dCwg
dXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlh
c0ZvbnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKLSAgICBDR0FmZmluZVRyYW5zZm9y
bSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9v
bCBpc1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRUcmFuc2Zvcm0uYSA9PSAxICYmIChjb250ZXh0
VHJhbnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJhbnNmb3JtLmQgPT0gLTEpICYmICFjb250ZXh0
VHJhbnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYzsKLSAgICBDR0NvbnRleHRTZXRTaG91
bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCBtYXlTdWJwaXhlbFBvc2l0aW9uICYm
IChpc1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5zbGF0aW9uKSk7Ci0gICAgQ0dDb250ZXh0U2V0
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgaXNQdXJlVHJhbnNsYXRpb24p
OwotfQotCi1zdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxl
Rm9yRm9udChib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250KQotewotICAgIC8v
IEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5pbXVtIGFudGlhbGlhc2VkIGZvbnQgc2l6ZS4K
LQotICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQcmludGVyRm9udCkKLSAgICAgICAgcmV0dXJu
IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHls
ZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50
aXphdGlvbjsKLQotICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7
Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhDR0ZvbnRS
ZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJvb2wgaXNTeXN0ZW1Gb250LCBi
b29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkKLXsKLSAg
ICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmluZ1N0eWxlRm9yRm9udChpc1N5
c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOwotICAgIENHRm9udEdldEdseXBoQWR2YW5jZXNGb3JT
dHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpOwotCi0gICAgLy8gPHJk
YXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQgaW4gQ29yZSBHcmFwaGljcyBz
b21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0Ci0gICAgLy8gZGlmZmVyIGZyb20gd2hhdCB0
aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9sbG93aW5nIGNvZGUgY29ycmVj
dHMgdGhhdC4KLSAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFn
KGZvbnQsICdobXR4Jyk7Ci0gICAgaWYgKCFobXR4VGFibGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdoaGVh
Jyk7Ci0gICAgaWYgKCFoaGVhVGFibGUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBDRkluZGV4IGhoZWFUYWJsZVNp
emUgPSAzNjsKLSAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09m
ZnNldCA9IDM0OwotICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhlYVRhYmxlKSA8IGhoZWFUYWJs
ZVNpemUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Ci0gICAgICAgIENGUmVsZWFz
ZShoaGVhVGFibGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2hv
cnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNo
b3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhlYVRhYmxlTnVtYmVyT2ZITWV0
cmljc09mZnNldCk7Ci0gICAgbnVtYmVyT2ZITWV0cmljcyA9ICgobnVtYmVyT2ZITWV0cmljcyAm
IDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7Ci0gICAgaWYgKCFudW1iZXJP
ZkhNZXRyaWNzKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICBDRlJl
bGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnbHlw
aCA+PSBudW1iZXJPZkhNZXRyaWNzKQotICAgICAgICBnbHlwaCA9IG51bWJlck9mSE1ldHJpY3Mg
LSAxOwotCi0gICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFibGUpIDwgNCAqIChnbHlwaCAr
IDEpKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOwotICAgICAgICBDRlJlbGVhc2Uo
aGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNob3J0
IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0ICogZ2x5cGgpOwotICAgIGFk
dmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25Vbml0cyAmIDB4RkYpIDw8IDgp
IHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgpOwotICAgIENHU2l6ZSBob3Jpem9udGFsQWR2
YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYWR2YW5jZUluRGVzaWduVW5p
dHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7Ci0gICAgaG9yaXpvbnRhbEFkdmFu
Y2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9udGFsQWR2YW5jZSwgbSk7Ci0g
ICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndpZHRoOwotICAgIGlmICghKHN0
eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZykpCi0gICAgICAg
IGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7Ci0KLSAgICBDRlJlbGVhc2Uo
aGhlYVRhYmxlKTsKLSAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKLX0KLQotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2Fj
aGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNo
ZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhiODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4u
MDhjYjRkNTFlYmJkYmI3Zjk1NWU2Nzc3ZDZmODAyYzJiOTIxN2U5OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAg
LTY3NSw3ICs2NzUsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENh
Y2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZQogICAgIGF1dG8gcmVzdWx0
ID0gbWFrZVVuaXF1ZTxGb250UGxhdGZvcm1EYXRhPihXVEZNb3ZlKGhmb250KSwgZm9udERlc2Ny
aXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXNpemVCb2xkLCBzeW50aGVzaXplSXRh
bGljLCB1c2VHREkpOwogCiAjaWYgVVNFKENHKQotICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVk
ID0gIXJlc3VsdC0+Y2dGb250KCk7CisgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVz
dWx0LT5mb250KCk7CiAjZWxpZiBVU0UoRElSRUNUMkQpCiAgICAgYm9vbCBmb250Q3JlYXRpb25G
YWlsZWQgPSAhcmVzdWx0LT5kd0ZvbnQoKTsKICNlbGlmIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2lu
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40OGRjM2VjMTIxY2MwMjIwN2I4Y2IxNjgyNzEzZDZiYjhkOWY2ZDVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDYXNjYWRlQ0dXaW4uY3BwCkBAIC0wLDAgKzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIldlYkNv
cmVUZXh0UmVuZGVyZXIuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0
KTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8
IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgz
IDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0g
KDQgPDwgNCk7CisKK2NvbnN0ZXhwciBpbnQgZm9udFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsK
K2NvbnN0ZXhwciBDR0Zsb2F0IGFudGlhbGlhc2luZ0dhbW1hID0gMi4zOworCitkb3VibGUgRm9u
dENhc2NhZGU6OnNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gMjsKK3VpbnQzMl90IEZvbnRDYXNj
YWRlOjpzX2ZvbnRTbW9vdGhpbmdUeXBlID0ga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtOwor
aW50IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZl
bE1lZGl1bTsKK2Jvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7
Cit1aW50MzJfdCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKK2Jvb2wg
Rm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1NldDsKKwordm9pZCBGb250Q2FzY2Fk
ZTo6c2V0Rm9udFNtb290aGluZ0xldmVsKGludCBsZXZlbCkKK3sKKyAgICBjb25zdCB1aW50MzJf
dCBzbW9vdGhpbmdUeXBlW10gPSB7IAorICAgICAgICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0
YW5kYXJkCisgICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3Ro
aW5nVHlwZUxpZ2h0CisgICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9u
dFNtb290aGluZ1R5cGVNZWRpdW0KKyAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnks
IC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Ryb25nCisgICAgfTsKKworICAgIGlmIChsZXZlbCA8IDAg
fHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZXZlbCkgPiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHNfZm9udFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdU
eXBlW2xldmVsXTsKKyAgICBzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGxldmVsOworfQorCitzdGF0
aWMgdm9pZCBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1
aW50MzJfdCBzbW9vdGhpbmdUeXBlLCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQor
eworICAgIGlmIChzbW9vdGhpbmdUeXBlKSB7CisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKGNnQ29udGV4dCwgZm9udEFsbG93c1Ntb290aGluZyk7CisgICAgICAgIENHQ29u
dGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNtb290aGluZ1R5cGUpOworICAg
IH0gZWxzZQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQs
IGZhbHNlKTsKK30KKwordWludDMyX3QgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHls
ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcpCit7Cisg
ICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0gMDsKKyAgICBpZiAoQ0dDb250ZXh0
R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KSkKKyAgICAgICAgb2xkRm9udFNtb290aGlu
Z1N0eWxlID0gQ0dDb250ZXh0R2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCk7CisgICAg
c2V0Q0dGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBm
b250QWxsb3dzU21vb3RoaW5nKTsKKworICAgIHJldHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7
Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0
IGNvbnRyYXN0KQoreworICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Cit9
CisKK3N0YXRpYyBmbG9hdCBjbGVhclR5cGVDb250cmFzdCgpCit7CisgICAgY29uc3QgV0NIQVIg
cmVmZXJlbmNlQ2hhcmFjdGVyID0gJ1xcJzsKKyAgICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3Qg
PSAyMDAwOworICAgIHN0YXRpYyBmbG9hdCBnYW1tYSA9IDI7CisgICAgVUlOVCBjb250cmFzdDsK
KworICAgIGlmICghU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05U
UkFTVCwgMCwgJmNvbnRyYXN0LCAwKSB8fCBjb250cmFzdCA9PSBsYXN0Q29udHJhc3QpCisgICAg
ICAgIHJldHVybiBnYW1tYTsKKworICAgIGxhc3RDb250cmFzdCA9IGNvbnRyYXN0OworCisgICAg
YXV0byBkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKKworICAg
IEhHRElPQkogb2xkSEZPTlQgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmpl
Y3QoREVGQVVMVF9HVUlfRk9OVCkpOworICAgIEdMWVBITUVUUklDUyBnbHlwaE1ldHJpY3M7CisK
KyAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAg
MCwgMSB9OworICAgIGlmICg6OkdldEdseXBoT3V0bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hh
cmFjdGVyLCBHR09fTUVUUklDUywgJmdseXBoTWV0cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBH
RElfRVJST1IpCisgICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICBCSVRN
QVBJTkZPIGJpdG1hcEluZm87CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6
ZW9mKEJJVE1BUElORk9IRUFERVIpOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVz
ID0gMTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOwor
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlID0gMDsKKyAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpWVBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBv
cnRhbnQgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJp
Y3MuZ21CbGFja0JveFg7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3Rh
dGljX2Nhc3Q8aW50PihnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkpOworICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNs
clVzZWQgPSAwOworCisgICAgdWludDhfdCogcGl4ZWxzID0gbnVsbHB0cjsKKyAgICBhdXRvIGJp
dG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywg
RElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkp
OworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOwor
CisgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFw
LmdldCgpKTsKKworICAgIEJJVE1BUCBibXBJbmZvOworICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5n
ZXQoKSwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7CisgICAgbWVtc2V0KHBpeGVscywgMCwg
Z2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICogYm1wSW5mby5ibVdpZHRoQnl0ZXMpOworCisgICAg
OjpTZXRCa01vZGUoZGMuZ2V0KCksIE9QQVFVRSk7CisgICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0
KCksIFRBX0xFRlQgfCBUQV9UT1ApOworCisgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJH
QigyNTUsIDI1NSwgMjU1KSk7CisgICAgOjpTZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwg
MCkpOworICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VD
aGFyYWN0ZXIsIDEsIDApOworCisgICAgdWludDhfdCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRy
OworICAgIHVpbnQ4X3Qgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9IDA7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyAr
K2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdt
QmxhY2tCb3hYOyArK2opIHsKKyAgICAgICAgICAgIHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhl
bHNbaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzICsgal07CisgICAgICAgICAgICAvLyBMb29rIGZv
ciBhIHBpeGVsIHZhbHVlIGluIHRoZSByYW5nZSB0aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQor
ICAgICAgICAgICAgLy8gZ2FtbWEgd2l0aGluIDAuMSB3aXRob3V0IGFuIGVycm9yLgorICAgICAg
ICAgICAgaWYgKHdoaXRlUmVmZXJlbmNlVmFsdWUgPiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVl
IDwgMjQwKSB7CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICog
Ym1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7Cisg
ICAgICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOworICAgICAgICA6
OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7CisgICAgICAgIDo6RXh0
VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDAp
OworICAgICAgICB1aW50OF90IGJsYWNrUmVmZXJlbmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7
CisKKyAgICAgICAgZmxvYXQgbWluRGVsdGEgPSAxOworICAgICAgICBmb3IgKGZsb2F0IGcgPSAx
OyBnIDwgMi4zZjsgZyArPSAwLjFmKSB7CisgICAgICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMo
cG93Zigod2hpdGVSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZl
cmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpIC0gMSk7CisgICAgICAgICAgICBpZiAoZGVsdGEgPCBt
aW5EZWx0YSkgeworICAgICAgICAgICAgICAgIG1pbkRlbHRhID0gZGVsdGE7CisgICAgICAgICAg
ICAgICAgZ2FtbWEgPSBnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisg
ICAgICAgIGdhbW1hID0gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgOjpTZWxlY3RPYmplY3Qo
ZGMuZ2V0KCksIG9sZEJpdG1hcCk7CisgICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhG
T05UKTsKKworICAgIHJldHVybiBnYW1tYTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c3lzdGVt
Rm9udFNtb290aGluZ0NoYW5nZWQoKQoreworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVEZPTlRTTU9PVEhJTkcsIDAsICZzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsK
KyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwg
JnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUsIDApOworICAgIHNfZm9udFNtb290aGluZ0NvbnRy
YXN0ID0gY2xlYXJUeXBlQ29udHJhc3QoKTsKKyAgICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQg
PSB0cnVlOworfQorCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5n
U3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLypp
c1ByaW50ZXJGb250Ki8sIGJvb2wgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpCit7CisgICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAgIGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9
IHRydWU7CisgICAgQ0dGbG9hdCBjb250cmFzdCA9IDI7CisgICAgaWYgKHVzZVBsYXRmb3JtTmF0
aXZlR2x5cGhzKSB7CisgICAgICAgIC8vIDxyZGFyOi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBp
eGVsLXBvc2l0aW9uLCBzbyBkb24ndCBib3RoZXIgYXNraW5nLgorICAgICAgICBtYXlTdWJwaXhl
bFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIGlmICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0
KQorICAgICAgICAgICAgc3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKTsKKyAgICAgICAgY29u
dHJhc3QgPSBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdDsKKyAgICAgICAgc2hvdWxkQW50aWFsaWFz
ID0gc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKKyAgICAgICAgaWYgKHNfc3lzdGVtRm9u
dFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNNT09USElOR1NUQU5EQVJEKSB7CisgICAgICAgICAg
ICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3Ro
aW5nU3R5bGVNaW5pbXVtKTsKKyAgICAgICAgICAgIGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2Ft
bWE7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRy
YXN0KGNnQ29udGV4dCwgY29udHJhc3QpOworICAgIENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRm
b3JtTmF0aXZlR2x5cGhzKGNnQ29udGV4dCwgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpOworICAg
IENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFs
aWFzKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0
R2V0Q1RNKGNnQ29udGV4dCk7CisgICAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRU
cmFuc2Zvcm0uYSA9PSAxICYmIChjb250ZXh0VHJhbnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJh
bnNmb3JtLmQgPT0gLTEpICYmICFjb250ZXh0VHJhbnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zv
cm0uYzsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250
ZXh0LCBtYXlTdWJwaXhlbFBvc2l0aW9uICYmIChpc1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5z
bGF0aW9uKSk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNn
Q29udGV4dCwgaXNQdXJlVHJhbnNsYXRpb24pOworfQorCitzdGF0aWMgaW5saW5lIENHRm9udFJl
bmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlRm9yRm9udChib29sIGlzU3lzdGVtRm9udCwgYm9v
bCBpc1ByaW50ZXJGb250KQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5p
bXVtIGFudGlhbGlhc2VkIGZvbnQgc2l6ZS4KKworICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQ
cmludGVyRm9udCkKKyAgICAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlh
c2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250
UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKKworICAgIHJldHVybiBrQ0dGb250
UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OmdldFBs
YXRmb3JtR2x5cGhBZHZhbmNlcyhDR0ZvbnRSZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0mIG0sIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5
cGgsIENHU2l6ZSYgYWR2YW5jZSkKK3sKKyAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9
IHJlbmRlcmluZ1N0eWxlRm9yRm9udChpc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOworICAg
IENHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwg
MSwgJmFkdmFuY2UpOworCisgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkg
YmFjayBlbmQgaW4gQ29yZSBHcmFwaGljcyBzb21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0
CisgICAgLy8gZGlmZmVyIGZyb20gd2hhdCB0aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVz
LiBUaGUgZm9sbG93aW5nIGNvZGUgY29ycmVjdHMgdGhhdC4KKyAgICBDRkRhdGFSZWYgaG10eFRh
YmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdobXR4Jyk7CisgICAgaWYgKCFobXR4
VGFibGUpCisgICAgICAgIHJldHVybjsKKyAgICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250
Q29weVRhYmxlRm9yVGFnKGZvbnQsICdoaGVhJyk7CisgICAgaWYgKCFoaGVhVGFibGUpIHsKKyAg
ICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBjb25zdCBDRkluZGV4IGhoZWFUYWJsZVNpemUgPSAzNjsKKyAgICBjb25zdCBwdHJkaWZmX3Qg
aGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCA9IDM0OworICAgIGlmIChDRkRhdGFHZXRM
ZW5ndGgoaGhlYVRhYmxlKSA8IGhoZWFUYWJsZVNpemUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGht
dHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFi
bGUpICsgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCk7CisgICAgbnVtYmVyT2ZITWV0
cmljcyA9ICgobnVtYmVyT2ZITWV0cmljcyAmIDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJp
Y3MgPj4gOCk7CisgICAgaWYgKCFudW1iZXJPZkhNZXRyaWNzKSB7CisgICAgICAgIENGUmVsZWFz
ZShobXR4VGFibGUpOworICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChnbHlwaCA+PSBudW1iZXJPZkhNZXRyaWNzKQorICAgICAg
ICBnbHlwaCA9IG51bWJlck9mSE1ldHJpY3MgLSAxOworCisgICAgaWYgKENGRGF0YUdldExlbmd0
aChobXR4VGFibGUpIDwgNCAqIChnbHlwaCArIDEpKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4
VGFibGUpOworICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIHNob3J0IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhU
YWJsZSkgKyA0ICogZ2x5cGgpOworICAgIGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNl
SW5EZXNpZ25Vbml0cyAmIDB4RkYpIDw8IDgpIHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgp
OworICAgIENHU2l6ZSBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4oYWR2YW5jZUluRGVzaWduVW5pdHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250
KSwgMCk7CisgICAgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9y
bShob3Jpem9udGFsQWR2YW5jZSwgbSk7CisgICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxB
ZHZhbmNlLndpZHRoOworICAgIGlmICghKHN0eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3Vi
cGl4ZWxQb3NpdGlvbmluZykpCisgICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5j
ZS53aWR0aCk7CisKKyAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKKyAgICBDRlJlbGVhc2UoaG10
eFRhYmxlKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApp
bmRleCAxNDBlYzE2ZWIxNWQ2ZmM5ZmRhNDBiY2I1MWJiYTBmZjBhYzMzYjM2Li5hZmFmMGU3Mzc0
MWEzOTI3NGE0MTYwNGYwMTFjYTJkMmQxYTJjM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpZiBVU0UoQ0cpCiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQ
SVdpbi5oPgogI2VuZGlmCiAKICNpZiBVU0UoRElSRUNUMkQpCkBAIC04Myw4ICs4NCw5IEBAIEZv
bnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mCiAKICAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3Qo
OjpDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQpKTsKICNpZiBVU0UoQ0cpCi0gICAgUmV0YWlu
UHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1G
b250KCZsb2dGb250KSk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9u
dCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZv
bnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOworICAgIGF1dG8gY2dGb250ID0gYWRvcHRDRihD
R0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dGb250KSk7CisgICAgYXV0byBjdEZvbnQg
PSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoY2dGb250LmdldCgpLCBzaXpl
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92
ZShoZm9udCksIGN0Rm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2Rl
ID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwogI2Vsc2UKICAgICBhdXRvIGZvbnQg
PSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRmb3JtRm9udChsb2dGb250KTsKICAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgV1RGTW92ZShmb250KSwgc2l6ZSwg
Ym9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5h
dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAppbmRleCAxMTJiZjk1Y2M5YWRiZjk5ZTQ2
YjVjYjUxZGVjYTQwZDY0YjVlMTQxLi5iNWMxNGJjMTIyNWRiY2QxOTVjMDAxZTQzODFlNmI0MTI5
YzkwOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiU2hhcmVkR0RJT2JqZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTExMywzMCArMTE0LDQ2IEBAIHZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9OVCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRj
LCBXQ0hBUioKIHsKICAgICBMT0dGT05UIGxvZ2ZvbnQ7CiAgICAgR2V0T2JqZWN0KGZvbnQsIHNp
emVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwotICAgIG1fY2dGb250ID0gYWRvcHRDRihDR0ZvbnRD
cmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dmb250KSk7CisgICAgYXV0byBjZ0ZvbnQgPSBhZG9w
dENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ2ZvbnQpKTsKKyAgICBtX2ZvbnQg
PSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoY2dGb250LmdldCgpLCBzaXpl
LCBudWxscHRyLCBudWxscHRyKSk7CisgICAgCiAgICAgaWYgKCFtX3VzZUdESSkKICAgICAgICAg
bV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VOYW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKIH0K
IAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhm
b250LCBDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUs
IGJvb2wgdXNlR0RJKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmpl
Y3Q8SEZPTlQ+IGhmb250LCBDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQogICAgIDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAg
ICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1ZSkKICAgICAsIG1fc2l6ZShzaXplKQotICAg
ICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkp
Ci0gICAgLCBtX2NnRm9udChmb250KQorICAgICwgbV9oRm9udChTaGFyZWRHRElPYmplY3Q8SEZP
TlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQorICAgICwgbV9mb250KGZvbnQpCiAgICAgLCBt
X3VzZUdESSh1c2VHREkpCiB7CiB9CiAKIHVuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2go
KSBjb25zdAogewotICAgIHJldHVybiBtX2ZvbnQgPyBtX2ZvbnQtPmhhc2goKSA6IDA7CisgICAg
dWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKKyAgICAgICAgfCBtX2lzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlIDw8IDUKKyAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90ZXh0UmVuZGVy
aW5nTW9kZSkgPDwgMworICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29yaWVudGF0
aW9uKSA8PCAyCisgICAgICAgIHwgbV9zeW50aGV0aWNCb2xkIDw8IDEKKyAgICAgICAgfCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9zeW50aGV0aWNPYmxpcXVlKSk7CisKKyAgICB1aW50cHRyX3Qg
Zm9udEhhc2gxID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PihDRkhhc2gobV9mb250LmdldCgpKSk7
CisgICAgdWludHB0cl90IGZvbnRIYXNoMiA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4obV9oRm9u
dCA/IG1faEZvbnQtPmhhc2goKSA6IDApOworICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsg
Zm9udEhhc2gxLCBmb250SGFzaDIsIGZsYWdzIH07CisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6
aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKIH0KIAogYm9vbCBGb250
UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQKLSAgICAgICAg
JiYgbV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQKKyAgICBpZiAoIW1fZm9udCB8fCAhb3RoZXIu
bV9mb250KQorICAgICAgICByZXR1cm4gbV9mb250ID09IG90aGVyLm1fZm9udDsKKworICAgIHJl
dHVybiBDRkVxdWFsKG1fZm9udC5nZXQoKSwgb3RoZXIubV9mb250LmdldCgpKSAKKyAgICAgICAg
JiYgbV9oRm9udCA9PSBvdGhlci5tX2hGb250CisgICAgICAgICYmIG1fZm9udCA9PSBvdGhlci5t
X2ZvbnQKICAgICAgICAgJiYgbV91c2VHREkgPT0gb3RoZXIubV91c2VHREk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1E
YXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxh
dGZvcm1EYXRhV2luLmNwcAppbmRleCBlNTM3M2M3YzZlYzQ4NzU0MGMxNjFkMmFiMTlkNjgxYmU4
MThmMWExLi5mZWMxYTMyMjg2YTE0NTI1NDYzZGVkMmM1NTBjM2MwYTY4OTc4NTliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0
YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQ
bGF0Zm9ybURhdGFXaW4uY3BwCkBAIC00Miw3ICs0Miw3IEBAIHVzaW5nIHN0ZDo6bWluOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdE
SU9iamVjdDxIRk9OVD4gZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUs
IGJvb2wgdXNlR0RJKQotICAgIDogbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0
ZShXVEZNb3ZlKGZvbnQpKSkKKyAgICA6IG1faEZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6
Y3JlYXRlKFdURk1vdmUoZm9udCkpKQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX3N5bnRo
ZXRpY0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVlKQpAQCAtNTEs
MzggKzUxLDEzIEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0
PEhGT05UPiBmb250LCBmbG9hdCBzaXplLCBib29sIGJvbGQsCiAgICAgSFduZERDIGhkYygwKTsK
ICAgICBTYXZlREMoaGRjKTsKICAgICAKLSAgICA6OlNlbGVjdE9iamVjdChoZGMsIG1fZm9udC0+
Z2V0KCkpOworICAgIDo6U2VsZWN0T2JqZWN0KGhkYywgbV9oRm9udC0+Z2V0KCkpOwogCiAgICAg
d2NoYXJfdCBmYWNlTmFtZVtMRl9GQUNFU0laRV07CiAgICAgR2V0VGV4dEZhY2UoaGRjLCBMRl9G
QUNFU0laRSwgZmFjZU5hbWUpOwotICAgIHBsYXRmb3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwg
c2l6ZSwgaGRjLCBmYWNlTmFtZSk7CisgICAgcGxhdGZvcm1EYXRhSW5pdChtX2hGb250LT5nZXQo
KSwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CiAKICAgICBSZXN0b3JlREMoaGRjLCAtMSk7CiB9CiAK
LVJlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWlu
dDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgSFduZERDIGhkYygwKTsKLSAgICBIR0RJT0JKIG9s
ZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9udCgpKTsKLQotICAgIERXT1JEIHNpemUgPSBH
ZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAwLCAwKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXI7Ci0gICAgaWYgKHNpemUgIT0gR0RJX0VSUk9SKSB7Ci0gICAgICAgIFZlY3Rvcjxj
aGFyPiBkYXRhKHNpemUpOwotICAgICAgICBEV09SRCByZXN1bHQgPSBHZXRGb250RGF0YShoZGMs
IHRhYmxlLCAwLCAoUFZPSUQpZGF0YS5kYXRhKCksIHNpemUpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0ID09IHNpemUpOwotICAgICAgICBidWZmZXIgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKLSAgICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRj
LCBvbGRGb250KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAot
U3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDRiMGRjOTc0NjkyZGQyOTQyNDkzZDYy
ODkzZGFkY2VlZTE4MGVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNHV2luLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxs
IGJlIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1
ZmZlciBjb250YWlucyBzdXJyb2dhdGUgcGFpcnMuCi0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0
aGlzIGZvciBub3cuCi0gICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQo
KTsKLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBDR0dseXBoIGxvY2FsR2x5cGhC
dWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICBDR0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhm
b250LnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNo
YXIqPihidWZmZXIpLCBsb2NhbEdseXBoQnVmZmVyLCBidWZmZXJMZW5ndGgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7IGkrKykgewotICAgICAgICBHbHlw
aCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAg
ICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgpOwotICAgICAgICAgICAgaGF2ZUdseXBocyA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0K
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDRmYWI0Y2RjZmQwMzhiZjRkN2FkNDBhMzA4NTQzOWVjOGQzYmE0YjIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJG
b250LmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBoUGFnZS5oIgotI2luY2x1ZGUgIkhXbmREQy5o
IgotI2luY2x1ZGUgIk9wZW5UeXBlQ0cuaCIKLSNpbmNsdWRlIDxtbGFuZy5oPgotI2luY2x1ZGUg
PHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5o
PgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZv
aWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBt
X3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyAxLjBmIDogMC5mOwotICAgIG1fc2NyaXB0
Q2FjaGUgPSAwOwotICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSAwOwotCi0gICAgaWYgKG1f
cGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1cm4gaW5pdEdESUZvbnQoKTsKLQot
ICAgIENHRm9udFJlZiBmb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7Ci0gICAgaW50IGlB
c2NlbnQgPSBDR0ZvbnRHZXRBc2NlbnQoZm9udCk7Ci0gICAgaW50IGlEZXNjZW50ID0gQ0dGb250
R2V0RGVzY2VudChmb250KTsKLSAgICBpbnQgaUxpbmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5nKGZv
bnQpOwotICAgIGludCBpQ2FwSGVpZ2h0ID0gQ0dGb250R2V0Q2FwSGVpZ2h0KGZvbnQpOwotCi0g
ICAgLy8gVGhlIE9wZW4gRm9udCBGb3JtYXQgZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01F
VFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgotICAgIC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJl
Y29tbWVuZGVkIHRvIHVzZSBPUy8yLnNUeXBvQXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVy
KyBPUy8yLnNUeXBvTGluZUdhcCBhcyBhIHZhbHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBm
b3IgdGhpcyBmb250LiIKLSAgICBzaG9ydCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xp
bmVHYXA7Ci0gICAgaWYgKE9wZW5UeXBlOjp0cnlHZXRUeXBvTWV0cmljcyhhZG9wdENGKENURm9u
dENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQobV9wbGF0Zm9ybURhdGEuY2dGb250KCksIG1fcGxhdGZv
cm1EYXRhLnNpemUoKSwgbnVsbHB0ciwgbnVsbHB0cikpLmdldCgpLCB0eXBvQXNjZW50LCB0eXBv
RGVzY2VudCwgdHlwb0xpbmVHYXApKSB7Ci0gICAgICAgIGlBc2NlbnQgPSB0eXBvQXNjZW50Owot
ICAgICAgICBpRGVzY2VudCA9IHR5cG9EZXNjZW50OwotICAgICAgICBpTGluZUdhcCA9IHR5cG9M
aW5lR2FwOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0
c1BlckVtKGZvbnQpOwotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUo
KTsKLSAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVFbVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJF
bSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoaURl
c2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBz
Y2FsZUVtVG9Vbml0cyhpQ2FwSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBm
bG9hdCBmTGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRzKGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZTsKLQotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsKSB7Ci0gICAgICAg
IEhXbmREQyBkYygwKTsKLSAgICAgICAgSEdESU9CSiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRj
LCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKLSAgICAgICAgaW50IGZhY2VMZW5ndGggPSBHZXRU
ZXh0RmFjZShkYywgMCwgMCk7Ci0gICAgICAgIFZlY3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZUxl
bmd0aCk7Ci0gICAgICAgIEdldFRleHRGYWNlKGRjLCBmYWNlTGVuZ3RoLCBmYWNlTmFtZS5kYXRh
KCkpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMsIG9sZEZvbnQpOwotCi0gICAgICAgIGZBc2Nl
bnQgPSBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2VudEhhY2soZmFjZU5hbWUuZGF0YSgpLCBmQXNj
ZW50LCBmRGVzY2VudCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoZkFz
Y2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGZEZXNjZW50KTsKLSAgICBtX2Zv
bnRNZXRyaWNzLnNldENhcEhlaWdodChmQ2FwSGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNl
dExpbmVHYXAoZkxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJv
dW5kZihmQXNjZW50KSArIGxyb3VuZGYoZkRlc2NlbnQpICsgbHJvdW5kZihmTGluZUdhcCkpOwot
Ci0gICAgR2x5cGggeEdseXBoID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCd4JykuZ2x5cGg7Ci0g
ICAgaWYgKHhHbHlwaCkgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVy
ICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNl
bGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9u
bHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFz
ZWxpbmUuCi0gICAgICAgIENHUmVjdCB4Qm94OwotICAgICAgICBDR0ZvbnRHZXRHbHlwaEJCb3hl
cyhmb250LCAmeEdseXBoLCAxLCAmeEJveCk7Ci0gICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhl
aWdodChzY2FsZUVtVG9Vbml0cyhDR1JlY3RHZXRNYXhZKHhCb3gpLCB1bml0c1BlckVtKSAqIHBv
aW50U2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IGlYSGVpZ2h0ID0gQ0dGb250R2V0
WEhlaWdodChmb250KTsKLSAgICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1U
b1VuaXRzKGlYSGVpZ2h0LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgfQotCi0gICAg
bV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotfQotCi1GbG9hdFJlY3Qg
Rm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBp
ZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwot
Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1cm4gYm91bmRz
Rm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAgQ0dSZWN0IGJveDsKLSAgICBDR0ZvbnRHZXRHbHlw
aEJCb3hlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQoKSwgJmdseXBoLCAxLCAmYm94KTsKLSAgICBm
bG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgQ0dGbG9hdCBzY2Fs
ZSA9IHBvaW50U2l6ZSAvIGZvbnRNZXRyaWNzKCkudW5pdHNQZXJFbSgpOwotICAgIEZsb2F0UmVj
dCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGJveCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2FsZSkpOwotICAgIGlmIChtX3N5bnRoZXRpY0Jv
bGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRo
KCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwotCi0gICAgcmV0dXJuIGJvdW5kaW5nQm94Owot
fQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAgICByZXR1cm4gd2lkdGhG
b3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBDR0ZvbnRSZWYgZm9udCA9IG1fcGxhdGZvcm1EYXRh
LmNnRm9udCgpOwotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsK
LSAgICBDR1NpemUgYWR2YW5jZTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBwb2ludFNpemUpOwotIAotICAgIGJvb2wgaXNQ
cmludGVyRm9udCA9IGZhbHNlOwotICAgIEZvbnRDYXNjYWRlOjpnZXRQbGF0Zm9ybUdseXBoQWR2
YW5jZXMoZm9udCwgbSwgbV9wbGF0Zm9ybURhdGEuaXNTeXN0ZW1Gb250KCksIGlzUHJpbnRlckZv
bnQsIGdseXBoLCBhZHZhbmNlKTsKLQotICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OwotfQotCi1QYXRoIEZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAotewotICAgIGF1dG8gY3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVh
dGVXaXRoR3JhcGhpY3NGb250KHBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBwbGF0Zm9ybURhdGEo
KS5zaXplKCksIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0Yo
Q1RGb250Q3JlYXRlUGF0aEZvckdseXBoKGN0Rm9udC5nZXQoKSwgZ2x5cGgsIG51bGxwdHIpKTsK
LSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0
KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRo
KG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJh
bnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xk
T2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNs
YXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBuZXdQYXRoOwotICAgIH0KLSAg
ICByZXR1cm4gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKTsK
LX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4uY3BwCmluZGV4IGVjYTMzMmFmNjUwNmYz
ODRjZTNkNzczYzNjY2EyZWNiYzg3ZmIwZTIuLjlkYzI2ZmZkN2NmM2I2MjNjNjE1NzFiMTc1MTJl
NDdhZTk5YjZmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcApAQCAtMTA2LDU2ICsxMDYsMTIgQEAg
dm9pZCBGb250Ojppbml0R0RJRm9udCgpCiAgICAgU2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7
CiB9CiAKLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICAvLyBHREkg
Rm9udHMgaW5pdCBjaGFyd2lkdGhzIGluIGluaXRHRElGb250LgotICAgIGlmICghbV9wbGF0Zm9y
bURhdGEudXNlR0RJKCkpIHsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgICAg
IG1fbWF4Q2hhcldpZHRoID0gMC5mOwotICAgICAgICBpbml0Q2hhcldpZHRocygpOwotICAgIH0K
LX0KLQogdm9pZCBGb250OjpwbGF0Zm9ybURlc3Ryb3koKQogewogICAgIFNjcmlwdEZyZWVDYWNo
ZSgmbV9zY3JpcHRDYWNoZSk7CiAgICAgZGVsZXRlIG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9
CiAKLVJlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAot
ewotICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2FsZUZhY3RvciAqIG1fcGxhdGZvcm1EYXRhLnNp
emUoKTsKLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpSZW1vdGUpCi0gICAgICAgIHJldHVy
biBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0YTo6Y2xvbmVXaXRoU2l6ZShtX3BsYXRmb3Jt
RGF0YSwgc2NhbGVkU2l6ZSksIEZvbnQ6Ok9yaWdpbjo6UmVtb3RlKTsKLQotICAgIExPR0ZPTlQg
d2luZm9udDsKLSAgICBHZXRPYmplY3QobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExP
R0ZPTlQpLCAmd2luZm9udCk7Ci0gICAgd2luZm9udC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxl
ZFNpemUgKiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkgPyAxIDogMzIpKTsKLSAgICBhdXRvIGhm
b250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJndpbmZvbnQpKTsKLSAg
ICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIHNj
YWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEu
c3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3JtRGF0YS51c2VHREkoKSksIG9yaWdpbigpKTsK
LX0KLQotdm9pZCBGb250OjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgaWYgKG9yaWdpbigpID09
IE9yaWdpbjo6UmVtb3RlKSB7Ci0gICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRFWFRNRVRSSUNTIGhhdmUgdGhpcy4g
IFNldCBtX3RyZWF0QXNGaXhlZFBpdGNoIGJhc2VkIG9mZiB0aGF0LgotICAgIEhXbmREQyBkYygw
KTsKLSAgICBTYXZlREMoZGMpOwotICAgIFNlbGVjdE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEu
aGZvbnQoKSk7Ci0KLSAgICAvLyBZZXMsIHRoaXMgbG9va3MgYmFja3dhcmRzLCBidXQgdGhlIGZp
eGVkIHBpdGNoIGJpdCBpcyBhY3R1YWxseSBzZXQgaWYgdGhlIGZvbnQKLSAgICAvLyBpcyAqbm90
KiBmaXhlZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBidXQgdHJ1ZS4KLSAgICBURVhUTUVUUklDIHRt
OwotICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdG0pOwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2gg
PSAoKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBGX0ZJWEVEX1BJVENIKSA9PSAwKTsKLQotICAg
IFJlc3RvcmVEQyhkYywgLTEpOwotfQotCiBGbG9hdFJlY3QgRm9udDo6Ym91bmRzRm9yR0RJR2x5
cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAgSFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9u
c0FwcGxlV2luLmNtYWtlCmluZGV4IDk5MmUyMzViYzJmNDNjMDNiYjMwMWExNzc4YTc0NWE1ZTU1
YmUwODYuLmE4MmJiZmFjMWMyMjhkMjZjNDU3ZTI3ZTNhMmMxM2FhZDAwMmM0ZjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNBcHBsZVdpbi5jbWFrZQpAQCAtNDgsNiArNDgsNyBAQCBpZiAoJHtVU0VfRElSRUNU
MkR9KQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9DQSBPTikKICAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0cgT04pCisgICAgU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX0NUIE9OKQogCiAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7
V0VCS0lUX0xJQlJBUklFU19JTkNMVURFX0RJUn0pCiAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJ
QlJBUklFUwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGIxMDk5N2Yx
MmZjYzE1YTkzMWQwOWY3MjUzY2QzZDM5NTk4NDhkYjcuLjU1MzFmYjkxODY1ODlmMWUzZTNjZmZl
Y2YxODk3N2UwZjNlZGY1NDUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAyMC0wOS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4Zmll
bGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIE1pZ3JhdGUgdGhlIEFwcGxlIFdpbiBwb3J0
J3MgZm9udCBjb2RlIHRvIENvcmUgVGV4dCBmcm9tIENvcmUgR3JhcGhpY3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjM1MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlv
bnNBcHBsZVdpbi5jbWFrZToKKwogMjAyMC0wOS0xMCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAg
PGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDTWFrZV0gVXNlIGltcG9ydGVkIHRhcmdl
dHMgaW4gZmluZCBtb2R1bGUgZm9yIGxpYnNlY2NvbXAK
</data>
<flag name="commit-queue"
          id="423933"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408514</attachid>
            <date>2020-09-10 22:24:09 -0700</date>
            <delta_ts>2020-09-10 22:39:16 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-216353-20200910222408.patch</filename>
            <type>text/plain</type>
            <size>213239</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmQ5M2M2MTQwZjA4ZDM0MTFjYzE4MzZmNWNkZGExNjRkNTllZDky
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBX
aW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bVVzZS5oOgorCiAyMDIwLTA5LTEwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgaGFyZHdhcmUgSlBFRyBkZWNvZGluZyBvbiB4ODYgTWFjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMGI1ZmNmNDdjYTRlZDgzMWJiMDE2Mjc5ZmZhN2ZjMzJiMTUwN2I0NC4uNDFkNGIyNDljYzQ4
MjhjYzBmNzRkMzdlMWI1MTdlM2JjZTRkMjlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMC0wOS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtXaW5dIE1pZ3JhdGUgdGhlIEFwcGxlIFdpbiBwb3J0J3MgZm9udCBjb2RlIHRv
IENvcmUgVGV4dCBmcm9tIENvcmUgR3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjM1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50
aGVzaXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1T
dXBwb3J0c0NvZGVQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGZvbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y2dGb250IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFp
bGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9u
dGFsR2x5cGhQb3NpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNl
TGV0dGVycHJlc3NFZmZlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBo
c1dpdGhBZHZhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5k
ZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3
R2x5cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5
Rm9udElzU3lzdGVtRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjppc1N5c3RlbUZvbnQpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RG
ZWF0dXJlU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFz
dFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFs
aXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hv
d0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5kZXJp
bmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZv
cm1EYXRhQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3lzdGVtRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9udCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1
YWxpdHlDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvYmplY3RG
b3JFcXVhbGl0eUNoZWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZmFtaWx5TmFtZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
R2x5cGhQYWdlQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FzY2FkZUNHV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZGV0ZXJtaW5lUGl0Y2gpOiBEZWxldGVkLgorCiAyMDIwLTA5LTEwICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBS
ZW5kZXJUaGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNzk1ZjQzZjQ0ODllMTdjZGNkY2EyOWRh
NGM5MjAyNWFhZDNkYjRmZC4uZjkzZjNkN2ZjNDAxMGEyNmZjMmNkYTE2MGE4YjM4MGMwOWU4ODFi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdy
YXRlIHRoZSBBcHBsZSBXaW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3Jl
IEdyYXBoaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTYzNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg6CisKIDIwMjAtMDktMTAgIEJlbiBOaGFt
ICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBoYXJkd2FyZSBKUEVHIGRlY29k
aW5nIG9uIHg4NiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCmluZGV4IGE2ZWJlNjcyZjRhOTU0YzMzMjI0
NzgwM2ZiZGFlMWM4MjgxYWZmZTIuLjkzYzI1YWE5N2VjNTQ4NTY4MGUxNzA3YzcwNThiMDg0NGYz
ZDg1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaApAQCAtNTQsNiArNTQsMTAgQEAKICNkZWZpbmUgVVNF
X0NHIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIFVTRV9DVCAxCisj
ZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2RlZmluZSBVU0VfQ0EgMQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4u
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCmluZGV4
IGQyOGIxNmI0Y2E4NDY4N2EzZmIxNWZkOWJhYjQwOWYzMzNmZWRmYTguLjkwZWU5Y2Y4NWE5OWU2
ZWFmZTg0MDJlYjc4MzNmMWM4ODNlYzg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCkBAIC00MiwyMiArNDIsMTIxIEBAIENUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250TmFtZUF0dHJpYnV0ZTsKIENUX0VYUE9SVCBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb3JlZ3JvdW5kQ29sb3JGcm9tQ29udGV4dEF0dHJpYnV0ZU5hbWU7
CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NUU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1l
OwogQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9rZUNvbG9yQXR0cmlidXRlTmFt
ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JJZGVudGlmaWVyS2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0
dXJlVHlwZVNlbGVjdG9yc0tleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBr
Q1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5n
UmVmIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJp
bmdSZWYga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmlu
Z1JlZiBrQ1RGb250VVJMQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtD
VEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGU7CiAKLS8vIFRoaXMgZW51bSBpcyBkZWZpbmVkIGlu
IENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIGl0IGhlcmUgaWYg
Q1RGb250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKKy8vIFRoZXNlIGVudW1zIGFyZSBkZWZp
bmVkIGluIENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIHRoZW0g
aGVyZSBpZiBDVEZvbnQuaCBoYXMgbm90IGJlZW4gaW5jbHVkZWQuIAogI2lmbmRlZiBfX0NURk9O
VF9fCit0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9udFN5bWJvbGljVHJhaXRzKSB7
CisgICAga0NURm9udFRyYWl0SXRhbGljID0gKDEgPDwgMCksCisgICAga0NURm9udFRyYWl0Qm9s
ZCA9ICgxIDw8IDEpLAorICAgIGtDVEZvbnRUcmFpdE1vbm9TcGFjZSA9ICgxIDw8IDEwKSwKKyAg
ICBrQ1RGb250VHJhaXRDb2xvckdseXBocyA9ICgxIDw8IDEzKSwKKworICAgIGtDVEZvbnRJdGFs
aWNUcmFpdCA9IGtDVEZvbnRUcmFpdEl0YWxpYywKKyAgICBrQ1RGb250Qm9sZFRyYWl0ID0ga0NU
Rm9udFRyYWl0Qm9sZCwKKyAgICBrQ1RGb250TW9ub1NwYWNlVHJhaXQgPSBrQ1RGb250VHJhaXRN
b25vU3BhY2UsCisgICAga0NURm9udENvbG9yR2x5cGhzVHJhaXQgPSBrQ1RGb250VHJhaXRDb2xv
ckdseXBocywKK307CisKIHR5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VGFibGVP
cHRpb25zKSB7CiAgICAga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zID0gMCwKICAgICBrQ1RG
b250VGFibGVPcHRpb25FeGNsdWRlU3ludGhldGljID0gKDEgPDwgMCkKIH07CisKK2VudW0gewor
ICAgIGtDVEZvbnRUYWJsZU1BVEggPSAnTUFUSCcsCisgICAga0NURm9udFRhYmxlT1MyICA9ICdP
Uy8yJywKKyAgICBrQ1RGb250VGFibGVWT1JHID0gJ1ZPUkcnLAorICAgIGtDVEZvbnRUYWJsZUhl
YWQgPSAnaGVhZCcsCisgICAga0NURm9udFRhYmxlVmhlYSA9ICd2aGVhJywKK307CisKK3R5cGVk
ZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VHJhbnNmb3JtT3B0aW9ucykgeworICAgIGtD
VEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKKyAgICBrQ1RGb250VHJhbnNm
b3JtQXBwbHlQb3NpdGlvbmluZyA9ICgxIDw8IDEpCit9OworCitlbnVtIHsKKyAgICBrTG93ZXJD
YXNlVHlwZSA9IDM3LAorICAgIGtVcHBlckNhc2VUeXBlID0gMzgsCit9OworCitlbnVtIHsKKyAg
ICBrRGVmYXVsdExvd2VyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrTG93ZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IgPSAxLAorICAgIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IgPSAyCit9Owor
CitlbnVtIHsKKyAgICBrRGVmYXVsdFVwcGVyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrVXBwZXJD
YXNlU21hbGxDYXBzU2VsZWN0b3IgPSAxLAorICAgIGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0
b3IgPSAyCit9OworCitlbnVtIHsKKyAgICBrUHJvcG9ydGlvbmFsVGV4dFNlbGVjdG9yID0gMCwK
KyAgICBrSGFsZldpZHRoVGV4dFNlbGVjdG9yID0gMiwKKyAgICBrVGhpcmRXaWR0aFRleHRTZWxl
Y3RvciA9IDMsCisgICAga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvciA9IDQsCit9OworCit0eXBl
ZGVmIENGX0VOVU0odWludDMyX3QsIENURm9udE9yaWVudGF0aW9uKQoreworICAgIGtDVEZvbnRP
cmllbnRhdGlvbkRlZmF1bHQgPSAwLAorICAgIGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwg
PSAxLAorICAgIGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsID0gMiwKK307CiAjZW5kaWYKIAor
dW5zaWduZWQgQ1RGb250R2V0VW5pdHNQZXJFbShDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRDYXBIZWlnaHQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0TGVhZGluZyhDVEZvbnRS
ZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRBc2NlbnQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250
R2V0RGVzY2VudChDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRYSGVpZ2h0KENURm9udFJl
Zik7CitDR0Zsb2F0IENURm9udEdldFVuZGVybGluZVBvc2l0aW9uKENURm9udFJlZik7CitDR0Zs
b2F0IENURm9udEdldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZv
bnRHZXRTaXplKENURm9udFJlZik7CitDVEZvbnRTeW1ib2xpY1RyYWl0cyBDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhDVEZvbnRSZWYpOworQ0ZDaGFyYWN0ZXJTZXRSZWYgQ1RGb250Q29weUNoYXJh
Y3RlclNldChDVEZvbnRSZWYpOworQ0ZTdHJpbmdSZWYgQ1RGb250Q29weUZhbWlseU5hbWUoQ1RG
b250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGdWxsTmFtZShDVEZvbnRSZWYpOworQ1RG
b250UmVmIENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhDVEZvbnRSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIG1hdHJpeCwgQ1RGb250RGVzY3JpcHRvclJl
ZiBhdHRyaWJ1dGVzKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoTmFtZShDRlN0cmluZ1Jl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RGb250UmVmIENU
Rm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoQ0dGb250UmVmLCBDR0Zsb2F0IHNpemUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiwgQ1RGb250RGVzY3JpcHRvclJlZiBhdHRyaWJ1dGVzKTsKK0NU
Rm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RMaW5lUmVmIENU
TGluZUNyZWF0ZVdpdGhBdHRyaWJ1dGVkU3RyaW5nKENGQXR0cmlidXRlZFN0cmluZ1JlZik7CiB2
b2lkIENUTGluZURyYXcoQ1RMaW5lUmVmLCBDR0NvbnRleHRSZWYpOwogQ0ZEYXRhUmVmIENURm9u
dENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZvbnRUYWJsZU9wdGlvbnMp
OwogQ0ZBcnJheVJlZiBDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKENURm9udFJlZiwgQ1RGb250
VGFibGVPcHRpb25zKTsKIENHUGF0aFJlZiBDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgoQ1RGb250
UmVmLCBDR0dseXBoLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwordm9pZCBDVEZvbnRHZXRW
ZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwg
Q0dTaXplIHRyYW5zbGF0aW9uc1tdLCBDRkluZGV4IGNvdW50KTsKK3ZvaWQgQ1RGb250RHJhd0ds
eXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludFtdLCBzaXplX3Qg
Y291bnQsIENHQ29udGV4dFJlZik7CitDR0FmZmluZVRyYW5zZm9ybSBDVEZvbnRHZXRNYXRyaXgo
Q1RGb250UmVmKTsKK0NGQXJyYXlSZWYgQ1RGb250Q29weUZlYXR1cmVzKENURm9udFJlZik7CitD
RlR5cGVSZWYgQ1RGb250Q29weUF0dHJpYnV0ZShDVEZvbnRSZWYsIENGU3RyaW5nUmVmKTsKK0NU
Rm9udERlc2NyaXB0b3JSZWYgQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKENURm9udFJlZik7Citi
b29sIENURm9udFRyYW5zZm9ybUdseXBocyhDVEZvbnRSZWYsIENHR2x5cGhbXSwgQ0dTaXplIGFk
dmFuY2VzW10sIENGSW5kZXggY291bnQsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpOworQ0dSZWN0
IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRPcmllbnRh
dGlvbiwgY29uc3QgQ0dHbHlwaFtdLCBDR1JlY3QgYm91bmRpbmdSZWN0c1tdLCBDRkluZGV4IGNv
dW50KTsKK2RvdWJsZSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhDVEZvbnRSZWYsIENURm9u
dE9yaWVudGF0aW9uLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4
IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYsIGNv
bnN0IFVuaUNoYXJbXSwgQ0dHbHlwaFtdLCBDRkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0
R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UoQ1RGb250UmVmLCBDR0dseXBoW10sIENGUmFuZ2UpOwor
Q0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZv
bnRUYWJsZU9wdGlvbnMpOworYm9vbCBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3Rl
cnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhbXSwgQ0ZJbmRleCBjb3VudCk7
CisKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1
dGVzKENGRGljdGlvbmFyeVJlZik7Citib29sIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9u
dChDVEZvbnREZXNjcmlwdG9yUmVmKTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3Jp
cHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlN0cmluZ1JlZiwgQ0dGbG9hdCk7CiAKIFdURl9F
WFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZDk0
ZmQ2OWNkN2VkZWNhM2M4NjA2MWFmMzIwYWJiY2FiMjhjODAzZi4uMmMzNzUxMTQ3N2ZmODI1YjFj
M2JhMmNiYmI1ZWY0MTNkNWNlYTcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCkBAIC0xNTAsMTQgKzE1MCwxNyBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0
YUNvcmVUZXh0LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3Jl
VGV4dC5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAogCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCiAKICAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXgg
YmIyMTdiYjNkNDZlOWMwZmU1NjkwMzMzOThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2
YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3YTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAg
LTMwNiw3ICszMDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0KKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMy
MSw2ICszMjEsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdQVUxheWVyLm1tCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNv
cmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDcyNjA0MTE5MjI0MDVhZmQwYmJiNTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4
MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVlZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMzQ3LDcgKzM0Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR1BVTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRl
V2ViTS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlw
aFBhZ2VDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNz
aW9uVlQubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0Zsb2F0U2l6ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1
Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVmNDMwNTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMz
ZjU0NTFkODBiMTU5N2NjMGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBF
MUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzZCOTVERDIyQzg1OEE0MDBFNkYxNEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1
bmN0aW9uTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFy
eUZ1bmN0aW9uTWFwLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1
MEEyOTREMDBENkU5MjAgLyogRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDNkZEOEFEMjUwQTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2Fz
Y2FkZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5
MjAgLyogRm9udENvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTky
MCAvKiBGb250Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1
NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3Bl
Y3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYg
QEAKIAkJN0M0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0
UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFi
bGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M0Qzk2REIxQUQ0NDgzNTAwMzYzNTcyIC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVh
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcx
MEYgLyogQ29sb3JDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYg
LyogQ29sb3JDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0
QjZCRiAvKiBET01Qcm9taXNlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJ
CUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAw
MzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQlu
YW1lID0gSW5zcGVjdG9yOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2
RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8qIGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRD
b3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0
Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8q
IEdseXBoUGFnZUNvcmVUZXh0LmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyog
aW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI1ODE3LDcgKzI1ODMxLDYgQEAKIAkJCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplTWFjLm1tICovLAogCQkJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKIAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0
RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovLAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAv
KiBJY29uTWFjLm1tICovLAogCQkJCUIyNzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1h
Yy5tbSAqLywKIAkJCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0g
Ki8sCkBAIC0yNTg0NCw2ICsyNTg1Nyw3IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQw
IC8qIGNvY29hICovLAogCQkJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2Ug
Ki8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhB
QTI1MEEyOTI0MDBENkU5MjAgLyogY3QgKi8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2
IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMg
Ki8sCiAJCQkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIw
NCw3ICsyNjIxOCw3IEBACiAJCQkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNo
ZUNvcmVUZXh0LmNwcCAqLywKIAkJCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENh
Y2hlQ29yZVRleHQuaCAqLywKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENh
c2NhZGVDb2NvYS5tbSAqLywKLQkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovLAorCQkJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3Bw
ICovLAogCQkJCTFDMTJBQzJDMUVFNzc5OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2Nv
YS5jcHAgKi8sCiAJCQkJMUMxMkFDMjgxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uQ29yZVRleHQuY3BwICovLAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAv
KiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDZlZjk3ODkyN2MzMDI0OTEyN2RmNWNiZDRl
OWE1NWE4NzhkNDQ5YzMuLjY5NmZmMzlmMWExM2QxNDE4OTk0MzIxMWJmMWNjNmZlNTgyMDRiMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC00NzQsNyAr
NDc0LDcgQEAgY29uc3QgRm9udCYgRm9udDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiAg
ICAgcmV0dXJuICpkZXJpdmVkRm9udERhdGEuYnJva2VuSWRlb2dyYXBoRm9udDsKIH0KIAotI2lm
ICFQTEFURk9STShDT0NPQSkKKyNpZiAhVVNFKENUKQogCiBib29sIEZvbnQ6OmlzUHJvYmFibHlP
bmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAogewpAQCAtNTExLDcgKzUxMSw3IEBAIFJlZlB0
cjxGb250PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hCiAgICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChm
b250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkK
KyNpZiAhVVNFKENUKQogdm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdW
aWV3LCBUZXh0RGlyZWN0aW9uKSBjb25zdAogewogfQpAQCAtNjMzLDI3ICs2MzMsNiBAQCB2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKICAgICB9CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCi1ib29sIEZvbnQ6OnZhcmlhbnRDYXBz
U3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50
Q2FwcywgVUNoYXIzMikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3Rl
ciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAotewotICAgIHJldHVybiB2YXJp
YXRpb24gPyBmYWxzZSA6IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci19Ci0jZW5kaWYK
LQogYm9vbCBGb250OjpzdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QK
IHsKICAgICAvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBzdGF0aWNfY2FzdDxib29sPihnbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCmluZGV4IDdhYjUzMTdhYjEyNGVmMjZlNDEyOTY1M2Q2M2Y5ZjY3MzQ3NWEyMzcuLjM4
MmZlYjZjNTExODc2NzdiZGMyNmU3YWRkZjU4YTVmYTg5YWRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBGb250VmFyaWFu
dCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNp
c01hcmtWYXIKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxl
UGl0Y2ggfTsKIGVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFll
cyB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBmb250SGFzVGFi
bGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0YWJsZVRhZyk7CiBib29sIGZvbnRIYXNFaXRoZXJUYWJs
ZShDVEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCmluZGV4IDMyNDMwYTZiNTU0NDk5MGNkYTdiNzYzYWZmOGUwMzYwY2ZjYjNlMzYuLjMxZGNm
OTI5ODdiNjc2NTg1NzAyNDgwZjEzN2I0MTg3ZDJhZjNlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTU5NSw3ICs1OTUsNyBA
QCBib29sIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKQogICAgIHJldHVybiBzaG91
bGRVc2VGb250U21vb3RoaW5nOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0Uo
Q1QpCiBib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjQ1LDIxICsxNjQ1LDYgQEAgaW50IEZvbnRDYXNj
YWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm8KICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBp
bmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0Uo
SEFSRkJVWlopCi0vLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGlt
cGxlbWVudGF0aW9uLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6ZV90IGJhc2VDaGFy
YWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJM
ZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2Us
IE5vcm1hbFZhcmlhbnQpOwotCi0gICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBo
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250OwotfQotI2VuZGlmCi0KIHN0cnVjdCBHbHlwaEl0ZXJhdGlvblN0YXRlIHsKICAg
ICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRl
eCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDExZWU5Li5kZDc4OWQ0MjY5Njg5
MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgxLDExIEBAIHN0cnVjdCBHbHlw
aE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBmYWxzZSB9OwogfTsKIAorI2lm
IFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBDR0dseXBo
KiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOwordm9pZCBmaWxsVmVj
dG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9z
aXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRlciB7CiBwdWJsaWM6CiAgICAg
dm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZDRiYzJh
NGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uOWVmMTIyY2JiZDRjNGY3YjFmYzAw
NzI5Njg2ZDNjZDU5MWE2YzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTUyLDE1ICs1Miw2IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpCiB7CiB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JNKFdJTikK
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGNnRm9udCwgZmxv
YXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRl
eHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0
YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lk
dGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBtX2NnRm9udCA9IGNnRm9udDsK
LSAgICBBU1NFUlQobV9jZ0ZvbnQpOwotfQotI2VuZGlmCi0KICNpZiAhVVNFKEZSRUVUWVBFKQog
Rm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKIHsKQEAgLTg0LDcgKzc1LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRh
OjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSwKIH0KICNlbmRp
ZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiAKIFN0cmluZyBGb250UGxh
dGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlh
OTY0NGIxMzFjNTM2ZTIwYmIwOGE0YzA0ZGFjLi41Njk5NGE4OTI0ZWJkMWYyZDI1ZDNiZjI3ZTlk
ZDcyYWMwNmY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KQEAgLTQ5LDcgKzQ5LDcg
QEAKIE9CSkNfQ0xBU1MgTlNGb250OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBVU0UoQ1QpCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2Vu
ZGlmCiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9u
dE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyk7CiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShD
VEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5
bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxh
cldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJl
bmRlcmluZyk7CiAjZW5kaWYKIApAQCAtOTAsMTYgKzkwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdp
dGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCk7CiAKLSNpZiBVU0UoQ0cpICYm
IFBMQVRGT1JNKFdJTikKLSAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShXSU4pCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9v
bCB1c2VHREkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLSAgICBG
b250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsK
KyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdESU9i
amVjdDxIRk9OVD4sIENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCkBAIC0xMTUsMTEgKzExMSwxMSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udCA/IG1fZm9udC0+Z2V0KCkgOiAwOyB9CisgICAgSEZPTlQgaGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2hGb250ID8gbV9oRm9udC0+Z2V0KCkgOiAwOyB9CiAgICAgYm9vbCB1c2VH
REkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgQ1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnQuZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBDVEZvbnRSZWYgcmVnaXN0ZXJlZEZv
bnQoKSBjb25zdDsgLy8gUmV0dXJucyBudWxscHRyIGlmZiB0aGUgZm9udCBpcyBub3QgcmVnaXN0
ZXJlZCwgc3VjaCBhcyB3ZWIgZm9udHMgKG90aGVyd2lzZSByZXR1cm5zIGZvbnQoKSkuCiAKQEAg
LTEzNiwxMCArMTMyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNWYXJpYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWYXJpYXRpb25zOyB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JN
KFdJTikKLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0
KCk7IH0KLSNlbmRpZgotCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIElEV3JpdGVGb250KiBkd0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5nZXQoKTsgfQogICAgIElEV3JpdGVGb250RmFj
ZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQpAQCAt
MjIyLDE2ICsyMTQsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkU2NhbGVkRm9udChjYWly
b19mb250X2ZhY2VfdCopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2Ygb25lIG9mIHRoZXNlLiBUaGVzZSB0d28gZm9u
dHMgYXJlIHN1YnRseSBkaWZmZXJlbnQsIGFuZCBpdCBpcyBub3Qgb2J2aW91cyB3aGljaCBvbmUg
dG8gdXNlIHdoZXJlLgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fZm9udDsKICAgICBtdXRh
YmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIFJlZlB0cjxTaGFyZWRHRElPYmplY3Q8SEZPTlQ+PiBtX2ZvbnQ7CiAjZW5kaWYKIAotI2lm
IFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dG
b250OworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05U
Pj4gbV9oRm9udDsKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQpAQCAtMjc2LDcgKzI2Niw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiBib29sIGlzU3lzdGVtRm9udChDVEZvbnRSZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRmNTguLjNk
NjMyOGNiMWMwMzFhNTdmMTNhNTA0MWFhYWJiMmUyYjY1NjMyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtMjMsMTkgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVmZmVyLmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3QuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQUEtJVCkK
LSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJS2l0
U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszNyw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3JlVUksIENV
SVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQg
PSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDcsNyBAQCBib29sIEZvbnRDYXNj
YWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0g
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tp
IC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAx
XS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNb
aSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0LnRleHRE
cmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQm
IGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZh
bmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3ND
b250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAg
ICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzk5LDQgQEAgc3RhdGljIHZvaWQgc2hvd0xldHRl
cnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0
IEYKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUqIGFkdmFuY2VzLCB1bnNpZ25l
ZCBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Nv
bnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwotCi0g
ICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC5wbGF0Zm9ybURh
dGEoKTsKLSAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBwb3NpdGlvbnMoY291bnQpOwotICAgIGlm
IChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2Fs
KSB7Ci0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJvdGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0Fm
ZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEsIDAsIDAsIDApOwotICAgICAgICBDR0FmZmluZVRy
YW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKLSAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVuTWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRyYW5zZm9ybSk7Ci0gICAgICAgIFNjb3BlZFRleHRN
YXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4LCBjb250ZXh0KTsKLQotICAgICAgICBWZWN0b3I8
Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7Ci0gICAgICAgIENURm9udEdldFZlcnRp
Y2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0
cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7Ci0KLSAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJp
eChjb250ZXh0KSk7Ci0KLSAgICAgICAgQ0dQb2ludCBwb3NpdGlvbiA9IEZsb2F0UG9pbnQocG9p
bnQueCgpLCBwb2ludC55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dy
YXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNzKCkuZmxvYXRBc2NlbnQoKSk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBD
R1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlv
bnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICAgICAgcG9zaXRpb25zW2ldID0g
Q0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9pbnRNYWtlKHBvc2l0aW9uLnggLSB0cmFu
c2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5zbGF0aW9uLmhlaWdodCksIHRyYW5zZm9y
bSk7Ci0gICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFkdmFuY2VzW2ldLndpZHRoOwotICAgICAg
ICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNlc1tpXS5oZWlnaHQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRp
b25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZpbGxW
ZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25zKHBvc2l0aW9ucywgY29udGV4dCwgYWR2
YW5jZXMsIGNvdW50KTsKLSAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEuY3RG
b250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVyaW5nTW9kZShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250
ZXh0LCB0cnVlKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBD
R0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKLSAgICBib29sIGlzVHJhbnNsYXRpb25PckludGVn
cmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5hKSAmJiBXVEY6Omlz
SW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5kKSAmJiBjb250ZXh0VHJhbnNmb3JtLmIgPT0gMC5m
ICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAwLmY7Ci0gICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNv
bnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0VHJhbnNmb3JtLmMpICYmIChjb250ZXh0VHJhbnNm
b3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5kKSk7Ci0gICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRp
emF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSB8fCAoIWlzUm90YXRlZCAmJiBj
b250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpKTsKLQotICAgIENHQ29udGV4dFNl
dFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIHRydWUpOwotICAgIENHQ29u
dGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxR
dWFudGl6YXRpb24pOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0
UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQotewot
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
LQotICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICBib29sIHNob3VsZFNtb290
aEZvbnRzID0gdHJ1ZTsKLSAgICAKLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkp
Ci0gICAgICAgIHNtb290aGluZ01vZGUgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7
Ci0KLSAgICBzd2l0Y2ggKHNtb290aGluZ01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdN
b2RlOjpBbnRpYWxpYXNlZDoKLSAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZzoK
LSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOgotICAgICAg
ICBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzoKLSAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gZmFs
c2U7Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGlmICghc2hvdWxkVXNlU21vb3RoaW5nKCkpCi0gICAgICAgIHNob3VsZFNt
b290aEZvbnRzID0gZmFsc2U7Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29s
IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyA9IENHQ29udGV4dEdldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCk7Ci0gICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFs
U2hvdWxkVXNlRm9udFNtb290aGluZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3Ro
Rm9udHMoY2dDb250ZXh0LCBzaG91bGRTbW9vdGhGb250cyk7Ci0jZW5kaWYKLQotICAgIGJvb2wg
b3JpZ2luYWxTaG91bGRBbnRpYWxpYXMgPSBDR0NvbnRleHRHZXRTaG91bGRBbnRpYWxpYXMoY2dD
b250ZXh0KTsKLSAgICBpZiAoc2hvdWxkQW50aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFs
aWFzKQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBzaG91
bGRBbnRpYWxpYXMpOwotCi0gICAgYm9vbCB1c2VMZXR0ZXJwcmVzc0VmZmVjdCA9IHNob3VsZFVz
ZUxldHRlcnByZXNzRWZmZWN0KGNvbnRleHQpOwotICAgIEZsb2F0UG9pbnQgcG9pbnQgPSBhbmNo
b3JQb2ludDsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNm
b3JtSWRlbnRpdHk7Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSkK
LSAgICAgICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250KCkpOwot
ICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwotICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwotICAg
IGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7Ci0gICAgICAgIHN0YXRpYyBm
bG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBwaUZsb2F0
IC8gMTgwKTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChmb250LmlzVGV4dE9yaWVu
dGF0aW9uRmFsbGJhY2soKSkKLSAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVlU2tldywg
MCwgMSwgMCwgMCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEs
IC1vYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlKDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOwotICAgIH0KLSAgICBTY29wZWRU
ZXh0TWF0cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKLQotICAgIHNldENHRm9udFJl
bmRlcmluZ01vZGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dDb250ZXh0
LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKLQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0g
ICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBjb250ZXh0
LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAg
IEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKLSAgICBmbG9h
dCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAg
aWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9yVHJhbnNs
YXRpb25PckZsaXBwZWQoKSkgewotICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVuaXRTaXpl
SW5EZXZpY2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDApKTsKLSAg
ICAgICAgZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNxcnRmKGhv
cml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFsVW5pdFNp
emVJbkRldmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhl
bHMuaGVpZ2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWlnaHQoKSk7
Ci0gICAgICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7Ci0gICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29uJ3QgYmxv
dyB1cCB0aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4gCi0gICAgICAgICAgICBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9mZnNldCwgc3ludGhldGljQm9sZE9m
ZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpOwotICAgICAgICB9Ci0g
ICAgfTsKLQotICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJhd2luZ01v
ZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxpZCgpICYm
ICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAmJiAoIWNv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwotICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKLSAgICAgICAgLy8gUGFpbnQgc2ltcGxl
IHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dzLCB0byBh
dm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgotICAgICAgICBjb250ZXh0LmNsZWFy
U2hhZG93KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENvbG9yKCk7
Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0aEFs
cGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGNvbnRl
eHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7Ci0gICAgICAgIGZsb2F0IHNoYWRvd1Rl
eHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAgICAgIC8vIElmIHNo
YWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBsaWVkIHRo
ZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCi0gICAgICAgIGZs
b2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgpICogKGNv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7Ci0gICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4dFkpLCBm
b250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0gICAgICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0
KQotICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1Rl
eHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51
bUdseXBocyk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0gICAg
fQotCi0gICAgaWYgKHVzZUxldHRlcnByZXNzRWZmZWN0KQotICAgICAgICBzaG93TGV0dGVycHJl
c3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2ludCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZmZXIu
Z2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLSAg
ICBlbHNlCi0gICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgc2hv
d0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKLQotICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgaWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGlu
ZykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmln
aW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOwotI2VuZGlmCi0KLSAgICBpZiAoc2hvdWxkQW50
aWFsaWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQotICAgICAgICBDR0NvbnRleHRTZXRT
aG91bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Ci19Ci0K
LWJvb2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKLXsKLSAg
ICBjb25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIGlzU3lz
dGVtRm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Ci19Ci0KLS8vIEZJWE1F
OiBVc2UgdGhpcyBvbiBhbGwgcG9ydHMuCi1jb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZv
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKSBjb25zdAotewotICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKLSAgICBzaXpl
X3QgYmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7Ci0gICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFz
ZUNoYXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKLQotICAgIEdseXBoRGF0
YSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFy
YWN0ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsKLQotICAgIGlmICghYmFzZUNoYXJhY3Rlckds
eXBoRGF0YS5nbHlwaCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAobGVuZ3Ro
ID09IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCi0gICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmZvbnQ7Ci0KLSAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgp
OyArK2kpIHsKLSAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSku
Zm9udEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYgKCFmb250KQotICAg
ICAgICAgICAgY29udGludWU7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYg
KGJhc2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZv
bnQtPnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQotICAgICAgICAgICAgY29udGludWU7Ci0j
ZW5kaWYKLSAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgewotICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dy
YXBoT3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkp
Ci0gICAgICAgICAgICAgICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0
aW9uKCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmll
bnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGgg
PSB2ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKLSAg
ICAgICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlw
aERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZv
bnQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVw
cmlnaHRGb250ID0gZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOwotICAgICAgICAgICAg
ICAgIEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJh
c2VDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNo
YXJhY3RlckdseXBoRGF0YS5nbHlwaCkKLSAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJp
Z2h0Rm9udDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmb250ID09
IGJhc2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkKLSAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJh
Y3RlckZvbnQgPSB0cnVlOwotCi0gICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQotICAgICAgICAgICAgcmV0dXJu
IGZvbnQ7Ci0gICAgfQotCi0gICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VD
aGFyYWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNh
blJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCi0g
ICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7Ci0KLSAgICByZXR1cm4g
Rm9udDo6c3lzdGVtRmFsbGJhY2soKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmEyYTM5
Y2ExYjE5MDllOTlkMGIwYjNlYWYzYjBhZTYyODcxYTc3OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAKQEAgLTAs
MCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxl
eGV5IFByb3NrdXJ5YWtvdgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IkZvbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OnBsYXRmb3JtRGVz
dHJveSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTg5YmUxZDRmMzk1MjMyNTMzMDU2NDUwZjdiYzgyYTQ5MzIxM2Ez
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIC9kZXYvbnVs
bApAQCAtMSw3NzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAx
MCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIK
LSNpbXBvcnQgIkZvbnQuaCIKLQotI2ltcG9ydCAiQ29sb3IuaCIKLSNpbXBvcnQgIkZsb2F0UmVj
dC5oIgotI2ltcG9ydCAiRm9udENhY2hlLmgiCi0jaW1wb3J0ICJGb250Q2FzY2FkZS5oIgotI2lt
cG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW1wb3J0ICJMb2NhbGVDb2NvYS5oIgotI2ltcG9y
dCAiT3BlblR5cGVDRy5oIgotI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0IDxDb3Jl
VGV4dC9Db3JlVGV4dC5oPgotI2ltcG9ydCA8ZmxvYXQuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+
Ci0jaW1wb3J0IDx1bmljb2RlL3VjaGFyLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL1N0ZExpYkV4dHJhcy5oPgot
Ci0jaWYgVVNFKEFQUEtJVCkKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotCi0K
LSNpZiBVU0UoQVBQS0lUKQotQGludGVyZmFjZSBOU0ZvbnQgKFdlYkFwcEtpdFNlY3JldEFQSSkK
LS0gKEJPT0wpX2lzRmFrZUZpeGVkUGl0Y2g7Ci1AZW5kCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0
cmluZ1JlZiBhLCBDRlN0cmluZ1JlZiBiKQotewotICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29t
cGFyZShhLCBiLCBrQ0ZDb21wYXJlQ2FzZUluc2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxU
bzsKLX0KLQotc3RhdGljIGJvb2wgZm9udEhhc1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBmb250
KQotewotICAgIHJldHVybiBmb250SGFzRWl0aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxlVmhl
YSwga0NURm9udFRhYmxlVk9SRyk7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotYm9v
bCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1p
bHlOYW1lKQotewotICAgIGlmICghZm9udEZhbWlseU5hbWUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIFRpbWVzIE5ldyBSb21hbiBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3JtYW50
IGVub3VnaCB0byB1c2UuIDxyZGFyOi8vcHJvYmxlbS8yMTMzMzMyNj4KLSAgICAvLyBGSVhNRSA8
cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFi
b3ZlIGJ1ZyBpcyBmaXhlZC4KLSAgICByZXR1cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGlt
ZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
LSAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFyZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWlseU5h
bWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0IGtM
aW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVmOwotCi1zdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1
c3RtZW50KENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFt
aWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoZm9udCkpOwotCi0gICAgaWYg
KCFmYW1pbHlOYW1lIHx8ICFDRlN0cmluZ0dldExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIlRpbWVzIikpCi0gICAgICAgIHx8IGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhlbHZldGljYSIpKQotICAgICAg
ICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIuSGVs
dmV0aWNhIE5ldWVVSSIpKTsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGJvb2wgbmVlZHNBc2NlbnRB
ZGp1c3RtZW50KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5h
bWUgJiYgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVzIikp
Ci0gICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkhl
bHZldGljYSIpKQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUs
IENGU1RSKCJDb3VyaWVyIikpKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBib29sIGlzQWhlbUZv
bnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkKLXsKLSAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiBj
YXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJBaGVtIikpOwotfQotCi1i
b29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYgY3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykKLXsK
LSAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhj
dEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmICghdGFibGVUYWdz
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5
R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsKLSAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBp
bmRleCA8IG51bVRhYmxlczsgKytpbmRleCkgewotICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19j
YXN0PENURm9udFRhYmxlVGFnPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0KCksIGluZGV4KSkpOwotICAgICAgICBpZiAodGFn
ID09IHRhYmxlVGFnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBmb250SGFzRWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwg
dW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25lZCB0YWJsZVRhZzIpCi17Ci0gICAgYXV0byB0YWJs
ZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250
VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFncykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxl
VGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJs
ZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJs
ZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
dGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZzEg
fHwgdGFnID09IHRhYmxlVGFnMikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IGNlaWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDI0
LjBmKSA6IDAuZjsKLSNlbHNlCi0gICAgbV9zeW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpID8gMS4wZiA6IDAuZjsKLSNlbmRpZgotCi0gICAgdW5zaWdu
ZWQgdW5pdHNQZXJFbSA9IENURm9udEdldFVuaXRzUGVyRW0obV9wbGF0Zm9ybURhdGEuZm9udCgp
KTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCk7Ci0gICAgQ0dG
bG9hdCBjYXBIZWlnaHQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRDYXBIZWlnaHQobV9wbGF0Zm9y
bURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBsaW5lR2FwID0gcG9pbnRTaXplID8gQ1RG
b250R2V0TGVhZGluZyhtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLSAgICBDR0Zsb2F0IGFz
Y2VudCA9IHBvaW50U2l6ZSA/IENURm9udEdldEFzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkp
IDogMDsKLSAgICBDR0Zsb2F0IGRlc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXREZXNjZW50
KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOwotCi0gICAgLy8gVGhlIE9wZW4gRm9udCBGb3Jt
YXQgZGVzY3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgot
ICAgIC8vICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8yLnNU
eXBvQXNjZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBhcyBh
IHZhbHVlIGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKLSAgICAvLyBP
biBPUyBYLCB3ZSBvbmx5IGFwcGx5IHRoaXMgcnVsZSBpbiB0aGUgaW1wb3J0YW50IGNhc2Ugb2Yg
Zm9udHMgd2l0aCBhIE1BVEggdGFibGUuCi0gICAgaWYgKGZvbnRIYXNUYWJsZShtX3BsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwga0NURm9udFRhYmxlTUFUSCkpIHsKLSAgICAgICAgc2hvcnQgdHlwb0Fz
Y2VudCwgdHlwb0Rlc2NlbnQsIHR5cG9MaW5lR2FwOwotICAgICAgICBpZiAoT3BlblR5cGU6OnRy
eUdldFR5cG9NZXRyaWNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwgdHlwb0FzY2VudCwgdHlwb0Rl
c2NlbnQsIHR5cG9MaW5lR2FwKSkgewotICAgICAgICAgICAgYXNjZW50ID0gc2NhbGVFbVRvVW5p
dHModHlwb0FzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgICAgICBkZXNj
ZW50ID0gLXNjYWxlRW1Ub1VuaXRzKHR5cG9EZXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6
ZTsKLSAgICAgICAgICAgIGxpbmVHYXAgPSBzY2FsZUVtVG9Vbml0cyh0eXBvTGluZUdhcCwgdW5p
dHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIGZhbWls
eU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSkpOwotCi0gICAgLy8gRGlzYWJsZSBhbnRpYWxpYXNpbmcgd2hlbiByZW5kZXJpbmcgd2l0aCBB
aGVtIGJlY2F1c2UgbWFueSB0ZXN0cyByZXF1aXJlIHRoaXMuCi0gICAgaWYgKGlzQWhlbUZvbnQo
ZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIG1fYWxsb3dzQW50aWFsaWFzaW5nID0gZmFsc2U7
Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgVGltZXMsIEhl
bHZldGljYSwgYW5kIENvdXJpZXIgdG8gY2xvc2VseSBtYXRjaCB0aGUKLSAgICAvLyB2ZXJ0aWNh
bCBtZXRyaWNzIG9mIHRoZWlyIE1pY3Jvc29mdCBjb3VudGVycGFydHMgdGhhdCBhcmUgdGhlIGRl
IGZhY3RvCi0gICAgLy8gd2ViIHN0YW5kYXJkLiBUaGUgQXBwS2l0IGFkanVzdG1lbnQgb2YgMjAl
IGlzIHRvbyBiaWcgYW5kIGlzCi0gICAgLy8gaW5jb3JyZWN0bHkgYWRkZWQgdG8gbGluZSBzcGFj
aW5nLCBzbyB3ZSB1c2UgYSAxNSUgYWRqdXN0bWVudCBpbnN0ZWFkCi0gICAgLy8gYW5kIGFkZCBp
dCB0byB0aGUgYXNjZW50LgotICAgIGlmIChvcmlnaW4oKSA9PSBPcmlnaW46OkxvY2FsICYmIG5l
ZWRzQXNjZW50QWRqdXN0bWVudChmYW1pbHlOYW1lLmdldCgpKSkKLSAgICAgICAgYXNjZW50ICs9
IHN0ZDo6cm91bmQoKGFzY2VudCArIGRlc2NlbnQpICogMC4xNWYpOwotI2VuZGlmCi0KLSAgICAv
LyBDb21wdXRlIGxpbmUgc3BhY2luZyBiZWZvcmUgdGhlIGxpbmUgbWV0cmljcyBoYWNrcyBhcmUg
YXBwbGllZC4KLSAgICBmbG9hdCBsaW5lU3BhY2luZyA9IGxyb3VuZGYoYXNjZW50KSArIGxyb3Vu
ZGYoZGVzY2VudCkgKyBscm91bmRmKGxpbmVHYXApOwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAg
IC8vIEhhY2sgSGlyYWdpbm8gbGluZSBtZXRyaWNzIHRvIGFsbG93IHJvb20gZm9yIG1hcmtlZCB0
ZXh0IHVuZGVybGluZXMuCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzUzODYxODM+Ci0gICAgaWYg
KGRlc2NlbnQgPCAzICYmIGxpbmVHYXAgPj0gMyAmJiBmYW1pbHlOYW1lICYmIENGU3RyaW5nSGFz
UHJlZml4KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIaXJhZ2lubyIpKSkgewotICAgICAgICBs
aW5lR2FwIC09IDMgLSBkZXNjZW50OwotICAgICAgICBkZXNjZW50ID0gMzsKLSAgICB9Ci0jZW5k
aWYKLSAgICAKLSAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3Jp
ZW50YXRpb246OlZlcnRpY2FsICYmICFpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0gICAg
ICAgIG1faGFzVmVydGljYWxHbHlwaHMgPSBmb250SGFzVmVydGljYWxHbHlwaHMobV9wbGF0Zm9y
bURhdGEuY3RGb250KCkpOwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBDR0Zsb2F0
IGFkanVzdG1lbnQgPSBzaG91bGRVc2VBZGp1c3RtZW50KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkg
PyBjZWlsKChhc2NlbnQgKyBkZXNjZW50KSAqIGtMaW5lSGVpZ2h0QWRqdXN0bWVudCkgOiAwOwot
Ci0gICAgbGluZUdhcCA9IGNlaWxmKGxpbmVHYXApOwotICAgIGxpbmVTcGFjaW5nID0gY2VpbChh
c2NlbnQpICsgYWRqdXN0bWVudCArIGNlaWwoZGVzY2VudCkgKyBsaW5lR2FwOwotICAgIGFzY2Vu
dCA9IGNlaWxmKGFzY2VudCArIGFkanVzdG1lbnQpOwotICAgIGRlc2NlbnQgPSBjZWlsZihkZXNj
ZW50KTsKLQotICAgIG1fc2hvdWxkTm90QmVVc2VkRm9yQXJhYmljID0gZm9udEZhbWlseVNob3Vs
ZE5vdEJlVXNlZEZvckFyYWJpYyhmYW1pbHlOYW1lLmdldCgpKTsKLSNlbmRpZgotCi0gICAgQ0dG
bG9hdCB4SGVpZ2h0ID0gMDsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuc2l6ZSgpKSB7Ci0gICAg
ICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6
SG9yaXpvbnRhbCkgewotICAgICAgICAgICAgLy8gTWVhc3VyZSB0aGUgYWN0dWFsIGNoYXJhY3Rl
ciAieCIsIHNpbmNlIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4dGVuZCBiZWxvdyB0aGUgYmFz
ZWxpbmUsIGFuZCB3ZSBuZWVkIHRoZQotICAgICAgICAgICAgLy8gcmVwb3J0ZWQgeC1oZWlnaHQg
dG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBnbHlwaCB0aGF0IGlzIGFib3ZlIHRo
ZSBiYXNlbGluZS4KLSAgICAgICAgICAgIEdseXBoIHhHbHlwaCA9IGdseXBoRm9yQ2hhcmFjdGVy
KCd4Jyk7Ci0gICAgICAgICAgICBpZiAoeEdseXBoKQotICAgICAgICAgICAgICAgIHhIZWlnaHQg
PSAtQ0dSZWN0R2V0TWluWShwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKHhHbHlwaCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHhIZWlnaHQgPSBDVEZvbnRHZXRYSGVpZ2h0KG1f
cGxhdGZvcm1EYXRhLmZvbnQoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeEhlaWdo
dCA9IHZlcnRpY2FsUmlnaHRPcmllbnRhdGlvbkZvbnQoKS5mb250TWV0cmljcygpLnhIZWlnaHQo
KTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7
Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2NlbnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNz
LnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRDYXBIZWlnaHQoY2Fw
SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9m
b250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGlu
ZVNwYWNpbmcobGluZVNwYWNpbmcpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lUG9z
aXRpb24oLUNURm9udEdldFVuZGVybGluZVBvc2l0aW9uKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkp
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0VW5kZXJsaW5lVGhpY2tuZXNzKENURm9udEdldFVuZGVy
bGluZVRoaWNrbmVzcyhtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLX0KLQotdm9pZCBGb250Ojpw
bGF0Zm9ybUNoYXJXaWR0aEluaXQoKQotewotICAgIG1fYXZnQ2hhcldpZHRoID0gMDsKLSAgICBt
X21heENoYXJXaWR0aCA9IDA7Ci0KLSAgICBhdXRvIG9zMlRhYmxlID0gYWRvcHRDRihDVEZvbnRD
b3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250VGFibGVPUzIsIGtDVEZvbnRU
YWJsZU9wdGlvbk5vT3B0aW9ucykpOwotICAgIGlmIChvczJUYWJsZSAmJiBDRkRhdGFHZXRMZW5n
dGgob3MyVGFibGUuZ2V0KCkpID49IDQpIHsKLSAgICAgICAgY29uc3QgVUludDgqIG9zMiA9IENG
RGF0YUdldEJ5dGVQdHIob3MyVGFibGUuZ2V0KCkpOwotICAgICAgICBTSW50MTYgb3MyQXZnQ2hh
cldpZHRoID0gb3MyWzJdICogMjU2ICsgb3MyWzNdOwotICAgICAgICBtX2F2Z0NoYXJXaWR0aCA9
IHNjYWxlRW1Ub1VuaXRzKG9zMkF2Z0NoYXJXaWR0aCwgbV9mb250TWV0cmljcy51bml0c1BlckVt
KCkpICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIGF1dG8gaGVhZFRhYmxl
ID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBrQ1RGb250
VGFibGVIZWFkLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoaGVhZFRh
YmxlICYmIENGRGF0YUdldExlbmd0aChoZWFkVGFibGUuZ2V0KCkpID49IDQyKSB7Ci0gICAgICAg
IGNvbnN0IFVJbnQ4KiBoZWFkID0gQ0ZEYXRhR2V0Qnl0ZVB0cihoZWFkVGFibGUuZ2V0KCkpOwot
ICAgICAgICB1c2hvcnQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiArIGhlYWRbMzddOwotICAgICAg
ICB1c2hvcnQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhlYWRbNDFdOwotICAgICAgICBTSW50
MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4pOwotICAgICAgICBTSW50MTYgeE1h
eCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOwotICAgICAgICBmbG9hdCBkaWZmID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSBz
Y2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRm
b3JtRGF0YS5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRmFsbGJhY2sgdG8gYSBjcm9zcy1wbGF0
Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0aGVzZSB2YWx1ZXMgaWYgdGhleSBh
cmUgbm9uLXBvc2l0aXZlLgotICAgIGluaXRDaGFyV2lkdGhzKCk7Ci19Ci0KLXZvaWQgRm9udDo6
cGxhdGZvcm1EZXN0cm95KCkKLXsKLX0KLQotYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRz
Q2hhcmFjdGVyRm9yU3ludGhlc2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAotewotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBU
QVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCi0gICAgR2x5cGggZ2x5cGggPSBnbHlwaEZv
ckNoYXJhY3RlcihjaGFyYWN0ZXIpOwotICAgIGlmICghZ2x5cGgpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHN3aXRjaCAoZm9udFZhcmlhbnRDYXBzKSB7Ci0gICAgY2FzZSBGb250VmFy
aWFudENhcHM6OlNtYWxsOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBv
cnRlZEJ5U21hbGxDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5
cGggJiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpQZXRpdGU6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVk
QnlQZXRpdGVDYXBzKCk7Ci0gICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGgg
JiYgc3VwcG9ydGVkLmdldChnbHlwaCk7Ci0gICAgfQotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBz
OjpBbGxTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBo
ICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsUGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICAvLyBTeW50aGVzaXMgb25seSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0
ZWQgYWJvdmUuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VE
X1BBUkFNKGNoYXJhY3Rlcik7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAg
IGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6
UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNlIEZv
bnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2Fw
cyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQ
TEFURk9STShNQUMpCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBz
T3BlblR5cGVEaWN0aW9uYXJ5KENGU3RyaW5nUmVmIGtleSwgaW50IHJhd1ZhbHVlKQotewotICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gdmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOwotICAgIENG
VHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRPcGVu
VHlwZUZlYXR1cmVWYWx1ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2YWx1
ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc1Ry
dWVUeXBlRGljdGlvbmFyeShpbnQgcmF3S2V5LCBpbnQgcmF3VmFsdWUpCi17Ci0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBrZXkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdLZXkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZO
dW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBDRlR5cGVSZWYga2V5c1td
ID0geyBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVyZVNlbGVj
dG9ySWRlbnRpZmllcktleSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LmdldCgp
LCB2YWx1ZS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyks
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKLX0KLQotc3RhdGljIHZvaWQgdW5pb25CaXRWZWN0b3JzKEJpdFZlY3RvciYg
cmVzdWx0LCBDRkJpdFZlY3RvclJlZiBzb3VyY2UpCi17Ci0gICAgQ0ZJbmRleCBsZW5ndGggPSBD
RkJpdFZlY3RvckdldENvdW50KHNvdXJjZSk7Ci0gICAgcmVzdWx0LmVuc3VyZVNpemUobGVuZ3Ro
KTsKLSAgICBDRkluZGV4IG1pbiA9IDA7Ci0gICAgd2hpbGUgKG1pbiA8IGxlbmd0aCkgewotICAg
ICAgICBDRkluZGV4IG5leHRJbmRleCA9IENGQml0VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0KHNv
dXJjZSwgQ0ZSYW5nZU1ha2UobWluLCBsZW5ndGggLSBtaW4pLCAxKTsKLSAgICAgICAgaWYgKG5l
eHRJbmRleCA9PSBrQ0ZOb3RGb3VuZCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICByZXN1
bHQuc2V0KG5leHRJbmRleCwgdHJ1ZSk7Ci0gICAgICAgIG1pbiA9IG5leHRJbmRleCArIDE7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU3RyaW5nUmVm
IGZlYXR1cmUsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292
ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShmZWF0dXJl
LCAxKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGluamVjdFRydWVUeXBlQ292ZXJhZ2UoaW50IHR5cGUsIGludCBz
ZWxlY3RvciwgQ1RGb250UmVmIGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQotewotICAgIFJldGFp
blB0cjxDRkJpdFZlY3RvclJlZj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3Zl
cmFnZUZvckZlYXR1cmUoZm9udCwgc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUsIHNl
bGVjdG9yKS5nZXQoKSkpOwotICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQo
KSk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENh
cHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcykgewot
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAg
ICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOwotICAgICAgICBp
bmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxs
Q2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFs
bENhcHMudmFsdWUoKTsKLX0KLQotY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0
ZWRCeUFsbFNtYWxsQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsU21hbGxDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMg
PSBCaXRWZWN0b3IoKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21j
cCIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENh
cHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMyc2Mi
KSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
LnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBl
LCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1
ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9y
LCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMu
dmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVk
QnlQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRp
dGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzID0gQml0VmVj
dG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxh
dGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgp
KTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2Vy
Q2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ2x5cGhz
U3VwcG9ydGVkQnlQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9u
dDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzKSB7Ci0gICAgICAgIG1fZ2x5cGhzU3VwcG9y
dGVkQnlBbGxQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBl
Q292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0T3BlblR5cGVD
b3ZlcmFnZShDRlNUUigiYzJwYyIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3Vw
cG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNv
dmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0
Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVl
KCkpOwotICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBlckNhc2VUeXBlLCBrVXBw
ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhz
U3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9n
bHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKTsKLX0KLSNlbmRpZgotCi1zdGF0
aWMgUmVmUHRyPEZvbnQ+IGNyZWF0ZURlcml2YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9h
dCBzaXplLCBGb250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIENURm9udFN5bWJvbGljVHJhaXRz
IGZvbnRUcmFpdHMsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCi17
Ci0gICAgaWYgKCFmb250KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChzeW50
aGV0aWNCb2xkKQotICAgICAgICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7Ci0gICAg
aWYgKHN5bnRoZXRpY0l0YWxpYykKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGlj
VHJhaXQ7Ci0KLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RG
b250R2V0U3ltYm9saWNUcmFpdHMoZm9udCk7Ci0KLSAgICBib29sIHVzZWRTeW50aGV0aWNCb2xk
ID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMg
JiBrQ1RGb250VHJhaXRCb2xkKTsKLSAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZv
bnRUcmFpdHMgJiBrQ1RGb250SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtD
VEZvbnRUcmFpdEl0YWxpYyk7Ci0gICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShm
b250LCBzaXplLCB1c2VkU3ludGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVu
dGF0aW9uKTsKLQotICAgIHJldHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOwotfQot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNPcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmUpCi17Ci0gICAgcmV0dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtD
VEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1
cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBpc1RydWVUeXBlRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKLXsKLSAgICByZXR1
cm4gQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRl
bnRpZmllcktleSkgJiYgQ0ZEaWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFs
PENGU3RyaW5nUmVmPiBvcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17
Ci0gICAgQVNTRVJUKGlzT3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKLSAgICBDRlN0cmluZ1Jl
ZiB0YWcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVh
dHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOwotICAgIGludCByYXdWYWx1ZTsKLSAg
ICBDRk51bWJlclJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25h
cnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpKTsKLSAgICBh
dXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmF3VmFsdWUpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0gICAgcmV0
dXJuIHJhd1ZhbHVlID8gT3B0aW9uYWw8Q0ZTdHJpbmdSZWY+KHRhZykgOiBXVEY6Om51bGxvcHQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjpwYWlyPGludCwgaW50PiB0cnVlVHlwZUZlYXR1cmUo
Q0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0dXJl
KGZlYXR1cmUpKTsKLSAgICBpbnQgcmF3VHlwZTsKLSAgICBDRk51bWJlclJlZiB0eXBlID0gc3Rh
dGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJl
ckdldFZhbHVlKHR5cGUsIGtDRk51bWJlckludFR5cGUsICZyYXdUeXBlKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIGludCByYXdTZWxlY3RvcjsKLSAgICBDRk51
bWJlclJlZiBzZWxlY3RvciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlH
ZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwot
ICAgIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmcmF3U2VsZWN0b3IpOwotICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJhd1R5cGUsIHJhd1NlbGVjdG9yKTsKLX0KLQotc3Rh
dGljIGlubGluZSBDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUo
aW50IGtleSwgQ1RGb250UmVmIGZvbnQpCi17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZl
YXR1cmVzID0gYWRvcHRDRihDVEZvbnRDb3B5RmVhdHVyZXMoZm9udCkpOwotICAgIENGSW5kZXgg
ZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAgICAgICBDRkRpY3Rp
b25hcnlSZWYgZmVhdHVyZVR5cGUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAgQ0ZOdW1iZXJS
ZWYgZmVhdHVyZUtleSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAg
ICAgICBpZiAoIWZlYXR1cmVLZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaW50
IHJhd0ZlYXR1cmVLZXk7Ci0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUoZmVhdHVyZUtleSwga0NG
TnVtYmVySW50VHlwZSwgJnJhd0ZlYXR1cmVLZXkpOwotICAgICAgICBpZiAocmF3RmVhdHVyZUtl
eSAhPSBrZXkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBDRkFycmF5UmVmIGZl
YXR1cmVTZWxlY3RvcnMgPSBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRW
YWx1ZShmZWF0dXJlVHlwZSwga0NURm9udEZlYXR1cmVUeXBlU2VsZWN0b3JzS2V5KSk7Ci0gICAg
ICAgIGlmICghZmVhdHVyZVNlbGVjdG9ycykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBDRkluZGV4IHNlbGVjdG9yc0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVTZWxlY3Rv
cnMpOwotICAgICAgICBmb3IgKENGSW5kZXggaiA9IDA7IGogPCBzZWxlY3RvcnNDb3VudDsgKytq
KSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVNlbGVjdG9yID0gc3RhdGlj
X2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVTZWxl
Y3RvcnMsIGopKTsKLSAgICAgICAgICAgIENGTnVtYmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtD
VEZvbnRGZWF0dXJlU2VsZWN0b3JEZWZhdWx0S2V5KSk7Ci0gICAgICAgICAgICBpZiAoIWlzRGVm
YXVsdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGludCByYXdJc0Rl
ZmF1bHQ7Ci0gICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKGlzRGVmYXVsdCwga0NGTnVtYmVy
SW50VHlwZSwgJnJhd0lzRGVmYXVsdCk7Ci0gICAgICAgICAgICBpZiAoIXJhd0lzRGVmYXVsdCkK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHJlbW92ZWRGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRSZWYg
Zm9udCkKLXsKLSAgICBib29sIGlzT3BlblR5cGUgPSBpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJl
KTsKLSAgICBib29sIGlzVHJ1ZVR5cGUgPSBpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKLSAg
ICBpZiAoIWlzT3BlblR5cGUgJiYgIWlzVHJ1ZVR5cGUpCi0gICAgICAgIHJldHVybiBmZWF0dXJl
OyAvLyBXZSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgZm9udCBmb3JtYXQuCi0gICAgUmV0YWluUHRy
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+IHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgaWYgKGlz
T3BlblR5cGUpIHsKLSAgICAgICAgYXV0byBmZWF0dXJlVGFnID0gb3BlblR5cGVGZWF0dXJlKGZl
YXR1cmUpOwotICAgICAgICBpZiAoZmVhdHVyZVRhZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFnLnZh
bHVlKCksIENGU1RSKCJzbWNwIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcu
dmFsdWUoKSwgQ0ZTVFIoImMyc2MiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRh
Zy52YWx1ZSgpLCBDRlNUUigicGNhcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJl
VGFnLnZhbHVlKCksIENGU1RSKCJjMnBjIikpKSkgewotICAgICAgICAgICAgaW50IHJhd1plcm8g
PSAwOwotICAgICAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3
WmVybykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBr
Q1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBmZWF0dXJlVGFnLnZhbHVlKCkpOwotICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0
dXJlVmFsdWUsIHplcm8uZ2V0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZv
bnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGlz
VHJ1ZVR5cGUpIHsKLSAgICAgICAgYXV0byB0cnVlVHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5cGVG
ZWF0dXJlKGZlYXR1cmUpOwotICAgICAgICBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9
PSBrTG93ZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2Vy
Q2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtM
b3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJL
ZXkpKTsKLSAgICAgICAgICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZh
dWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQotICAg
ICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZl
YXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0cnVlVHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtVcHBlckNhc2VUeXBl
ICYmICh0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBzU2Vs
ZWN0b3IgfHwgdHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0ZUNh
cHNTZWxlY3RvcikpIHsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5n
ZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAg
ICAgaWYgKENGTnVtYmVyUmVmIGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRy
dWVUeXBlRmVhdHVyZShrVXBwZXJDYXNlVHlwZSwgZm9udCkpCi0gICAgICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRl
bnRpZmllcktleSwgZGVmYXVsdFNlbGVjdG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJl
U2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RG
b250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250
RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBD
RkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRp
ZmllcktleSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q1RGb250UmVmPiBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJs
ZUZlYXR1cmVzKENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBm
ZWF0dXJlcyA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0dHJp
YnV0ZShmb250LCBrQ1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlKSkpOwotICAgIGlmICgh
ZmVhdHVyZXMpCi0gICAgICAgIHJldHVybiBmb250OwotICAgIENGSW5kZXggZmVhdHVyZUNvdW50
ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZNdXRh
YmxlQXJyYXlSZWY+IG5ld0ZlYXR1cmVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBmZWF0dXJlQ291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
KTsKLSAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgewotICAg
ICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOwotICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUobmV3RmVhdHVyZXMuZ2V0KCksIHJlbW92ZWRGZWF0dXJlKGZlYXR1
cmUsIGZvbnQpLmdldCgpKTsKLSAgICB9Ci0gICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9u
dEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsg
bmV3RmVhdHVyZXMuZ2V0KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRy
aWJ1dGVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgUmV0
YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7Ci0gICAg
cmV0dXJuIGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENURm9u
dEdldFNpemUoZm9udCksIG51bGxwdHIsIG5ld0Rlc2NyaXB0b3IuZ2V0KCkpKTsKLX0KLQotUmVm
UHRyPEZvbnQ+IEZvbnQ6OmNyZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKCkg
Y29uc3QKLXsKLSAgICBmbG9hdCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENU
Rm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyht
X3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udCA9
IGNyZWF0ZUNURm9udFdpdGhvdXRTeW50aGVzaXphYmxlRmVhdHVyZXMobV9wbGF0Zm9ybURhdGEu
Zm9udCgpKTsKLSAgICByZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoY3RGb250LmdldCgpLCBz
aXplLCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3Jt
RGF0YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7
Ci19Ci0KLVJlZlB0cjxGb250PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxvYXQg
c2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOwotICAgIENURm9udFN5
bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRm
b3JtRGF0YS5mb250KCkpOwotICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9u
dENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKLSAgICBSZXRhaW5Q
dHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERl
c2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsKLQotICAgIHJl
dHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXplLCBtX3BsYXRm
b3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0
aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Ci19Ci0KLXZvaWQg
Rm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQg
YmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5kZXgsIGJvb2wg
ZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21TdHJpbmcmIGxv
Y2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pIGNvbnN0
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7Ci0KLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KLSNpZiBVU0UoQ1RGT05UU0hB
UEVHTFlQSFMpCi0gICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBDR0dseXBoKiog
bmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBDR1BvaW50Kiog
bmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikgewotICAgICAg
ICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4KHJhbmdlLmxvY2F0aW9uLCBzdGF0
aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENGSW5kZXg+KGdseXBoQnVmZmVyLnNp
emUoKSkpOwotICAgICAgICBpZiAocmFuZ2UubGVuZ3RoIDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UubGVuZ3RoID0gc3RkOjptaW4ocmFuZ2UubG9jYXRpb24sIC1yYW5nZS5sZW5ndGgpOwotICAg
ICAgICAgICAgcmFuZ2UubG9jYXRpb24gPSByYW5nZS5sb2NhdGlvbiAtIHJhbmdlLmxlbmd0aDsK
LSAgICAgICAgICAgIGdseXBoQnVmZmVyLnJlbW92ZShiZWdpbm5pbmdHbHlwaEluZGV4ICsgcmFu
Z2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Z2x5cGhCdWZmZXIubWFrZUhvbGUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJhbmdlLmxvY2F0aW9u
LCByYW5nZS5sZW5ndGgsIHRoaXMpOwotCi0gICAgICAgICpuZXdHbHlwaHNQb2ludGVyID0gZ2x5
cGhCdWZmZXIuZ2x5cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3QWR2YW5j
ZXNQb2ludGVyID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0g
ICAgICAgICpuZXdPZmZzZXRzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5n
R2x5cGhJbmRleCk7Ci0gICAgICAgICpuZXdJbmRpY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLm9m
ZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICB9OwotCi0gICAgYXV0byBz
dWJzdHJpbmcgPSB0ZXh0LnN1YnN0cmluZyhiZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgYXV0
byB1cGNvbnZlcnRlZENoYXJhY3RlcnMgPSBzdWJzdHJpbmcudXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgYXV0byBsb2NhbGVTdHJpbmcgPSBMb2NhbGVDb2NvYTo6Y2Fub25pY2FsTGFuZ3Vh
Z2VJZGVudGlmaWVyRnJvbVN0cmluZyhsb2NhbGUpLnN0cmluZygpLmNyZWF0ZUNGU3RyaW5nKCk7
Ci0gICAgQ1RGb250U2hhcGVPcHRpb25zIG9wdGlvbnMgPSBrQ1RGb250U2hhcGVXaXRoQ2x1c3Rl
ckNvbXBvc2l0aW9uCi0gICAgICAgIHwgKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250U2hhcGVXaXRo
S2VybmluZyA6IDApCi0gICAgICAgIHwgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6
UlRMID8ga0NURm9udFNoYXBlUmlnaHRUb0xlZnQgOiAwKTsKLQotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kp
Ci0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4
KVtpXSAtPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotICAgIENURm9udFNoYXBlR2x5cGhzKAot
ICAgICAgICBtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLAotICAgICAgICByZWludGVycHJldF9jYXN0PENHU2l6
ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKLSAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxDR1BvaW50Kj4oZ2x5cGhCdWZmZXIub3JpZ2lucyhiZWdpbm5pbmdH
bHlwaEluZGV4KSksCi0gICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5p
bmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVbmlDaGFyKj4o
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzLmdldCgpKSwKLSAgICAgICAgZ2x5cGhCdWZmZXIuc2l6ZSgp
IC0gYmVnaW5uaW5nR2x5cGhJbmRleCwKLSAgICAgICAgb3B0aW9ucywKLSAgICAgICAgbG9jYWxl
U3RyaW5nLmdldCgpLAotICAgICAgICBoYW5kbGVyKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4OyArK2kpCi0g
ICAgICAgIGdseXBoQnVmZmVyLm9mZnNldHNJblN0cmluZyhiZWdpbm5pbmdHbHlwaEluZGV4KVtp
XSArPSBiZWdpbm5pbmdTdHJpbmdJbmRleDsKLQotI2Vsc2UKLQotICAgIFVOVVNFRF9QQVJBTShi
ZWdpbm5pbmdTdHJpbmdJbmRleCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxvY2FsZSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHQpOwotCi0gICAgLy8gQ1RGb250VHJhbnNmb3JtR2x5cGhzKCkgb3BlcmF0
ZXMgaW4gdmlzdWFsIG9yZGVyLCBidXQgV2lkdGhJdGVyYXRvciBpdGVyYXRlcyBpbiBsb2dpY2Fs
IG9yZGVyLgotICAgIC8vIFRlbXBvcmFyaWx5IHB1dCB1cyBpbiB2aXN1YWwgb3JkZXIganVzdCBm
b3IgdGhlIGNhbGwsIHRoZW4gcHV0IHVzIGJhY2sgaW50byBsb2dpY2FsIG9yZGVyIHdoZW4KLSAg
ICAvLyB0aGUgY2FsbCBpcyBkb25lLgotICAgIC8vIFdlIGRvbid0IGhhdmUgYSBnbG9iYWwgdmll
dyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyOyB3ZSdyZSBqdXN0IG9wZXJhdGluZyBvbiBhIHNp
bmdsZSBjaHVuayBvZiBpdC4KLSAgICAvLyBXaWR0aEl0ZXJhdG9yIGVuY291bnRlcnMgdGhlIGNo
dW5rcyBvdXQgaW4gbG9naWNhbCBvcmRlciwgc28gd2UgaGF2ZSB0byBtYWludGFpbiB0aGF0IGlu
dmFyaWFudC4KLSAgICAvLyBFdmVudHVhbGx5LCBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4
dCgpIHdpbGwgcmV2ZXJzZSB0aGUgd2hvbGUgYnVmZmVyIHRvIHB1dCB0aGUgZW50aXJlIHRoaW5n
Ci0gICAgLy8gaW4gdmlzdWFsIG9yZGVyLCBidXQgdGhhdCdzIG9rYXkgYmVjYXVzZSBpdCBoYXMg
YSB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXIuCi0gICAgLy8gT24gdGhlIG90aGVyIGhh
bmQsIENURm9udFNoYXBlR2x5cGhzKCkgYWNjZXB0cyB0aGUgYnVmZmVyIGluIGxvZ2ljYWwgb3Jk
ZXIgYnV0IHJldHVybnMgaXQgaW4gcGh5c2ljYWwKLSAgICAvLyBvcmRlciwgd2hpY2ggbWVhbnMg
dGhlIHNlY29uZCByZXZlcnNlKCkgaW4gdGhpcyBmdW5jdGlvbiBzdGlsbCBuZWVkcyB0byBleGVj
dXRlIHdoZW4KLSAgICAvLyBDVEZvbnRTaGFwZUdseXBocygpIGlzIGJlaW5nIHVzZWQuCi0gICAg
aWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBnbHlwaEJ1
ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUoKSAtIGJl
Z2lubmluZ0dseXBoSW5kZXgpOwotCi0gICAgQ1RGb250VHJhbnNmb3JtT3B0aW9ucyBvcHRpb25z
ID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3NpdGlvbmluZyA6IDAp
IHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKLSAgICBDVEZvbnRUcmFuc2Zvcm1HbHlw
aHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdH
bHlwaEluZGV4KSwgcmVpbnRlcnByZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhiZWdpbm5pbmdHbHlwaEluZGV4KSksIGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0ds
eXBoSW5kZXgsIG9wdGlvbnMpOwotI2VuZGlmCi0KLSAgICAvLyBTZWUgdGhlIGNvbW1lbnQgYWJv
dmUgaW4gdGhpcyBmdW5jdGlvbiB3aGVyZSB0aGUgb3RoZXIgY2FsbCB0byByZXZlcnNlKCkgaXMu
Ci0gICAgaWYgKHRleHREaXJlY3Rpb24gPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICBn
bHlwaEJ1ZmZlci5yZXZlcnNlKGJlZ2lubmluZ0dseXBoSW5kZXgsIGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXgpOwotfQotCi1zdGF0aWMgaW50IGV4dHJhY3ROdW1iZXIo
Q0ZOdW1iZXJSZWYgbnVtYmVyKQotewotICAgIGludCByZXN1bHQgPSAwOwotICAgIGlmIChudW1i
ZXIpCi0gICAgICAgIENGTnVtYmVyR2V0VmFsdWUobnVtYmVyLCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
cmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEZvbnQ6OmRldGVybWluZVBp
dGNoKCkKLXsKLSAgICBDVEZvbnRSZWYgY3RGb250ID0gbV9wbGF0Zm9ybURhdGEuZm9udCgpOwot
ICAgIEFTU0VSVChjdEZvbnQpOwotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE9zYWthLU1vbm8uCi0g
ICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS8zOTk5NDY3Piwgd2Ugc2hvdWxkIHRy
ZWF0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0gICAgLy8gTm90ZSB0aGF0IHRoZSBBcHBL
aXQgZG9lcyBub3QgcmVwb3J0IE9zYWthLU1vbm8gYXMgZml4ZWQgcGl0Y2guCi0KLSAgICAvLyBT
cGVjaWFsIGNhc2UgTVMtUEdvdGhpYy4KLSAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9i
bGVtLzQwMzI5Mzg+LCB3ZSBzaG91bGQgbm90IHRyZWF0IE1TLVBHb3RoaWMgYXMgZml4ZWQgcGl0
Y2guCi0gICAgLy8gTm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNUy1QR290aGljIGFzIGZp
eGVkIHBpdGNoLgotCi0gICAgLy8gU3BlY2lhbCBjYXNlIE1vbm90eXBlQ29yc2l2YQotICAgIC8v
IEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vNTQ1NDcwND4sIHdlIHNob3VsZCBub3QgdHJl
YXQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBL
aXQgZG9lcyByZXBvcnQgTW9ub3R5cGVDb3JzaXZhIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgYXV0
byBmdWxsTmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZ1bGxOYW1lKGN0Rm9udCkpOwotICAgIGF1
dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUoY3RGb250KSk7Ci0K
LSAgICBpbnQgZml4ZWRQaXRjaCA9IGV4dHJhY3ROdW1iZXIoYWRvcHRDRihzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtD
VEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGUpKSkuZ2V0KCkpOwotICAgIG1fdHJlYXRBc0ZpeGVk
UGl0Y2ggPSAoQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoY3RGb250KSAmIGtDVEZvbnRNb25vU3Bh
Y2VUcmFpdCkgfHwgZml4ZWRQaXRjaCB8fCAoY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmdWxsTmFt
ZS5nZXQoKSwgQ0ZTVFIoIk9zYWthLU1vbm8iKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShm
dWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1TLVBHb3RoaWMiKSkgfHwgY2FzZUluc2Vuc2l0aXZlQ29t
cGFyZShmdWxsTmFtZS5nZXQoKSwgQ0ZTVFIoIk1vbm90eXBlQ29yc2l2YSIpKSk7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJDb3VyaWVyIE5ldyIpKSkgewotICAgICAg
ICAvLyBTcGVjaWFsIGNhc2UgQ291cmllciBOZXcgdG8gbm90IGJlIHRyZWF0ZWQgYXMgZml4ZWQg
cGl0Y2gsIGFzIHRoaXMgd2lsbCBtYWtlIHVzZSBvZiBhIGhhY2tlZCBzcGFjZSB3aWR0aCB3aGlj
aCBpcyB1bmRlc2lyZWFibGUgZm9yIGlQaG9uZSAoc2VlIHJkYXI6Ly82MjY5NzgzKS4KLSAgICAg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgIH0KLSNlbmRpZgotfQotCi1GbG9h
dFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsK
LSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7Ci0gICAgYm91bmRpbmdCb3ggPSBDVEZvbnRHZXRC
b3VuZGluZ1JlY3RzRm9yR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBwbGF0Zm9ybURh
dGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgPyBrQ1RGb250
T3JpZW50YXRpb25WZXJ0aWNhbCA6IGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwsICZnbHlw
aCwgMCwgMSk7Ci0gICAgYm91bmRpbmdCb3guc2V0WSgtYm91bmRpbmdCb3gubWF4WSgpKTsKLSAg
ICBpZiAobV9zeW50aGV0aWNCb2xkT2Zmc2V0KQotICAgICAgICBib3VuZGluZ0JveC5zZXRXaWR0
aChib3VuZGluZ0JveC53aWR0aCgpICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0KTsKLQotICAgIHJl
dHVybiBib3VuZGluZ0JveDsKLX0KLQotZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBo
KEdseXBoIGdseXBoKSBjb25zdAotewotICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dTaXplWmVybzsK
LQotICAgIGlmIChwbGF0Zm9ybURhdGEoKS5zaXplKCkpIHsKLSAgICAgICAgYm9vbCBob3Jpem9u
dGFsID0gcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246Okhv
cml6b250YWw7Ci0gICAgICAgIENURm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gaG9yaXpv
bnRhbCB8fCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2sgPyBrQ1RGb250T3JpZW50YXRpb25I
b3Jpem9udGFsIDoga0NURm9udE9yaWVudGF0aW9uVmVydGljYWw7Ci0jaWYgVVNFKENURk9OVEdF
VEFEVkFOQ0VTX1dPUktBUk9VTkQpCi0gICAgICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxl
ID0ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVh
bnRpemF0aW9uIHwga0NHRm9udEFudGlhbGlhc2luZ1N0eWxlVW5maWx0ZXJlZDsKLSAgICAgICAg
aWYgKCFDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSkgJiYg
IW1fcGxhdGZvcm1EYXRhLmhhc1ZhcmlhdGlvbnMoKSkKLSAgICAgICAgICAgIENURm9udEdldFVu
c3VtbWVkQWR2YW5jZXNGb3JHbHlwaHNBbmRTdHlsZShtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwg
b3JpZW50YXRpb24sIHN0eWxlLCAmZ2x5cGgsICZhZHZhbmNlLCAxKTsKLSAgICAgICAgZWxzZQot
I2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIENURm9udEdldEFkdmFuY2VzRm9yR2x5cGhz
KG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgJmdseXBoLCAmYWR2YW5jZSwg
MSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRo
ZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9udDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5
cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdENGKENURm9udENyZWF0
ZVBhdGhGb3JHbHlwaChwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgZ2x5cGgsIG51bGxwdHIpKTsK
LSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0
KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRo
KG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJh
bnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xk
T2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNs
YXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAgIHJldHVybiB7IFdURk1vdmUobmV3UGF0aCkg
fTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlQ29weShy
ZXN1bHQuZ2V0KCkpKSB9OwotfQotCi1ib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9p
bnQoVUNoYXIzMiBjaGFyYWN0ZXIsIE9wdGlvbmFsPFVDaGFyMzI+IHZhcmlhdGlvbikgY29uc3QK
LXsKLSAgICBpZiAodmFyaWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVbmlD
aGFyIGNvZGVVbml0c1syXTsKLSAgICBDR0dseXBoIGdseXBoc1syXTsKLSAgICBDRkluZGV4IGNv
dW50ID0gMDsKLSAgICBVMTZfQVBQRU5EX1VOU0FGRShjb2RlVW5pdHMsIGNvdW50LCBjaGFyYWN0
ZXIpOwotICAgIHJldHVybiBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRGF0
YSgpLmN0Rm9udCgpLCBjb2RlVW5pdHMsIGdseXBocywgY291bnQpOwotfQotCi1ib29sIEZvbnQ6
OmlzUHJvYmFibHlPbmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAotewotICAgIGF1dG8gcGxh
dGZvcm1Gb250ID0gcGxhdGZvcm1EYXRhKCkuZm9udCgpOwotICAgIGlmICghcGxhdGZvcm1Gb250
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBbGxvdyBtb3N0IG5vbi1pY29uIGZv
bnRzIHRvIGJhaWwgZWFybHkgaGVyZSBieSB0ZXN0aW5nIGEgc2luZ2xlIGNoYXJhY3RlciAnYScs
IHdpdGhvdXQgaXRlcmF0aW5nIG92ZXIgYWxsIGJhc2ljIGxhdGluIGNoYXJhY3RlcnMuCi0gICAg
VW5pQ2hhciBsb3dlcmNhc2VBQ2hhcmFjdGVyID0gJ2EnOwotICAgIENHR2x5cGggbG93ZXJjYXNl
QUdseXBoOwotICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKHBsYXRmb3JtRm9u
dCwgJmxvd2VyY2FzZUFDaGFyYWN0ZXIsICZsb3dlcmNhc2VBR2x5cGgsIDEpKSB7Ci0gICAgICAg
IGlmICghQ0dSZWN0SXNFbXB0eShDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKHBsYXRm
b3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgJmxvd2VyY2FzZUFHbHlwaCwgbnVs
bHB0ciwgMSkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGF1dG8g
c3VwcG9ydGVkQ2hhcmFjdGVycyA9IGFkb3B0Q0YoQ1RGb250Q29weUNoYXJhY3RlclNldChwbGF0
Zm9ybUZvbnQpKTsKLSAgICBpZiAoQ0ZDaGFyYWN0ZXJTZXRIYXNNZW1iZXJJblBsYW5lKHN1cHBv
cnRlZENoYXJhY3RlcnMuZ2V0KCksIDEpIHx8IENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFu
ZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gVGhpcyBlbmNvbXBhc3NlcyBhbGwgYmFzaWMgTGF0aW4gbm9uLWNvbnRyb2wgY2hh
cmFjdGVycy4KLSAgICBjb25zdGV4cHIgVW5pQ2hhciBmaXJzdENoYXJhY3RlclRvVGVzdCA9ICcg
JzsKLSAgICBjb25zdGV4cHIgVW5pQ2hhciBsYXN0Q2hhcmFjdGVyVG9UZXN0ID0gJ34nOwotICAg
IGNvbnN0ZXhwciBhdXRvIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCA9IGxhc3RDaGFyYWN0ZXJU
b1Rlc3QgLSBmaXJzdENoYXJhY3RlclRvVGVzdCArIDE7Ci0KLSAgICBWZWN0b3I8Q0dHbHlwaD4g
Z2x5cGhzOwotICAgIGdseXBocy5maWxsKDAsIG51bWJlck9mQ2hhcmFjdGVyc1RvVGVzdCk7Ci0g
ICAgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UocGxhdGZvcm1Gb250LCBnbHlwaHMu
YmVnaW4oKSwgQ0ZSYW5nZU1ha2UoZmlyc3RDaGFyYWN0ZXJUb1Rlc3QsIG51bWJlck9mQ2hhcmFj
dGVyc1RvVGVzdCkpOwotICAgIGdseXBocy5yZW1vdmVBbGwoMCk7Ci0KLSAgICBpZiAoZ2x5cGhz
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPENHUmVjdD4g
Ym91bmRpbmdSZWN0czsKLSAgICBib3VuZGluZ1JlY3RzLmZpbGwoQ0dSZWN0WmVybywgZ2x5cGhz
LnNpemUoKSk7Ci0gICAgQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0Zm9ybUZv
bnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsIGdseXBocy5iZWdpbigpLCBib3VuZGluZ1Jl
Y3RzLmJlZ2luKCksIGdseXBocy5zaXplKCkpOwotICAgIHJldHVybiBub3RGb3VuZCA9PSBib3Vu
ZGluZ1JlY3RzLmZpbmRNYXRjaGluZyhbXShhdXRvJiByZWN0KSB7Ci0gICAgICAgIHJldHVybiAh
Q0dSZWN0SXNFbXB0eShyZWN0KTsKLSAgICB9KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dFBsYXRmb3JtRGF0YUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCmluZGV4IGRiMWI0ZmY0YTE2YTQyM2ZlODYz
Y2U3M2I1OGM2NjI4YzFiMDhlNjQuLmM5N2Q1MGE1MjZhMmZkNzE4ZGI5Y2M2MjAxNmMzMjVlZDgx
YjNiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTM1LDMzICszNSw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250UmVmIGZv
bnQpCi17Ci0jaWYgSEFWRShDVEZPTlRJU1NZU1RFTVVJRk9OVCkKLSAgICByZXR1cm4gQ1RGb250
SXNTeXN0ZW1VSUZvbnQoZm9udCk7Ci0jZWxzZQotICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9y
SXNTeXN0ZW1VSUZvbnQoYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdl
dCgpKTsKLSNlbmRpZgotfQotCi0vLyBUaGVzZSBDb3JlVGV4dCBUZXh0IFNwYWNpbmcgZmVhdHVy
ZSBzZWxlY3RvcnMgYXJlIG5vdCBkZWZpbmVkIGluIENvcmVUZXh0LgotZW51bSBUZXh0U3BhY2lu
Z0NURmVhdHVyZVNlbGVjdG9yIHsgVGV4dFNwYWNpbmdQcm9wb3J0aW9uYWwsIFRleHRTcGFjaW5n
RnVsbFdpZHRoLCBUZXh0U3BhY2luZ0hhbGZXaWR0aCwgVGV4dFNwYWNpbmdUaGlyZFdpZHRoLCBU
ZXh0U3BhY2luZ1F1YXJ0ZXJXaWR0aCB9OwotCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJv
b2wgc3ludGhldGljT2JsaXF1ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBGb250V2lk
dGhWYXJpYW50IHdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUgdGV4dFJlbmRlcmluZ01v
ZGUpCi0gICAgOiBGb250UGxhdGZvcm1EYXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y09ibGlxdWUsIG9yaWVudGF0aW9uLCB3aWR0aFZhcmlhbnQsIHRleHRSZW5kZXJpbmdNb2RlKQot
ewotICAgIEFTU0VSVF9BUkcoZm9udCwgZm9udCk7Ci0gICAgbV9mb250ID0gZm9udDsKLSAgICBt
X2lzQ29sb3JCaXRtYXBGb250ID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMoZm9udCkgJiBrQ1RG
b250VHJhaXRDb2xvckdseXBoczsKLSAgICBtX2lzU3lzdGVtRm9udCA9IFdlYkNvcmU6OmlzU3lz
dGVtRm9udChtX2ZvbnQuZ2V0KCkpOwotICAgIGF1dG8gdmFyaWF0aW9ucyA9IGFkb3B0Q0Yoc3Rh
dGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKGZvbnQsIGtDVEZv
bnRWYXJpYXRpb25BdHRyaWJ1dGUpKSk7Ci0gICAgbV9oYXNWYXJpYXRpb25zID0gdmFyaWF0aW9u
cyAmJiBDRkRpY3Rpb25hcnlHZXRDb3VudCh2YXJpYXRpb25zLmdldCgpKTsKLQotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgbV9pc0Vtb2ppID0gQ1RGb250SXNBcHBsZUNvbG9yRW1vamko
bV9mb250LmdldCgpKTsKLSNlbmRpZgotfQotCiB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpo
YXNoKCkgY29uc3QKIHsKICAgICB1aW50cHRyX3QgZmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3dpZHRoVmFyaWFudCkgPDwgNgpAQCAtNzEsNyAr
NDQsNyBAQCB1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKICAgICAgICAg
fCBtX3N5bnRoZXRpY0JvbGQgPDwgMQogICAgICAgICB8IG1fc3ludGhldGljT2JsaXF1ZSk7CiAK
LSAgICB1aW50cHRyX3QgZm9udEhhc2ggPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZI
YXNoKG1fZm9udC5nZXQoKSkpOworICAgIHVpbnRwdHJfdCBmb250SGFzaCA9IHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oQ0ZIYXNoKG1fZm9udC5nZXQoKSkpOwogICAgIHVpbnRwdHJfdCBoYXNoQ29k
ZXNbXSA9IHsgZm9udEhhc2gsIGZsYWdzIH07CiAgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFz
aE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFzaENvZGVzKTsKIH0KQEAgLTgzLDExOCArNTYs
NCBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gQ0ZFcXVhbChtX2ZvbnQuZ2V0KCks
IG90aGVyLm1fZm9udC5nZXQoKSk7CiB9CiAKLUNURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpy
ZWdpc3RlcmVkRm9udCgpIGNvbnN0Ci17Ci0gICAgQ1RGb250UmVmIHBsYXRmb3JtRm9udCA9IGZv
bnQoKTsKLSAgICBBU1NFUlQocGxhdGZvcm1Gb250KTsKLSAgICBpZiAocGxhdGZvcm1Gb250ICYm
IGFkb3B0Q0YoQ1RGb250Q29weUF0dHJpYnV0ZShwbGF0Zm9ybUZvbnQsIGtDVEZvbnRVUkxBdHRy
aWJ1dGUpKSkKLSAgICAgICAgcmV0dXJuIHBsYXRmb3JtRm9udDsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotaW5saW5lIGludCBtYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rv
cihGb250V2lkdGhWYXJpYW50IHZhcmlhbnQpCi17Ci0gICAgc3dpdGNoKHZhcmlhbnQpIHsKLSAg
ICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRl
eHRTcGFjaW5nUHJvcG9ydGlvbmFsOwotCi0gICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpIYWxm
V2lkdGg6Ci0gICAgICAgIHJldHVybiBUZXh0U3BhY2luZ0hhbGZXaWR0aDsKLQotICAgIGNhc2Ug
Rm9udFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKLSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5n
VGhpcmRXaWR0aDsKLQotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgot
ICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdRdWFydGVyV2lkdGg7Ci0gICAgfQotCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FzY2FkZVRvTGFzdFJlc29y
dEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KCkKLXsKLSAgICBhdXRvIGxhc3RSZXNvcnQgPSBhZG9wdENG
KENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZTVFIoIkxhc3RSZXNvcnQi
KSwgMCkpOwotCi0gICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7IGxhc3RSZXNvcnQuZ2V0
KCkgfTsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJyYXlD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdURl9BUlJBWV9MRU5HVEgo
ZGVzY3JpcHRvcnMpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0KLSAgICBDRlR5cGVSZWYg
a2V5c1tdID0geyBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYg
dmFsdWVzW10gPSB7IGFycmF5LmdldCgpIH07Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xF
TkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOwotfQotCi1zdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBj
YXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkKLXsKLSAgICBz
dGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RGb250RGVzY3JpcHRvckNy
ZWF0ZVdpdGhBdHRyaWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFy
eSgpLmdldCgpKTsKLSAgICByZXR1cm4gZGVzY3JpcHRvcjsKLX0KLQotQ1RGb250UmVmIEZvbnRQ
bGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY3RGb250KQotICAgICAg
ICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7Ci0KLSAgICBBU1NFUlQobV9mb250KTsKLSAgICBtX2N0
Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5nZXQo
KSwgbV9zaXplLCBudWxscHRyLCBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnRE
ZXNjcmlwdG9yKCkpKTsKLQotICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhWYXJp
YW50OjpSZWd1bGFyV2lkdGgpIHsKLSAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBrVGV4
dFNwYWNpbmdUeXBlOwotICAgICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBGb250
V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7Ci0gICAgICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKLSAgICAgICAgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFsdWUp
KTsKLSAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUs
ICZmZWF0dXJlU2VsZWN0b3JWYWx1ZSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3Jp
cHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZUNv
cHlXaXRoRmVhdHVyZShzb3VyY2VEZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQoKSwg
ZmVhdHVyZVNlbGVjdG9yLmdldCgpKSk7Ci0gICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG5l
d0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNjcmlw
dG9yLmdldCgpLCBtX3NpemUsIDApKTsKLQotICAgICAgICBpZiAobmV3Rm9udCkKLSAgICAgICAg
ICAgIG1fY3RGb250ID0gbmV3Rm9udDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jdEZvbnQuZ2V0
KCk7Ci19Ci0KLVJldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZv
ckVxdWFsaXR5Q2hlY2soQ1RGb250UmVmIGN0Rm9udCkKLXsKLSAgICBhdXRvIGZvbnREZXNjcmlw
dG9yID0gYWRvcHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoY3RGb250KSk7Ci0gICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzg2ODMgVGhp
cyBpcyBhIHNoYWxsb3cgcG9pbnRlciBjb21wYXJlIGZvciB3ZWIgZm9udHMKLSAgICAvLyBiZWNh
dXNlIHRoZSBVUkwgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZvbnQuIFRoaXMgbWVhbnMg
d2UgbWlnaHQgZXJyb25lb3VzbHkgZ2V0IGZhbHNlIG5lZ2F0aXZlcy4KLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IHVybCA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZVUkxSZWY+KENURm9udERlc2Ny
aXB0b3JDb3B5QXR0cmlidXRlKGZvbnREZXNjcmlwdG9yLmdldCgpLCBrQ1RGb250UmVmZXJlbmNl
VVJMQXR0cmlidXRlKSkpOwotICAgIEFTU0VSVCghdXJsIHx8IENGR2V0VHlwZUlEKHVybC5nZXQo
KSkgPT0gQ0ZVUkxHZXRUeXBlSUQoKSk7Ci0gICAgcmV0dXJuIHVybDsKLX0KLQotUmV0YWluUHRy
PENGVHlwZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjaygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG9iamVjdEZvckVxdWFsaXR5Q2hlY2soY3RGb250KCkpOwotfQot
Ci1SZWZQdHI8U2hhcmVkQnVmZmVyPiBGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlKHVp
bnQzMl90IHRhYmxlKSBjb25zdAotewotICAgIGlmIChSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRh
ID0gYWRvcHRDRihDVEZvbnRDb3B5VGFibGUoZm9udCgpLCB0YWJsZSwga0NURm9udFRhYmxlT3B0
aW9uTm9PcHRpb25zKSkpCi0gICAgICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRh
LmdldCgpKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotI2lmICFMT0dfRElTQUJM
RUQKLQotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAg
ICBTdHJpbmcgZm9udERlc2NyaXB0aW9uIHsgYWRvcHRDRihDRkNvcHlEZXNjcmlwdGlvbihmb250
KCkpKS5nZXQoKSB9OwotICAgIHJldHVybiBtYWtlU3RyaW5nKGZvbnREZXNjcmlwdGlvbiwgJyAn
LCBtX3NpemUsCi0gICAgICAgIChtX3N5bnRoZXRpY0JvbGQgPyAiIHN5bnRoZXRpYyBib2xkIiA6
ICIiKSwKLSAgICAgICAgKG1fc3ludGhldGljT2JsaXF1ZSA/ICIgc3ludGhldGljIG9ibGlxdWUi
IDogIiIpLAotICAgICAgICAobV9vcmllbnRhdGlvbiA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIgOiAiIikpOwotfQotCi0jZW5kaWYKLQotU3Ry
aW5nIEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUoKSBjb25zdAotewotICAgIGlmIChhdXRv
IHBsYXRmb3JtRm9udCA9IGZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29w
eUZhbWlseU5hbWUocGxhdGZvcm1Gb250KSkuZ2V0KCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcApp
bmRleCBkODE1NDhhMzBiOWQyMmNhZmY4YWE3ODcwZGFiNGJlZmIyMzRiOTA0Li44YWVjMmVhM2Q0
ZjE3NTlkZjdjZTY0MjM2YzMyYjY4MTU2NDRkZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmNwcApAQCAtNTMsOSArNTMsNiBAQCBXVEZfV0VBS19MSU5LX0ZPUkNFX0lNUE9SVCh3
ZWJtOjpzd2FwKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBGSVhNRTogUmVtb3ZlIHRo
aXMgb25jZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkgaXMgYWRkZWQgdG8gQ01Gb3JtYXREZXNjcmlw
dGlvbi5oCi1jb25zdGV4cHIgQ01WaWRlb0NvZGVjVHlwZSBrQ01WaWRlb0NvZGVjVHlwZV9WUDkg
eyAndnAwOScgfTsKLQogdXNpbmcgbmFtZXNwYWNlIFBBTDsKIAogc3RhdGljIGJvb2wgaXNXZWJt
UGFyc2VyQXZhaWxhYmxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3QvRm9udENhc2NhZGVDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDI4YjUx
MjQzZTU3ODVhMDYyZGZlZWJiZTc2MzdlNTMwNjYwNDk2NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3Bw
CkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDYtMjAyMCwgMjAxNiBBcHBs
ZSBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorCisj
aW5jbHVkZSAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5Lmgi
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0UmVjdC5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2lu
L0NvcmVUZXh0U1BJV2luLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKKy8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCitib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKK3sKKyNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKKyAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0oKSB7CisgICAgICAgIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZCA9
ICFDR0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlzYWJsZWQoKTsKKyAgICB9KTsKKyAg
ICByZXR1cm4gc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVkOworI2VsaWYgUExBVEZPUk0oTUFD
KQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
Kwordm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQ
b2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dTaXpl
KiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCit7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250
ZXh0KSk7CisgICAgcG9zaXRpb25zWzBdID0gQ0dQb2ludFplcm87CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dTaXplIGFkdmFuY2UgPSBDR1Np
emVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tpIC0gMV0sIG1hdHJpeCk7CisgICAgICAg
IHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAxXS54ICsgYWR2YW5jZS53aWR0aDsKKyAg
ICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNbaSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdo
dDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VMZXR0ZXJwcmVzc0Vm
ZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisjaWYgRU5BQkxFKExFVFRF
UlBSRVNTKQorICAgIHJldHVybiBjb250ZXh0LnRleHREcmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZvbnQmIGZv
bnQsIENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENH
U2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIGlmICghY291bnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjb250ZXh0LCBwb2lu
dC54KCksIHBvaW50LnkoKSk7CisKKyAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9y
bURhdGEgPSBmb250LnBsYXRmb3JtRGF0YSgpOworICAgIFZlY3RvcjxDR1BvaW50LCAyNTY+IHBv
c2l0aW9ucyhjb3VudCk7CisgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcm90
YXRlTGVmdFRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSgwLCAtMSwgMSwgMCwgMCwg
MCk7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRU
ZXh0TWF0cml4KGNvbnRleHQpOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBydW5NYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0ZXh0TWF0cml4LCByb3RhdGVMZWZ0VHJhbnNmb3Jt
KTsKKyAgICAgICAgU2NvcGVkVGV4dE1hdHJpeCBzYXZlZE1hdHJpeChydW5NYXRyaXgsIGNvbnRl
eHQpOworCisgICAgICAgIFZlY3RvcjxDR1NpemUsIDI1Nj4gdHJhbnNsYXRpb25zKGNvdW50KTsK
KyAgICAgICAgQ1RGb250R2V0VmVydGljYWxUcmFuc2xhdGlvbnNGb3JHbHlwaHMocGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBnbHlwaHMsIHRyYW5zbGF0aW9ucy5kYXRhKCksIGNvdW50KTsKKworICAg
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUludmVy
dChDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNvbnRleHQpKTsKKworICAgICAgICBDR1BvaW50IHBv
c2l0aW9uID0gRmxvYXRQb2ludChwb2ludC54KCksIHBvaW50LnkoKSArIGZvbnQuZm9udE1ldHJp
Y3MoKS5mbG9hdEFzY2VudChJZGVvZ3JhcGhpY0Jhc2VsaW5lKSAtIGZvbnQuZm9udE1ldHJpY3Mo
KS5mbG9hdEFzY2VudCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKKyAgICAgICAgICAgIENHU2l6ZSB0cmFuc2xhdGlvbiA9IENHU2l6ZUFwcGx5QWZm
aW5lVHJhbnNmb3JtKHRyYW5zbGF0aW9uc1tpXSwgcm90YXRlTGVmdFRyYW5zZm9ybSk7CisgICAg
ICAgICAgICBwb3NpdGlvbnNbaV0gPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dQb2lu
dE1ha2UocG9zaXRpb24ueCAtIHRyYW5zbGF0aW9uLndpZHRoLCBwb3NpdGlvbi55ICsgdHJhbnNs
YXRpb24uaGVpZ2h0KSwgdHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHBvc2l0aW9uLnggKz0gYWR2
YW5jZXNbaV0ud2lkdGg7CisgICAgICAgICAgICBwb3NpdGlvbi55ICs9IGFkdmFuY2VzW2ldLmhl
aWdodDsKKyAgICAgICAgfQorICAgICAgICBDVEZvbnREcmF3R2x5cGhzKHBsYXRmb3JtRGF0YS5j
dEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBjb3VudCwgY29udGV4dCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMo
cG9zaXRpb25zLCBjb250ZXh0LCBhZHZhbmNlcywgY291bnQpOworICAgICAgICBDVEZvbnREcmF3
R2x5cGhzKHBsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCBwb3NpdGlvbnMuZGF0YSgpLCBj
b3VudCwgY29udGV4dCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzZXRDR0ZvbnRSZW5kZXJp
bmdNb2RlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXNGb250cyhjZ0NvbnRleHQsIHRydWUpOworCisgICAgQ0dBZmZpbmVUcmFuc2Zv
cm0gY29udGV4dFRyYW5zZm9ybSA9IENHQ29udGV4dEdldENUTShjZ0NvbnRleHQpOworICAgIGJv
b2wgaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxTY2FsZSA9IFdURjo6aXNJbnRlZ3JhbChjb250ZXh0
VHJhbnNmb3JtLmEpICYmIFdURjo6aXNJbnRlZ3JhbChjb250ZXh0VHJhbnNmb3JtLmQpICYmIGNv
bnRleHRUcmFuc2Zvcm0uYiA9PSAwLmYgJiYgY29udGV4dFRyYW5zZm9ybS5jID09IDAuZjsKKyAg
ICBib29sIGlzUm90YXRlZCA9ICgoY29udGV4dFRyYW5zZm9ybS5iIHx8IGNvbnRleHRUcmFuc2Zv
cm0uYykgJiYgKGNvbnRleHRUcmFuc2Zvcm0uYSB8fCBjb250ZXh0VHJhbnNmb3JtLmQpKTsKKyAg
ICBib29sIGRvU3VicGl4ZWxRdWFudGl6YXRpb24gPSBpc1RyYW5zbGF0aW9uT3JJbnRlZ3JhbFNj
YWxlIHx8ICghaXNSb3RhdGVkICYmIGNvbnRleHQuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KCkpOworCisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxQb3NpdGlvbkZvbnRzKGNnQ29u
dGV4dCwgdHJ1ZSk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KGNnQ29udGV4dCwgZG9TdWJwaXhlbFF1YW50aXphdGlvbik7Cit9CisKK3ZvaWQgRm9udENhc2Nh
ZGU6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdN
b2RlIHNtb290aGluZ01vZGUpCit7CisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBpZiAoIXBsYXRmb3JtRGF0YS5zaXpl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVl
OworICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgPSB0cnVlOworCisgICAgaWYgKCFmb250LmFs
bG93c0FudGlhbGlhc2luZygpKQorICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGlu
Z01vZGU6Ok5vU21vb3RoaW5nOworCisgICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7CisgICAg
Y2FzZSBGb250U21vb3RoaW5nTW9kZTo6QW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZFNtb290
aEZvbnRzID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01v
ZGU6OkF1dG9TbW9vdGhpbmc6CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxB
bnRpYWxpYXNlZDoKKyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6CisgICAgICAgIHNo
b3VsZEFudGlhbGlhcyA9IGZhbHNlOworICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygp
KQorICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOworCisjaWYgIVBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0Nv
bnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRTbW9v
dGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCisgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwor
I2VuZGlmCisKKyAgICBib29sIG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0
U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCk7CisgICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBv
cmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFs
aWFzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGJvb2wgdXNlTGV0dGVycHJl
c3NFZmZlY3QgPSBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKKyAgICBVTlVT
RURfVkFSSUFCTEUodXNlTGV0dGVycHJlc3NFZmZlY3QpOworICAgIEZsb2F0UG9pbnQgcG9pbnQg
PSBhbmNob3JQb2ludDsKKworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5l
VHJhbnNmb3JtSWRlbnRpdHk7CisgICAgaWYgKCFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZv
bnQoKSkKKyAgICAgICAgbWF0cml4ID0gQ1RGb250R2V0TWF0cml4KHBsYXRmb3JtRGF0YS5mb250
KCkpOworICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOworICAgIG1hdHJpeC5kID0gLW1hdHJpeC5k
OworICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKSB7CisgICAgICAgIHN0
YXRpYyBmbG9hdCBvYmxpcXVlU2tldyA9IHRhbmYoc3ludGhldGljT2JsaXF1ZUFuZ2xlKCkgKiBw
aUZsb2F0IC8gMTgwKTsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChmb250LmlzVGV4
dE9yaWVudGF0aW9uRmFsbGJhY2soKSkKKyAgICAgICAgICAgICAgICBtYXRyaXggPSBDR0FmZmlu
ZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCBvYmxpcXVl
U2tldywgMCwgMSwgMCwgMCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1N
YWtlKDEsIC1vYmxpcXVlU2tldywgMCwgMSwgMCwgMCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVU
cmFuc2Zvcm1NYWtlKDEsIDAsIC1vYmxpcXVlU2tldywgMSwgMCwgMCkpOworICAgIH0KKyAgICBT
Y29wZWRUZXh0TWF0cml4IHJlc3RvcmVyKG1hdHJpeCwgY2dDb250ZXh0KTsKKworICAgIHNldENH
Rm9udFJlbmRlcmluZ01vZGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY2dD
b250ZXh0LCBwbGF0Zm9ybURhdGEuc2l6ZSgpKTsKKworICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZz
ZXQ7CisgICAgZmxvYXQgc2hhZG93Qmx1cjsKKyAgICBDb2xvciBzaGFkb3dDb2xvcjsKKyAgICBj
b250ZXh0LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsK
KworICAgIEFmZmluZVRyYW5zZm9ybSBjb250ZXh0Q1RNID0gY29udGV4dC5nZXRDVE0oKTsKKyAg
ICBmbG9hdCBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7
CisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQgJiYgIWNvbnRleHRDVE0uaXNJZGVudGl0eU9y
VHJhbnNsYXRpb25PckZsaXBwZWQoKSkgeworICAgICAgICBGbG9hdFNpemUgaG9yaXpvbnRhbFVu
aXRTaXplSW5EZXZpY2VQaXhlbHMgPSBjb250ZXh0Q1RNLm1hcFNpemUoRmxvYXRTaXplKDEsIDAp
KTsKKyAgICAgICAgZmxvYXQgaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyA9IHNx
cnRmKGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4ZWxzLndpZHRoKCkgKiBob3Jpem9udGFs
VW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICsgaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZp
Y2VQaXhlbHMuaGVpZ2h0KCkgKiBob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy5oZWln
aHQoKSk7CisgICAgICAgIGlmIChob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKSB7
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhIHNjYWxlZCBkb3duIGNvbnRleHQgd29u
J3QgYmxvdyB1cCB0aGUgZ2FwIGJldHdlZW4gdGhlIGdseXBocy4KKyAgICAgICAgICAgIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBzdGQ6Om1pbihzeW50aGV0aWNCb2xkT2Zmc2V0LCBzeW50aGV0aWNC
b2xkT2Zmc2V0IC8gaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscyk7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgYm9vbCBoYXNTaW1wbGVTaGFkb3cgPSBjb250ZXh0LnRleHREcmF3
aW5nTW9kZSgpID09IFRleHREcmF3aW5nTW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlk
KCkgJiYgIXNoYWRvd0JsdXIgJiYgIXBsYXRmb3JtRGF0YS5pc0NvbG9yQml0bWFwRm9udCgpICYm
ICghY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGNvbnRleHRDVE0uaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSkgJiYgIWNvbnRleHQuaXNJblRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgaWYgKGhhc1NpbXBsZVNoYWRvdykgeworICAgICAgICAvLyBQYWludCBz
aW1wbGUgc2hhZG93cyBvdXJzZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3Ms
IHRvIGF2b2lkIGxvc2luZyBzdWJwaXhlbCBhbnRpYWxpYXNpbmcuCisgICAgICAgIGNvbnRleHQu
Y2xlYXJTaGFkb3coKTsKKyAgICAgICAgQ29sb3IgZmlsbENvbG9yID0gY29udGV4dC5maWxsQ29s
b3IoKTsKKyAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JX
aXRoQWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKKyAgICAgICAg
Y29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKKyAgICAgICAgZmxvYXQgc2hh
ZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKKyAgICAgICAgLy8g
SWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0IGFwcGxp
ZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4KKyAgICAg
ICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkg
KiAoY29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpID8gLTEgOiAxKTsKKyAgICAgICAg
c2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNoYWRvd1RleHRYLCBzaGFkb3dUZXh0
WSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICAgICAgaWYgKHN5bnRoZXRpY0JvbGRP
ZmZzZXQpCisgICAgICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hh
ZG93VGV4dFggKyBzeW50aGV0aWNCb2xkT2Zmc2V0LCBzaGFkb3dUZXh0WSksIGZvbnQsIGNnQ29u
dGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9t
KSwgbnVtR2x5cGhzKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsK
KyAgICB9CisKKyNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCisgICAgaWYgKHVzZUxldHRlcnByZXNz
RWZmZWN0KQorICAgICAgICBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZhbmNlcyhwb2lu
dCwgZm9udCwgY29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5h
ZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAg
ICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhC
dWZmZXIuZ2x5cGhzKGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhz
KTsKKyAgICB9CisKKyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgc2hvd0ds
eXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHBvaW50LngoKSArIHN5bnRoZXRpY0JvbGRPZmZz
ZXQsIHBvaW50LnkoKSksIGZvbnQsIGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20p
LCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKKworICAgIGlmIChoYXNT
aW1wbGVTaGFkb3cpCisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93Qmx1ciwgc2hhZG93Q29sb3IpOworCisjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
aWYgKHNob3VsZFNtb290aEZvbnRzICE9IG9yaWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZykK
KyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkQW50aWFs
aWFzICE9IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRBbnRpYWxpYXMoY2dDb250ZXh0LCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyk7Cit9CisKK2Jv
b2wgRm9udENhc2NhZGU6OnByaW1hcnlGb250SXNTeXN0ZW1Gb250KCkgY29uc3QKK3sKKyAgICBj
b25zdCBhdXRvJiBmb250RGF0YSA9IHByaW1hcnlGb250KCk7CisgICAgcmV0dXJuIGlzU3lzdGVt
Rm9udChmb250RGF0YS5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSk7Cit9CisKKy8vIEZJWE1FOiBV
c2UgdGhpcyBvbiBhbGwgcG9ydHMuCitjb25zdCBGb250KiBGb250Q2FzY2FkZTo6Zm9udEZvckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKSBjb25zdAoreworICAgIFVDaGFyMzIgYmFzZUNoYXJhY3RlcjsKKyAgICBzaXplX3Qg
YmFzZUNoYXJhY3Rlckxlbmd0aCA9IDA7CisgICAgVTE2X05FWFQoY2hhcmFjdGVycywgYmFzZUNo
YXJhY3Rlckxlbmd0aCwgbGVuZ3RoLCBiYXNlQ2hhcmFjdGVyKTsKKworICAgIEdseXBoRGF0YSBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGJhc2VDaGFyYWN0
ZXIsIGZhbHNlLCBOb3JtYWxWYXJpYW50KTsKKworICAgIGlmICghYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5nbHlwaCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAobGVuZ3RoID09
IGJhc2VDaGFyYWN0ZXJMZW5ndGgpCisgICAgICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmZvbnQ7CisKKyAgICBib29sIHRyaWVkQmFzZUNoYXJhY3RlckZvbnQgPSBmYWxzZTsKKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7ICFmYWxsYmFja1Jhbmdlc0F0KGkpLmlzTnVsbCgpOyAr
K2kpIHsKKyAgICAgICAgY29uc3QgRm9udCogZm9udCA9IGZhbGxiYWNrUmFuZ2VzQXQoaSkuZm9u
dEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgaWYgKCFmb250KQorICAgICAg
ICAgICAgY29udGludWU7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgaWYgKGJh
c2VDaGFyYWN0ZXIgPj0gMHgwNjAwICYmIGJhc2VDaGFyYWN0ZXIgPD0gMHgwNmZmICYmIGZvbnQt
PnNob3VsZE5vdEJlVXNlZEZvckFyYWJpYygpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5k
aWYKKyAgICAgICAgaWYgKGZvbnQtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9u
dE9yaWVudGF0aW9uOjpWZXJ0aWNhbCkgeworICAgICAgICAgICAgaWYgKGlzQ0pLSWRlb2dyYXBo
T3JTeW1ib2woYmFzZUNoYXJhY3RlcikgJiYgIWZvbnQtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCisg
ICAgICAgICAgICAgICAgZm9udCA9ICZmb250LT5icm9rZW5JZGVvZ3JhcGhGb250KCk7CisgICAg
ICAgICAgICBlbHNlIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9u
KCkgPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvbjo6TWl4ZWQpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBGb250JiB2ZXJ0aWNhbFJpZ2h0Rm9udCA9IGZvbnQtPnZlcnRpY2FsUmlnaHRPcmllbnRh
dGlvbkZvbnQoKTsKKyAgICAgICAgICAgICAgICBHbHlwaCB2ZXJ0aWNhbFJpZ2h0R2x5cGggPSB2
ZXJ0aWNhbFJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNlQ2hhcmFjdGVyKTsKKyAgICAg
ICAgICAgICAgICBpZiAodmVydGljYWxSaWdodEdseXBoID09IGJhc2VDaGFyYWN0ZXJHbHlwaERh
dGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdmVydGljYWxSaWdodEZvbnQ7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IEZvbnQmIHVwcmln
aHRGb250ID0gZm9udC0+dXByaWdodE9yaWVudGF0aW9uRm9udCgpOworICAgICAgICAgICAgICAg
IEdseXBoIHVwcmlnaHRHbHlwaCA9IHVwcmlnaHRGb250LmdseXBoRm9yQ2hhcmFjdGVyKGJhc2VD
aGFyYWN0ZXIpOworICAgICAgICAgICAgICAgIGlmICh1cHJpZ2h0R2x5cGggIT0gYmFzZUNoYXJh
Y3RlckdseXBoRGF0YS5nbHlwaCkKKyAgICAgICAgICAgICAgICAgICAgZm9udCA9ICZ1cHJpZ2h0
Rm9udDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmb250ID09IGJh
c2VDaGFyYWN0ZXJHbHlwaERhdGEuZm9udCkKKyAgICAgICAgICAgIHRyaWVkQmFzZUNoYXJhY3Rl
ckZvbnQgPSB0cnVlOworCisgICAgICAgIGlmIChmb250LT5jYW5SZW5kZXJDb21iaW5pbmdDaGFy
YWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZv
bnQ7CisgICAgfQorCisgICAgaWYgKCF0cmllZEJhc2VDaGFyYWN0ZXJGb250ICYmIGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZm9udCAmJiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQtPmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNoYXJhY3RlcnMsIGxlbmd0aCkpCisgICAg
ICAgIHJldHVybiBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQ7CisKKyAgICByZXR1cm4gRm9u
dDo6c3lzdGVtRmFsbGJhY2soKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udENvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWUyMjUxZDZh
ZGE5YTBlYTBjNDgxMmY3YzU1NjM3ZjlmMDk0ODk4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKQEAgLTAsMCAr
MSw3NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtv
dgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udC5oIgorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250
Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIk9wZW5UeXBlQ0cuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+Cisj
aW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSAiTG9jYWxlQ29jb2EuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29h
L0NvcmVUZXh0U1BJLmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJ
V2luLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGJv
b2wgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShDRlN0cmluZ1JlZiBhLCBDRlN0cmluZ1JlZiBiKQor
eworICAgIHJldHVybiBhICYmIENGU3RyaW5nQ29tcGFyZShhLCBiLCBrQ0ZDb21wYXJlQ2FzZUlu
c2Vuc2l0aXZlKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbzsKK30KKworc3RhdGljIGJvb2wgZm9udEhh
c1ZlcnRpY2FsR2x5cGhzKENURm9udFJlZiBmb250KQoreworICAgIHJldHVybiBmb250SGFzRWl0
aGVyVGFibGUoZm9udCwga0NURm9udFRhYmxlVmhlYSwga0NURm9udFRhYmxlVk9SRyk7Cit9CisK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorYm9vbCBmb250RmFtaWx5U2hvdWxkTm90QmVVc2Vk
Rm9yQXJhYmljKENGU3RyaW5nUmVmIGZvbnRGYW1pbHlOYW1lKQoreworICAgIGlmICghZm9udEZh
bWlseU5hbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRpbWVzIE5ldyBSb21h
biBhbmQgQXJpYWwgYXJlIG5vdCBwZXJmb3JtYW50IGVub3VnaCB0byB1c2UuIDxyZGFyOi8vcHJv
YmxlbS8yMTMzMzMyNj4KKyAgICAvLyBGSVhNRSA8cmRhcjovL3Byb2JsZW0vMTIwOTY4MzU+IHJl
bW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgdGhlIGFib3ZlIGJ1ZyBpcyBmaXhlZC4KKyAgICByZXR1
cm4gKENGU3RyaW5nQ29tcGFyZShDRlNUUigiVGltZXMgTmV3IFJvbWFuIiksIGZvbnRGYW1pbHlO
YW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgfHwgKENGU3RyaW5nQ29tcGFy
ZShDRlNUUigiQXJpYWwiKSwgZm9udEZhbWlseU5hbWUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KTsKK30KKworc3RhdGljIGNvbnN0IGZsb2F0IGtMaW5lSGVpZ2h0QWRqdXN0bWVudCA9IDAuMTVm
OworCitzdGF0aWMgYm9vbCBzaG91bGRVc2VBZGp1c3RtZW50KENURm9udFJlZiBmb250KQorewor
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29w
eUZhbWlseU5hbWUoZm9udCkpOworCisgICAgaWYgKCFmYW1pbHlOYW1lIHx8ICFDRlN0cmluZ0dl
dExlbmd0aChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIlRp
bWVzIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQo
KSwgQ0ZTVFIoIkhlbHZldGljYSIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCIuSGVsdmV0aWNhIE5ldWVVSSIpKTsKK30KKworI2Vs
c2UKKworc3RhdGljIGJvb2wgbmVlZHNBc2NlbnRBZGp1c3RtZW50KENGU3RyaW5nUmVmIGZhbWls
eU5hbWUpCit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgKGNhc2VJbnNlbnNpdGl2ZUNvbXBh
cmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIlRpbWVzIikpCisgICAgICAgIHx8IGNhc2VJbnNlbnNpdGl2
ZUNvbXBhcmUoZmFtaWx5TmFtZSwgQ0ZTVFIoIkhlbHZldGljYSIpKQorICAgICAgICB8fCBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJDb3VyaWVyIikpKTsKK30KKwor
I2VuZGlmCisKK3N0YXRpYyBib29sIGlzQWhlbUZvbnQoQ0ZTdHJpbmdSZWYgZmFtaWx5TmFtZSkK
K3sKKyAgICByZXR1cm4gZmFtaWx5TmFtZSAmJiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWls
eU5hbWUsIENGU1RSKCJBaGVtIikpOworfQorCitib29sIGZvbnRIYXNUYWJsZShDVEZvbnRSZWYg
Y3RGb250LCB1bnNpZ25lZCB0YWJsZVRhZykKK3sKKyAgICBhdXRvIHRhYmxlVGFncyA9IGFkb3B0
Q0YoQ1RGb250Q29weUF2YWlsYWJsZVRhYmxlcyhjdEZvbnQsIGtDVEZvbnRUYWJsZU9wdGlvbk5v
T3B0aW9ucykpOworICAgIGlmICghdGFibGVUYWdzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQ0ZJbmRleCBudW1UYWJsZXMgPSBDRkFycmF5R2V0Q291bnQodGFibGVUYWdzLmdldCgpKTsK
KyAgICBmb3IgKENGSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG51bVRhYmxlczsgKytpbmRleCkg
eworICAgICAgICBhdXRvIHRhZyA9IHN0YXRpY19jYXN0PENURm9udFRhYmxlVGFnPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleCh0YWJsZVRhZ3MuZ2V0
KCksIGluZGV4KSkpOworICAgICAgICBpZiAodGFnID09IHRhYmxlVGFnKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBmb250SGFz
RWl0aGVyVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcxLCB1bnNpZ25l
ZCB0YWJsZVRhZzIpCit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlB
dmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAg
ICBpZiAoIXRhYmxlVGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIENGSW5kZXggbnVt
VGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7CisgICAgZm9yIChDRklu
ZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKKyAgICAgICAgYXV0
byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsK
KyAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZzEgfHwgdGFnID09IHRhYmxlVGFnMikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
Rm9udDo6cGxhdGZvcm1Jbml0KCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IGNl
aWxmKG1fcGxhdGZvcm1EYXRhLnNpemUoKSAvIDI0LjBmKSA6IDAuZjsKKyNlbHNlCisgICAgbV9z
eW50aGV0aWNCb2xkT2Zmc2V0ID0gbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9sZCgpID8gMS4w
ZiA6IDAuZjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIG1fc2NyaXB0Q2FjaGUg
PSAwOworICAgIG1fc2NyaXB0Rm9udFByb3BlcnRpZXMgPSBudWxscHRyOworICAgIGlmIChtX3Bs
YXRmb3JtRGF0YS51c2VHREkoKSkKKyAgICAgICAgcmV0dXJuIGluaXRHRElGb250KCk7CisjZW5k
aWYKKworICAgIHVuc2lnbmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSk7CisgICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEu
c2l6ZSgpOworICAgIENHRmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2Fw
SGVpZ2h0KG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgbGluZUdhcCA9
IHBvaW50U2l6ZSA/IENURm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7
CisgICAgQ0dGbG9hdCBhc2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0
Zm9ybURhdGEuZm9udCgpKSA6IDA7CisgICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8g
Q1RGb250R2V0RGVzY2VudChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKworICAgIC8vIFRo
ZSBPcGVuIEZvbnQgRm9ybWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZs
YWcgYXMgZm9sbG93czoKKyAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRl
ZCB0byB1c2UgT1MvMi5zVHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5z
VHlwb0xpbmVHYXAgYXMgYSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMg
Zm9udC4iCisgICAgLy8gT24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGlt
cG9ydGFudCBjYXNlIG9mIGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgorICAgIGlmIChmb250SGFz
VGFibGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7CisgICAg
ICAgIHNob3J0IHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKKyAgICAgICAg
aWYgKE9wZW5UeXBlOjp0cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5
cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKKyAgICAgICAgICAgIGFzY2Vu
dCA9IHNjYWxlRW1Ub1VuaXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwor
ICAgICAgICAgICAgZGVzY2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQ
ZXJFbSkgKiBwb2ludFNpemU7CisgICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMo
dHlwb0xpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOworICAgICAgICB9CisgICAgfQor
CisgICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3Bs
YXRmb3JtRGF0YS5mb250KCkpKTsKKworICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4g
cmVuZGVyaW5nIHdpdGggQWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgorICAg
IGlmIChpc0FoZW1Gb250KGZhbWlseU5hbWUuZ2V0KCkpKQorICAgICAgICBtX2FsbG93c0FudGlh
bGlhc2luZyA9IGZhbHNlOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IFRpbWVzLCBIZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhl
CisgICAgLy8gdmVydGljYWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRz
IHRoYXQgYXJlIHRoZSBkZSBmYWN0bworICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBh
ZGp1c3RtZW50IG9mIDIwJSBpcyB0b28gYmlnIGFuZCBpcworICAgIC8vIGluY29ycmVjdGx5IGFk
ZGVkIHRvIGxpbmUgc3BhY2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAor
ICAgIC8vIGFuZCBhZGQgaXQgdG8gdGhlIGFzY2VudC4KKyAgICBpZiAob3JpZ2luKCkgPT0gT3Jp
Z2luOjpMb2NhbCAmJiBuZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCisg
ICAgICAgIGFzY2VudCArPSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsK
KyNlbmRpZgorCisgICAgLy8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1l
dHJpY3MgaGFja3MgYXJlIGFwcGxpZWQuCisgICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRm
KGFzY2VudCkgKyBscm91bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKKworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyBy
b29tIGZvciBtYXJrZWQgdGV4dCB1bmRlcmxpbmVzLgorICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81
Mzg2MTgzPgorICAgIGlmIChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFt
ZSAmJiBDRlN0cmluZ0hhc1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8i
KSkpIHsKKyAgICAgICAgbGluZUdhcCAtPSAzIC0gZGVzY2VudDsKKyAgICAgICAgZGVzY2VudCA9
IDM7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0
aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25G
YWxsYmFjaygpKQorICAgICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2Fs
R2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgQ0dGbG9hdCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRm
b3JtRGF0YS5mb250KCkpID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFk
anVzdG1lbnQpIDogMDsKKworICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKKyAgICBsaW5l
U3BhY2luZyA9IGNlaWwoYXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGlu
ZUdhcDsKKyAgICBhc2NlbnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKKyAgICBkZXNj
ZW50ID0gY2VpbGYoZGVzY2VudCk7CisKKyAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9
IGZvbnRGYW1pbHlTaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Cisj
ZW5kaWYKKworICAgIENHRmxvYXQgeEhlaWdodCA9IDA7CisgICAgaWYgKG1fcGxhdGZvcm1EYXRh
LnNpemUoKSkgeworICAgICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246Okhvcml6b250YWwpIHsKKyAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhl
IGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRl
bmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKKyAgICAgICAgICAgIC8vIHJl
cG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGgg
dGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBn
bHlwaEZvckNoYXJhY3RlcigneCcpOworICAgICAgICAgICAgaWYgKHhHbHlwaCkKKyAgICAgICAg
ICAgICAgICB4SGVpZ2h0ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4
R2x5cGgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RG
b250R2V0WEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHhIZWlnaHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1l
dHJpY3MoKS54SGVpZ2h0KCk7CisgICAgfQorCisgICAgbV9mb250TWV0cmljcy5zZXRVbml0c1Bl
ckVtKHVuaXRzUGVyRW0pOworICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Cisg
ICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50KGRlc2NlbnQpOworICAgIG1fZm9udE1ldHJpY3Mu
c2V0Q2FwSGVpZ2h0KGNhcEhlaWdodCk7CisgICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxp
bmVHYXApOworICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKKyAgICBtX2Zv
bnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldFVuZGVybGluZVBvc2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRm
b3JtRGF0YS5mb250KCkpKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVz
cyhDVEZvbnRHZXRVbmRlcmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Cit9
CisKK3ZvaWQgRm9udDo6cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKK3sKKyAgICBtX2F2Z0NoYXJX
aWR0aCA9IDA7CisgICAgbV9tYXhDaGFyV2lkdGggPSAwOworCisgICAgYXV0byBvczJUYWJsZSA9
IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRh
YmxlT1MyLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKKyAgICBpZiAob3MyVGFibGUg
JiYgQ0ZEYXRhR2V0TGVuZ3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7CisgICAgICAgIGNvbnN0
IFVJbnQ4KiBvczIgPSBDRkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKKyAgICAgICAg
U0ludDE2IG9zMkF2Z0NoYXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKKyAgICAgICAg
bV9hdmdDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1l
dHJpY3MudW5pdHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICB9CisKKyAg
ICBhdXRvIGhlYWRUYWJsZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSwga0NURm9udFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7
CisgICAgaWYgKGhlYWRUYWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+
PSA0MikgeworICAgICAgICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVh
ZFRhYmxlLmdldCgpKTsKKyAgICAgICAgdW5zaWduZWQgdXhNaW4gPSBoZWFkWzM2XSAqIDI1NiAr
IGhlYWRbMzddOworICAgICAgICB1bnNpZ25lZCB1eE1heCA9IGhlYWRbNDBdICogMjU2ICsgaGVh
ZFs0MV07CisgICAgICAgIFNJbnQxNiB4TWluID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1pbik7
CisgICAgICAgIFNJbnQxNiB4TWF4ID0gc3RhdGljX2Nhc3Q8U0ludDE2Pih1eE1heCk7CisgICAg
ICAgIGZsb2F0IGRpZmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oeE1heCAtIHhNaW4pOworICAgICAg
ICBtX21heENoYXJXaWR0aCA9IHNjYWxlRW1Ub1VuaXRzKGRpZmYsIG1fZm9udE1ldHJpY3MudW5p
dHNQZXJFbSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBGYWxs
YmFjayB0byBhIGNyb3NzLXBsYXRmb3JtIGVzdGltYXRlLCB3aGljaCB3aWxsIHBvcHVsYXRlIHRo
ZXNlIHZhbHVlcyBpZiB0aGV5IGFyZSBub24tcG9zaXRpdmUuCisgICAgaW5pdENoYXJXaWR0aHMo
KTsKK30KKworYm9vbCBGb250Ojp2YXJpYW50Q2Fwc1N1cHBvcnRzQ2hhcmFjdGVyRm9yU3ludGhl
c2lzKEZvbnRWYXJpYW50Q2FwcyBmb250VmFyaWFudENhcHMsIFVDaGFyMzIgY2hhcmFjdGVyKSBj
b25zdAoreworI2lmIChQTEFURk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQ
TEFURk9STShNQUMpCisgICAgR2x5cGggZ2x5cGggPSBnbHlwaEZvckNoYXJhY3RlcihjaGFyYWN0
ZXIpOworICAgIGlmICghZ2x5cGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAoZm9udFZhcmlhbnRDYXBzKSB7CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlNtYWxsOiB7
CisgICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCk7
CisgICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdl
dChnbHlwaCk7CisgICAgfQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpQZXRpdGU6IHsKKyAg
ICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKCk7Cisg
ICAgICAgIHJldHVybiBzdXBwb3J0ZWQuc2l6ZSgpID4gZ2x5cGggJiYgc3VwcG9ydGVkLmdldChn
bHlwaCk7CisgICAgfQorICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDogeworICAg
ICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2FwcygpOwor
ICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQo
Z2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOiB7Cisg
ICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcygp
OworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5n
ZXQoZ2x5cGgpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBTeW50aGVzaXMgb25s
eSBzdXBwb3J0cyB0aGUgdmFyaWFudC1jYXBzIHZhbHVlcyBsaXN0ZWQgYWJvdmUuCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNoYXJhY3Rlcik7
CisKKyAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRD
YXBzOjpTbWFsbDoKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOgorICAgIGNhc2Ug
Rm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxs
UGV0aXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8g
U3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFi
b3ZlLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKK30KKworI2lmIChQTEFU
Rk9STShJT1NfRkFNSUxZKSAmJiBUQVJHRVRfT1NfSU9TKSB8fCBQTEFURk9STShNQUMpCitzdGF0
aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gc21hbGxDYXBzT3BlblR5cGVEaWN0aW9uYXJ5
KENGU3RyaW5nUmVmIGtleSwgaW50IHJhd1ZhbHVlKQoreworICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gdmFsdWUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckludFR5cGUsICZyYXdWYWx1ZSkpOworICAgIENGVHlwZVJlZiBrZXlzW10gPSB7
IGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSB9
OworICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LCB2YWx1ZS5nZXQoKSB9OworICAgIHJl
dHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlz
LCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGlj
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeShp
bnQgcmF3S2V5LCBpbnQgcmF3VmFsdWUpCit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBr
ZXkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJl
ckludFR5cGUsICZyYXdLZXkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmcmF3VmFsdWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250RmVhdHVy
ZVR5cGVJZGVudGlmaWVyS2V5LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSB9
OworICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsga2V5LmdldCgpLCB2YWx1ZS5nZXQoKSB9Owor
ICAgIHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKwor
c3RhdGljIHZvaWQgdW5pb25CaXRWZWN0b3JzKEJpdFZlY3RvciYgcmVzdWx0LCBDRkJpdFZlY3Rv
clJlZiBzb3VyY2UpCit7CisgICAgQ0ZJbmRleCBsZW5ndGggPSBDRkJpdFZlY3RvckdldENvdW50
KHNvdXJjZSk7CisgICAgcmVzdWx0LmVuc3VyZVNpemUobGVuZ3RoKTsKKyAgICBDRkluZGV4IG1p
biA9IDA7CisgICAgd2hpbGUgKG1pbiA8IGxlbmd0aCkgeworICAgICAgICBDRkluZGV4IG5leHRJ
bmRleCA9IENGQml0VmVjdG9yR2V0Rmlyc3RJbmRleE9mQml0KHNvdXJjZSwgQ0ZSYW5nZU1ha2Uo
bWluLCBsZW5ndGggLSBtaW4pLCAxKTsKKyAgICAgICAgaWYgKG5leHRJbmRleCA9PSBrQ0ZOb3RG
b3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXN1bHQuc2V0KG5leHRJbmRleCwg
dHJ1ZSk7CisgICAgICAgIG1pbiA9IG5leHRJbmRleCArIDE7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU3RyaW5nUmVmIGZlYXR1cmUsIENURm9udFJl
ZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JS
ZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZv
bnQsIHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFyeShmZWF0dXJlLCAxKS5nZXQoKSkpOworICAg
IHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lk
IGluamVjdFRydWVUeXBlQ292ZXJhZ2UoaW50IHR5cGUsIGludCBzZWxlY3RvciwgQ1RGb250UmVm
IGZvbnQsIEJpdFZlY3RvciYgcmVzdWx0KQoreworICAgIFJldGFpblB0cjxDRkJpdFZlY3RvclJl
Zj4gc291cmNlID0gYWRvcHRDRihDVEZvbnRDb3B5R2x5cGhDb3ZlcmFnZUZvckZlYXR1cmUoZm9u
dCwgc21hbGxDYXBzVHJ1ZVR5cGVEaWN0aW9uYXJ5KHR5cGUsIHNlbGVjdG9yKS5nZXQoKSkpOwor
ICAgIHVuaW9uQml0VmVjdG9ycyhyZXN1bHQsIHNvdXJjZS5nZXQoKSk7Cit9CisKK2NvbnN0IEJp
dFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMoKSBjb25zdAoreworICAg
IGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBl
Q292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVy
YWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IsIHBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKTsKK30K
KworY29uc3QgQml0VmVjdG9yJiBGb250OjpnbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcygp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzKSB7Cisg
ICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMgPSBCaXRWZWN0b3IoKTsKKyAg
ICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigic21jcCIpLCBwbGF0Zm9ybURhdGEo
KS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAg
ICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMyc2MiKSwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgICAg
ICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VUeXBlLCBrTG93ZXJDYXNlU21hbGxD
YXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBw
ZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5m
b250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgfQor
ICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCk7Cit9CisK
K2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzKSB7CisgICAgICAg
IG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVDYXBzID0gQml0VmVjdG9yKCk7CisgICAgICAgIGlu
amVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBjYXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgp
LCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0
VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxl
Y3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2Fw
cy52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlQZXRpdGVD
YXBzLnZhbHVlKCk7Cit9CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVk
QnlBbGxQZXRpdGVDYXBzKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzKSB7CisgICAgICAgIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBz
ID0gQml0VmVjdG9yKCk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInBj
YXAiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRl
Q2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlNUUigiYzJw
YyIpLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVD
YXBzLnZhbHVlKCkpOworICAgICAgICBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGtMb3dlckNhc2VU
eXBlLCBrTG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCks
IG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCkpOworICAgICAgICBpbmpl
Y3RUcnVlVHlwZUNvdmVyYWdlKGtVcHBlckNhc2VUeXBlLCBrVXBwZXJDYXNlUGV0aXRlQ2Fwc1Nl
bGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRp
dGVDYXBzLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFs
bFBldGl0ZUNhcHMudmFsdWUoKTsKK30KKyNlbmRpZgorCitzdGF0aWMgUmVmUHRyPEZvbnQ+IGNy
ZWF0ZURlcml2YXRpdmVGb250KENURm9udFJlZiBmb250LCBmbG9hdCBzaXplLCBGb250T3JpZW50
YXRpb24gb3JpZW50YXRpb24sIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRUcmFpdHMsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpCit7CisgICAgaWYgKCFmb250KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChzeW50aGV0aWNCb2xkKQorICAgICAg
ICBmb250VHJhaXRzIHw9IGtDVEZvbnRCb2xkVHJhaXQ7CisgICAgaWYgKHN5bnRoZXRpY0l0YWxp
YykKKyAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250SXRhbGljVHJhaXQ7CisKKyAgICBDVEZv
bnRTeW1ib2xpY1RyYWl0cyBzY2FsZWRGb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFp
dHMoZm9udCk7CisKKyAgICBib29sIHVzZWRTeW50aGV0aWNCb2xkID0gKGZvbnRUcmFpdHMgJiBr
Q1RGb250Qm9sZFRyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRCb2xk
KTsKKyAgICBib29sIHVzZWRTeW50aGV0aWNPYmxpcXVlID0gKGZvbnRUcmFpdHMgJiBrQ1RGb250
SXRhbGljVHJhaXQpICYmICEoc2NhbGVkRm9udFRyYWl0cyAmIGtDVEZvbnRUcmFpdEl0YWxpYyk7
CisgICAgRm9udFBsYXRmb3JtRGF0YSBzY2FsZWRGb250RGF0YShmb250LCBzaXplLCB1c2VkU3lu
dGhldGljQm9sZCwgdXNlZFN5bnRoZXRpY09ibGlxdWUsIG9yaWVudGF0aW9uKTsKKworICAgIHJl
dHVybiBGb250OjpjcmVhdGUoc2NhbGVkRm9udERhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNPcGVuVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgcmV0
dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1
cmVUYWcpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlw
ZUZlYXR1cmVWYWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RydWVUeXBlRmVhdHVy
ZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSkKK3sKKyAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q29u
dGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkgJiYgQ0ZE
aWN0aW9uYXJ5Q29udGFpbnNLZXkoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXkpOworfQorCitzdGF0aWMgaW5saW5lIE9wdGlvbmFsPENGU3RyaW5nUmVmPiBvcGVu
VHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgQVNTRVJUKGlzT3Bl
blR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKKyAgICBDRlN0cmluZ1JlZiB0YWcgPSBzdGF0aWNfY2Fz
dDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5U
eXBlRmVhdHVyZVRhZykpOworICAgIGludCByYXdWYWx1ZTsKKyAgICBDRk51bWJlclJlZiB2YWx1
ZSA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJl
LCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51
bWJlckdldFZhbHVlKHZhbHVlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpOworICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgcmV0dXJuIHJhd1ZhbHVlID8gT3B0
aW9uYWw8Q0ZTdHJpbmdSZWY+KHRhZykgOiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBpbmxp
bmUgc3RkOjpwYWlyPGludCwgaW50PiB0cnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZl
YXR1cmUpCit7CisgICAgQVNTRVJUKGlzVHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpKTsKKyAgICBp
bnQgcmF3VHlwZTsKKyAgICBDRk51bWJlclJlZiB0eXBlID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJS
ZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50
aWZpZXJLZXkpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBDRk51bWJlckdldFZhbHVlKHR5cGUsIGtD
Rk51bWJlckludFR5cGUsICZyYXdUeXBlKTsKKyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1
Y2Nlc3MpOworICAgIGludCByYXdTZWxlY3RvcjsKKyAgICBDRk51bWJlclJlZiBzZWxlY3RvciA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgIHN1Y2Nlc3MgPSBDRk51
bWJlckdldFZhbHVlKHNlbGVjdG9yLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3U2VsZWN0b3IpOwor
ICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHJhd1R5cGUsIHJhd1NlbGVjdG9yKTsKK30KKworc3RhdGljIGlubGluZSBDRk51bWJl
clJlZiBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoaW50IGtleSwgQ1RGb250UmVm
IGZvbnQpCit7CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGZlYXR1cmVzID0gYWRvcHRDRihD
VEZvbnRDb3B5RmVhdHVyZXMoZm9udCkpOworICAgIENGSW5kZXggZmVhdHVyZUNvdW50ID0gQ0ZB
cnJheUdldENvdW50KGZlYXR1cmVzLmdldCgpKTsKKyAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkg
PCBmZWF0dXJlQ291bnQ7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZVR5
cGUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
ZmVhdHVyZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgQ0ZOdW1iZXJSZWYgZmVhdHVyZUtleSA9IHN0
YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlVHlwZSwg
a0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVL
ZXkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaW50IHJhd0ZlYXR1cmVLZXk7Cisg
ICAgICAgIENGTnVtYmVyR2V0VmFsdWUoZmVhdHVyZUtleSwga0NGTnVtYmVySW50VHlwZSwgJnJh
d0ZlYXR1cmVLZXkpOworICAgICAgICBpZiAocmF3RmVhdHVyZUtleSAhPSBrZXkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBDRkFycmF5UmVmIGZlYXR1cmVTZWxlY3RvcnMgPSBz
dGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlVHlwZSwg
a0NURm9udEZlYXR1cmVUeXBlU2VsZWN0b3JzS2V5KSk7CisgICAgICAgIGlmICghZmVhdHVyZVNl
bGVjdG9ycykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBDRkluZGV4IHNlbGVjdG9y
c0NvdW50ID0gQ0ZBcnJheUdldENvdW50KGZlYXR1cmVTZWxlY3RvcnMpOworICAgICAgICBmb3Ig
KENGSW5kZXggaiA9IDA7IGogPCBzZWxlY3RvcnNDb3VudDsgKytqKSB7CisgICAgICAgICAgICBD
RkRpY3Rpb25hcnlSZWYgZmVhdHVyZVNlbGVjdG9yID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5
UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVTZWxlY3RvcnMsIGopKTsKKyAgICAg
ICAgICAgIENGTnVtYmVyUmVmIGlzRGVmYXVsdCA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihD
RkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlU2VsZWN0b3IsIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JEZWZhdWx0S2V5KSk7CisgICAgICAgICAgICBpZiAoIWlzRGVmYXVsdCkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGludCByYXdJc0RlZmF1bHQ7CisgICAgICAgICAg
ICBDRk51bWJlckdldFZhbHVlKGlzRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd0lzRGVm
YXVsdCk7CisgICAgICAgICAgICBpZiAoIXJhd0lzRGVmYXVsdCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZE
aWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9y
SWRlbnRpZmllcktleSkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwor
fQorCitzdGF0aWMgaW5saW5lIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHJlbW92ZWRGZWF0
dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCkKK3sKKyAgICBib29s
IGlzT3BlblR5cGUgPSBpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICBib29sIGlzVHJ1
ZVR5cGUgPSBpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICBpZiAoIWlzT3BlblR5cGUg
JiYgIWlzVHJ1ZVR5cGUpCisgICAgICAgIHJldHVybiBmZWF0dXJlOyAvLyBXZSBkb24ndCB1bmRl
cnN0YW5kIHRoaXMgZm9udCBmb3JtYXQuCisgICAgUmV0YWluUHRyPENGTXV0YWJsZURpY3Rpb25h
cnlSZWY+IHJlc3VsdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgaWYgKGlzT3BlblR5cGUpIHsKKyAgICAg
ICAgYXV0byBmZWF0dXJlVGFnID0gb3BlblR5cGVGZWF0dXJlKGZlYXR1cmUpOworICAgICAgICBp
ZiAoZmVhdHVyZVRhZyAmJiAoQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJzbWNw
IikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIoImMy
c2MiKSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigi
cGNhcCIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RS
KCJjMnBjIikpKSkgeworICAgICAgICAgICAgaW50IHJhd1plcm8gPSAwOworICAgICAgICAgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiB6ZXJvID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3WmVybykpOworICAgICAgICAg
ICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0
dXJlVGFnLCBmZWF0dXJlVGFnLnZhbHVlKCkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUsIHplcm8uZ2V0
KCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUo
cmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBDRkRpY3Rpb25hcnlHZXRW
YWx1ZShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSk7CisgICAgICAgICAgICBD
RkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVW
YWx1ZSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzVHJ1ZVR5cGUpIHsKKyAgICAg
ICAgYXV0byB0cnVlVHlwZUZlYXR1cmVQYWlyID0gdHJ1ZVR5cGVGZWF0dXJlKGZlYXR1cmUpOwor
ICAgICAgICBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrTG93ZXJDYXNlVHlwZSAm
JiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVj
dG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VQZXRpdGVDYXBz
U2VsZWN0b3IpKSB7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0
KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVl
KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAg
IGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVl
VHlwZUZlYXR1cmUoa0xvd2VyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAgICAgICAgICAgIENGRGlj
dGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNl
bGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfSBlbHNlIGlmICh0cnVl
VHlwZUZlYXR1cmVQYWlyLmZpcnN0ID09IGtVcHBlckNhc2VUeXBlICYmICh0cnVlVHlwZUZlYXR1
cmVQYWlyLnNlY29uZCA9PSBrVXBwZXJDYXNlU21hbGxDYXBzU2VsZWN0b3IgfHwgdHJ1ZVR5cGVG
ZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvcikpIHsKKyAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1
cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOworICAgICAgICAgICAgaWYgKENGTnVtYmVyUmVm
IGRlZmF1bHRTZWxlY3RvciA9IGRlZmF1bHRTZWxlY3RvckZvclRydWVUeXBlRmVhdHVyZShrVXBw
ZXJDYXNlVHlwZSwgZm9udCkpCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUo
cmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgZGVmYXVs
dFNlbGVjdG9yKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVy
S2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9y
SWRlbnRpZmllcktleSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5
LCBDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlm
aWVyS2V5KSk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCks
IGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1
ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSkpOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q1RG
b250UmVmPiBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKENURm9udFJl
ZiBmb250KQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0Yo
c3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250
RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlKSkpOworICAgIGlmICghZmVhdHVyZXMpCisgICAgICAg
IHJldHVybiBmb250OworICAgIENGSW5kZXggZmVhdHVyZUNvdW50ID0gQ0ZBcnJheUdldENvdW50
KGZlYXR1cmVzLmdldCgpKTsKKyAgICBSZXRhaW5QdHI8Q0ZNdXRhYmxlQXJyYXlSZWY+IG5ld0Zl
YXR1cmVzID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBmZWF0dXJlQ291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKENGSW5k
ZXggaSA9IDA7IGkgPCBmZWF0dXJlQ291bnQ7ICsraSkgeworICAgICAgICBDRkRpY3Rpb25hcnlS
ZWYgZmVhdHVyZSA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVl
QXRJbmRleChmZWF0dXJlcy5nZXQoKSwgaSkpOworICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUo
bmV3RmVhdHVyZXMuZ2V0KCksIHJlbW92ZWRGZWF0dXJlKGZlYXR1cmUsIGZvbnQpLmdldCgpKTsK
KyAgICB9CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0
dHJpYnV0ZSB9OworICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsgbmV3RmVhdHVyZXMuZ2V0KCkg
fTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2Ny
aXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVX
aXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ1RG
b250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKGZvbnQsIENURm9udEdldFNpemUoZm9udCksIG51
bGxwdHIsIG5ld0Rlc2NyaXB0b3IuZ2V0KCkpKTsKK30KKworUmVmUHRyPEZvbnQ+IEZvbnQ6OmNy
ZWF0ZUZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKCkgY29uc3QKK3sKKyAgICBmbG9h
dCBzaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOworICAgIENURm9udFN5bWJvbGljVHJhaXRz
IGZvbnRUcmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250
KCkpOworICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IGN0Rm9udCA9IGNyZWF0ZUNURm9udFdpdGhv
dXRTeW50aGVzaXphYmxlRmVhdHVyZXMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICByZXR1
cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoY3RGb250LmdldCgpLCBzaXplLCBtX3BsYXRmb3JtRGF0
YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xk
KCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9CisKK1JlZlB0cjxGb250
PiBGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Cit7CisgICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1E
YXRhLnNpemUoKSAqIHNjYWxlRmFjdG9yOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIGZvbnRU
cmFpdHMgPSBDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhtX3BsYXRmb3JtRGF0YS5mb250KCkpOwor
ICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBmb250RGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOworICAg
IFJldGFpblB0cjxDVEZvbnRSZWY+IHNjYWxlZEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdp
dGhGb250RGVzY3JpcHRvcihmb250RGVzY3JpcHRvci5nZXQoKSwgc2l6ZSwgbnVsbHB0cikpOwor
CisgICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KHNjYWxlZEZvbnQuZ2V0KCksIHNpemUs
IG1fcGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCksIGZvbnRUcmFpdHMsIG1fcGxhdGZvcm1EYXRh
LnN5bnRoZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpKTsKK30K
Kwordm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1
bnNpZ25lZCBiZWdpbm5pbmdHbHlwaEluZGV4LCB1bnNpZ25lZCBiZWdpbm5pbmdTdHJpbmdJbmRl
eCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxlLCBTdHJpbmdWaWV3IHRleHQsIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlv
bikgY29uc3QKK3sKKyAgICBVTlVTRURfUEFSQU0ocmVxdWlyZXNTaGFwaW5nKTsKKworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgR2x5cGhCdWZmZXIgaW5pdGlhbCBhZHZhbmNlLgorI2lmIFVTRShD
VEZPTlRTSEFQRUdMWVBIUykKKyAgICBhdXRvIGhhbmRsZXIgPSBeKENGUmFuZ2UgcmFuZ2UsIENH
R2x5cGgqKiBuZXdHbHlwaHNQb2ludGVyLCBDR1NpemUqKiBuZXdBZHZhbmNlc1BvaW50ZXIsIENH
UG9pbnQqKiBuZXdPZmZzZXRzUG9pbnRlciwgQ0ZJbmRleCoqIG5ld0luZGljZXNQb2ludGVyKQor
ICAgIHsKKyAgICAgICAgcmFuZ2UubG9jYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChyYW5nZS5s
b2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4oMCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4Pihn
bHlwaEJ1ZmZlci5zaXplKCkpKTsKKyAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA8IDApIHsKKyAg
ICAgICAgICAgIHJhbmdlLmxlbmd0aCA9IHN0ZDo6bWluKHJhbmdlLmxvY2F0aW9uLCAtcmFuZ2Uu
bGVuZ3RoKTsKKyAgICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gcmFuZ2UubG9jYXRpb24gLSBy
YW5nZS5sZW5ndGg7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5yZW1vdmUoYmVnaW5uaW5nR2x5
cGhJbmRleCArIHJhbmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGdseXBoQnVmZmVyLm1ha2VIb2xlKGJlZ2lubmluZ0dseXBoSW5kZXggKyBy
YW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKKworICAgICAgICAqbmV3R2x5cGhz
UG9pbnRlciA9IGdseXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAg
ICAgKm5ld0FkdmFuY2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0ds
eXBoSW5kZXgpOworICAgICAgICAqbmV3T2Zmc2V0c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5vcmln
aW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgICAgICAqbmV3SW5kaWNlc1BvaW50ZXIgPSBn
bHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAgfTsK
KworICAgIGF1dG8gc3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nU3RyaW5nSW5k
ZXgpOworICAgIGF1dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29udmVy
dGVkQ2hhcmFjdGVycygpOworICAgIGF1dG8gbG9jYWxlU3RyaW5nID0gTG9jYWxlQ29jb2E6OmNh
bm9uaWNhbExhbmd1YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9jYWxlKS5zdHJpbmcoKS5jcmVh
dGVDRlN0cmluZygpOworICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9udFNo
YXBlV2l0aENsdXN0ZXJDb21wb3NpdGlvbgorICAgICAgICB8IChlbmFibGVLZXJuaW5nID8ga0NU
Rm9udFNoYXBlV2l0aEtlcm5pbmcgOiAwKQorICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFRl
eHREaXJlY3Rpb246OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5
cGhJbmRleDsgKytpKQorICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5u
aW5nR2x5cGhJbmRleClbaV0gLT0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7CisKKyAgICBDVEZvbnRT
aGFwZUdseXBocygKKyAgICAgICAgbV9wbGF0Zm9ybURhdGEuY3RGb250KCksCisgICAgICAgIGds
eXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKKyAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4
KSksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQb2ludCo+KGdseXBoQnVmZmVyLm9yaWdp
bnMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLAorICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5T
dHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgVW5pQ2hhcio+KHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSksCisgICAgICAgIGdseXBo
QnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsCisgICAgICAgIG9wdGlvbnMsCisg
ICAgICAgIGxvY2FsZVN0cmluZy5nZXQoKSwKKyAgICAgICAgaGFuZGxlcik7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJ
bmRleDsgKytpKQorICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5n
R2x5cGhJbmRleClbaV0gKz0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7CisKKyNlbHNlCisKKyAgICBV
TlVTRURfUEFSQU0oYmVnaW5uaW5nU3RyaW5nSW5kZXgpOworICAgIFVOVVNFRF9QQVJBTShsb2Nh
bGUpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKworICAgIC8vIENURm9udFRyYW5zZm9ybUds
eXBocygpIG9wZXJhdGVzIGluIHZpc3VhbCBvcmRlciwgYnV0IFdpZHRoSXRlcmF0b3IgaXRlcmF0
ZXMgaW4gbG9naWNhbCBvcmRlci4KKyAgICAvLyBUZW1wb3JhcmlseSBwdXQgdXMgaW4gdmlzdWFs
IG9yZGVyIGp1c3QgZm9yIHRoZSBjYWxsLCB0aGVuIHB1dCB1cyBiYWNrIGludG8gbG9naWNhbCBv
cmRlciB3aGVuCisgICAgLy8gdGhlIGNhbGwgaXMgZG9uZS4KKyAgICAvLyBXZSBkb24ndCBoYXZl
IGEgZ2xvYmFsIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlcjsgd2UncmUganVzdCBvcGVy
YXRpbmcgb24gYSBzaW5nbGUgY2h1bmsgb2YgaXQuCisgICAgLy8gV2lkdGhJdGVyYXRvciBlbmNv
dW50ZXJzIHRoZSBjaHVua3Mgb3V0IGluIGxvZ2ljYWwgb3JkZXIsIHNvIHdlIGhhdmUgdG8gbWFp
bnRhaW4gdGhhdCBpbnZhcmlhbnQuCisgICAgLy8gRXZlbnR1YWxseSwgRm9udENhc2NhZGU6Omxh
eW91dFNpbXBsZVRleHQoKSB3aWxsIHJldmVyc2UgdGhlIHdob2xlIGJ1ZmZlciB0byBwdXQgdGhl
IGVudGlyZSB0aGluZworICAgIC8vIGluIHZpc3VhbCBvcmRlciwgYnV0IHRoYXQncyBva2F5IGJl
Y2F1c2UgaXQgaGFzIGEgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyLgorICAgIC8vIE9u
IHRoZSBvdGhlciBoYW5kLCBDVEZvbnRTaGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBp
biBsb2dpY2FsIG9yZGVyIGJ1dCByZXR1cm5zIGl0IGluIHBoeXNpY2FsCisgICAgLy8gb3JkZXIs
IHdoaWNoIG1lYW5zIHRoZSBzZWNvbmQgcmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwg
bmVlZHMgdG8gZXhlY3V0ZSB3aGVuCisgICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWlu
ZyB1c2VkLgorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKKyAg
ICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZl
ci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKKworICAgIENURm9udFRyYW5zZm9ybU9w
dGlvbnMgb3B0aW9ucyA9IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9z
aXRpb25pbmcgOiAwKSB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmc7CisgICAgQ1RGb250
VHJhbnNmb3JtR2x5cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlw
aHMoYmVnaW5uaW5nR2x5cGhJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkg
LSBiZWdpbm5pbmdHbHlwaEluZGV4LCBvcHRpb25zKTsKKyNlbmRpZgorCisgICAgLy8gU2VlIHRo
ZSBjb21tZW50IGFib3ZlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8g
cmV2ZXJzZSgpIGlzLgorICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJU
TCkKKyAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlw
aEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKK30KKworc3RhdGljIGludCBl
eHRyYWN0TnVtYmVyKENGTnVtYmVyUmVmIG51bWJlcikKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsK
KyAgICBpZiAobnVtYmVyKQorICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVt
YmVySW50VHlwZSwgJnJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBGb250
OjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1E
YXRhLmZvbnQoKTsKKyAgICBBU1NFUlQoY3RGb250KTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBP
c2FrYS1Nb25vLgorICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4s
IHdlIHNob3VsZCB0cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUg
dGhhdCB0aGUgQXBwS2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNo
LgorCisgICAgLy8gU3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCisgICAgLy8gQWNjb3JkaW5nIHRv
IDxyZGFyOi8vcHJvYmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGlj
IGFzIGZpeGVkIHBpdGNoLgorICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMt
UEdvdGhpYyBhcyBmaXhlZCBwaXRjaC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNv
cnNpdmEKKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBz
aG91bGQgbm90IHRyZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBO
b3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRj
aC4KKworICAgIGF1dG8gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZv
bnQpKTsKKyAgICBhdXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1l
KGN0Rm9udCkpOworCisgICAgaW50IGZpeGVkUGl0Y2ggPSBleHRyYWN0TnVtYmVyKGFkb3B0Q0Yo
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENURm9udENvcHlBdHRyaWJ1dGUobV9wbGF0Zm9ybURh
dGEuZm9udCgpLCBrQ1RGb250Rml4ZWRBZHZhbmNlQXR0cmlidXRlKSkpLmdldCgpKTsKKyAgICBt
X3RyZWF0QXNGaXhlZFBpdGNoID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBr
Q1RGb250TW9ub1NwYWNlVHJhaXQpIHx8IGZpeGVkUGl0Y2ggfHwgKGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikpIHx8IGNhc2VJbnNlbnNp
dGl2ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIikpIHx8IGNhc2VJ
bnNlbnNpdGl2ZUNvbXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNb25vdHlwZUNvcnNpdmEi
KSkpOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgaWYgKGZhbWlseU5hbWUgJiYgY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBOZXci
KSkpIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0cmVh
dGVkIGFzIGZpeGVkIHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQgc3Bh
Y2Ugd2lkdGggd2hpY2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8vNjI2
OTc4MykuCisgICAgICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKKyAgICB9CisjZW5k
aWYKK30KKworRmxvYXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5
cGgpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OworICAgIGJvdW5kaW5nQm94
ID0gQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQo
KSwgcGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRp
Y2FsID8ga0NURm9udE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RGb250T3JpZW50YXRpb25Ib3Jp
em9udGFsLCAmZ2x5cGgsIDAsIDEpOworICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94
Lm1heFkoKSk7CisgICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKKyAgICAgICAgYm91bmRp
bmdCb3guc2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNl
dCk7CisKKyAgICByZXR1cm4gYm91bmRpbmdCb3g7Cit9CisKK2Zsb2F0IEZvbnQ6OnBsYXRmb3Jt
V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBDR1NpemUgYWR2YW5jZSA9
IENHU2l6ZVplcm87CisKKyAgICBpZiAocGxhdGZvcm1EYXRhKCkuc2l6ZSgpKSB7CisgICAgICAg
IGJvb2wgaG9yaXpvbnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpIb3Jpem9udGFsOworICAgICAgICBDVEZvbnRPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiA9IGhvcml6b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID8ga0NURm9u
dE9yaWVudGF0aW9uSG9yaXpvbnRhbCA6IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsOworI2lm
IFVTRShDVEZPTlRHRVRBRFZBTkNFU19XT1JLQVJPVU5EKQorICAgICAgICBDR0ZvbnRSZW5kZXJp
bmdTdHlsZSBzdHlsZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0Zv
bnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5
bGVTdWJwaXhlbFF1YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVy
ZWQ7CisgICAgICAgIGlmICghQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9wbGF0Zm9ybURhdGEu
Y3RGb250KCkpICYmICFtX3BsYXRmb3JtRGF0YS5oYXNWYXJpYXRpb25zKCkpCisgICAgICAgICAg
ICBDVEZvbnRHZXRVbnN1bW1lZEFkdmFuY2VzRm9yR2x5cGhzQW5kU3R5bGUobV9wbGF0Zm9ybURh
dGEuY3RGb250KCksIG9yaWVudGF0aW9uLCBzdHlsZSwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Cisg
ICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBDVEZvbnRHZXRBZHZh
bmNlc0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sICZnbHlw
aCwgJmFkdmFuY2UsIDEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBhZHZhbmNlLndp
ZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OworfQorCitQYXRoIEZvbnQ6OnBsYXRmb3JtUGF0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRD
RihDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGdseXBo
LCBudWxscHRyKSk7CisgICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhl
dGljQm9sZE9mZnNldCgpOworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7CisgICAgICAg
IGF1dG8gbmV3UGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKKyAgICAgICAg
Q0dQYXRoQWRkUGF0aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOworICAg
ICAgICBhdXRvIHRyYW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24o
c3ludGhldGljQm9sZE9mZnNldCwgMCk7CisgICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5n
ZXQoKSwgJnRyYW5zbGF0aW9uLCByZXN1bHQuZ2V0KCkpOworICAgICAgICByZXR1cm4geyBXVEZN
b3ZlKG5ld1BhdGgpIH07CisgICAgfQorICAgIHJldHVybiB7IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRl
TXV0YWJsZUNvcHkocmVzdWx0LmdldCgpKSkgfTsKK30KKworYm9vbCBGb250OjpwbGF0Zm9ybVN1
cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxVQ2hhcjMyPiB2YXJp
YXRpb24pIGNvbnN0Cit7CisgICAgaWYgKHZhcmlhdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgVW5pQ2hhciBjb2RlVW5pdHNbMl07CisgICAgQ0dHbHlwaCBnbHlwaHNbMl07Cisg
ICAgQ0ZJbmRleCBjb3VudCA9IDA7CisgICAgVTE2X0FQUEVORF9VTlNBRkUoY29kZVVuaXRzLCBj
b3VudCwgY2hhcmFjdGVyKTsKKyAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVy
cyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNvdW50KTsKK30K
KworYm9vbCBGb250Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKK3sK
KyAgICBhdXRvIHBsYXRmb3JtRm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKKyAgICBpZiAo
IXBsYXRmb3JtRm9udCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQWxsb3cgbW9z
dCBub24taWNvbiBmb250cyB0byBiYWlsIGVhcmx5IGhlcmUgYnkgdGVzdGluZyBhIHNpbmdsZSBj
aGFyYWN0ZXIgJ2EnLCB3aXRob3V0IGl0ZXJhdGluZyBvdmVyIGFsbCBiYXNpYyBsYXRpbiBjaGFy
YWN0ZXJzLgorICAgIFVuaUNoYXIgbG93ZXJjYXNlQUNoYXJhY3RlciA9ICdhJzsKKyAgICBDR0ds
eXBoIGxvd2VyY2FzZUFHbHlwaDsKKyAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVy
cyhwbGF0Zm9ybUZvbnQsICZsb3dlcmNhc2VBQ2hhcmFjdGVyLCAmbG93ZXJjYXNlQUdseXBoLCAx
KSkgeworICAgICAgICBpZiAoIUNHUmVjdElzRW1wdHkoQ1RGb250R2V0Qm91bmRpbmdSZWN0c0Zv
ckdseXBocyhwbGF0Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsICZsb3dlcmNh
c2VBR2x5cGgsIG51bGxwdHIsIDEpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBhdXRvIHN1cHBvcnRlZENoYXJhY3RlcnMgPSBhZG9wdENGKENURm9udENvcHlDaGFy
YWN0ZXJTZXQocGxhdGZvcm1Gb250KSk7CisgICAgaWYgKENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVy
SW5QbGFuZShzdXBwb3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAxKSB8fCBDRkNoYXJhY3RlclNldEhh
c01lbWJlckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFRoaXMgZW5jb21wYXNzZXMgYWxsIGJhc2ljIExhdGluIG5v
bi1jb250cm9sIGNoYXJhY3RlcnMuCisgICAgY29uc3RleHByIFVuaUNoYXIgZmlyc3RDaGFyYWN0
ZXJUb1Rlc3QgPSAnICc7CisgICAgY29uc3RleHByIFVuaUNoYXIgbGFzdENoYXJhY3RlclRvVGVz
dCA9ICd+JzsKKyAgICBjb25zdGV4cHIgYXV0byBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QgPSBs
YXN0Q2hhcmFjdGVyVG9UZXN0IC0gZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgKyAxOworCisgICAgVmVj
dG9yPENHR2x5cGg+IGdseXBoczsKKyAgICBnbHlwaHMuZmlsbCgwLCBudW1iZXJPZkNoYXJhY3Rl
cnNUb1Rlc3QpOworICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlclJhbmdlKHBsYXRmb3Jt
Rm9udCwgZ2x5cGhzLmJlZ2luKCksIENGUmFuZ2VNYWtlKGZpcnN0Q2hhcmFjdGVyVG9UZXN0LCBu
dW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QpKTsKKyAgICBnbHlwaHMucmVtb3ZlQWxsKDApOworCisg
ICAgaWYgKGdseXBocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZl
Y3RvcjxDR1JlY3Q+IGJvdW5kaW5nUmVjdHM7CisgICAgYm91bmRpbmdSZWN0cy5maWxsKENHUmVj
dFplcm8sIGdseXBocy5zaXplKCkpOworICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlw
aHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVnaW4o
KSwgYm91bmRpbmdSZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbm90
Rm91bmQgPT0gYm91bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgeworICAg
ICAgICByZXR1cm4gIUNHUmVjdElzRW1wdHkocmVjdCk7CisgICAgfSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2N0L0ZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU0NWIwZTg1MDEyMTU5ZjYwMTNmZjUyMjlkYjI0MGEyN2U2MjgwY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRh
Q29yZVRleHQuY3BwCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uCisgKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisj
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxw
YWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShDVEZvbnRSZWYgZm9udCwg
ZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZv
bnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQs
IFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQorICAgIDogRm9udFBsYXRmb3Jt
RGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwg
d2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKK3sKKyAgICBBU1NFUlRfQVJHKGZvbnQs
IGZvbnQpOworICAgIG1fZm9udCA9IGZvbnQ7CisgICAgbV9pc0NvbG9yQml0bWFwRm9udCA9IENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpICYga0NURm9udENvbG9yR2x5cGhzVHJhaXQ7Cisg
ICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJDb3JlOjppc1N5c3RlbUZvbnQobV9mb250LmdldCgpKTsK
KyAgICBhdXRvIHZhcmlhdGlvbnMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGRGljdGlvbmFyeVJl
Zj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBrQ1RGb250VmFyaWF0aW9uQXR0cmlidXRlKSkp
OworICAgIG1faGFzVmFyaWF0aW9ucyA9IHZhcmlhdGlvbnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291
bnQodmFyaWF0aW9ucy5nZXQoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIG1f
aXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xvckVtb2ppKG1fZm9udC5nZXQoKSk7CisjZW5kaWYK
K30KKworYm9vbCBpc1N5c3RlbUZvbnQoQ1RGb250UmVmIGZvbnQpCit7CisjaWYgSEFWRShDVEZP
TlRJU1NZU1RFTVVJRk9OVCkKKyAgICByZXR1cm4gQ1RGb250SXNTeXN0ZW1VSUZvbnQoZm9udCk7
CisjZWxzZQorICAgIHJldHVybiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoYWRvcHRD
RihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCkpLmdldCgpKTsKKyNlbmRpZgorfQorCitD
VEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAoreworICAg
IENURm9udFJlZiBwbGF0Zm9ybUZvbnQgPSBmb250KCk7CisgICAgQVNTRVJUKHBsYXRmb3JtRm9u
dCk7CisgICAgaWYgKHBsYXRmb3JtRm9udCAmJiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUo
cGxhdGZvcm1Gb250LCBrQ1RGb250VVJMQXR0cmlidXRlKSkpCisgICAgICAgIHJldHVybiBwbGF0
Zm9ybUZvbnQ7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKKyNpZiBQTEFURk9STShDT0NPQSkK
K2lubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IoRm9udFdp
ZHRoVmFyaWFudCB2YXJpYW50KQoreworICAgIHN3aXRjaCAodmFyaWFudCkgeworICAgIGNhc2Ug
Rm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoOgorICAgICAgICByZXR1cm4ga1Byb3BvcnRp
b25hbFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6SGFsZldpZHRo
OgorICAgICAgICByZXR1cm4ga0hhbGZXaWR0aFRleHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9u
dFdpZHRoVmFyaWFudDo6VGhpcmRXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtUaGlyZFdpZHRoVGV4
dFNlbGVjdG9yOworCisgICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpRdWFydGVyV2lkdGg6Cisg
ICAgICAgIHJldHVybiBrUXVhcnRlcldpZHRoVGV4dFNlbGVjdG9yOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrUHJvcG9ydGlvbmFsVGV4dFNlbGVjdG9y
OworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gY2FzY2FkZVRvTGFzdFJl
c29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KCkKK3sKKyAgICBhdXRvIGxhc3RSZXNvcnQgPSBhZG9w
dENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoTmFtZUFuZFNpemUoQ0ZTVFIoIkxhc3RSZXNv
cnQiKSwgMCkpOworCisgICAgQ0ZUeXBlUmVmIGRlc2NyaXB0b3JzW10gPSB7IGxhc3RSZXNvcnQu
Z2V0KCkgfTsKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gYXJyYXkgPSBhZG9wdENGKENGQXJy
YXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZGVzY3JpcHRvcnMsIFdURl9BUlJBWV9MRU5H
VEgoZGVzY3JpcHRvcnMpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBDRlR5cGVS
ZWYga2V5c1tdID0geyBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVS
ZWYgdmFsdWVzW10gPSB7IGFycmF5LmdldCgpIH07CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZ
X0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgQ1RGb250RGVzY3JpcHRvclJl
ZiBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0ZvbnREZXNjcmlwdG9yKCkKK3sKKyAg
ICBzdGF0aWMgQ1RGb250RGVzY3JpcHRvclJlZiBkZXNjcmlwdG9yID0gQ1RGb250RGVzY3JpcHRv
ckNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlv
bmFyeSgpLmdldCgpKTsKKyAgICByZXR1cm4gZGVzY3JpcHRvcjsKK30KKworQ1RGb250UmVmIEZv
bnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNvbnN0Cit7CisgICAgaWYgKG1fY3RGb250KQorICAg
ICAgICByZXR1cm4gbV9jdEZvbnQuZ2V0KCk7CisKKyAgICBBU1NFUlQobV9mb250KTsKKyAgICBt
X2N0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlQ29weVdpdGhBdHRyaWJ1dGVzKG1fZm9udC5n
ZXQoKSwgbV9zaXplLCBudWxscHRyLCBjYXNjYWRlVG9MYXN0UmVzb3J0QW5kVmFyaWF0aW9uc0Zv
bnREZXNjcmlwdG9yKCkpKTsKKworICAgIGlmIChtX3dpZHRoVmFyaWFudCAhPSBGb250V2lkdGhW
YXJpYW50OjpSZWd1bGFyV2lkdGgpIHsKKyAgICAgICAgaW50IGZlYXR1cmVUeXBlVmFsdWUgPSBr
VGV4dFNwYWNpbmdUeXBlOworICAgICAgICBpbnQgZmVhdHVyZVNlbGVjdG9yVmFsdWUgPSBtYXBG
b250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3RvcihtX3dpZHRoVmFyaWFudCk7CisgICAg
ICAgIFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBzb3VyY2VEZXNjcmlwdG9yID0gYWRv
cHRDRihDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IobV9jdEZvbnQuZ2V0KCkpKTsKKyAgICAgICAg
UmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlVHlwZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJmZlYXR1cmVUeXBlVmFs
dWUpKTsKKyAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBmZWF0dXJlU2VsZWN0b3IgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5
cGUsICZmZWF0dXJlU2VsZWN0b3JWYWx1ZSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gbmV3RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0
ZUNvcHlXaXRoRmVhdHVyZShzb3VyY2VEZXNjcmlwdG9yLmdldCgpLCBmZWF0dXJlVHlwZS5nZXQo
KSwgZmVhdHVyZVNlbGVjdG9yLmdldCgpKSk7CisgICAgICAgIFJldGFpblB0cjxDVEZvbnRSZWY+
IG5ld0ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhGb250RGVzY3JpcHRvcihuZXdEZXNj
cmlwdG9yLmdldCgpLCBtX3NpemUsIDApKTsKKworICAgICAgICBpZiAobmV3Rm9udCkKKyAgICAg
ICAgICAgIG1fY3RGb250ID0gbmV3Rm9udDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jdEZvbnQu
Z2V0KCk7Cit9CisjZWxzZQorQ1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OmN0Rm9udCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZvbnQoKTsKK30KKyNlbmRpZgorCitSZXRhaW5QdHI8Q0ZUeXBl
UmVmPiBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBj
dEZvbnQpCit7CisgICAgYXV0byBmb250RGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZv
bnREZXNjcmlwdG9yKGN0Rm9udCkpOworICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NjgzIFRoaXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29t
cGFyZSBmb3Igd2ViIGZvbnRzCisgICAgLy8gYmVjYXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBh
ZGRyZXNzIG9mIHRoZSBmb250LiBUaGlzIG1lYW5zIHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBm
YWxzZSBuZWdhdGl2ZXMuCisgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0
YXRpY19jYXN0PENGVVJMUmVmPihDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVz
Y3JpcHRvci5nZXQoKSwga0NURm9udFJlZmVyZW5jZVVSTEF0dHJpYnV0ZSkpKTsKKyAgICBBU1NF
UlQoIXVybCB8fCBDRkdldFR5cGVJRCh1cmwuZ2V0KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOwor
ICAgIHJldHVybiB1cmw7Cit9CisKK1JldGFpblB0cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURh
dGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2soKSBjb25zdAoreworICAgIHJldHVybiBvYmplY3RG
b3JFcXVhbGl0eUNoZWNrKGN0Rm9udCgpKTsKK30KKworUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9u
dFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKK3sKKyAg
ICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxl
KGZvbnQoKSwgdGFibGUsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykpKQorICAgICAgICBy
ZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS5nZXQoKSk7CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworI2lmICFMT0dfRElTQUJMRUQKKworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6
OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgZm9udERlc2NyaXB0aW9uIHsgYWRv
cHRDRihDRkNvcHlEZXNjcmlwdGlvbihmb250KCkpKS5nZXQoKSB9OworICAgIHJldHVybiBtYWtl
U3RyaW5nKGZvbnREZXNjcmlwdGlvbiwgJyAnLCBtX3NpemUsCisgICAgICAgIChtX3N5bnRoZXRp
Y0JvbGQgPyAiIHN5bnRoZXRpYyBib2xkIiA6ICIiKSwKKyAgICAgICAgKG1fc3ludGhldGljT2Js
aXF1ZSA/ICIgc3ludGhldGljIG9ibGlxdWUiIDogIiIpLAorICAgICAgICAobV9vcmllbnRhdGlv
biA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsID8gIiB2ZXJ0aWNhbCBvcmllbnRhdGlvbiIg
OiAiIikpOworfQorCisjZW5kaWYKKworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5h
bWUoKSBjb25zdAoreworICAgIGlmIChhdXRvIHBsYXRmb3JtRm9udCA9IGZvbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUocGxhdGZvcm1Gb250KSkuZ2V0
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29y
ZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzOGVlMzZkYzZiODVjNDNhM2Q1YjljZDk1NGVjNGUxMzdi
ZWY0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jdC9HbHlwaFBhZ2VDb3JlVGV4dC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHbHlwaFBhZ2UuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0
U1BJLmg+CisjZWxzZQorI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBzaG91bGRGaWxsV2l0
aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBpZiAoIWZvbnQuaGFzVmVydGljYWxHbHlwaHMo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
dWZmZXJMZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIUZvbnRDYXNjYWRlOjppc0NKS0lkZW9n
cmFwaChidWZmZXJbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBDR0dseXBoIGRlbGV0ZWRH
bHlwaCA9IDB4RkZGRjsKKworYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoKQoreworICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQ
YWdlOjpzaXplIHx8IGJ1ZmZlckxlbmd0aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKKworICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7CisgICAgVmVjdG9yPENHR2x5cGgsIDUx
Mj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7CisgICAgdW5zaWduZWQgZ2x5cGhTdGVwID0gYnVmZmVy
TGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOworCisgICAgaWYgKHNob3VsZEZpbGxXaXRoVmVydGlj
YWxHbHlwaHMoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKQorICAgICAgICBDVEZvbnRHZXRW
ZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwg
cmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVy
TGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMo
Zm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4o
YnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKKworICAgIGJvb2wgaGF2ZUds
eXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNp
emU7ICsraSkgeworICAgICAgICBhdXRvIHRoZUdseXBoID0gZ2x5cGhzW2kgKiBnbHlwaFN0ZXBd
OworICAgICAgICBpZiAodGhlR2x5cGggJiYgdGhlR2x5cGggIT0gZGVsZXRlZEdseXBoKSB7Cisg
ICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIHRoZUdseXBoKTsKKyAgICAgICAgICAgIGhh
dmVHbHlwaHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBoYXZlR2x5cGhz
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBlM2E1MzVkYzQwM2U0MzI0M2FiODEzYzZjMTRmZGVjYWQ2N2U4ZGVlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQYWdl
LmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvQ29yZVRleHRTUEkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBz
aG91bGRGaWxsV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICBpZiAoIWZvbnQuaGFzVmVy
dGljYWxHbHlwaHMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIUZvbnRDYXNjYWRl
Ojppc0NKS0lkZW9ncmFwaChidWZmZXJbaV0pKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGNvbnN0IGNvbnN0ZXhwciBDR0ds
eXBoIGRlbGV0ZWRHbHlwaCA9IDB4RkZGRjsKLQotYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQotewotICAgIEFTU0VSVChidWZmZXJMZW5n
dGggPT0gR2x5cGhQYWdlOjpzaXplIHx8IGJ1ZmZlckxlbmd0aCA9PSAyICogR2x5cGhQYWdlOjpz
aXplKTsKLQotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0aGlzLT5mb250KCk7Ci0gICAgVmVjdG9y
PENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7Ci0gICAgdW5zaWduZWQgZ2x5cGhT
dGVwID0gYnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwotCi0gICAgaWYgKHNob3VsZEZp
bGxXaXRoVmVydGljYWxHbHlwaHMoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpKQotICAgICAg
ICBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEo
KS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRh
dGEoKSwgYnVmZmVyTGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIENURm9udEdldEdseXBoc0Zv
ckNoYXJhY3RlcnMoZm9udC5wbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgcmVpbnRlcnByZXRfY2Fz
dDxVbmlDaGFyKj4oYnVmZmVyKSwgZ2x5cGhzLmRhdGEoKSwgYnVmZmVyTGVuZ3RoKTsKLQotICAg
IGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBH
bHlwaFBhZ2U6OnNpemU7ICsraSkgewotICAgICAgICBhdXRvIHRoZUdseXBoID0gZ2x5cGhzW2kg
KiBnbHlwaFN0ZXBdOwotICAgICAgICBpZiAodGhlR2x5cGggJiYgdGhlR2x5cGggIT0gZGVsZXRl
ZEdseXBoKSB7Ci0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIHRoZUdseXBoKTsKLSAg
ICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBoYXZlR2x5cGhzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YWU5MjRjY2MzNjI0OWQ1YWQzYzc5NDM2NmEzNjJlY2Y0ZjNl
YjZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSwgMjAx
MywgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Lmgi
Ci0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgot
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIENHRmxv
YXQgdG9DR0Zsb2F0KEZJWEVEIGYpCi17Ci0gICAgcmV0dXJuIGYudmFsdWUgKyBmLmZyYWN0IC8g
Q0dGbG9hdCg2NTUzNi4wKTsKLX0KLQotc3RhdGljIENHUGF0aFJlZiBjcmVhdGVQYXRoRm9yR2x5
cGgoSERDIGhkYywgR2x5cGggZ2x5cGgpCi17Ci0gICAgQ0dNdXRhYmxlUGF0aFJlZiBwYXRoID0g
Q0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotCi0gICAgc3RhdGljIGNvbnN0IE1BVDIgaWRlbnRpdHkg
PSB7IDAsIDEsICAwLCAwLCAgMCwgMCwgIDAsIDEgfTsKLSAgICBHTFlQSE1FVFJJQ1MgZ2x5cGhN
ZXRyaWNzOwotICAgIC8vIEdHT19OQVRJVkUgbWF0Y2hlcyB0aGUgb3V0bGluZSBwZXJmZWN0bHkg
d2hlbiBXaW5kb3dzIGZvbnQgc21vb3RoaW5nIGlzIG9mZi4KLSAgICAvLyBHR09fTkFUSVZFIHwg
R0dPX1VOSElOVEVEIGRvZXMgbm90IG1hdGNoIHBlcmZlY3RseSBlaXRoZXIgd2hlbiBXaW5kb3dz
IGZvbnQgc21vb3RoaW5nIGlzIG9uIG9yIG9mZi4KLSAgICBEV09SRCBvdXRsaW5lTGVuZ3RoID0g
R2V0R2x5cGhPdXRsaW5lKGhkYywgZ2x5cGgsIEdHT19HTFlQSF9JTkRFWCB8IEdHT19OQVRJVkUs
ICZnbHlwaE1ldHJpY3MsIDAsIDAsICZpZGVudGl0eSk7Ci0gICAgQVNTRVJUKG91dGxpbmVMZW5n
dGggPj0gMCk7Ci0gICAgaWYgKG91dGxpbmVMZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gcGF0
aDsKLQotICAgIFZlY3RvcjxVSW50OD4gb3V0bGluZShvdXRsaW5lTGVuZ3RoKTsKLSAgICBHZXRH
bHlwaE91dGxpbmUoaGRjLCBnbHlwaCwgR0dPX0dMWVBIX0lOREVYIHwgR0dPX05BVElWRSwgJmds
eXBoTWV0cmljcywgb3V0bGluZUxlbmd0aCwgb3V0bGluZS5kYXRhKCksICZpZGVudGl0eSk7Ci0K
LSAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOwotICAgIHdoaWxlIChvZmZzZXQgPCBvdXRsaW5lTGVu
Z3RoKSB7Ci0gICAgICAgIExQVFRQT0xZR09OSEVBREVSIHN1YnBhdGggPSByZWludGVycHJldF9j
YXN0PExQVFRQT0xZR09OSEVBREVSPihvdXRsaW5lLmRhdGEoKSArIG9mZnNldCk7Ci0gICAgICAg
IEFTU0VSVChzdWJwYXRoLT5kd1R5cGUgPT0gVFRfUE9MWUdPTl9UWVBFKTsKLSAgICAgICAgaWYg
KHN1YnBhdGgtPmR3VHlwZSAhPSBUVF9QT0xZR09OX1RZUEUpCi0gICAgICAgICAgICByZXR1cm4g
cGF0aDsKLQotICAgICAgICBDR1BhdGhNb3ZlVG9Qb2ludChwYXRoLCAwLCB0b0NHRmxvYXQoc3Vi
cGF0aC0+cGZ4U3RhcnQueCksIHRvQ0dGbG9hdChzdWJwYXRoLT5wZnhTdGFydC55KSk7Ci0KLSAg
ICAgICAgdW5zaWduZWQgc3VicGF0aE9mZnNldCA9IHNpemVvZigqc3VicGF0aCk7Ci0gICAgICAg
IHdoaWxlIChzdWJwYXRoT2Zmc2V0IDwgc3VicGF0aC0+Y2IpIHsKLSAgICAgICAgICAgIExQVFRQ
T0xZQ1VSVkUgc2VnbWVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TFBUVFBPTFlDVVJWRT4ocmVpbnRl
cnByZXRfY2FzdDxVSW50OCo+KHN1YnBhdGgpICsgc3VicGF0aE9mZnNldCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKHNlZ21lbnQtPndUeXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUVF9QUklN
X0xJTkU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWdt
ZW50LT5jcGZ4OyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhBZGRMaW5lVG9Q
b2ludChwYXRoLCAwLCB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KSwgdG9DR0Zsb2F0KHNl
Z21lbnQtPmFwZnhbaV0ueSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgIGNhc2UgVFRfUFJJTV9RU1BMSU5FOgotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBDR0Zsb2F0IHggPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgeSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4
W2ldLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcHg7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDR0Zsb2F0IGNweTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGkgPT0gc2VnbWVudC0+Y3BmeCAtIDIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cHggPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMV0ueCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3B5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLnkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B4ID0gKHRvQ0dGbG9hdChzZWdt
ZW50LT5hcGZ4W2ldLngpICsgdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLngpKSAvIDI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B5ID0gKHRvQ0dGbG9hdChzZWdtZW50LT5h
cGZ4W2ldLnkpICsgdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLnkpKSAvIDI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIENHUGF0aEFk
ZFF1YWRDdXJ2ZVRvUG9pbnQocGF0aCwgMCwgeCwgeSwgY3B4LCBjcHkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
Y2FzZSBUVF9QUklNX0NTUExJTkU6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzZWdtZW50LT5jcGZ4OyBpICs9IDMpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIENHRmxvYXQgY3AxeCA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2ldLngpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcDF5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhb
aV0ueSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IGNwMnggPSB0b0NHRmxvYXQo
c2VnbWVudC0+YXBmeFtpICsgMV0ueCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0
IGNwMnkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMV0ueSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBDR0Zsb2F0IHggPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpICsgMl0ueCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IHkgPSB0b0NHRmxvYXQoc2VnbWVudC0+
YXBmeFtpICsgMl0ueSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIENHUGF0aEFkZEN1cnZl
VG9Qb2ludChwYXRoLCAwLCBjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgc3VicGF0aE9mZnNldCArPSBzaXplb2YoKnNlZ21lbnQpICsgKHNlZ21lbnQtPmNwZngg
LSAxKSAqIHNpemVvZihzZWdtZW50LT5hcGZ4WzBdKTsKLSAgICAgICAgfQotICAgICAgICBDR1Bh
dGhDbG9zZVN1YnBhdGgocGF0aCk7Ci0gICAgICAgIG9mZnNldCArPSBzdWJwYXRoLT5jYjsKLSAg
ICB9Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBzbW9v
dGhpbmdNb2RlKQotewotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0g
V2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKTsKLQotICAgIHN3aXRjaCAoc21vb3RoaW5n
TW9kZSkgewotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOiB7Ci0gICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVsQW50aWFsaWFzZWQ6IHsKLSAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh0cnVlKTsKLSAgICAgICAgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzogewotICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0U2hvdWxkQW50aWFsaWFzKGZhbHNlKTsKLSAgICAgICAgc2hvdWxkVXNlRm9udFNtb290
aGluZyA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBGb250U21vb3Ro
aW5nTW9kZTo6QXV0b1Ntb290aGluZzogewotICAgICAgICAvLyBGb3IgdGhlIEF1dG9TbW9vdGgg
Y2FzZSwgZG9uJ3QgZG8gYW55dGhpbmchIEtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCi0gICAg
ICAgIGJyZWFrOyAKLSAgICB9Ci0gICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH0KLQotICAgIHVpbnQzMl90IG9sZEZvbnRTbW9vdGhpbmdTdHlsZSA9IEZv
bnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzaG91bGRVc2VGb250
U21vb3RoaW5nKTsKLQotICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9
IGZvbnQucGxhdGZvcm1EYXRhKCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGb250KGNnQ29udGV4dCwg
cGxhdGZvcm1EYXRhLmNnRm9udCgpKTsKLQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9
IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7Ci0gICAgbWF0cml4LmIgPSAtbWF0cml4LmI7Ci0g
ICAgbWF0cml4LmQgPSAtbWF0cml4LmQ7Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRp
Y09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMgZmxvYXQgc2tldyA9IC10YW5mKHN5bnRoZXRp
Y09ibGlxdWVBbmdsZSgpICogcGlGbG9hdCAvIDE4MC4wZik7Ci0gICAgICAgIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAs
IHNrZXcsIDEsIDAsIDApKTsKLSAgICB9Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBzYXZlZE1h
dHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY2dDb250ZXh0KTsKLSAgICBDR0NvbnRleHRT
ZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgbWF0cml4KTsKLQotICAgIENHQ29udGV4dFNldEZvbnRT
aXplKGNnQ29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0gICAgRm9udENhc2NhZGU6OnNl
dENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShjZ0NvbnRleHQsIGZvbnQucGxhdGZvcm1EYXRh
KCkuaXNTeXN0ZW1Gb250KCksIGZhbHNlLCBmb250LnBsYXRmb3JtRGF0YSgpLnVzZUdESSgpKTsK
LQotICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgc2hhZG93Qmx1cjsKLSAg
ICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBncmFwaGljc0NvbnRleHQuZ2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgYm9vbCBoYXNTaW1wbGVT
aGFkb3cgPSBncmFwaGljc0NvbnRleHQudGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dERyYXdpbmdN
b2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAmJiAhc2hhZG93Qmx1ciAmJiAoIWdy
YXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGdyYXBoaWNzQ29udGV4
dC5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKLSAgICBpZiAo
aGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBsZSBzaGFkb3dzIG91cnNl
bHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8gYXZvaWQgbG9zaW5nIHN1
YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyU2hhZG93
KCk7Ci0gICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGdyYXBoaWNzQ29udGV4dC5maWxsQ29sb3Io
KTsKLSAgICAgICAgQ29sb3Igc2hhZG93RmlsbENvbG9yID0gc2hhZG93Q29sb3IuY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnkoZmlsbENvbG9yLmFscGhhQXNGbG9hdCgpKTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9h
dCBzaGFkb3dUZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAg
ICAvLyBJZiBzaGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3Qg
YXBwbGllZCB0aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgot
ICAgICAgICBmbG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWln
aHQoKSAqIChncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDog
MSk7Ci0gICAgICAgIENHQ29udGV4dFNldFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHNoYWRvd1Rl
eHRYLCBzaGFkb3dUZXh0WSk7Ci0gICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0
IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICAg
ICAgaWYgKGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpKSB7Ci0gICAgICAgICAgICBDR0NvbnRl
eHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lk
dGgoKSArIGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpLCBwb2ludC55KCkgKyBzaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOwotICAgICAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNl
cyhjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwotICAgICAg
ICB9Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3IoZmlsbENvbG9yKTsKLSAg
ICB9Ci0KLSAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBwb2ludC54KCks
IHBvaW50LnkoKSk7Ci0gICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRl
eHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4o
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwotICAgIGlmIChmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKSkgewotICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24o
Y2dDb250ZXh0LCBwb2ludC54KCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQu
eSgpKTsKLSAgICAgICAgQ0dDb250ZXh0U2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjZ0NvbnRleHQs
IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ0dTaXplKj4oZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSkpLCBudW1HbHlwaHMpOwotICAgIH0KLQotICAgIGlmICho
YXNTaW1wbGVTaGFkb3cpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAgICBGb250Q2FzY2FkZTo6c2V0
Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgb2xkRm9udFNtb290aGluZ1N0eWxlKTsKLSAg
ICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4dCwgc2F2ZWRNYXRyaXgpOwotfQotCi1j
b25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWluaW11bSA9ICgxIDw8IDQp
OwotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0ID0gKDIgPDwg
NCk7Ci1jb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtID0gKDMg
PDwgNCk7Ci1jb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnkgPSAo
NCA8PCA0KTsKLQotY29uc3RleHByIGludCBmb250U21vb3RoaW5nTGV2ZWxNZWRpdW0gPSAyOwot
Y29uc3RleHByIENHRmxvYXQgYW50aWFsaWFzaW5nR2FtbWEgPSAyLjM7Ci0KLWRvdWJsZSBGb250
Q2FzY2FkZTo6c19mb250U21vb3RoaW5nQ29udHJhc3QgPSAyOwotdWludDMyX3QgRm9udENhc2Nh
ZGU6OnNfZm9udFNtb290aGluZ1R5cGUgPSBrQ0dGb250U21vb3RoaW5nU3R5bGVNZWRpdW07Ci1p
bnQgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0xldmVsID0gZm9udFNtb290aGluZ0xldmVs
TWVkaXVtOwotYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsK
LXVpbnQzMl90IEZvbnRDYXNjYWRlOjpzX3N5c3RlbUZvbnRTbW9vdGhpbmdUeXBlOwotYm9vbCBG
b250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nU2V0OwotCi12b2lkIEZvbnRDYXNjYWRl
OjpzZXRGb250U21vb3RoaW5nTGV2ZWwoaW50IGxldmVsKQotewotICAgIGNvbnN0IHVpbnQzMl90
IHNtb290aGluZ1R5cGVbXSA9IHsgCi0gICAgICAgIDAsIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Rh
bmRhcmQKLSAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTGlnaHQsIC8vIEZvbnRTbW9vdGhp
bmdUeXBlTGlnaHQKLSAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtLCAvLyBGb250
U21vb3RoaW5nVHlwZU1lZGl1bQotICAgICAgICBrQ0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSwg
Ly8gRm9udFNtb290aGluZ1R5cGVTdHJvbmcKLSAgICB9OwotCi0gICAgaWYgKGxldmVsIDwgMCB8
fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxldmVsKSA+IEFSUkFZU0laRShzbW9vdGhpbmdUeXBlKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgc19mb250U21vb3RoaW5nVHlwZSA9IHNtb290aGluZ1R5
cGVbbGV2ZWxdOwotICAgIHNfZm9udFNtb290aGluZ0xldmVsID0gbGV2ZWw7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNldENHRm9udFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIHVp
bnQzMl90IHNtb290aGluZ1R5cGUsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZyA9IHRydWUpCi17
Ci0gICAgaWYgKHNtb290aGluZ1R5cGUpIHsKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21v
b3RoRm9udHMoY2dDb250ZXh0LCBmb250QWxsb3dzU21vb3RoaW5nKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc21vb3RoaW5nVHlwZSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwg
ZmFsc2UpOwotfQotCi11aW50MzJfdCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxl
KENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wgZm9udEFsbG93c1Ntb290aGluZykKLXsKLSAg
ICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSAwOwotICAgIGlmIChDR0NvbnRleHRH
ZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQpKQotICAgICAgICBvbGRGb250U21vb3RoaW5n
U3R5bGUgPSBDR0NvbnRleHRHZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0KTsKLSAgICBz
ZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNfZm9udFNtb290aGluZ1R5cGUsIGZv
bnRBbGxvd3NTbW9vdGhpbmcpOwotCi0gICAgcmV0dXJuIG9sZEZvbnRTbW9vdGhpbmdTdHlsZTsK
LX0KLQotdm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KENHRmxvYXQg
Y29udHJhc3QpCi17Ci0gICAgc19mb250U21vb3RoaW5nQ29udHJhc3QgPSBjb250cmFzdDsKLX0K
LQotc3RhdGljIGZsb2F0IGNsZWFyVHlwZUNvbnRyYXN0KCkKLXsKLSAgICBjb25zdCBXQ0hBUiBy
ZWZlcmVuY2VDaGFyYWN0ZXIgPSAnXFwnOwotICAgIHN0YXRpYyBVSU5UIGxhc3RDb250cmFzdCA9
IDIwMDA7Ci0gICAgc3RhdGljIGZsb2F0IGdhbW1hID0gMjsKLSAgICBVSU5UIGNvbnRyYXN0Owot
Ci0gICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElOR0NPTlRS
QVNULCAwLCAmY29udHJhc3QsIDApIHx8IGNvbnRyYXN0ID09IGxhc3RDb250cmFzdCkKLSAgICAg
ICAgcmV0dXJuIGdhbW1hOwotCi0gICAgbGFzdENvbnRyYXN0ID0gY29udHJhc3Q7Ci0KLSAgICBh
dXRvIGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoMCkpOwotCi0gICAg
SEdESU9CSiBvbGRIRk9OVCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBHZXRTdG9ja09iamVj
dChERUZBVUxUX0dVSV9GT05UKSk7Ci0gICAgR0xZUEhNRVRSSUNTIGdseXBoTWV0cmljczsKLQot
ICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAw
LCAxIH07Ci0gICAgaWYgKDo6R2V0R2x5cGhPdXRsaW5lKGRjLmdldCgpLCByZWZlcmVuY2VDaGFy
YWN0ZXIsIEdHT19NRVRSSUNTLCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpID09IEdE
SV9FUlJPUikKLSAgICAgICAgcmV0dXJuIGNvbnRyYXN0IC8gMTAwMC4wZjsKLQotICAgIEJJVE1B
UElORk8gYml0bWFwSW5mbzsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXpl
b2YoQklUTUFQSU5GT0hFQURFUik7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMg
PSAxOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7Ci0g
ICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplSW1hZ2UgPSAwOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIu
YmlZUGVsc1Blck1ldGVyID0gMDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9y
dGFudCA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlXaWR0aCA9IGdseXBoTWV0cmlj
cy5nbUJsYWNrQm94WDsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUhlaWdodCA9IC1zdGF0
aWNfY2FzdDxpbnQ+KGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSk7Ci0gICAgYml0bWFwSW5mby5i
bWlIZWFkZXIuYmlCaXRDb3VudCA9IDMyOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xy
VXNlZCA9IDA7Ci0KLSAgICB1aW50OF90KiBwaXhlbHMgPSBudWxscHRyOwotICAgIGF1dG8gYml0
bWFwID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVESUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBE
SUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZwaXhlbHMpLCAwLCAwKSk7
Ci0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAuMGY7Ci0K
LSAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2VsZWN0T2JqZWN0KGRjLmdldCgpLCBiaXRtYXAu
Z2V0KCkpOwotCi0gICAgQklUTUFQIGJtcEluZm87Ci0gICAgOjpHZXRPYmplY3QoYml0bWFwLmdl
dCgpLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZvKTsKLSAgICBtZW1zZXQocGl4ZWxzLCAwLCBn
bHlwaE1ldHJpY3MuZ21CbGFja0JveFkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyk7Ci0KLSAgICA6
OlNldEJrTW9kZShkYy5nZXQoKSwgT1BBUVVFKTsKLSAgICA6OlNldFRleHRBbGlnbihkYy5nZXQo
KSwgVEFfTEVGVCB8IFRBX1RPUCk7Ci0KLSAgICA6OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdC
KDI1NSwgMjU1LCAyNTUpKTsKLSAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAw
KSk7Ci0gICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNo
YXJhY3RlciwgMSwgMCk7Ci0KLSAgICB1aW50OF90KiByZWZlcmVuY2VQaXhlbCA9IG51bGxwdHI7
Ci0gICAgdWludDhfdCB3aGl0ZVJlZmVyZW5jZVZhbHVlID0gMDsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WSAmJiAhcmVmZXJlbmNlUGl4ZWw7ICsr
aSkgewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IDQgKiBnbHlwaE1ldHJpY3MuZ21C
bGFja0JveFg7ICsraikgewotICAgICAgICAgICAgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9IHBpeGVs
c1tpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqXTsKLSAgICAgICAgICAgIC8vIExvb2sgZm9y
IGEgcGl4ZWwgdmFsdWUgaW4gdGhlIHJhbmdlIHRoYXQgYWxsb3dzIHVzIHRvIGVzdGltYXRlCi0g
ICAgICAgICAgICAvLyBnYW1tYSB3aXRoaW4gMC4xIHdpdGhvdXQgYW4gZXJyb3IuCi0gICAgICAg
ICAgICBpZiAod2hpdGVSZWZlcmVuY2VWYWx1ZSA+IDMyICYmIHdoaXRlUmVmZXJlbmNlVmFsdWUg
PCAyNDApIHsKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQaXhlbCA9IHBpeGVscyArIGkgKiBi
bXBJbmZvLmJtV2lkdGhCeXRlcyArIGo7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVmZXJlbmNlUGl4ZWwpIHsKLSAg
ICAgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAwKSk7Ci0gICAgICAgIDo6
U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKLSAgICAgICAgOjpFeHRU
ZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNoYXJhY3RlciwgMSwgMCk7
Ci0gICAgICAgIHVpbnQ4X3QgYmxhY2tSZWZlcmVuY2VWYWx1ZSA9ICpyZWZlcmVuY2VQaXhlbDsK
LQotICAgICAgICBmbG9hdCBtaW5EZWx0YSA9IDE7Ci0gICAgICAgIGZvciAoZmxvYXQgZyA9IDE7
IGcgPCAyLjNmOyBnICs9IDAuMWYpIHsKLSAgICAgICAgICAgIGZsb2F0IGRlbHRhID0gZmFicyhw
b3dmKCh3aGl0ZVJlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgKyBwb3dmKChibGFja1JlZmVy
ZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgLSAxKTsKLSAgICAgICAgICAgIGlmIChkZWx0YSA8IG1p
bkRlbHRhKSB7Ci0gICAgICAgICAgICAgICAgbWluRGVsdGEgPSBkZWx0YTsKLSAgICAgICAgICAg
ICAgICBnYW1tYSA9IGc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAg
ICAgICAgZ2FtbWEgPSBjb250cmFzdCAvIDEwMDAuMGY7Ci0KLSAgICA6OlNlbGVjdE9iamVjdChk
Yy5nZXQoKSwgb2xkQml0bWFwKTsKLSAgICA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgb2xkSEZP
TlQpOwotCi0gICAgcmV0dXJuIGdhbW1hOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpzeXN0ZW1G
b250U21vb3RoaW5nQ2hhbmdlZCgpCi17Ci0gICAgOjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElf
R0VURk9OVFNNT09USElORywgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQsIDApOwot
ICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdUWVBFLCAwLCAm
c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSwgMCk7Ci0gICAgc19mb250U21vb3RoaW5nQ29udHJh
c3QgPSBjbGVhclR5cGVDb250cmFzdCgpOwotICAgIHNfc3lzdGVtRm9udFNtb290aGluZ1NldCA9
IHRydWU7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdT
dHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGlzU3lzdGVtRm9udCwgYm9vbCAvKmlz
UHJpbnRlckZvbnQqLywgYm9vbCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocykKLXsKLSAgICBib29s
IHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0gICAgYm9vbCBtYXlTdWJwaXhlbFBvc2l0aW9uID0g
dHJ1ZTsKLSAgICBDR0Zsb2F0IGNvbnRyYXN0ID0gMjsKLSAgICBpZiAodXNlUGxhdGZvcm1OYXRp
dmVHbHlwaHMpIHsKLSAgICAgICAgLy8gPHJkYXI6Ly82NTY0NTAxPiBHREkgY2FuJ3Qgc3VicGl4
ZWwtcG9zaXRpb24sIHNvIGRvbid0IGJvdGhlciBhc2tpbmcuCi0gICAgICAgIG1heVN1YnBpeGVs
UG9zaXRpb24gPSBmYWxzZTsKLSAgICAgICAgaWYgKCFzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQp
Ci0gICAgICAgICAgICBzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpOwotICAgICAgICBjb250
cmFzdCA9IHNfZm9udFNtb290aGluZ0NvbnRyYXN0OwotICAgICAgICBzaG91bGRBbnRpYWxpYXMg
PSBzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkOwotICAgICAgICBpZiAoc19zeXN0ZW1Gb250
U21vb3RoaW5nVHlwZSA9PSBGRV9GT05UU01PT1RISU5HU1RBTkRBUkQpIHsKLSAgICAgICAgICAg
IENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIGtDR0ZvbnRTbW9vdGhp
bmdTdHlsZU1pbmltdW0pOwotICAgICAgICAgICAgY29udHJhc3QgPSBhbnRpYWxpYXNpbmdHYW1t
YTsKLSAgICAgICAgfQotICAgIH0KLSAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nQ29udHJh
c3QoY2dDb250ZXh0LCBjb250cmFzdCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkVXNlUGxhdGZv
cm1OYXRpdmVHbHlwaHMoY2dDb250ZXh0LCB1c2VQbGF0Zm9ybU5hdGl2ZUdseXBocyk7Ci0gICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCBzaG91bGRBbnRpYWxp
YXMpOwotICAgIENHQWZmaW5lVHJhbnNmb3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRH
ZXRDVE0oY2dDb250ZXh0KTsKLSAgICBib29sIGlzUHVyZVRyYW5zbGF0aW9uID0gY29udGV4dFRy
YW5zZm9ybS5hID09IDEgJiYgKGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAxIHx8IGNvbnRleHRUcmFu
c2Zvcm0uZCA9PSAtMSkgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYiAmJiAhY29udGV4dFRyYW5zZm9y
bS5jOwotICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRl
eHQsIG1heVN1YnBpeGVsUG9zaXRpb24gJiYgKGlzU3lzdGVtRm9udCB8fCAhaXNQdXJlVHJhbnNs
YXRpb24pKTsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dD
b250ZXh0LCBpc1B1cmVUcmFuc2xhdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0dGb250UmVu
ZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGVGb3JGb250KGJvb2wgaXNTeXN0ZW1Gb250LCBib29s
IGlzUHJpbnRlckZvbnQpCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBhIG1pbmlt
dW0gYW50aWFsaWFzZWQgZm9udCBzaXplLgotCi0gICAgaWYgKGlzU3lzdGVtRm9udCB8fCBpc1By
aW50ZXJGb250KQotICAgICAgICByZXR1cm4ga0NHRm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFz
aW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRS
ZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0aW9uOwotCi0gICAgcmV0dXJuIGtDR0ZvbnRS
ZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6Z2V0UGxh
dGZvcm1HbHlwaEFkdmFuY2VzKENHRm9udFJlZiBmb250LCBjb25zdCBDR0FmZmluZVRyYW5zZm9y
bSYgbSwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgaXNQcmludGVyRm9udCwgQ0dHbHlwaCBnbHlw
aCwgQ0dTaXplJiBhZHZhbmNlKQotewotICAgIENHRm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0g
cmVuZGVyaW5nU3R5bGVGb3JGb250KGlzU3lzdGVtRm9udCwgaXNQcmludGVyRm9udCk7Ci0gICAg
Q0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxlKGZvbnQsICZtLCBzdHlsZSwgJmdseXBoLCAx
LCAmYWR2YW5jZSk7Ci0KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzc2MTE2NT4gVGhlIEdESSBi
YWNrIGVuZCBpbiBDb3JlIEdyYXBoaWNzIHNvbWV0aW1lcyByZXR1cm5zIGFkdmFuY2VzIHRoYXQK
LSAgICAvLyBkaWZmZXIgZnJvbSB3aGF0IHRoZSBmb250J3MgaG10eCB0YWJsZSBzcGVjaWZpZXMu
IFRoZSBmb2xsb3dpbmcgY29kZSBjb3JyZWN0cyB0aGF0LgotICAgIENGRGF0YVJlZiBobXR4VGFi
bGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2htdHgnKTsKLSAgICBpZiAoIWhtdHhU
YWJsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENGRGF0YVJlZiBoaGVhVGFibGUgPSBDR0ZvbnRD
b3B5VGFibGVGb3JUYWcoZm9udCwgJ2hoZWEnKTsKLSAgICBpZiAoIWhoZWFUYWJsZSkgewotICAg
ICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGNvbnN0IENGSW5kZXggaGhlYVRhYmxlU2l6ZSA9IDM2OwotICAgIGNvbnN0IHB0cmRpZmZfdCBo
aGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0ID0gMzQ7Ci0gICAgaWYgKENGRGF0YUdldExl
bmd0aChoaGVhVGFibGUpIDwgaGhlYVRhYmxlU2l6ZSkgewotICAgICAgICBDRlJlbGVhc2UoaG10
eFRhYmxlKTsKLSAgICAgICAgQ0ZSZWxlYXNlKGhoZWFUYWJsZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBudW1iZXJPZkhNZXRyaWNzID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhoZWFUYWJs
ZSkgKyBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0KTsKLSAgICBudW1iZXJPZkhNZXRy
aWNzID0gKChudW1iZXJPZkhNZXRyaWNzICYgMHhGRikgPDwgOCkgfCAobnVtYmVyT2ZITWV0cmlj
cyA+PiA4KTsKLSAgICBpZiAoIW51bWJlck9mSE1ldHJpY3MpIHsKLSAgICAgICAgQ0ZSZWxlYXNl
KGhtdHhUYWJsZSk7Ci0gICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGdseXBoID49IG51bWJlck9mSE1ldHJpY3MpCi0gICAgICAg
IGdseXBoID0gbnVtYmVyT2ZITWV0cmljcyAtIDE7Ci0KLSAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3Ro
KGhtdHhUYWJsZSkgPCA0ICogKGdseXBoICsgMSkpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGhtdHhU
YWJsZSk7Ci0gICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgdW5zaWduZWQgc2hvcnQgYWR2YW5jZUluRGVzaWduVW5pdHMgPSAqcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KENGRGF0YUdldEJ5dGVQdHIoaG10eFRh
YmxlKSArIDQgKiBnbHlwaCk7Ci0gICAgYWR2YW5jZUluRGVzaWduVW5pdHMgPSAoKGFkdmFuY2VJ
bkRlc2lnblVuaXRzICYgMHhGRikgPDwgOCkgfCAoYWR2YW5jZUluRGVzaWduVW5pdHMgPj4gOCk7
Ci0gICAgQ0dTaXplIGhvcml6b250YWxBZHZhbmNlID0gQ0dTaXplTWFrZShzdGF0aWNfY2FzdDxD
R0Zsb2F0PihhZHZhbmNlSW5EZXNpZ25Vbml0cykgLyBDR0ZvbnRHZXRVbml0c1BlckVtKGZvbnQp
LCAwKTsKLSAgICBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3Jt
KGhvcml6b250YWxBZHZhbmNlLCBtKTsKLSAgICBhZHZhbmNlLndpZHRoID0gaG9yaXpvbnRhbEFk
dmFuY2Uud2lkdGg7Ci0gICAgaWYgKCEoc3R5bGUgJiBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJw
aXhlbFBvc2l0aW9uaW5nKSkKLSAgICAgICAgYWR2YW5jZS53aWR0aCA9IHJvdW5kZihhZHZhbmNl
LndpZHRoKTsKLQotICAgIENGUmVsZWFzZShoaGVhVGFibGUpOwotICAgIENGUmVsZWFzZShobXR4
VGFibGUpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAyYjRiNTU3MmE0ZDgwOGI4
M2I0YjBmNGFhNjRmOTZjOTYzODJmNjEzLi4wOGNiNGQ1MWViYmRiYjdmOTU1ZTY3NzdkNmY4MDJj
MmI5MjE3ZTk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udENhY2hlV2luLmNwcApAQCAtNjc1LDcgKzY3NSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxGb250UGxhdGZvcm1EYXRhPiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlCiAgICAgYXV0byByZXN1bHQgPSBtYWtlVW5pcXVlPEZvbnRQbGF0Zm9ybURhdGE+
KFdURk1vdmUoaGZvbnQpLCBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3lu
dGhlc2l6ZUJvbGQsIHN5bnRoZXNpemVJdGFsaWMsIHVzZUdESSk7CiAKICNpZiBVU0UoQ0cpCi0g
ICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5jZ0ZvbnQoKTsKKyAgICBib29s
IGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPmZvbnQoKTsKICNlbGlmIFVTRShESVJFQ1Qy
RCkKICAgICBib29sIGZvbnRDcmVhdGlvbkZhaWxlZCA9ICFyZXN1bHQtPmR3Rm9udCgpOwogI2Vs
aWYgVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYXNjYWRlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYXNjYWRlQ0dXaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4ZGMzZWMxMjFjYzAy
MjA3YjhjYjE2ODI3MTNkNmJiOGQ5ZjZkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhc2NhZGVDR1dpbi5jcHAKQEAgLTAsMCAr
MSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSwgMjAxMywgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgorI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdGV4cHIgdWludDMyX3Qga0NHRm9udFNtb290
aGluZ1N0eWxlTWluaW11bSA9ICgxIDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZUxpZ2h0ID0gKDIgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NHRm9u
dFNtb290aGluZ1N0eWxlTWVkaXVtID0gKDMgPDwgNCk7Citjb25zdGV4cHIgdWludDMyX3Qga0NH
Rm9udFNtb290aGluZ1N0eWxlSGVhdnkgPSAoNCA8PCA0KTsKKworY29uc3RleHByIGludCBmb250
U21vb3RoaW5nTGV2ZWxNZWRpdW0gPSAyOworY29uc3RleHByIENHRmxvYXQgYW50aWFsaWFzaW5n
R2FtbWEgPSAyLjM7CisKK2RvdWJsZSBGb250Q2FzY2FkZTo6c19mb250U21vb3RoaW5nQ29udHJh
c3QgPSAyOwordWludDMyX3QgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ1R5cGUgPSBrQ0dG
b250U21vb3RoaW5nU3R5bGVNZWRpdW07CitpbnQgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGlu
Z0xldmVsID0gZm9udFNtb290aGluZ0xldmVsTWVkaXVtOworYm9vbCBGb250Q2FzY2FkZTo6c19z
eXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzX3N5c3Rl
bUZvbnRTbW9vdGhpbmdUeXBlOworYm9vbCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3Ro
aW5nU2V0OworCit2b2lkIEZvbnRDYXNjYWRlOjpzZXRGb250U21vb3RoaW5nTGV2ZWwoaW50IGxl
dmVsKQoreworICAgIGNvbnN0IHVpbnQzMl90IHNtb290aGluZ1R5cGVbXSA9IHsgCisgICAgICAg
IDAsIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3RhbmRhcmQKKyAgICAgICAga0NHRm9udFNtb290aGlu
Z1N0eWxlTGlnaHQsIC8vIEZvbnRTbW9vdGhpbmdUeXBlTGlnaHQKKyAgICAgICAga0NHRm9udFNt
b290aGluZ1N0eWxlTWVkaXVtLCAvLyBGb250U21vb3RoaW5nVHlwZU1lZGl1bQorICAgICAgICBr
Q0dGb250U21vb3RoaW5nU3R5bGVIZWF2eSwgLy8gRm9udFNtb290aGluZ1R5cGVTdHJvbmcKKyAg
ICB9OworCisgICAgaWYgKGxldmVsIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxldmVsKSA+
IEFSUkFZU0laRShzbW9vdGhpbmdUeXBlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc19mb250
U21vb3RoaW5nVHlwZSA9IHNtb290aGluZ1R5cGVbbGV2ZWxdOworICAgIHNfZm9udFNtb290aGlu
Z0xldmVsID0gbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldENHRm9udFNtb290aGluZ1N0eWxl
KENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIHVpbnQzMl90IHNtb290aGluZ1R5cGUsIGJvb2wgZm9u
dEFsbG93c1Ntb290aGluZyA9IHRydWUpCit7CisgICAgaWYgKHNtb290aGluZ1R5cGUpIHsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0LCBmb250QWxsb3dz
U21vb3RoaW5nKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29u
dGV4dCwgc21vb3RoaW5nVHlwZSk7CisgICAgfSBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgZmFsc2UpOworfQorCit1aW50MzJfdCBGb250Q2Fz
Y2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKENHQ29udGV4dFJlZiBjZ0NvbnRleHQsIGJvb2wg
Zm9udEFsbG93c1Ntb290aGluZykKK3sKKyAgICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5
bGUgPSAwOworICAgIGlmIChDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQp
KQorICAgICAgICBvbGRGb250U21vb3RoaW5nU3R5bGUgPSBDR0NvbnRleHRHZXRGb250U21vb3Ro
aW5nU3R5bGUoY2dDb250ZXh0KTsKKyAgICBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRl
eHQsIHNfZm9udFNtb290aGluZ1R5cGUsIGZvbnRBbGxvd3NTbW9vdGhpbmcpOworCisgICAgcmV0
dXJuIG9sZEZvbnRTbW9vdGhpbmdTdHlsZTsKK30KKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9u
dFNtb290aGluZ0NvbnRyYXN0KENHRmxvYXQgY29udHJhc3QpCit7CisgICAgc19mb250U21vb3Ro
aW5nQ29udHJhc3QgPSBjb250cmFzdDsKK30KKworc3RhdGljIGZsb2F0IGNsZWFyVHlwZUNvbnRy
YXN0KCkKK3sKKyAgICBjb25zdCBXQ0hBUiByZWZlcmVuY2VDaGFyYWN0ZXIgPSAnXFwnOworICAg
IHN0YXRpYyBVSU5UIGxhc3RDb250cmFzdCA9IDIwMDA7CisgICAgc3RhdGljIGZsb2F0IGdhbW1h
ID0gMjsKKyAgICBVSU5UIGNvbnRyYXN0OworCisgICAgaWYgKCFTeXN0ZW1QYXJhbWV0ZXJzSW5m
byhTUElfR0VURk9OVFNNT09USElOR0NPTlRSQVNULCAwLCAmY29udHJhc3QsIDApIHx8IGNvbnRy
YXN0ID09IGxhc3RDb250cmFzdCkKKyAgICAgICAgcmV0dXJuIGdhbW1hOworCisgICAgbGFzdENv
bnRyYXN0ID0gY29udHJhc3Q7CisKKyAgICBhdXRvIGRjID0gYWRvcHRHRElPYmplY3QoOjpDcmVh
dGVDb21wYXRpYmxlREMoMCkpOworCisgICAgSEdESU9CSiBvbGRIRk9OVCA9IDo6U2VsZWN0T2Jq
ZWN0KGRjLmdldCgpLCBHZXRTdG9ja09iamVjdChERUZBVUxUX0dVSV9GT05UKSk7CisgICAgR0xZ
UEhNRVRSSUNTIGdseXBoTWV0cmljczsKKworICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5
ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07CisgICAgaWYgKDo6R2V0R2x5cGhPdXRs
aW5lKGRjLmdldCgpLCByZWZlcmVuY2VDaGFyYWN0ZXIsIEdHT19NRVRSSUNTLCAmZ2x5cGhNZXRy
aWNzLCAwLCAwLCAmaWRlbnRpdHkpID09IEdESV9FUlJPUikKKyAgICAgICAgcmV0dXJuIGNvbnRy
YXN0IC8gMTAwMC4wZjsKKworICAgIEJJVE1BUElORk8gYml0bWFwSW5mbzsKKyAgICBiaXRtYXBJ
bmZvLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7CisgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXpl
SW1hZ2UgPSAwOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWFBlbHNQZXJNZXRlciA9IDA7
CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlZUGVsc1Blck1ldGVyID0gMDsKKyAgICBiaXRt
YXBJbmZvLmJtaUhlYWRlci5iaUNsckltcG9ydGFudCA9IDA7CisgICAgYml0bWFwSW5mby5ibWlI
ZWFkZXIuYmlXaWR0aCA9IGdseXBoTWV0cmljcy5nbUJsYWNrQm94WDsKKyAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaUhlaWdodCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGdseXBoTWV0cmljcy5nbUJs
YWNrQm94WSk7CisgICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDMyOworICAg
IGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQ2xyVXNlZCA9IDA7CisKKyAgICB1aW50OF90KiBwaXhl
bHMgPSBudWxscHRyOworICAgIGF1dG8gYml0bWFwID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVE
SUJTZWN0aW9uKDAsICZiaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKio+KCZwaXhlbHMpLCAwLCAwKSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJl
dHVybiBjb250cmFzdCAvIDEwMDAuMGY7CisKKyAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IDo6U2Vs
ZWN0T2JqZWN0KGRjLmdldCgpLCBiaXRtYXAuZ2V0KCkpOworCisgICAgQklUTUFQIGJtcEluZm87
CisgICAgOjpHZXRPYmplY3QoYml0bWFwLmdldCgpLCBzaXplb2YoYm1wSW5mbyksICZibXBJbmZv
KTsKKyAgICBtZW1zZXQocGl4ZWxzLCAwLCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgKiBibXBJ
bmZvLmJtV2lkdGhCeXRlcyk7CisKKyAgICA6OlNldEJrTW9kZShkYy5nZXQoKSwgT1BBUVVFKTsK
KyAgICA6OlNldFRleHRBbGlnbihkYy5nZXQoKSwgVEFfTEVGVCB8IFRBX1RPUCk7CisKKyAgICA6
OlNldFRleHRDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwgMjU1LCAyNTUpKTsKKyAgICA6OlNldEJr
Q29sb3IoZGMuZ2V0KCksIFJHQigwLCAwLCAwKSk7CisgICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQo
KSwgMCwgMCwgMCwgMCwgJnJlZmVyZW5jZUNoYXJhY3RlciwgMSwgMCk7CisKKyAgICB1aW50OF90
KiByZWZlcmVuY2VQaXhlbCA9IG51bGxwdHI7CisgICAgdWludDhfdCB3aGl0ZVJlZmVyZW5jZVZh
bHVlID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBoTWV0cmljcy5nbUJsYWNr
Qm94WSAmJiAhcmVmZXJlbmNlUGl4ZWw7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IDQgKiBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFg7ICsraikgeworICAgICAgICAgICAg
d2hpdGVSZWZlcmVuY2VWYWx1ZSA9IHBpeGVsc1tpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBq
XTsKKyAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgcGl4ZWwgdmFsdWUgaW4gdGhlIHJhbmdlIHRo
YXQgYWxsb3dzIHVzIHRvIGVzdGltYXRlCisgICAgICAgICAgICAvLyBnYW1tYSB3aXRoaW4gMC4x
IHdpdGhvdXQgYW4gZXJyb3IuCisgICAgICAgICAgICBpZiAod2hpdGVSZWZlcmVuY2VWYWx1ZSA+
IDMyICYmIHdoaXRlUmVmZXJlbmNlVmFsdWUgPCAyNDApIHsKKyAgICAgICAgICAgICAgICByZWZl
cmVuY2VQaXhlbCA9IHBpeGVscyArIGkgKiBibXBJbmZvLmJtV2lkdGhCeXRlcyArIGo7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAocmVmZXJlbmNlUGl4ZWwpIHsKKyAgICAgICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCks
IFJHQigwLCAwLCAwKSk7CisgICAgICAgIDo6U2V0QmtDb2xvcihkYy5nZXQoKSwgUkdCKDI1NSwg
MjU1LCAyNTUpKTsKKyAgICAgICAgOjpFeHRUZXh0T3V0VyhkYy5nZXQoKSwgMCwgMCwgMCwgMCwg
JnJlZmVyZW5jZUNoYXJhY3RlciwgMSwgMCk7CisgICAgICAgIHVpbnQ4X3QgYmxhY2tSZWZlcmVu
Y2VWYWx1ZSA9ICpyZWZlcmVuY2VQaXhlbDsKKworICAgICAgICBmbG9hdCBtaW5EZWx0YSA9IDE7
CisgICAgICAgIGZvciAoZmxvYXQgZyA9IDE7IGcgPCAyLjNmOyBnICs9IDAuMWYpIHsKKyAgICAg
ICAgICAgIGZsb2F0IGRlbHRhID0gZmFicyhwb3dmKCh3aGl0ZVJlZmVyZW5jZVZhbHVlIC8gMjU1
LjBmKSwgZykgKyBwb3dmKChibGFja1JlZmVyZW5jZVZhbHVlIC8gMjU1LjBmKSwgZykgLSAxKTsK
KyAgICAgICAgICAgIGlmIChkZWx0YSA8IG1pbkRlbHRhKSB7CisgICAgICAgICAgICAgICAgbWlu
RGVsdGEgPSBkZWx0YTsKKyAgICAgICAgICAgICAgICBnYW1tYSA9IGc7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZ2FtbWEgPSBjb250cmFzdCAvIDEwMDAu
MGY7CisKKyAgICA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgb2xkQml0bWFwKTsKKyAgICA6OlNl
bGVjdE9iamVjdChkYy5nZXQoKSwgb2xkSEZPTlQpOworCisgICAgcmV0dXJuIGdhbW1hOworfQor
Cit2b2lkIEZvbnRDYXNjYWRlOjpzeXN0ZW1Gb250U21vb3RoaW5nQ2hhbmdlZCgpCit7CisgICAg
OjpTeXN0ZW1QYXJhbWV0ZXJzSW5mbyhTUElfR0VURk9OVFNNT09USElORywgMCwgJnNfc3lzdGVt
Rm9udFNtb290aGluZ0VuYWJsZWQsIDApOworICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVEZPTlRTTU9PVEhJTkdUWVBFLCAwLCAmc19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSwgMCk7
CisgICAgc19mb250U21vb3RoaW5nQ29udHJhc3QgPSBjbGVhclR5cGVDb250cmFzdCgpOworICAg
IHNfc3lzdGVtRm9udFNtb290aGluZ1NldCA9IHRydWU7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6
OnNldENHQ29udGV4dEZvbnRSZW5kZXJpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBi
b29sIGlzU3lzdGVtRm9udCwgYm9vbCAvKmlzUHJpbnRlckZvbnQqLywgYm9vbCB1c2VQbGF0Zm9y
bU5hdGl2ZUdseXBocykKK3sKKyAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAg
Ym9vbCBtYXlTdWJwaXhlbFBvc2l0aW9uID0gdHJ1ZTsKKyAgICBDR0Zsb2F0IGNvbnRyYXN0ID0g
MjsKKyAgICBpZiAodXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpIHsKKyAgICAgICAgLy8gPHJkYXI6
Ly82NTY0NTAxPiBHREkgY2FuJ3Qgc3VicGl4ZWwtcG9zaXRpb24sIHNvIGRvbid0IGJvdGhlciBh
c2tpbmcuCisgICAgICAgIG1heVN1YnBpeGVsUG9zaXRpb24gPSBmYWxzZTsKKyAgICAgICAgaWYg
KCFzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQpCisgICAgICAgICAgICBzeXN0ZW1Gb250U21vb3Ro
aW5nQ2hhbmdlZCgpOworICAgICAgICBjb250cmFzdCA9IHNfZm9udFNtb290aGluZ0NvbnRyYXN0
OworICAgICAgICBzaG91bGRBbnRpYWxpYXMgPSBzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVk
OworICAgICAgICBpZiAoc19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZSA9PSBGRV9GT05UU01PT1RI
SU5HU1RBTkRBUkQpIHsKKyAgICAgICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHls
ZShjZ0NvbnRleHQsIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0pOworICAgICAgICAgICAg
Y29udHJhc3QgPSBhbnRpYWxpYXNpbmdHYW1tYTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDR0Nv
bnRleHRTZXRGb250U21vb3RoaW5nQ29udHJhc3QoY2dDb250ZXh0LCBjb250cmFzdCk7CisgICAg
Q0dDb250ZXh0U2V0U2hvdWxkVXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMoY2dDb250ZXh0LCB1c2VQ
bGF0Zm9ybU5hdGl2ZUdseXBocyk7CisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzRm9u
dHMoY2dDb250ZXh0LCBzaG91bGRBbnRpYWxpYXMpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIGNv
bnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKKyAgICBib29sIGlz
UHVyZVRyYW5zbGF0aW9uID0gY29udGV4dFRyYW5zZm9ybS5hID09IDEgJiYgKGNvbnRleHRUcmFu
c2Zvcm0uZCA9PSAxIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCA9PSAtMSkgJiYgIWNvbnRleHRUcmFu
c2Zvcm0uYiAmJiAhY29udGV4dFRyYW5zZm9ybS5jOworICAgIENHQ29udGV4dFNldFNob3VsZFN1
YnBpeGVsUG9zaXRpb25Gb250cyhjZ0NvbnRleHQsIG1heVN1YnBpeGVsUG9zaXRpb24gJiYgKGlz
U3lzdGVtRm9udCB8fCAhaXNQdXJlVHJhbnNsYXRpb24pKTsKKyAgICBDR0NvbnRleHRTZXRTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBpc1B1cmVUcmFuc2xhdGlvbik7Cit9
CisKK3N0YXRpYyBpbmxpbmUgQ0dGb250UmVuZGVyaW5nU3R5bGUgcmVuZGVyaW5nU3R5bGVGb3JG
b250KGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQpCit7CisgICAgLy8gRklY
TUU6IE5lZWQgdG8gc3VwcG9ydCBhIG1pbmltdW0gYW50aWFsaWFzZWQgZm9udCBzaXplLgorCisg
ICAgaWYgKGlzU3lzdGVtRm9udCB8fCBpc1ByaW50ZXJGb250KQorICAgICAgICByZXR1cm4ga0NH
Rm9udFJlbmRlcmluZ1N0eWxlQW50aWFsaWFzaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0eWxlU3Vi
cGl4ZWxQb3NpdGlvbmluZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUXVhbnRpemF0
aW9uOworCisgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZzsKK30K
Kwordm9pZCBGb250Q2FzY2FkZTo6Z2V0UGxhdGZvcm1HbHlwaEFkdmFuY2VzKENHRm9udFJlZiBm
b250LCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSYgbSwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wg
aXNQcmludGVyRm9udCwgQ0dHbHlwaCBnbHlwaCwgQ0dTaXplJiBhZHZhbmNlKQoreworICAgIENH
Rm9udFJlbmRlcmluZ1N0eWxlIHN0eWxlID0gcmVuZGVyaW5nU3R5bGVGb3JGb250KGlzU3lzdGVt
Rm9udCwgaXNQcmludGVyRm9udCk7CisgICAgQ0dGb250R2V0R2x5cGhBZHZhbmNlc0ZvclN0eWxl
KGZvbnQsICZtLCBzdHlsZSwgJmdseXBoLCAxLCAmYWR2YW5jZSk7CisKKyAgICAvLyA8cmRhcjov
L3Byb2JsZW0vNzc2MTE2NT4gVGhlIEdESSBiYWNrIGVuZCBpbiBDb3JlIEdyYXBoaWNzIHNvbWV0
aW1lcyByZXR1cm5zIGFkdmFuY2VzIHRoYXQKKyAgICAvLyBkaWZmZXIgZnJvbSB3aGF0IHRoZSBm
b250J3MgaG10eCB0YWJsZSBzcGVjaWZpZXMuIFRoZSBmb2xsb3dpbmcgY29kZSBjb3JyZWN0cyB0
aGF0LgorICAgIENGRGF0YVJlZiBobXR4VGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9u
dCwgJ2htdHgnKTsKKyAgICBpZiAoIWhtdHhUYWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIENG
RGF0YVJlZiBoaGVhVGFibGUgPSBDR0ZvbnRDb3B5VGFibGVGb3JUYWcoZm9udCwgJ2hoZWEnKTsK
KyAgICBpZiAoIWhoZWFUYWJsZSkgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IENGSW5kZXggaGhlYVRhYmxlU2l6ZSA9
IDM2OworICAgIGNvbnN0IHB0cmRpZmZfdCBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNzT2Zmc2V0
ID0gMzQ7CisgICAgaWYgKENGRGF0YUdldExlbmd0aChoaGVhVGFibGUpIDwgaGhlYVRhYmxlU2l6
ZSkgeworICAgICAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGho
ZWFUYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaG9ydCBu
dW1iZXJPZkhNZXRyaWNzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihDRkRhdGFHZXRCeXRlUHRyKGhoZWFUYWJsZSkgKyBoaGVhVGFibGVOdW1iZXJPZkhNZXRyaWNz
T2Zmc2V0KTsKKyAgICBudW1iZXJPZkhNZXRyaWNzID0gKChudW1iZXJPZkhNZXRyaWNzICYgMHhG
RikgPDwgOCkgfCAobnVtYmVyT2ZITWV0cmljcyA+PiA4KTsKKyAgICBpZiAoIW51bWJlck9mSE1l
dHJpY3MpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFz
ZShoaGVhVGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdseXBoID49
IG51bWJlck9mSE1ldHJpY3MpCisgICAgICAgIGdseXBoID0gbnVtYmVyT2ZITWV0cmljcyAtIDE7
CisKKyAgICBpZiAoQ0ZEYXRhR2V0TGVuZ3RoKGhtdHhUYWJsZSkgPCA0ICogKGdseXBoICsgMSkp
IHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZShoaGVh
VGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQgYWR2
YW5jZUluRGVzaWduVW5pdHMgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KENGRGF0YUdldEJ5dGVQdHIoaG10eFRhYmxlKSArIDQgKiBnbHlwaCk7CisgICAgYWR2YW5j
ZUluRGVzaWduVW5pdHMgPSAoKGFkdmFuY2VJbkRlc2lnblVuaXRzICYgMHhGRikgPDwgOCkgfCAo
YWR2YW5jZUluRGVzaWduVW5pdHMgPj4gOCk7CisgICAgQ0dTaXplIGhvcml6b250YWxBZHZhbmNl
ID0gQ0dTaXplTWFrZShzdGF0aWNfY2FzdDxDR0Zsb2F0PihhZHZhbmNlSW5EZXNpZ25Vbml0cykg
LyBDR0ZvbnRHZXRVbml0c1BlckVtKGZvbnQpLCAwKTsKKyAgICBob3Jpem9udGFsQWR2YW5jZSA9
IENHU2l6ZUFwcGx5QWZmaW5lVHJhbnNmb3JtKGhvcml6b250YWxBZHZhbmNlLCBtKTsKKyAgICBh
ZHZhbmNlLndpZHRoID0gaG9yaXpvbnRhbEFkdmFuY2Uud2lkdGg7CisgICAgaWYgKCEoc3R5bGUg
JiBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nKSkKKyAgICAgICAgYWR2
YW5jZS53aWR0aCA9IHJvdW5kZihhZHZhbmNlLndpZHRoKTsKKworICAgIENGUmVsZWFzZShoaGVh
VGFibGUpOworICAgIENGUmVsZWFzZShobXR4VGFibGUpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IDE0MGVjMTZlYjE1ZDZmYzlmZGE0MGJjYjUx
YmJhMGZmMGFjMzNiMzYuLmFmYWYwZTczNzQxYTM5Mjc0YTQxNjA0ZjAxMWNhMmQyZDFhMmMzYzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lm
IFVTRShDRykKICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1
ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAjZW5kaWYKIAogI2lmIFVTRShESVJF
Q1QyRCkKQEAgLTgzLDggKzg0LDkgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYKIAogICAgIGF1
dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZvbnRJbmRpcmVjdCgmbG9nRm9udCkp
OwogI2lmIFVTRShDRykKLSAgICBSZXRhaW5QdHI8Q0dGb250UmVmPiBjZ0ZvbnQgPSBhZG9wdENG
KENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ0ZvbnQpKTsKLSAgICByZXR1cm4gRm9u
dFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgY2dGb250LmdldCgpLCBzaXplLCBib2xkLCBp
dGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7Cisg
ICAgYXV0byBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxv
Z0ZvbnQpKTsKKyAgICBhdXRvIGN0Rm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBo
aWNzRm9udChjZ0ZvbnQuZ2V0KCksIHNpemUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1
cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhmb250KSwgY3RGb250LmdldCgpLCBzaXplLCBi
b2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0gRm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0
ZSk7CiAjZWxzZQogICAgIGF1dG8gZm9udCA9IERpcmVjdFdyaXRlOjpjcmVhdGVXaXRoUGxhdGZv
cm1Gb250KGxvZ0ZvbnQpOwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKFdURk1vdmUoaGZv
bnQpLCBXVEZNb3ZlKGZvbnQpLCBzaXplLCBib2xkLCBpdGFsaWMsIHJlbmRlcmluZ01vZGUgPT0g
Rm9udFJlbmRlcmluZ01vZGU6OkFsdGVybmF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3Bw
CmluZGV4IDExMmJmOTVjYzlhZGJmOTllNDZiNWNiNTFkZWNhNDBkNjRiNWUxNDEuLmI1YzE0YmMx
MjI1ZGJjZDE5NWMwMDFlNDM4MWU2YjQxMjljOTA5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dX
aW4uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJTaGFyZWRHRElPYmplY3QuaCIK
ICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvd2luL0NvcmVUZXh0U1BJV2luLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTEzLDMw
ICsxMTQsNDYgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybURhdGFJbml0KEhGT05U
IGZvbnQsIGZsb2F0IHNpemUsIEhEQyBoZGMsIFdDSEFSKgogewogICAgIExPR0ZPTlQgbG9nZm9u
dDsKICAgICBHZXRPYmplY3QoZm9udCwgc2l6ZW9mKGxvZ2ZvbnQpLCAmbG9nZm9udCk7Ci0gICAg
bV9jZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZvbnQoJmxvZ2ZvbnQp
KTsKKyAgICBhdXRvIGNnRm9udCA9IGFkb3B0Q0YoQ0dGb250Q3JlYXRlV2l0aFBsYXRmb3JtRm9u
dCgmbG9nZm9udCkpOworICAgIG1fZm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBo
aWNzRm9udChjZ0ZvbnQuZ2V0KCksIHNpemUsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICAKICAg
ICBpZiAoIW1fdXNlR0RJKQogICAgICAgICBtX2lzU3lzdGVtRm9udCA9ICF3Y3NjbXAoZmFjZU5h
bWUsIEwiTHVjaWRhIEdyYW5kZSIpOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQsIENHRm9udFJlZiBmb250LCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gaGZvbnQsIENURm9udFJlZiBmb250
LCBmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCiAgICAg
OiBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhldGljT2JsaXF1ZShvYmxpcXVl
KQogICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBtX2ZvbnQoU2hhcmVkR0RJT2JqZWN0PEhGT05U
Pjo6Y3JlYXRlKFdURk1vdmUoaGZvbnQpKSkKLSAgICAsIG1fY2dGb250KGZvbnQpCisgICAgLCBt
X2hGb250KFNoYXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCisg
ICAgLCBtX2ZvbnQoZm9udCkKICAgICAsIG1fdXNlR0RJKHVzZUdESSkKIHsKIH0KIAogdW5zaWdu
ZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9udCA/
IG1fZm9udC0+aGFzaCgpIDogMDsKKyAgICB1aW50cHRyX3QgZmxhZ3MgPSBzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3dpZHRoVmFyaWFudCkgPDwgNgorICAg
ICAgICB8IG1faXNIYXNoVGFibGVEZWxldGVkVmFsdWUgPDwgNQorICAgICAgICB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3RleHRSZW5kZXJpbmdNb2RlKSA8PCAzCisgICAgICAgIHwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fb3JpZW50YXRpb24pIDw8IDIKKyAgICAgICAgfCBtX3N5bnRoZXRp
Y0JvbGQgPDwgMQorICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3N5bnRoZXRpY09i
bGlxdWUpKTsKKworICAgIHVpbnRwdHJfdCBmb250SGFzaDEgPSBzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKKyAgICB1aW50cHRyX3QgZm9udEhhc2gyID0gc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihtX2hGb250ID8gbV9oRm9udC0+aGFzaCgpIDogMCk7CisgICAg
dWludHB0cl90IGhhc2hDb2Rlc1tdID0geyBmb250SGFzaDEsIGZvbnRIYXNoMiwgZmxhZ3MgfTsK
KyAgICByZXR1cm4gU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihoYXNoQ29kZXMpPiho
YXNoQ29kZXMpOwogfQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OnBsYXRmb3JtSXNFcXVhbChj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9mb250
ID09IG90aGVyLm1fZm9udAotICAgICAgICAmJiBtX2NnRm9udCA9PSBvdGhlci5tX2NnRm9udAor
ICAgIGlmICghbV9mb250IHx8ICFvdGhlci5tX2ZvbnQpCisgICAgICAgIHJldHVybiBtX2ZvbnQg
PT0gb3RoZXIubV9mb250OworCisgICAgcmV0dXJuIENGRXF1YWwobV9mb250LmdldCgpLCBvdGhl
ci5tX2ZvbnQuZ2V0KCkpIAorICAgICAgICAmJiBtX2hGb250ID09IG90aGVyLm1faEZvbnQKKyAg
ICAgICAgJiYgbV9mb250ID09IG90aGVyLm1fZm9udAogICAgICAgICAmJiBtX3VzZUdESSA9PSBv
dGhlci5tX3VzZUdESTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCmluZGV4IGU1MzczYzdj
NmVjNDg3NTQwYzE2MWQyYWIxOWQ2ODFiZTgxOGYxYTEuLmZlYzFhMzIyODZhMTQ1MjU0NjNkZWQy
YzU1MGMzYzBhNjg5Nzg1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKQEAgLTQyLDcgKzQy
LDcgQEAgdXNpbmcgc3RkOjptaW47CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiBmb250LCBmbG9hdCBzaXpl
LCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSwgYm9vbCB1c2VHREkpCi0gICAgOiBtX2ZvbnQoU2hh
cmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoZm9udCkpKQorICAgIDogbV9oRm9u
dChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShmb250KSkpCiAgICAgLCBt
X3NpemUoc2l6ZSkKICAgICAsIG1fc3ludGhldGljQm9sZChib2xkKQogICAgICwgbV9zeW50aGV0
aWNPYmxpcXVlKG9ibGlxdWUpCkBAIC01MSwzOCArNTEsMTMgQEAgRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGZvbnQsIGZsb2F0IHNpemUsIGJvb2wg
Ym9sZCwKICAgICBIV25kREMgaGRjKDApOwogICAgIFNhdmVEQyhoZGMpOwogICAgIAotICAgIDo6
U2VsZWN0T2JqZWN0KGhkYywgbV9mb250LT5nZXQoKSk7CisgICAgOjpTZWxlY3RPYmplY3QoaGRj
LCBtX2hGb250LT5nZXQoKSk7CiAKICAgICB3Y2hhcl90IGZhY2VOYW1lW0xGX0ZBQ0VTSVpFXTsK
ICAgICBHZXRUZXh0RmFjZShoZGMsIExGX0ZBQ0VTSVpFLCBmYWNlTmFtZSk7Ci0gICAgcGxhdGZv
cm1EYXRhSW5pdChtX2ZvbnQtPmdldCgpLCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKKyAgICBwbGF0
Zm9ybURhdGFJbml0KG1faEZvbnQtPmdldCgpLCBzaXplLCBoZGMsIGZhY2VOYW1lKTsKIAogICAg
IFJlc3RvcmVEQyhoZGMsIC0xKTsKIH0KIAotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRm
b3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKLXsKLSAgICBIV25k
REMgaGRjKDApOwotICAgIEhHRElPQkogb2xkRm9udCA9IFNlbGVjdE9iamVjdChoZGMsIGhmb250
KCkpOwotCi0gICAgRFdPUkQgc2l6ZSA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIDAsIDAp
OwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAoc2l6ZSAhPSBHRElf
RVJST1IpIHsKLSAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGEoc2l6ZSk7Ci0gICAgICAgIERXT1JE
IHJlc3VsdCA9IEdldEZvbnREYXRhKGhkYywgdGFibGUsIDAsIChQVk9JRClkYXRhLmRhdGEoKSwg
c2l6ZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQgPT0gc2l6ZSk7Ci0g
ICAgICAgIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwotICAg
IH0KLQotICAgIFNlbGVjdE9iamVjdChoZGMsIG9sZEZvbnQpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1TdHJpbmcgRm9udFBsYXRmb3JtRGF0YTo6ZGVzY3Jp
cHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgotCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdl
VHJlZU5vZGVDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDZkNGIwZGM5NzQ2OTJkZDI5NDI0OTNkNjI4OTNkYWRjZWVlMTgwZWMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2x5cGhQ
YWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCi17
Ci0gICAgLy8gYnVmZmVyTGVuZ3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0ZWQg
bnVtYmVyIG9mIGdseXBocyBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIHN1cnJvZ2F0ZSBwYWlycy4K
LSAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KLSAgICBpZiAoYnVmZmVyTGVu
Z3RoID4gR2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25z
dCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNl
OwotICAgIENHR2x5cGggbG9jYWxHbHlwaEJ1ZmZlcltHbHlwaFBhZ2U6OnNpemVdOwotICAgIENH
Rm9udEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY2dGb250KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+KGJ1ZmZlciksIGxvY2FsR2x5cGhCdWZmZXIs
IGJ1ZmZlckxlbmd0aCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6
c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsK
LSAgICAgICAgaWYgKCFnbHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7
Ci0gICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gaGF2ZUdseXBoczsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNHV2luLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhYjRjZGNmZDAzOGJmNGQ3YWQ0MGEz
MDg1NDM5ZWM4ZDNiYTRiMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERh
dGFDR1dpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhQ
YWdlLmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiT3BlblR5cGVDRy5oIgotI2lu
Y2x1ZGUgPG1sYW5nLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4K
LSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgot
I2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpwbGF0Zm9ybUluaXQoKQotewotICAg
IG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/
IDEuMGYgOiAwLmY7Ci0gICAgbV9zY3JpcHRDYWNoZSA9IDA7Ci0gICAgbV9zY3JpcHRGb250UHJv
cGVydGllcyA9IDA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpCi0gICAgICAg
IHJldHVybiBpbml0R0RJRm9udCgpOwotCi0gICAgQ0dGb250UmVmIGZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5jZ0ZvbnQoKTsKLSAgICBpbnQgaUFzY2VudCA9IENHRm9udEdldEFzY2VudChmb250KTsK
LSAgICBpbnQgaURlc2NlbnQgPSBDR0ZvbnRHZXREZXNjZW50KGZvbnQpOwotICAgIGludCBpTGlu
ZUdhcCA9IENHRm9udEdldExlYWRpbmcoZm9udCk7Ci0gICAgaW50IGlDYXBIZWlnaHQgPSBDR0Zv
bnRHZXRDYXBIZWlnaHQoZm9udCk7Ci0KLSAgICAvLyBUaGUgT3BlbiBGb250IEZvcm1hdCBkZXNj
cmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBmbGFnIGFzIGZvbGxvd3M6Ci0gICAgLy8g
IklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gdXNlIE9TLzIuc1R5cG9Bc2Nl
bmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIuc1R5cG9MaW5lR2FwIGFzIGEgdmFsdWUg
Zm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlzIGZvbnQuIgotICAgIHNob3J0IHR5cG9B
c2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICBpZiAoT3BlblR5cGU6OnRyeUdl
dFR5cG9NZXRyaWNzKGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEdyYXBoaWNzRm9udChtX3BsYXRm
b3JtRGF0YS5jZ0ZvbnQoKSwgbV9wbGF0Zm9ybURhdGEuc2l6ZSgpLCBudWxscHRyLCBudWxscHRy
KSkuZ2V0KCksIHR5cG9Bc2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKLSAgICAg
ICAgaUFzY2VudCA9IHR5cG9Bc2NlbnQ7Ci0gICAgICAgIGlEZXNjZW50ID0gdHlwb0Rlc2NlbnQ7
Ci0gICAgICAgIGlMaW5lR2FwID0gdHlwb0xpbmVHYXA7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
dW5pdHNQZXJFbSA9IENHRm9udEdldFVuaXRzUGVyRW0oZm9udCk7Ci0gICAgZmxvYXQgcG9pbnRT
aXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGZsb2F0IGZBc2NlbnQgPSBzY2FsZUVt
VG9Vbml0cyhpQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmRGVz
Y2VudCA9IC1zY2FsZUVtVG9Vbml0cyhpRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7
Ci0gICAgZmxvYXQgZkNhcEhlaWdodCA9IHNjYWxlRW1Ub1VuaXRzKGlDYXBIZWlnaHQsIHVuaXRz
UGVyRW0pICogcG9pbnRTaXplOwotICAgIGZsb2F0IGZMaW5lR2FwID0gc2NhbGVFbVRvVW5pdHMo
aUxpbmVHYXAsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotCi0gICAgaWYgKG9yaWdpbigpID09
IE9yaWdpbjo6TG9jYWwpIHsKLSAgICAgICAgSFduZERDIGRjKDApOwotICAgICAgICBIR0RJT0JK
IG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoZGMsIG1fcGxhdGZvcm1EYXRhLmhmb250KCkpOwotICAg
ICAgICBpbnQgZmFjZUxlbmd0aCA9IEdldFRleHRGYWNlKGRjLCAwLCAwKTsKLSAgICAgICAgVmVj
dG9yPFdDSEFSPiBmYWNlTmFtZShmYWNlTGVuZ3RoKTsKLSAgICAgICAgR2V0VGV4dEZhY2UoZGMs
IGZhY2VMZW5ndGgsIGZhY2VOYW1lLmRhdGEoKSk7Ci0gICAgICAgIFNlbGVjdE9iamVjdChkYywg
b2xkRm9udCk7Ci0KLSAgICAgICAgZkFzY2VudCA9IGFzY2VudENvbnNpZGVyaW5nTWFjQXNjZW50
SGFjayhmYWNlTmFtZS5kYXRhKCksIGZBc2NlbnQsIGZEZXNjZW50KTsKLSAgICB9Ci0KLSAgICBt
X2ZvbnRNZXRyaWNzLnNldEFzY2VudChmQXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERl
c2NlbnQoZkRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGZDYXBIZWln
aHQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChmTGluZUdhcCk7Ci0gICAgbV9mb250
TWV0cmljcy5zZXRMaW5lU3BhY2luZyhscm91bmRmKGZBc2NlbnQpICsgbHJvdW5kZihmRGVzY2Vu
dCkgKyBscm91bmRmKGZMaW5lR2FwKSk7Ci0KLSAgICBHbHlwaCB4R2x5cGggPSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoJ3gnKS5nbHlwaDsKLSAgICBpZiAoeEdseXBoKSB7Ci0gICAgICAgIC8vIE1l
YXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBp
dCB0byBleHRlbmQgYmVsb3cgdGhlIGJhc2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAg
Ly8gcmVwb3J0ZWQgeC1oZWlnaHQgdG8gb25seSBpbmNsdWRlIHRoZSBwb3J0aW9uIG9mIHRoZSBn
bHlwaCB0aGF0IGlzIGFib3ZlIHRoZSBiYXNlbGluZS4KLSAgICAgICAgQ0dSZWN0IHhCb3g7Ci0g
ICAgICAgIENHRm9udEdldEdseXBoQkJveGVzKGZvbnQsICZ4R2x5cGgsIDEsICZ4Qm94KTsKLSAg
ICAgICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKENHUmVjdEdldE1h
eFkoeEJveCksIHVuaXRzUGVyRW0pICogcG9pbnRTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpbnQgaVhIZWlnaHQgPSBDR0ZvbnRHZXRYSGVpZ2h0KGZvbnQpOwotICAgICAgICBtX2ZvbnRN
ZXRyaWNzLnNldFhIZWlnaHQoc2NhbGVFbVRvVW5pdHMoaVhIZWlnaHQsIHVuaXRzUGVyRW0pICog
cG9pbnRTaXplKTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5p
dHNQZXJFbSk7Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAotewotICAgIGlmICghcGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJ
KCkpCi0gICAgICAgIHJldHVybiBib3VuZHNGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBDR1Jl
Y3QgYm94OwotICAgIENHRm9udEdldEdseXBoQkJveGVzKG1fcGxhdGZvcm1EYXRhLmNnRm9udCgp
LCAmZ2x5cGgsIDEsICZib3gpOwotICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKLSAgICBDR0Zsb2F0IHNjYWxlID0gcG9pbnRTaXplIC8gZm9udE1ldHJpY3MoKS51
bml0c1BlckVtKCk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gQ0dSZWN0QXBwbHlBZmZp
bmVUcmFuc2Zvcm0oYm94LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShzY2FsZSwgLXNjYWxl
KSk7Ci0gICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgYm91bmRpbmdCb3gu
c2V0V2lkdGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7Ci0K
LSAgICByZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNp
emUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobV9wbGF0Zm9ybURhdGEudXNlR0RJ
KCkpCi0gICAgICAgIHJldHVybiB3aWR0aEZvckdESUdseXBoKGdseXBoKTsKLQotICAgIENHRm9u
dFJlZiBmb250ID0gbV9wbGF0Zm9ybURhdGEuY2dGb250KCk7Ci0gICAgZmxvYXQgcG9pbnRTaXpl
ID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENHU2l6ZSBhZHZhbmNlOwotICAgIENHQWZm
aW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZShwb2ludFNpemUsIHBv
aW50U2l6ZSk7Ci0gCi0gICAgYm9vbCBpc1ByaW50ZXJGb250ID0gZmFsc2U7Ci0gICAgRm9udENh
c2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhmb250LCBtLCBtX3BsYXRmb3JtRGF0YS5p
c1N5c3RlbUZvbnQoKSwgaXNQcmludGVyRm9udCwgZ2x5cGgsIGFkdmFuY2UpOwotCi0gICAgcmV0
dXJuIGFkdmFuY2Uud2lkdGggKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7Ci19Ci0KLVBhdGggRm9u
dDo6cGxhdGZvcm1QYXRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgYXV0byBj
dEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQocGxhdGZvcm1EYXRh
KCkuY2dGb250KCksIHBsYXRmb3JtRGF0YSgpLnNpemUoKSwgbnVsbHB0ciwgbnVsbHB0cikpOwot
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgoY3RGb250
LmdldCgpLCBnbHlwaCwgbnVsbHB0cikpOwotICAgIGF1dG8gc3ludGhldGljQm9sZE9mZnNldCA9
IHRoaXMtPnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLSAgICBpZiAoc3ludGhldGljQm9sZE9mZnNl
dCkgewotICAgICAgICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUo
KSk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0
LmdldCgpKTsKLSAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFr
ZVRyYW5zbGF0aW9uKHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOwotICAgICAgICBDR1BhdGhBZGRQ
YXRoKG5ld1BhdGguZ2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKLSAgICAgICAg
cmV0dXJuIG5ld1BhdGg7Ci0gICAgfQotICAgIHJldHVybiBhZG9wdENGKENHUGF0aENyZWF0ZU11
dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdp
bi5jcHAKaW5kZXggZWNhMzMyYWY2NTA2ZjM4NGNlM2Q3NzNjM2NjYTJlY2JjODdmYjBlMi4uOWRj
MjZmZmQ3Y2YzYjYyM2M2MTU3MWIxNzUxMmU0N2FlOTliNmZlMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFXaW4u
Y3BwCkBAIC0xMDYsNTYgKzEwNiwxMiBAQCB2b2lkIEZvbnQ6OmluaXRHRElGb250KCkKICAgICBT
ZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKIH0KIAotdm9pZCBGb250OjpwbGF0Zm9ybUNoYXJX
aWR0aEluaXQoKQotewotICAgIC8vIEdESSBGb250cyBpbml0IGNoYXJ3aWR0aHMgaW4gaW5pdEdE
SUZvbnQuCi0gICAgaWYgKCFtX3BsYXRmb3JtRGF0YS51c2VHREkoKSkgewotICAgICAgICBtX2F2
Z0NoYXJXaWR0aCA9IDAuZjsKLSAgICAgICAgbV9tYXhDaGFyV2lkdGggPSAwLmY7Ci0gICAgICAg
IGluaXRDaGFyV2lkdGhzKCk7Ci0gICAgfQotfQotCiB2b2lkIEZvbnQ6OnBsYXRmb3JtRGVzdHJv
eSgpCiB7CiAgICAgU2NyaXB0RnJlZUNhY2hlKCZtX3NjcmlwdENhY2hlKTsKICAgICBkZWxldGUg
bV9zY3JpcHRGb250UHJvcGVydGllczsKIH0KIAotUmVmUHRyPEZvbnQ+IEZvbnQ6OnBsYXRmb3Jt
Q3JlYXRlU2NhbGVkRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwg
ZmxvYXQgc2NhbGVGYWN0b3IpIGNvbnN0Ci17Ci0gICAgZmxvYXQgc2NhbGVkU2l6ZSA9IHNjYWxl
RmFjdG9yICogbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIGlmIChvcmlnaW4oKSA9PSBPcmln
aW46OlJlbW90ZSkKLSAgICAgICAgcmV0dXJuIEZvbnQ6OmNyZWF0ZShGb250UGxhdGZvcm1EYXRh
OjpjbG9uZVdpdGhTaXplKG1fcGxhdGZvcm1EYXRhLCBzY2FsZWRTaXplKSwgRm9udDo6T3JpZ2lu
OjpSZW1vdGUpOwotCi0gICAgTE9HRk9OVCB3aW5mb250OwotICAgIEdldE9iamVjdChtX3BsYXRm
b3JtRGF0YS5oZm9udCgpLCBzaXplb2YoTE9HRk9OVCksICZ3aW5mb250KTsKLSAgICB3aW5mb250
LmxmSGVpZ2h0ID0gLWxyb3VuZGYoc2NhbGVkU2l6ZSAqIChtX3BsYXRmb3JtRGF0YS51c2VHREko
KSA/IDEgOiAzMikpOwotICAgIGF1dG8gaGZvbnQgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUZv
bnRJbmRpcmVjdCgmd2luZm9udCkpOwotICAgIHJldHVybiBGb250OjpjcmVhdGUoRm9udFBsYXRm
b3JtRGF0YShXVEZNb3ZlKGhmb250KSwgc2NhbGVkU2l6ZSwgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCksIG1fcGxhdGZvcm1E
YXRhLnVzZUdESSgpKSwgb3JpZ2luKCkpOwotfQotCi12b2lkIEZvbnQ6OmRldGVybWluZVBpdGNo
KCkKLXsKLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpSZW1vdGUpIHsKLSAgICAgICAgbV90
cmVhdEFzRml4ZWRQaXRjaCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gVEVYVE1FVFJJQ1MgaGF2ZSB0aGlzLiAgU2V0IG1fdHJlYXRBc0ZpeGVkUGl0Y2ggYmFzZWQg
b2ZmIHRoYXQuCi0gICAgSFduZERDIGRjKDApOwotICAgIFNhdmVEQyhkYyk7Ci0gICAgU2VsZWN0
T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKLQotICAgIC8vIFllcywgdGhpcyBs
b29rcyBiYWNrd2FyZHMsIGJ1dCB0aGUgZml4ZWQgcGl0Y2ggYml0IGlzIGFjdHVhbGx5IHNldCBp
ZiB0aGUgZm9udAotICAgIC8vIGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5iZWxpZXZhYmxlIGJ1
dCB0cnVlLgotICAgIFRFWFRNRVRSSUMgdG07Ci0gICAgR2V0VGV4dE1ldHJpY3MoZGMsICZ0bSk7
Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9ICgodG0udG1QaXRjaEFuZEZhbWlseSAmIFRNUEZf
RklYRURfUElUQ0gpID09IDApOwotCi0gICAgUmVzdG9yZURDKGRjLCAtMSk7Ci19Ci0KIEZsb2F0
UmVjdCBGb250Ojpib3VuZHNGb3JHRElHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKIHsKICAgICBI
V25kREMgaGRjKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4uY21ha2UKaW5kZXggOTkyZTIzNWJj
MmY0M2MwM2JiMzAxYTE3NzhhNzQ1YTVlNTViZTA4Ni4uYTgyYmJmYWMxYzIyOGQyNmM0NTdlMjdl
M2EyYzEzYWFkMDAyYzRmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdp
bi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlCkBAIC00OCw2
ICs0OCw3IEBAIGlmICgke1VTRV9ESVJFQ1QyRH0pCiBlbHNlICgpCiAgICAgU0VUX0FORF9FWFBP
U0VfVE9fQlVJTEQoVVNFX0NBIE9OKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9D
RyBPTikKKyAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ1QgT04pCiAKICAgICBzZXQo
Q01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtXRUJLSVRfTElCUkFSSUVTX0lOQ0xVREVfRElSfSkK
ICAgICBzZXQoQ01BS0VfUkVRVUlSRURfTElCUkFSSUVTCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cg
Yi9DaGFuZ2VMb2cKaW5kZXggYjEwOTk3ZjEyZmNjMTVhOTMxZDA5ZjcyNTNjZDNkMzk1OTg0OGRi
Ny4uNTUzMWZiOTE4NjU4OWYxZTNlM2NmZmVjZjE4OTc3ZTBmM2VkZjU0NSAxMDA2NDQKLS0tIGEv
Q2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA5LTEwICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0g
TWlncmF0ZSB0aGUgQXBwbGUgV2luIHBvcnQncyBmb250IGNvZGUgdG8gQ29yZSBUZXh0IGZyb20g
Q29yZSBHcmFwaGljcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE2MzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlOgorCiAyMDIwLTA5LTEw
ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAg
W0NNYWtlXSBVc2UgaW1wb3J0ZWQgdGFyZ2V0cyBpbiBmaW5kIG1vZHVsZSBmb3IgbGlic2VjY29t
cAo=
</data>
<flag name="commit-queue"
          id="423934"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408515</attachid>
            <date>2020-09-10 22:36:07 -0700</date>
            <delta_ts>2020-09-11 00:08:40 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-216353-20200910223605.patch</filename>
            <type>text/plain</type>
            <size>213240</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiYWY5MmYwNjYxMjgwYzFhNTQzZGRk
YWJmMzgzNjk1ZjNkMmE1NDUuLmQ5M2M2MTQwZjA4ZDM0MTFjYzE4MzZmNWNkZGExNjRkNTllZDky
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdyYXRlIHRoZSBBcHBsZSBX
aW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3JlIEdyYXBoaWNzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzNTMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9y
bVVzZS5oOgorCiAyMDIwLTA5LTEwICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgaGFyZHdhcmUgSlBFRyBkZWNvZGluZyBvbiB4ODYgTWFjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMGI1ZmNmNDdjYTRlZDgzMWJiMDE2Mjc5ZmZhN2ZjMzJiMTUwN2I0NC4uNDFkNGIyNDljYzQ4
MjhjYzBmNzRkMzdlMWI1MTdlM2JjZTRkMjlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBA
QAorMjAyMC0wOS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgor
CisgICAgICAgIFtXaW5dIE1pZ3JhdGUgdGhlIEFwcGxlIFdpbiBwb3J0J3MgZm9udCBjb2RlIHRv
IENvcmUgVGV4dCBmcm9tIENvcmUgR3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjM1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICog
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50
aGVzaXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1T
dXBwb3J0c0NvZGVQb2ludCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmb250Rm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3Jt
RGF0YS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5o
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGZvbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y2dGb250IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6c2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFp
bGFibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9u
dGFsR2x5cGhQb3NpdGlvbnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkVXNl
TGV0dGVycHJlc3NFZmZlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hvd0dseXBo
c1dpdGhBZHZhbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5k
ZXJpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3
R2x5cGhzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5
Rm9udElzU3lzdGVtRm9udCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjppc1N5c3RlbUZvbnQpOiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cmVnaXN0ZXJlZEZvbnQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bWFwRm9udFdpZHRoVmFyaWFudFRvQ1RG
ZWF0dXJlU2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFz
dFJlc29ydEF0dHJpYnV0ZXNEaWN0aW9uYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmNhc2NhZGVUb0xhc3RSZXNvcnRBbmRWYXJpYXRpb25zRm9udERlc2NyaXB0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Y3RGb250IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFs
aXR5Q2hlY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpvcGVuVHlwZVRhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmZhbWlseU5hbWUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNj
YWRlQ29yZVRleHQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGU6OmlzU3VicGl4ZWxBbnRpYWxpYXNpbmdBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6c2hv
d0dseXBoc1dpdGhBZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDR0ZvbnRSZW5kZXJp
bmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6Zm9udEZvckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250
Q29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1J
bml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9ybUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YXBwbHlUcmFuc2Zvcm1zIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZv
cm1EYXRhQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU3lzdGVtRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpyZWdpc3RlcmVkRm9udCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjptYXBGb250V2lkdGhWYXJpYW50VG9DVEZlYXR1cmVTZWxlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25hcnkp
OgorICAgICAgICAoV2ViQ29yZTo6Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250
RGVzY3JpcHRvcik6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1
YWxpdHlDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvYmplY3RG
b3JFcXVhbGl0eUNoZWNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6ZmFtaWx5TmFtZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3Qv
R2x5cGhQYWdlQ29yZVRleHQuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9Gb250Q2FzY2FkZUNHV2luLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1Jc0VxdWFsIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6ZGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2lu
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDR1dpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1NpbXBsZUZvbnREYXRhV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnBsYXRmb3Jt
Q2hhcldpZHRoSW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6ZGV0ZXJtaW5lUGl0Y2gpOiBEZWxldGVkLgorCiAyMDIwLTA5LTEwICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgU21hbGwgY2xlYW51cCBpbiBS
ZW5kZXJUaGVtZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggNzk1ZjQzZjQ0ODllMTdjZGNkY2EyOWRh
NGM5MjAyNWFhZDNkYjRmZC4uZjkzZjNkN2ZjNDAxMGEyNmZjMmNkYTE2MGE4YjM4MGMwOWU4ODFi
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDktMTAgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2luXSBNaWdy
YXRlIHRoZSBBcHBsZSBXaW4gcG9ydCdzIGZvbnQgY29kZSB0byBDb3JlIFRleHQgZnJvbSBDb3Jl
IEdyYXBoaWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTYzNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg6CisKIDIwMjAtMDktMTAgIEJlbiBOaGFt
ICA8bmhhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBoYXJkd2FyZSBKUEVHIGRlY29k
aW5nIG9uIHg4NiBNYWMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCmluZGV4IGE2ZWJlNjcyZjRhOTU0YzMzMjI0
NzgwM2ZiZGFlMWM4MjgxYWZmZTIuLjkzYzI1YWE5N2VjNTQ4NTY4MGUxNzA3YzcwNThiMDg0NGYz
ZDg1NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaApAQCAtNTQsNiArNTQsMTAgQEAKICNkZWZpbmUgVVNF
X0NHIDEKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5lIFVTRV9DVCAxCisj
ZW5kaWYKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogI2RlZmluZSBVU0VfQ0EgMQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4u
aCBiL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCmluZGV4
IGQyOGIxNmI0Y2E4NDY4N2EzZmIxNWZkOWJhYjQwOWYzMzNmZWRmYTguLjkwZWU5Y2Y4NWE5OWU2
ZWFmZTg0MDJlYjc4MzNmMWM4ODNlYzg2NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BB
TC9wYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9w
YWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oCkBAIC00MiwyMiArNDIsMTIxIEBAIENUX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250TmFtZUF0dHJpYnV0ZTsKIENUX0VYUE9SVCBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb3JlZ3JvdW5kQ29sb3JGcm9tQ29udGV4dEF0dHJpYnV0ZU5hbWU7
CiBDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NUU3Ryb2tlV2lkdGhBdHRyaWJ1dGVOYW1l
OwogQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVFN0cm9rZUNvbG9yQXR0cmlidXRlTmFt
ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFn
OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZp
ZXJLZXk7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wZW5UeXBlRmVhdHVy
ZVZhbHVlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0dXJlU2VsZWN0
b3JJZGVudGlmaWVyS2V5OworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDVEZvbnRGZWF0
dXJlVHlwZVNlbGVjdG9yc0tleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBrQ1RGb250
RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmluZ1JlZiBr
Q1RGb250RmVhdHVyZVNldHRpbmdzQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5n
UmVmIGtDVEZvbnRGaXhlZEFkdmFuY2VBdHRyaWJ1dGU7CitDVF9FWFBPUlQgY29uc3QgQ0ZTdHJp
bmdSZWYga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZTsKK0NUX0VYUE9SVCBjb25zdCBDRlN0cmlu
Z1JlZiBrQ1RGb250VVJMQXR0cmlidXRlOworQ1RfRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtD
VEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGU7CiAKLS8vIFRoaXMgZW51bSBpcyBkZWZpbmVkIGlu
IENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIGl0IGhlcmUgaWYg
Q1RGb250LmggaGFzIG5vdCBiZWVuIGluY2x1ZGVkLiAKKy8vIFRoZXNlIGVudW1zIGFyZSBkZWZp
bmVkIGluIENURm9udC5oLiBUbyBhdm9pZCByZWRlZmluaXRpb24sIG9ubHkgZGVmaW5lIHRoZW0g
aGVyZSBpZiBDVEZvbnQuaCBoYXMgbm90IGJlZW4gaW5jbHVkZWQuIAogI2lmbmRlZiBfX0NURk9O
VF9fCit0eXBlZGVmIENGX09QVElPTlModWludDMyX3QsIENURm9udFN5bWJvbGljVHJhaXRzKSB7
CisgICAga0NURm9udFRyYWl0SXRhbGljID0gKDEgPDwgMCksCisgICAga0NURm9udFRyYWl0Qm9s
ZCA9ICgxIDw8IDEpLAorICAgIGtDVEZvbnRUcmFpdE1vbm9TcGFjZSA9ICgxIDw8IDEwKSwKKyAg
ICBrQ1RGb250VHJhaXRDb2xvckdseXBocyA9ICgxIDw8IDEzKSwKKworICAgIGtDVEZvbnRJdGFs
aWNUcmFpdCA9IGtDVEZvbnRUcmFpdEl0YWxpYywKKyAgICBrQ1RGb250Qm9sZFRyYWl0ID0ga0NU
Rm9udFRyYWl0Qm9sZCwKKyAgICBrQ1RGb250TW9ub1NwYWNlVHJhaXQgPSBrQ1RGb250VHJhaXRN
b25vU3BhY2UsCisgICAga0NURm9udENvbG9yR2x5cGhzVHJhaXQgPSBrQ1RGb250VHJhaXRDb2xv
ckdseXBocywKK307CisKIHR5cGVkZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VGFibGVP
cHRpb25zKSB7CiAgICAga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zID0gMCwKICAgICBrQ1RG
b250VGFibGVPcHRpb25FeGNsdWRlU3ludGhldGljID0gKDEgPDwgMCkKIH07CisKK2VudW0gewor
ICAgIGtDVEZvbnRUYWJsZU1BVEggPSAnTUFUSCcsCisgICAga0NURm9udFRhYmxlT1MyICA9ICdP
Uy8yJywKKyAgICBrQ1RGb250VGFibGVWT1JHID0gJ1ZPUkcnLAorICAgIGtDVEZvbnRUYWJsZUhl
YWQgPSAnaGVhZCcsCisgICAga0NURm9udFRhYmxlVmhlYSA9ICd2aGVhJywKK307CisKK3R5cGVk
ZWYgQ0ZfT1BUSU9OUyh1aW50MzJfdCwgQ1RGb250VHJhbnNmb3JtT3B0aW9ucykgeworICAgIGtD
VEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmcgPSAoMSA8PCAwKSwKKyAgICBrQ1RGb250VHJhbnNm
b3JtQXBwbHlQb3NpdGlvbmluZyA9ICgxIDw8IDEpCit9OworCitlbnVtIHsKKyAgICBrTG93ZXJD
YXNlVHlwZSA9IDM3LAorICAgIGtVcHBlckNhc2VUeXBlID0gMzgsCit9OworCitlbnVtIHsKKyAg
ICBrRGVmYXVsdExvd2VyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrTG93ZXJDYXNlU21hbGxDYXBz
U2VsZWN0b3IgPSAxLAorICAgIGtMb3dlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IgPSAyCit9Owor
CitlbnVtIHsKKyAgICBrRGVmYXVsdFVwcGVyQ2FzZVNlbGVjdG9yID0gMCwKKyAgICBrVXBwZXJD
YXNlU21hbGxDYXBzU2VsZWN0b3IgPSAxLAorICAgIGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0
b3IgPSAyCit9OworCitlbnVtIHsKKyAgICBrUHJvcG9ydGlvbmFsVGV4dFNlbGVjdG9yID0gMCwK
KyAgICBrSGFsZldpZHRoVGV4dFNlbGVjdG9yID0gMiwKKyAgICBrVGhpcmRXaWR0aFRleHRTZWxl
Y3RvciA9IDMsCisgICAga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvciA9IDQsCit9OworCit0eXBl
ZGVmIENGX0VOVU0odWludDMyX3QsIENURm9udE9yaWVudGF0aW9uKQoreworICAgIGtDVEZvbnRP
cmllbnRhdGlvbkRlZmF1bHQgPSAwLAorICAgIGtDVEZvbnRPcmllbnRhdGlvbkhvcml6b250YWwg
PSAxLAorICAgIGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsID0gMiwKK307CiAjZW5kaWYKIAor
dW5zaWduZWQgQ1RGb250R2V0VW5pdHNQZXJFbShDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRH
ZXRDYXBIZWlnaHQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250R2V0TGVhZGluZyhDVEZvbnRS
ZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRBc2NlbnQoQ1RGb250UmVmKTsKK0NHRmxvYXQgQ1RGb250
R2V0RGVzY2VudChDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZvbnRHZXRYSGVpZ2h0KENURm9udFJl
Zik7CitDR0Zsb2F0IENURm9udEdldFVuZGVybGluZVBvc2l0aW9uKENURm9udFJlZik7CitDR0Zs
b2F0IENURm9udEdldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRSZWYpOworQ0dGbG9hdCBDVEZv
bnRHZXRTaXplKENURm9udFJlZik7CitDVEZvbnRTeW1ib2xpY1RyYWl0cyBDVEZvbnRHZXRTeW1i
b2xpY1RyYWl0cyhDVEZvbnRSZWYpOworQ0ZDaGFyYWN0ZXJTZXRSZWYgQ1RGb250Q29weUNoYXJh
Y3RlclNldChDVEZvbnRSZWYpOworQ0ZTdHJpbmdSZWYgQ1RGb250Q29weUZhbWlseU5hbWUoQ1RG
b250UmVmKTsKK0NGU3RyaW5nUmVmIENURm9udENvcHlGdWxsTmFtZShDVEZvbnRSZWYpOworQ1RG
b250UmVmIENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhDVEZvbnRSZWYsIENHRmxvYXQg
c2l6ZSwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qIG1hdHJpeCwgQ1RGb250RGVzY3JpcHRvclJl
ZiBhdHRyaWJ1dGVzKTsKIENURm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoTmFtZShDRlN0cmluZ1Jl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RGb250UmVmIENU
Rm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQoQ0dGb250UmVmLCBDR0Zsb2F0IHNpemUsIGNvbnN0
IENHQWZmaW5lVHJhbnNmb3JtKiwgQ1RGb250RGVzY3JpcHRvclJlZiBhdHRyaWJ1dGVzKTsKK0NU
Rm9udFJlZiBDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IoQ1RGb250RGVzY3JpcHRvclJl
ZiwgQ0dGbG9hdCBzaXplLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwogQ1RMaW5lUmVmIENU
TGluZUNyZWF0ZVdpdGhBdHRyaWJ1dGVkU3RyaW5nKENGQXR0cmlidXRlZFN0cmluZ1JlZik7CiB2
b2lkIENUTGluZURyYXcoQ1RMaW5lUmVmLCBDR0NvbnRleHRSZWYpOwogQ0ZEYXRhUmVmIENURm9u
dENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZvbnRUYWJsZU9wdGlvbnMp
OwogQ0ZBcnJheVJlZiBDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKENURm9udFJlZiwgQ1RGb250
VGFibGVPcHRpb25zKTsKIENHUGF0aFJlZiBDVEZvbnRDcmVhdGVQYXRoRm9yR2x5cGgoQ1RGb250
UmVmLCBDR0dseXBoLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSopOwordm9pZCBDVEZvbnRHZXRW
ZXJ0aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwg
Q0dTaXplIHRyYW5zbGF0aW9uc1tdLCBDRkluZGV4IGNvdW50KTsKK3ZvaWQgQ1RGb250RHJhd0ds
eXBocyhDVEZvbnRSZWYsIGNvbnN0IENHR2x5cGhbXSwgY29uc3QgQ0dQb2ludFtdLCBzaXplX3Qg
Y291bnQsIENHQ29udGV4dFJlZik7CitDR0FmZmluZVRyYW5zZm9ybSBDVEZvbnRHZXRNYXRyaXgo
Q1RGb250UmVmKTsKK0NGQXJyYXlSZWYgQ1RGb250Q29weUZlYXR1cmVzKENURm9udFJlZik7CitD
RlR5cGVSZWYgQ1RGb250Q29weUF0dHJpYnV0ZShDVEZvbnRSZWYsIENGU3RyaW5nUmVmKTsKK0NU
Rm9udERlc2NyaXB0b3JSZWYgQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKENURm9udFJlZik7Citi
b29sIENURm9udFRyYW5zZm9ybUdseXBocyhDVEZvbnRSZWYsIENHR2x5cGhbXSwgQ0dTaXplIGFk
dmFuY2VzW10sIENGSW5kZXggY291bnQsIENURm9udFRyYW5zZm9ybU9wdGlvbnMpOworQ0dSZWN0
IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMoQ1RGb250UmVmLCBDVEZvbnRPcmllbnRh
dGlvbiwgY29uc3QgQ0dHbHlwaFtdLCBDR1JlY3QgYm91bmRpbmdSZWN0c1tdLCBDRkluZGV4IGNv
dW50KTsKK2RvdWJsZSBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhDVEZvbnRSZWYsIENURm9u
dE9yaWVudGF0aW9uLCBjb25zdCBDR0dseXBoW10sIENHU2l6ZSBhZHZhbmNlc1tdLCBDRkluZGV4
IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhDVEZvbnRSZWYsIGNv
bnN0IFVuaUNoYXJbXSwgQ0dHbHlwaFtdLCBDRkluZGV4IGNvdW50KTsKK2Jvb2wgQ1RGb250R2V0
R2x5cGhzRm9yQ2hhcmFjdGVyUmFuZ2UoQ1RGb250UmVmLCBDR0dseXBoW10sIENGUmFuZ2UpOwor
Q0ZEYXRhUmVmIENURm9udENvcHlUYWJsZShDVEZvbnRSZWYsIENURm9udFRhYmxlVGFnLCBDVEZv
bnRUYWJsZU9wdGlvbnMpOworYm9vbCBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3Rl
cnMoQ1RGb250UmVmLCBjb25zdCBVbmlDaGFyW10sIENHR2x5cGhbXSwgQ0ZJbmRleCBjb3VudCk7
CisKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdpdGhBdHRyaWJ1
dGVzKENGRGljdGlvbmFyeVJlZik7Citib29sIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9u
dChDVEZvbnREZXNjcmlwdG9yUmVmKTsKK0NURm9udERlc2NyaXB0b3JSZWYgQ1RGb250RGVzY3Jp
cHRvckNyZWF0ZVdpdGhOYW1lQW5kU2l6ZShDRlN0cmluZ1JlZiwgQ0dGbG9hdCk7CiAKIFdURl9F
WFRFUk5fQ19FTkQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZDk0
ZmQ2OWNkN2VkZWNhM2M4NjA2MWFmMzIwYWJiY2FiMjhjODAzZi4uMmMzNzUxMTQ3N2ZmODI1YjFj
M2JhMmNiYmI1ZWY0MTNkNWNlYTcyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCkBAIC0xNTAsMTQgKzE1MCwxNyBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmNwcAogCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0Zv
bnRDYXNjYWRlQ29yZVRleHQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRD
b3JlVGV4dC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0
YUNvcmVUZXh0LmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlwaFBhZ2VDb3Jl
VGV4dC5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVuVHlwZUNH
LmNwcAogCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ0dXaW4uY3BwCiAKICAgICAgICAgcGxhdGZvcm0vd2lu
L0RyYWdJbWFnZUNHV2luLmNwcAogICAgICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXgg
YmIyMTdiYjNkNDZlOWMwZmU1NjkwMzMzOThmNWQ0MTQyYzQ2NzYwOS4uZDc3ZDgzZTc4MTYyMWU2
YmM0ZjM2MTVmY2Q2M2ViZGI1NTU3YTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAg
LTMwNiw3ICszMDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9GbG9hdFJlY3RDb2NvYS5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRDYWNoZUNvcmVUZXh0LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29j
b2EubW0KKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KQEAgLTMy
MSw2ICszMjEsMTEgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1dlYkdQVUxheWVyLm1tCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNv
cmVUZXh0LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCisKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jdi9JbWFnZVJvdGF0aW9uU2Vzc2lvblZULm1tCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY3YvUGl4ZWxCdWZmZXJDb25mb3JtZXJDVi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtMzM1LDcgKzM0MCw2IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9GbG9hdFBvaW50TWFjLm1t
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zsb2F0U2l6ZU1hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9tYWMvSW50UG9pbnRNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IDcyNjA0MTE5MjI0MDVhZmQwYmJiNTA1Mzc2ZmU5ZTRlYmI1NzY1YWUuLjllMDJjZDZmZmY4
MTBmMGUxZDAwOTRiZmYzZmI0MmZjOGVlZTk4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMzQ3LDcgKzM0Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0NvbG9yQ29jb2EubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zsb2F0UmVjdENvY29hLm1tCiBwbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9Gb250Q2FjaGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KLXBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bQorcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvRm9udERlc2NyaXB0aW9uQ29jb2EuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0zNjksNiArMzY5LDEwIEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYkNvcmVEZWNvbXByZXNzaW9uU2Vzc2lvbi5tbQogcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvV2ViR0xMYXllci5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
V2ViR1BVTGF5ZXIubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZpZGVvVHJhY2tQcml2YXRl
V2ViTS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
dC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jdC9HbHlw
aFBhZ2VDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2N2L0ltYWdlVHJhbnNmZXJTZXNz
aW9uVlQubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2N2L1BpeGVsQnVmZmVyQ29uZm9ybWVyQ1YuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jdi9UZXh0dXJlQ2FjaGVDVi5tbQpAQCAtNDAyLDcgKzQwNiw2
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRmxvYXRQb2ludE1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0Zsb2F0U2l6ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0ljb25NYWMubW0KIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFn
ZU1hYy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ludFBvaW50TWFjLm1tCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDBkNTk1
Mzk5ZGU1Y2EwNTE4ZjIxMDUyMmVmNDMwNTJiMWU4MTAyZi4uZDc2Y2M0ZmVkODYyNjliODM3ZTMz
ZjU0NTFkODBiMTU5N2NjMGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjY0MCw2ICs2NjQwLDExIEBACiAJCTFDNjYyNjBF
MUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzZCOTVERDIyQzg1OEE0MDBFNkYxNEYgLyogV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFyeUZ1
bmN0aW9uTWFwLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gV0hMU0xCdWlsZFN0YW5kYXJkTGlicmFy
eUZ1bmN0aW9uTWFwLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBQzI1
MEEyOTREMDBENkU5MjAgLyogRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRQbGF0Zm9ybURhdGFDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDNkZEOEFEMjUwQTJFNTMwMEQ2RTkyMCAvKiBHbHlwaFBhZ2VDb3JlVGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHbHlwaFBhZ2VDb3JlVGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEFFMjUwQTMxMTUwMEQ2RTkyMCAvKiBGb250Q2Fz
Y2FkZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYXNjYWRlQ29yZVRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzZGRDhBRjI1MEEzM0NGMDBENkU5
MjAgLyogRm9udENvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDb3JlVGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTky
MCAvKiBGb250Q29jb2EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENvY29hLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1
NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3Bl
Y3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMTY0LDcgKzEwMTY5LDYg
QEAKIAkJN0M0Qzk2REExQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0
UmVhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUmVhZGFi
bGVTdHJlYW1EZWZhdWx0UmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0M0Qzk2REIxQUQ0NDgzNTAwMzYzNTcyIC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUmVhZGFibGVTdHJlYW1CWU9CUmVh
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNEM5NkRCMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMDI0QUY4MDU4MDA1MDcx
MEYgLyogQ29sb3JDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbG9yQ29udmVyc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzUxNEUwMjI0QUY4MDU4MDA1MDcxMEYg
LyogQ29sb3JDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbG9yQ29udmVyc2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNTE2QUQyMUYzNTI1MjAwMDM0
QjZCRiAvKiBET01Qcm9taXNlUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NUHJvbWlzZVByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzEzNiw3ICsxMzE0MCw2IEBACiAJ
CUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBRkZDNzYwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjJBRkZDNzgwRDAwQTVDMTAwMzAwNzREIC8qIEZvbnRDYXNjYWRlQ29jb2Eu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRm9udENhc2NhZGVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBRkZDN0IwRDAwQTVDMTAw
MzAwNzREIC8qIEdseXBoUGFnZU1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR2x5cGhQYWdlTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBRkZDOEMwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRleHRCb3VuZGFyaWVzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkIxRjcxNDBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRl
ckV2ZW50c0hpdFJ1bGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkIxRjcxNTBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hpdFJ1bGVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2ludGVyRXZlbnRzSGl0UnVsZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MTMwLDYgKzE4MTMzLDE3IEBACiAJCQlu
YW1lID0gSW5zcGVjdG9yOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMUM2
RkQ4QUEyNTBBMjkyNDAwRDZFOTIwIC8qIGN0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkxQzZGRDhBRTI1MEEzMTE1MDBENkU5MjAgLyogRm9udENhc2Nh
ZGVDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUYyNTBBMzNDRjAwRDZFOTIwIC8qIEZvbnRD
b3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUMyNTBBMjk0RDAwRDZFOTIwIC8qIEZvbnRQbGF0
Zm9ybURhdGFDb3JlVGV4dC5jcHAgKi8sCisJCQkJMUM2RkQ4QUQyNTBBMkU1MzAwRDZFOTIwIC8q
IEdseXBoUGFnZUNvcmVUZXh0LmNwcCAqLywKKwkJCSk7CisJCQlwYXRoID0gY3Q7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkxQzgxQjk0RDBFOTczMkQ5MDAyNjZFMDcgLyog
aW5zcGVjdG9yICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTI1ODE3LDcgKzI1ODMxLDYgQEAKIAkJCQlCMjc1MzU0RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRTaXplTWFjLm1tICovLAogCQkJCUIyQUZGQzc1MEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcCAqLywKIAkJCQlCMkFGRkM3NjBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oICovLAotCQkJCUIyQUZGQzdCMEQwMEE1QzEwMDMwMDc0
RCAvKiBHbHlwaFBhZ2VNYWMuY3BwICovLAogCQkJCUIyNzUzNThEMEIwNTNBNjYwMDJDRTY0RiAv
KiBJY29uTWFjLm1tICovLAogCQkJCUIyNzUzNTRFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbWFnZU1h
Yy5tbSAqLywKIAkJCQlCMjc1MzU0RjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRNYWMubW0g
Ki8sCkBAIC0yNTg0NCw2ICsyNTg1Nyw3IEBACiAJCQkJQjUzMjBENjgxMjJBMjRFOTAwMkQxNDQw
IC8qIGNvY29hICovLAogCQkJCTJDRTExODk4MjRDMjQwMkMwMDM3NzBFOSAvKiBjb3JlaW1hZ2Ug
Ki8sCiAJCQkJOTMzMkFCM0IxNjUxNUQ3NzAwRDgyN0VDIC8qIGNwdSAqLywKKwkJCQkxQzZGRDhB
QTI1MEEyOTI0MDBENkU5MjAgLyogY3QgKi8sCiAJCQkJQ0Q5RDgyN0MxQzdCQjJFRDAwNkZGMDY2
IC8qIGN2ICovLAogCQkJCTBGRTVGQkM5MUMzREQ1MDYwMDA3QTJDQSAvKiBkaXNwbGF5bGlzdHMg
Ki8sCiAJCQkJQTc1RThCN0YwRTFERTJCMDAwN0YyNDgxIC8qIGZpbHRlcnMgKi8sCkBAIC0yNjIw
NCw3ICsyNjIxOCw3IEBACiAJCQkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNo
ZUNvcmVUZXh0LmNwcCAqLywKIAkJCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENh
Y2hlQ29yZVRleHQuaCAqLywKIAkJCQlCMkFGRkM3ODBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENh
c2NhZGVDb2NvYS5tbSAqLywKLQkJCQk3QzRFREQ3MzFBN0I2MDc4MDAxOThDNEQgLyogRm9udENv
Y29hLm1tICovLAorCQkJCTFDNkZEOEIwMjUwQTM1RjEwMEQ2RTkyMCAvKiBGb250Q29jb2EuY3Bw
ICovLAogCQkJCTFDMTJBQzJDMUVFNzc5OTUwMDc5RTBBMCAvKiBGb250RGVzY3JpcHRpb25Db2Nv
YS5jcHAgKi8sCiAJCQkJMUMxMkFDMjgxRUU3NzhBRTAwNzlFMEEwIC8qIEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uQ29yZVRleHQuY3BwICovLAogCQkJCTFDMTJBQzI5MUVFNzc4QUUwMDc5RTBBMCAv
KiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmggKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDZlZjk3ODkyN2MzMDI0OTEyN2RmNWNiZDRl
OWE1NWE4NzhkNDQ5YzMuLjY5NmZmMzlmMWExM2QxNDE4OTk0MzIxMWJmMWNjNmZlNTgyMDRiMjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC00NzQsNyAr
NDc0LDcgQEAgY29uc3QgRm9udCYgRm9udDo6YnJva2VuSWRlb2dyYXBoRm9udCgpIGNvbnN0CiAg
ICAgcmV0dXJuICpkZXJpdmVkRm9udERhdGEuYnJva2VuSWRlb2dyYXBoRm9udDsKIH0KIAotI2lm
ICFQTEFURk9STShDT0NPQSkKKyNpZiAhVVNFKENUKQogCiBib29sIEZvbnQ6OmlzUHJvYmFibHlP
bmx5VXNlZFRvUmVuZGVySWNvbnMoKSBjb25zdAogewpAQCAtNTExLDcgKzUxMSw3IEBAIFJlZlB0
cjxGb250PiBGb250OjpjcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBmbG9hCiAgICAgcmV0dXJuIHBsYXRmb3JtQ3JlYXRlU2NhbGVkRm9udChm
b250RGVzY3JpcHRpb24sIHNjYWxlRmFjdG9yKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkK
KyNpZiAhVVNFKENUKQogdm9pZCBGb250OjphcHBseVRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGJvb2wsIGJvb2wsIGNvbnN0IEF0b21TdHJpbmcmLCBTdHJpbmdW
aWV3LCBUZXh0RGlyZWN0aW9uKSBjb25zdAogewogfQpAQCAtNjMzLDI3ICs2MzMsNiBAQCB2b2lk
IEZvbnQ6OnJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCkKICAgICB9CiB9CiAKLSNpZiAh
UExBVEZPUk0oQ09DT0EpICYmICFVU0UoRlJFRVRZUEUpCi1ib29sIEZvbnQ6OnZhcmlhbnRDYXBz
U3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50
Q2FwcywgVUNoYXIzMikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2Fwcykgewot
ICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDoKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6UGV0aXRlOgotICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpBbGxTbWFsbDoKLSAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsUGV0aXRlOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQt
Y2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19
Ci0KLWJvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3Rl
ciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFyaWF0aW9uKSBjb25zdAotewotICAgIHJldHVybiB2YXJp
YXRpb24gPyBmYWxzZSA6IGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Ci19Ci0jZW5kaWYK
LQogYm9vbCBGb250OjpzdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QK
IHsKICAgICAvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBzdGF0aWNfY2FzdDxib29sPihnbHlw
aEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udC5oCmluZGV4IDdhYjUzMTdhYjEyNGVmMjZlNDEyOTY1M2Q2M2Y5ZjY3MzQ3NWEyMzcuLjM4
MmZlYjZjNTExODc2NzdiZGMyNmU3YWRkZjU4YTVmYTg5YWRjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTY0LDcgKzY0LDcgQEAgZW51bSBGb250VmFyaWFu
dCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNp
c01hcmtWYXIKIGVudW0gUGl0Y2ggeyBVbmtub3duUGl0Y2gsIEZpeGVkUGl0Y2gsIFZhcmlhYmxl
UGl0Y2ggfTsKIGVudW0gY2xhc3MgSXNGb3JQbGF0Zm9ybUZvbnQgOiB1aW50OF90IHsgTm8sIFll
cyB9OwogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgVVNFKENUKQogYm9vbCBmb250SGFzVGFi
bGUoQ1RGb250UmVmLCB1bnNpZ25lZCB0YWJsZVRhZyk7CiBib29sIGZvbnRIYXNFaXRoZXJUYWJs
ZShDVEZvbnRSZWYsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKTsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUu
Y3BwCmluZGV4IDMyNDMwYTZiNTU0NDk5MGNkYTdiNzYzYWZmOGUwMzYwY2ZjYjNlMzYuLjMxZGNm
OTI5ODdiNjc2NTg1NzAyNDgwZjEzN2I0MTg3ZDJhZjNlMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTU5NSw3ICs1OTUsNyBA
QCBib29sIEZvbnRDYXNjYWRlOjpzaG91bGRVc2VTbW9vdGhpbmcoKQogICAgIHJldHVybiBzaG91
bGRVc2VGb250U21vb3RoaW5nOwogfQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0Uo
Q1QpCiBib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZhaWxhYmxlKCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjQ1LDIxICsxNjQ1LDYgQEAgaW50IEZvbnRDYXNj
YWRlOjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
ZmxvYXQgeCwgYm8KICAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih4LCBp
bmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFVU0Uo
SEFSRkJVWlopCi0vLyBGSVhNRTogVW5pZnkgdGhpcyB3aXRoIHRoZSBtYWNPUyBhbmQgaU9TIGlt
cGxlbWVudGF0aW9uLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JDb21iaW5pbmdD
aGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkg
Y29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6ZV90IGJhc2VDaGFy
YWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VDaGFyYWN0ZXJM
ZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0gICAgR2x5cGhEYXRhIGJhc2VDaGFyYWN0
ZXJHbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3RlciwgZmFsc2Us
IE5vcm1hbFZhcmlhbnQpOwotCi0gICAgaWYgKCFiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmdseXBo
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250OwotfQotI2VuZGlmCi0KIHN0cnVjdCBHbHlwaEl0ZXJhdGlvblN0YXRlIHsKICAg
ICBGbG9hdFBvaW50IHN0YXJ0aW5nUG9pbnQ7CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuaAppbmRl
eCAzODczOTlmMTQ1NDNkNmEwMTQ0ZGRjOWQ4NTNjMTlmMTk0NDExZWU5Li5kZDc4OWQ0MjY5Njg5
MzUxYzZmZDc2YTFhMWZiMzIxYjAzNWZiNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmgKQEAgLTgxLDYgKzgxLDExIEBAIHN0cnVjdCBHbHlw
aE92ZXJmbG93IHsKICAgICBib29sIGNvbXB1dGVCb3VuZHMgeyBmYWxzZSB9OwogfTsKIAorI2lm
IFVTRShDVCkKK3ZvaWQgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBDR0dseXBo
KiwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpOwordm9pZCBmaWxsVmVj
dG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9z
aXRpb25zLCBDR0NvbnRleHRSZWYsIGNvbnN0IENHU2l6ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNv
dW50KTsKKyNlbmRpZgorCiBjbGFzcyBUZXh0TGF5b3V0RGVsZXRlciB7CiBwdWJsaWM6CiAgICAg
dm9pZCBvcGVyYXRvcigpKFRleHRMYXlvdXQqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggZDRiYzJh
NGYxMTFkMzgyMGY4MDlkMTgwZmU2NzMyNDkwOWNiZTdkNi4uOWVmMTIyY2JiZDRjNGY3YjFmYzAw
NzI5Njg2ZDNjZDU5MWE2YzZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTUyLDE1ICs1Miw2IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNC
b2xkLCBib29sIHN5bnRoZXRpCiB7CiB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JNKFdJTikK
LUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ0dGb250UmVmIGNnRm9udCwgZmxv
YXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdpZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRl
eHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdNb2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0
YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lk
dGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkKLXsKLSAgICBtX2NnRm9udCA9IGNnRm9udDsK
LSAgICBBU1NFUlQobV9jZ0ZvbnQpOwotfQotI2VuZGlmCi0KICNpZiAhVVNFKEZSRUVUWVBFKQog
Rm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRhOjpjbG9uZVdpdGhPcmllbnRhdGlvbihj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBzb3VyY2UsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikKIHsKQEAgLTg0LDcgKzc1LDcgQEAgRm9udFBsYXRmb3JtRGF0YSBGb250UGxhdGZvcm1EYXRh
OjpjbG9uZVdpdGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNvdXJjZSwKIH0KICNlbmRp
ZgogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQorI2lmICFVU0UoQ1QpCiAKIFN0cmluZyBGb250UGxh
dGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA0NmM5YWM3NzhhZDlh
OTY0NGIxMzFjNTM2ZTIwYmIwOGE0YzA0ZGFjLi41Njk5NGE4OTI0ZWJkMWYyZDI1ZDNiZjI3ZTlk
ZDcyYWMwNmY0ZmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KQEAgLTQ5LDcgKzQ5LDcg
QEAKIE9CSkNfQ0xBU1MgTlNGb250OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNp
ZiBVU0UoQ1QpCiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBfX0NURm9udCogQ1RGb250UmVmOwogI2Vu
ZGlmCiAKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgRm9udFBsYXRmb3JtRGF0YShm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgRm9u
dE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJp
YW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxhcldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9
IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJlbmRlcmluZyk7CiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgV0VCQ09SRV9FWFBPUlQgRm9udFBsYXRmb3JtRGF0YShD
VEZvbnRSZWYsIGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCA9IGZhbHNlLCBib29sIHN5
bnRoZXRpY09ibGlxdWUgPSBmYWxzZSwgRm9udE9yaWVudGF0aW9uID0gRm9udE9yaWVudGF0aW9u
OjpIb3Jpem9udGFsLCBGb250V2lkdGhWYXJpYW50ID0gRm9udFdpZHRoVmFyaWFudDo6UmVndWxh
cldpZHRoLCBUZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlOjpBdXRvVGV4dFJl
bmRlcmluZyk7CiAjZW5kaWYKIApAQCAtOTAsMTYgKzkwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdpdGhTeW50aGV0aWNPYmxpcXVlKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGEmLCBib29sKTsKICAgICBzdGF0aWMgRm9udFBsYXRmb3JtRGF0YSBjbG9uZVdp
dGhTaXplKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmLCBmbG9hdCk7CiAKLSNpZiBVU0UoQ0cpICYm
IFBMQVRGT1JNKFdJTikKLSAgICBGb250UGxhdGZvcm1EYXRhKENHRm9udFJlZiwgZmxvYXQgc2l6
ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRh
dGlvbiwgRm9udFdpZHRoVmFyaWFudCwgVGV4dFJlbmRlcmluZ01vZGUpOwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShXSU4pCiAgICAgRm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+LCBm
bG9hdCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljT2JsaXF1ZSwgYm9v
bCB1c2VHREkpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pICYmIFVTRShDRykKLSAgICBG
b250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4sIENHRm9udFJlZiwgZmxvYXQgc2l6ZSwg
Ym9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsK
KyNpZiBQTEFURk9STShXSU4pICYmIFVTRShDVCkKKyAgICBGb250UGxhdGZvcm1EYXRhKEdESU9i
amVjdDxIRk9OVD4sIENURm9udFJlZiwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIGJvb2wgdXNlR0RJKTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oV0lOKSAmJiBVU0UoRElSRUNUMkQpCkBAIC0xMTUsMTEgKzExMSwxMSBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBIRk9OVCBoZm9udCgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udCA/IG1fZm9udC0+Z2V0KCkgOiAwOyB9CisgICAgSEZPTlQgaGZvbnQoKSBjb25z
dCB7IHJldHVybiBtX2hGb250ID8gbV9oRm9udC0+Z2V0KCkgOiAwOyB9CiAgICAgYm9vbCB1c2VH
REkoKSBjb25zdCB7IHJldHVybiBtX3VzZUdESTsgfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShD
T0NPQSkKKyNpZiBVU0UoQ1QpCiAgICAgQ1RGb250UmVmIGZvbnQoKSBjb25zdCB7IHJldHVybiBt
X2ZvbnQuZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBDVEZvbnRSZWYgcmVnaXN0ZXJlZEZv
bnQoKSBjb25zdDsgLy8gUmV0dXJucyBudWxscHRyIGlmZiB0aGUgZm9udCBpcyBub3QgcmVnaXN0
ZXJlZCwgc3VjaCBhcyB3ZWIgZm9udHMgKG90aGVyd2lzZSByZXR1cm5zIGZvbnQoKSkuCiAKQEAg
LTEzNiwxMCArMTMyLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNWYXJpYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNWYXJpYXRpb25zOyB9CiAKLSNpZiBVU0UoQ0cpICYmIFBMQVRGT1JN
KFdJTikKLSAgICBDR0ZvbnRSZWYgY2dGb250KCkgY29uc3QgeyByZXR1cm4gbV9jZ0ZvbnQuZ2V0
KCk7IH0KLSNlbmRpZgotCiAjaWYgVVNFKERJUkVDVDJEKQogICAgIElEV3JpdGVGb250KiBkd0Zv
bnQoKSBjb25zdCB7IHJldHVybiBtX2R3Rm9udC5nZXQoKTsgfQogICAgIElEV3JpdGVGb250RmFj
ZSogZHdGb250RmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZHdGb250RmFjZS5nZXQoKTsgfQpAQCAt
MjIyLDE2ICsyMTQsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkU2NhbGVkRm9udChjYWly
b19mb250X2ZhY2VfdCopOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2Ygb25lIG9mIHRoZXNlLiBUaGVzZSB0d28gZm9u
dHMgYXJlIHN1YnRseSBkaWZmZXJlbnQsIGFuZCBpdCBpcyBub3Qgb2J2aW91cyB3aGljaCBvbmUg
dG8gdXNlIHdoZXJlLgogICAgIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fZm9udDsKICAgICBtdXRh
YmxlIFJldGFpblB0cjxDVEZvbnRSZWY+IG1fY3RGb250OwotI2VsaWYgUExBVEZPUk0oV0lOKQot
ICAgIFJlZlB0cjxTaGFyZWRHRElPYmplY3Q8SEZPTlQ+PiBtX2ZvbnQ7CiAjZW5kaWYKIAotI2lm
IFVTRShDRykgJiYgUExBVEZPUk0oV0lOKQotICAgIFJldGFpblB0cjxDR0ZvbnRSZWY+IG1fY2dG
b250OworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBSZWZQdHI8U2hhcmVkR0RJT2JqZWN0PEhGT05U
Pj4gbV9oRm9udDsKICNlbmRpZgogCiAjaWYgVVNFKERJUkVDVDJEKQpAQCAtMjc2LDcgKzI2Niw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBVU0Uo
Q1QpCiBib29sIGlzU3lzdGVtRm9udChDVEZvbnRSZWYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCmluZGV4IDBhMjNkNmE1MTRmMGMxZTQyZWE0M2Q3NWU4MWYxN2YyMzE2NmRmNTguLmZk
YzY4OTI3ZmY5OTFlMmUyMWRiYzdhMmU2ZDdiYjFmOGJhM2JkNDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQpAQCAtMjMsMTkgKzIzLDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKIAotI2ltcG9ydCAiQ29tcGxleFRleHRDb250cm9sbGVyLmgiCi0jaW1wb3J0
ICJEYXNoQXJyYXkuaCIKLSNpbXBvcnQgIkZvbnQuaCIKLSNpbXBvcnQgIkdseXBoQnVmZmVyLmgi
CiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbXBvcnQgIkxheW91dFJlY3QuaCIKLSNp
bXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
Ci0jaW1wb3J0IDxwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg+Ci0jaWYgVVNFKEFQUEtJVCkK
LSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLSNlbmRpZgotI2ltcG9ydCA8d3RmL01hdGhFeHRy
YXMuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDxwYWwvaW9zL1VJS2l0
U29mdExpbmsuaD4KQEAgLTQ5LDI0ICszOCw2IEBAIFNPRlRfTElOS19DTEFTUyhDb3JlVUksIENV
SVN0eWxlRWZmZWN0Q29uZmlndXJhdGlvbikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBD
b25mdXNpbmdseSwgZXZlbiB3aGVuIENHRm9udFJlbmRlcmluZ0dldEZvbnRTbW9vdGhpbmdEaXNh
YmxlZCgpIHJldHVybnMgdHJ1ZSwgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoKSBzdGls
bCBpbXBhY3RzIHRleHQKLS8vIHJlbmRlcmluZywgd2hpY2ggaXMgd2h5IHRoaXMgZnVuY3Rpb24g
dXNlcyB0aGUgInN1YnBpeGVsIGFudGlhbGlhc2luZyIgcmF0aGVyIHRoYW4gInNtb290aGluZyIg
dGVybWlub2xvZ3kuCi1ib29sIEZvbnRDYXNjYWRlOjppc1N1YnBpeGVsQW50aWFsaWFzaW5nQXZh
aWxhYmxlKCkKLXsKLSNpZiBIQVZFKENHX0ZPTlRfUkVOREVSSU5HX0dFVF9GT05UX1NNT09USElO
R19ESVNBQkxFRCkKLSAgICBzdGF0aWMgYm9vbCBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQ7
Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbJl0gKCkgewotICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQg
PSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7Ci0gICAgfSk7Ci0g
ICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKLSNlbGlmIFBMQVRGT1JNKE1B
QykKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KIGJvb2wgRm9udENhc2NhZGU6OmNhblJldHVybkZhbGxiYWNrRm9udHNGb3JDb21wbGV4VGV4
dCgpCiB7CiAgICAgcmV0dXJuIHRydWU7CkBAIC03NywyOCArNDgsNyBAQCBib29sIEZvbnRDYXNj
YWRlOjpjYW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsVmVjdG9yV2l0aEhvcml6b250YWxH
bHlwaFBvc2l0aW9ucyhWZWN0b3I8Q0dQb2ludCwgMjU2PiYgcG9zaXRpb25zLCBDR0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWduZWQgY291bnQpCi17Ci0g
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dD
b250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7Ci0gICAgcG9zaXRpb25zWzBdID0gQ0dQb2lu
dFplcm87Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgQ0dTaXplIGFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShhZHZhbmNlc1tp
IC0gMV0sIG1hdHJpeCk7Ci0gICAgICAgIHBvc2l0aW9uc1tpXS54ID0gcG9zaXRpb25zW2kgLSAx
XS54ICsgYWR2YW5jZS53aWR0aDsKLSAgICAgICAgcG9zaXRpb25zW2ldLnkgPSBwb3NpdGlvbnNb
aSAtIDFdLnkgKyBhZHZhbmNlLmhlaWdodDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBzaG91bGRVc2VMZXR0ZXJwcmVzc0VmZmVjdChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgRU5BQkxFKExFVFRFUlBSRVNTKQotICAgIHJldHVybiBjb250ZXh0LnRleHRE
cmF3aW5nTW9kZSgpLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6TGV0dGVycHJlc3MpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlm
Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dMZXR0ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQm
IGNvcmVDb250ZXh0LCBjb25zdCBDR0dseXBoKiBnbHlwaHMsIGNvbnN0IENHU2l6ZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIGNvdW50KQordm9pZCBzaG93TGV0dGVycHJlc3NlZEdseXBoc1dpdGhBZHZh
bmNlcyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3ND
b250ZXh0JiBjb3JlQ29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBDR1NpemUq
IGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKIHsKICNpZiBFTkFCTEUoTEVUVEVSUFJFU1MpCiAg
ICAgaWYgKCFjb3VudCkKQEAgLTE1MCwyMjcgKzEwMCw0IEBAIHN0YXRpYyB2b2lkIHNob3dMZXR0
ZXJwcmVzc2VkR2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25z
dCBGCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRm9udCYgZm9udCwgQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIGNvbnN0IENHR2x5cGgqIGdseXBocywgY29uc3QgQ0dTaXplKiBhZHZhbmNlcywgdW5zaWdu
ZWQgY291bnQpCi17Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dD
b250ZXh0U2V0VGV4dFBvc2l0aW9uKGNvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKLQot
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7Ci0gICAgVmVjdG9yPENHUG9pbnQsIDI1Nj4gcG9zaXRpb25zKGNvdW50KTsKLSAgICBp
ZiAocGxhdGZvcm1EYXRhLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNh
bCkgewotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSByb3RhdGVMZWZ0VHJhbnNmb3JtID0gQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlKDAsIC0xLCAxLCAwLCAwLCAwKTsKLSAgICAgICAgQ0dBZmZpbmVU
cmFuc2Zvcm0gdGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgoY29udGV4dCk7Ci0g
ICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJ1bk1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KHRleHRNYXRyaXgsIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOwotICAgICAgICBTY29wZWRUZXh0
TWF0cml4IHNhdmVkTWF0cml4KHJ1bk1hdHJpeCwgY29udGV4dCk7Ci0KLSAgICAgICAgVmVjdG9y
PENHU2l6ZSwgMjU2PiB0cmFuc2xhdGlvbnMoY291bnQpOwotICAgICAgICBDVEZvbnRHZXRWZXJ0
aWNhbFRyYW5zbGF0aW9uc0ZvckdseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywg
dHJhbnNsYXRpb25zLmRhdGEoKSwgY291bnQpOwotCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRy
aXgoY29udGV4dCkpOwotCi0gICAgICAgIENHUG9pbnQgcG9zaXRpb24gPSBGbG9hdFBvaW50KHBv
aW50LngoKSwgcG9pbnQueSgpICsgZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KElkZW9n
cmFwaGljQmFzZWxpbmUpIC0gZm9udC5mb250TWV0cmljcygpLmZsb2F0QXNjZW50KCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAg
Q0dTaXplIHRyYW5zbGF0aW9uID0gQ0dTaXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0odHJhbnNsYXRp
b25zW2ldLCByb3RhdGVMZWZ0VHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHBvc2l0aW9uc1tpXSA9
IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZShwb3NpdGlvbi54IC0gdHJh
bnNsYXRpb24ud2lkdGgsIHBvc2l0aW9uLnkgKyB0cmFuc2xhdGlvbi5oZWlnaHQpLCB0cmFuc2Zv
cm0pOwotICAgICAgICAgICAgcG9zaXRpb24ueCArPSBhZHZhbmNlc1tpXS53aWR0aDsKLSAgICAg
ICAgICAgIHBvc2l0aW9uLnkgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0OwotICAgICAgICB9Ci0gICAg
ICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaHMsIHBvc2l0
aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmaWxs
VmVjdG9yV2l0aEhvcml6b250YWxHbHlwaFBvc2l0aW9ucyhwb3NpdGlvbnMsIGNvbnRleHQsIGFk
dmFuY2VzLCBjb3VudCk7Ci0gICAgICAgIENURm9udERyYXdHbHlwaHMocGxhdGZvcm1EYXRhLmN0
Rm9udCgpLCBnbHlwaHMsIHBvc2l0aW9ucy5kYXRhKCksIGNvdW50LCBjb250ZXh0KTsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldENHRm9udFJlbmRlcmluZ01vZGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotewotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29u
dGV4dCwgdHJ1ZSk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0g
Q0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9vbCBpc1RyYW5zbGF0aW9uT3JJbnRl
Z3JhbFNjYWxlID0gV1RGOjppc0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uYSkgJiYgV1RGOjpp
c0ludGVncmFsKGNvbnRleHRUcmFuc2Zvcm0uZCkgJiYgY29udGV4dFRyYW5zZm9ybS5iID09IDAu
ZiAmJiBjb250ZXh0VHJhbnNmb3JtLmMgPT0gMC5mOwotICAgIGJvb2wgaXNSb3RhdGVkID0gKChj
b250ZXh0VHJhbnNmb3JtLmIgfHwgY29udGV4dFRyYW5zZm9ybS5jKSAmJiAoY29udGV4dFRyYW5z
Zm9ybS5hIHx8IGNvbnRleHRUcmFuc2Zvcm0uZCkpOwotICAgIGJvb2wgZG9TdWJwaXhlbFF1YW50
aXphdGlvbiA9IGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgfHwgKCFpc1JvdGF0ZWQgJiYg
Y29udGV4dC5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSk7Ci0KLSAgICBDR0NvbnRleHRT
ZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoY2dDb250ZXh0LCBkb1N1YnBpeGVs
UXVhbnRpemF0aW9uKTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKLXsK
LSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LnBsYXRmb3Jt
RGF0YSgpOwotICAgIGlmICghcGxhdGZvcm1EYXRhLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICBib29sIHNob3VsZEFudGlhbGlhcyA9IHRydWU7Ci0gICAgYm9vbCBzaG91bGRTbW9v
dGhGb250cyA9IHRydWU7Ci0gICAgCi0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygp
KQotICAgICAgICBzbW9vdGhpbmdNb2RlID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5n
OwotCi0gICAgc3dpdGNoIChzbW9vdGhpbmdNb2RlKSB7Ci0gICAgY2FzZSBGb250U21vb3RoaW5n
TW9kZTo6QW50aWFsaWFzZWQ6Ci0gICAgICAgIHNob3VsZFNtb290aEZvbnRzID0gZmFsc2U7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6
Ci0gICAgY2FzZSBGb250U21vb3RoaW5nTW9kZTo6U3VicGl4ZWxBbnRpYWxpYXNlZDoKLSAgICAg
ICAgc2hvdWxkQW50aWFsaWFzID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBGb250
U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6Ci0gICAgICAgIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlOwotICAgICAgICBzaG91bGRTbW9vdGhGb250cyA9IGZhbHNlOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBpZiAoIXNob3VsZFVzZVNtb290aGluZygpKQotICAgICAgICBzaG91bGRT
bW9vdGhGb250cyA9IGZhbHNlOwotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9v
bCBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBDR0NvbnRleHRHZXRTaG91bGRTbW9v
dGhGb250cyhjZ0NvbnRleHQpOwotICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5h
bFNob3VsZFVzZUZvbnRTbW9vdGhpbmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290
aEZvbnRzKGNnQ29udGV4dCwgc2hvdWxkU21vb3RoRm9udHMpOwotI2VuZGlmCi0KLSAgICBib29s
IG9yaWdpbmFsU2hvdWxkQW50aWFsaWFzID0gQ0dDb250ZXh0R2V0U2hvdWxkQW50aWFsaWFzKGNn
Q29udGV4dCk7Ci0gICAgaWYgKHNob3VsZEFudGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlh
bGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgc2hv
dWxkQW50aWFsaWFzKTsKLQotICAgIGJvb2wgdXNlTGV0dGVycHJlc3NFZmZlY3QgPSBzaG91bGRV
c2VMZXR0ZXJwcmVzc0VmZmVjdChjb250ZXh0KTsKLSAgICBGbG9hdFBvaW50IHBvaW50ID0gYW5j
aG9yUG9pbnQ7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybUlkZW50aXR5OwotICAgIGlmICghcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkp
Ci0gICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9udCgpKTsK
LSAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICBtYXRyaXguZCA9IC1tYXRyaXguZDsKLSAg
ICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgewotICAgICAgICBzdGF0aWMg
ZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICogcGlGbG9h
dCAvIDE4MCk7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBGb250
T3JpZW50YXRpb246OlZlcnRpY2FsKSB7Ci0gICAgICAgICAgICBpZiAoZm9udC5pc1RleHRPcmll
bnRhdGlvbkZhbGxiYWNrKCkpCi0gICAgICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFu
c2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1ZVNrZXcs
IDAsIDEsIDAsIDApKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgx
LCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNm
b3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDApKTsKLSAgICB9Ci0gICAgU2NvcGVk
VGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4dCk7Ci0KLSAgICBzZXRDR0ZvbnRS
ZW5kZXJpbmdNb2RlKGNvbnRleHQpOwotICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4
dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0Owot
ICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0gICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgY29udGV4
dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7Ci0KLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7Ci0gICAgZmxv
YXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotICAg
IGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0Q1RNLmlzSWRlbnRpdHlPclRyYW5z
bGF0aW9uT3JGbGlwcGVkKCkpIHsKLSAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxVbml0U2l6
ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXplKEZsb2F0U2l6ZSgxLCAwKSk7Ci0g
ICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMgPSBzcXJ0Ziho
b3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICogaG9yaXpvbnRhbFVuaXRT
aXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250YWxVbml0U2l6ZUluRGV2aWNlUGl4
ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVpZ2h0KCkp
OwotICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscykgewotICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQgZG93biBjb250ZXh0IHdvbid0IGJs
b3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuIAotICAgICAgICAgICAgc3ludGhldGlj
Qm9sZE9mZnNldCA9IHN0ZDo6bWluKHN5bnRoZXRpY0JvbGRPZmZzZXQsIHN5bnRoZXRpY0JvbGRP
ZmZzZXQgLyBob3Jpem9udGFsVW5pdExlbmd0aEluRGV2aWNlUGl4ZWxzKTsKLSAgICAgICAgfQot
ICAgIH07Ci0KLSAgICBib29sIGhhc1NpbXBsZVNoYWRvdyA9IGNvbnRleHQudGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dERyYXdpbmdNb2RlOjpGaWxsICYmIHNoYWRvd0NvbG9yLmlzVmFsaWQoKSAm
JiAhc2hhZG93Qmx1ciAmJiAhcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBGb250KCkgJiYgKCFj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwgY29udGV4dENUTS5pc0lkZW50aXR5
T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKSAmJiAhY29udGV4dC5pc0luVHJhbnNwYXJlbmN5TGF5
ZXIoKTsKLSAgICBpZiAoaGFzU2ltcGxlU2hhZG93KSB7Ci0gICAgICAgIC8vIFBhaW50IHNpbXBs
ZSBzaGFkb3dzIG91cnNlbHZlcyBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ0cgc2hhZG93cywgdG8g
YXZvaWQgbG9zaW5nIHN1YnBpeGVsIGFudGlhbGlhc2luZy4KLSAgICAgICAgY29udGV4dC5jbGVh
clNoYWRvdygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBjb250ZXh0LmZpbGxDb2xvcigp
OwotICAgICAgICBDb2xvciBzaGFkb3dGaWxsQ29sb3IgPSBzaGFkb3dDb2xvci5jb2xvcldpdGhB
bHBoYU11bHRpcGxpZWRCeShmaWxsQ29sb3IuYWxwaGFBc0Zsb2F0KCkpOwotICAgICAgICBjb250
ZXh0LnNldEZpbGxDb2xvcihzaGFkb3dGaWxsQ29sb3IpOwotICAgICAgICBmbG9hdCBzaGFkb3dU
ZXh0WCA9IHBvaW50LngoKSArIHNoYWRvd09mZnNldC53aWR0aCgpOwotICAgICAgICAvLyBJZiBz
aGFkb3dzIGFyZSBpZ25vcmluZyB0cmFuc2Zvcm1zLCB0aGVuIHdlIGhhdmVuJ3QgYXBwbGllZCB0
aGUgWSBjb29yZGluYXRlIGZsaXAgeWV0LCBzbyBkb3duIGlzIG5lZ2F0aXZlLgotICAgICAgICBm
bG9hdCBzaGFkb3dUZXh0WSA9IHBvaW50LnkoKSArIHNoYWRvd09mZnNldC5oZWlnaHQoKSAqIChj
b250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6IDEpOwotICAgICAgICBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKEZsb2F0UG9pbnQoc2hhZG93VGV4dFgsIHNoYWRvd1RleHRZKSwg
Zm9udCwgY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFk
dmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwotICAgICAgICBpZiAoc3ludGhldGljQm9sZE9mZnNl
dCkKLSAgICAgICAgICAgIHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dU
ZXh0WCArIHN5bnRoZXRpY0JvbGRPZmZzZXQsIHNoYWRvd1RleHRZKSwgZm9udCwgY2dDb250ZXh0
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBu
dW1HbHlwaHMpOwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihmaWxsQ29sb3IpOwotICAg
IH0KLQotICAgIGlmICh1c2VMZXR0ZXJwcmVzc0VmZmVjdCkKLSAgICAgICAgc2hvd0xldHRlcnBy
ZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMocG9pbnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVy
LmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0g
ICAgZWxzZQotICAgICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0Nv
bnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJv
bSksIG51bUdseXBocyk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIHNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xk
T2Zmc2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhm
cm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7Ci0KLSAgICBpZiAo
aGFzU2ltcGxlU2hhZG93KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhp
bmcpCi0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgb3Jp
Z2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKLSNlbmRpZgotCi0gICAgaWYgKHNob3VsZEFu
dGlhbGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKLSAgICAgICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpOwotfQot
Ci1ib29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0Ci17Ci0g
ICAgY29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOwotICAgIHJldHVybiBpc1N5
c3RlbUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOwotfQotCi0vLyBGSVhN
RTogVXNlIHRoaXMgb24gYWxsIHBvcnRzLgotY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRG
b3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6
ZV90IGxlbmd0aCkgY29uc3QKLXsKLSAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7Ci0gICAgc2l6
ZV90IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOwotICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJh
c2VDaGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7Ci0KLSAgICBHbHlwaERh
dGEgYmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihiYXNlQ2hh
cmFjdGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7Ci0KLSAgICBpZiAoIWJhc2VDaGFyYWN0ZXJH
bHlwaERhdGEuZ2x5cGgpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGxlbmd0
aCA9PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQotICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3Rlckds
eXBoRGF0YS5mb250OwotCi0gICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkp
LmZvbnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0gICAgICAgIGlmICghZm9udCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlm
IChiYXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBm
b250LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
I2VuZGlmCi0gICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09
IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKLSAgICAgICAgICAgIGlmIChpc0NKS0lkZW9n
cmFwaE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygp
KQotICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgpOwot
ICAgICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRh
dGlvbigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0T3Jp
ZW50YXRpb25Gb250KCk7Ci0gICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdodEdseXBo
ID0gdmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7Ci0g
ICAgICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5
cGhEYXRhLmdseXBoKQotICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZlcnRpY2FsUmlnaHRG
b250OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb25zdCBGb250JiB1
cHJpZ2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKLSAgICAgICAgICAg
ICAgICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3Rlcihi
YXNlQ2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VD
aGFyYWN0ZXJHbHlwaERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdXBy
aWdodEZvbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZm9udCA9
PSBiYXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCi0gICAgICAgICAgICB0cmllZEJhc2VDaGFy
YWN0ZXJGb250ID0gdHJ1ZTsKLQotICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVy
biBmb250OwotICAgIH0KLQotICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNl
Q2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5j
YW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQot
ICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OwotCi0gICAgcmV0dXJu
IEZvbnQ6OnN5c3RlbUZhbGxiYWNrKCk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhMmEz
OWNhMWIxOTA5ZTk5ZDBiMGIzZWFmM2IwYWU2Mjg3MWE3NzgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EuY3BwCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMTAsIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJGb250LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250OjpwbGF0Zm9ybURl
c3Ryb3koKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU4OWJlMWQ0ZjM5NTIzMjUzMzA1NjQ1MGY3YmM4MmE0OTMyMTNh
MzMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCisrKyAvZGV2L251
bGwKQEAgLTEsNzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIw
MTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgi
Ci0jaW1wb3J0ICJGb250LmgiCi0KLSNpbXBvcnQgIkNvbG9yLmgiCi0jaW1wb3J0ICJGbG9hdFJl
Y3QuaCIKLSNpbXBvcnQgIkZvbnRDYWNoZS5oIgotI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKLSNp
bXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgotI2ltcG9ydCAiTG9jYWxlQ29jb2EuaCIKLSNpbXBv
cnQgIk9wZW5UeXBlQ0cuaCIKLSNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCA8Q29y
ZVRleHQvQ29yZVRleHQuaD4KLSNpbXBvcnQgPGZsb2F0Lmg+Ci0jaW1wb3J0IDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5o
PgotI2ltcG9ydCA8dW5pY29kZS91Y2hhci5oPgotI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LQotI2lmIFVTRShBUFBLSVQpCi0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+Ci0jZW5kaWYKLQot
Ci0jaWYgVVNFKEFQUEtJVCkKLUBpbnRlcmZhY2UgTlNGb250IChXZWJBcHBLaXRTZWNyZXRBUEkp
Ci0tIChCT09MKV9pc0Zha2VGaXhlZFBpdGNoOwotQGVuZAotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBib29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoQ0ZT
dHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikKLXsKLSAgICByZXR1cm4gYSAmJiBDRlN0cmluZ0Nv
bXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJbnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFs
VG87Ci19Ci0KLXN0YXRpYyBib29sIGZvbnRIYXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgZm9u
dCkKLXsKLSAgICByZXR1cm4gZm9udEhhc0VpdGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJsZVZo
ZWEsIGtDVEZvbnRUYWJsZVZPUkcpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLWJv
b2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNlZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFt
aWx5TmFtZSkKLXsKLSAgICBpZiAoIWZvbnRGYW1pbHlOYW1lKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBUaW1lcyBOZXcgUm9tYW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9ybWFu
dCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3Byb2JsZW0vMjEzMzMzMjY+Ci0gICAgLy8gRklYTUUg
PHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiByZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBh
Ym92ZSBidWcgaXMgZml4ZWQuCi0gICAgcmV0dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRp
bWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8p
Ci0gICAgICAgIHx8IChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlO
YW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBr
TGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1ZjsKLQotc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRq
dXN0bWVudChDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZh
bWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGZvbnQpKTsKLQotICAgIGlm
ICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21wYXJl
KGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJUaW1lcyIpKQotICAgICAgICB8fCBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKLSAgICAg
ICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiLkhl
bHZldGljYSBOZXVlVUkiKSk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBib29sIG5lZWRzQXNjZW50
QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1pbHlOYW1lKQotewotICAgIHJldHVybiBmYW1pbHlO
YW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1lcyIp
KQotICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJI
ZWx2ZXRpY2EiKSkKLSAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1l
LCBDRlNUUigiQ291cmllciIpKSk7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBpc0FoZW1G
b250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUpCi17Ci0gICAgcmV0dXJuIGZhbWlseU5hbWUgJiYg
Y2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKLX0KLQot
Ym9vbCBmb250SGFzVGFibGUoQ1RGb250UmVmIGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcpCi17
Ci0gICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9wdENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMo
Y3RGb250LCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAoIXRhYmxlVGFn
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJh
eUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7Ci0gICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsg
aW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNf
Y2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlH
ZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdldCgpLCBpbmRleCkpKTsKLSAgICAgICAgaWYgKHRh
ZyA9PSB0YWJsZVRhZykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgZm9udEhhc0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZvbnQs
IHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWduZWQgdGFibGVUYWcyKQotewotICAgIGF1dG8gdGFi
bGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9u
dFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKCF0YWJsZVRhZ3MpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBDRkluZGV4IG51bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJs
ZVRhZ3MuZ2V0KCkpOwotICAgIGZvciAoQ0ZJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFi
bGVzOyArK2luZGV4KSB7Ci0gICAgICAgIGF1dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFi
bGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7Ci0gICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcx
IHx8IHRhZyA9PSB0YWJsZVRhZzIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEZvbnQ6OnBsYXRmb3JtSW5pdCgpCi17Ci0jaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRm
b3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBjZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAy
NC4wZikgOiAwLmY7Ci0jZWxzZQotICAgIG1fc3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZv
cm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEuMGYgOiAwLmY7Ci0jZW5kaWYKLQotICAgIHVuc2ln
bmVkIHVuaXRzUGVyRW0gPSBDVEZvbnRHZXRVbml0c1BlckVtKG1fcGxhdGZvcm1EYXRhLmZvbnQo
KSk7Ci0gICAgZmxvYXQgcG9pbnRTaXplID0gbV9wbGF0Zm9ybURhdGEuc2l6ZSgpOwotICAgIENH
RmxvYXQgY2FwSGVpZ2h0ID0gcG9pbnRTaXplID8gQ1RGb250R2V0Q2FwSGVpZ2h0KG1fcGxhdGZv
cm1EYXRhLmZvbnQoKSkgOiAwOwotICAgIENHRmxvYXQgbGluZUdhcCA9IHBvaW50U2l6ZSA/IENU
Rm9udEdldExlYWRpbmcobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7Ci0gICAgQ0dGbG9hdCBh
c2NlbnQgPSBwb2ludFNpemUgPyBDVEZvbnRHZXRBc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgp
KSA6IDA7Ci0gICAgQ0dGbG9hdCBkZXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0RGVzY2Vu
dChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKLQotICAgIC8vIFRoZSBPcGVuIEZvbnQgRm9y
bWF0IGRlc2NyaWJlcyB0aGUgT1MvMiBVU0VfVFlQT19NRVRSSUNTIGZsYWcgYXMgZm9sbG93czoK
LSAgICAvLyAiSWYgc2V0LCBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byB1c2UgT1MvMi5z
VHlwb0FzY2VuZGVyIC0gT1MvMi5zVHlwb0Rlc2NlbmRlcisgT1MvMi5zVHlwb0xpbmVHYXAgYXMg
YSB2YWx1ZSBmb3IgZGVmYXVsdCBsaW5lIHNwYWNpbmcgZm9yIHRoaXMgZm9udC4iCi0gICAgLy8g
T24gT1MgWCwgd2Ugb25seSBhcHBseSB0aGlzIHJ1bGUgaW4gdGhlIGltcG9ydGFudCBjYXNlIG9m
IGZvbnRzIHdpdGggYSBNQVRIIHRhYmxlLgotICAgIGlmIChmb250SGFzVGFibGUobV9wbGF0Zm9y
bURhdGEuY3RGb250KCksIGtDVEZvbnRUYWJsZU1BVEgpKSB7Ci0gICAgICAgIHNob3J0IHR5cG9B
c2NlbnQsIHR5cG9EZXNjZW50LCB0eXBvTGluZUdhcDsKLSAgICAgICAgaWYgKE9wZW5UeXBlOjp0
cnlHZXRUeXBvTWV0cmljcyhtX3BsYXRmb3JtRGF0YS5mb250KCksIHR5cG9Bc2NlbnQsIHR5cG9E
ZXNjZW50LCB0eXBvTGluZUdhcCkpIHsKLSAgICAgICAgICAgIGFzY2VudCA9IHNjYWxlRW1Ub1Vu
aXRzKHR5cG9Bc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICAgICAgZGVz
Y2VudCA9IC1zY2FsZUVtVG9Vbml0cyh0eXBvRGVzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNp
emU7Ci0gICAgICAgICAgICBsaW5lR2FwID0gc2NhbGVFbVRvVW5pdHModHlwb0xpbmVHYXAsIHVu
aXRzUGVyRW0pICogcG9pbnRTaXplOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBmYW1p
bHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFtZShtX3BsYXRmb3JtRGF0YS5mb250
KCkpKTsKLQotICAgIC8vIERpc2FibGUgYW50aWFsaWFzaW5nIHdoZW4gcmVuZGVyaW5nIHdpdGgg
QWhlbSBiZWNhdXNlIG1hbnkgdGVzdHMgcmVxdWlyZSB0aGlzLgotICAgIGlmIChpc0FoZW1Gb250
KGZhbWlseU5hbWUuZ2V0KCkpKQotICAgICAgICBtX2FsbG93c0FudGlhbGlhc2luZyA9IGZhbHNl
OwotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIC8vIFdlIG5lZWQgdG8gYWRqdXN0IFRpbWVzLCBI
ZWx2ZXRpY2EsIGFuZCBDb3VyaWVyIHRvIGNsb3NlbHkgbWF0Y2ggdGhlCi0gICAgLy8gdmVydGlj
YWwgbWV0cmljcyBvZiB0aGVpciBNaWNyb3NvZnQgY291bnRlcnBhcnRzIHRoYXQgYXJlIHRoZSBk
ZSBmYWN0bwotICAgIC8vIHdlYiBzdGFuZGFyZC4gVGhlIEFwcEtpdCBhZGp1c3RtZW50IG9mIDIw
JSBpcyB0b28gYmlnIGFuZCBpcwotICAgIC8vIGluY29ycmVjdGx5IGFkZGVkIHRvIGxpbmUgc3Bh
Y2luZywgc28gd2UgdXNlIGEgMTUlIGFkanVzdG1lbnQgaW5zdGVhZAotICAgIC8vIGFuZCBhZGQg
aXQgdG8gdGhlIGFzY2VudC4KLSAgICBpZiAob3JpZ2luKCkgPT0gT3JpZ2luOjpMb2NhbCAmJiBu
ZWVkc0FzY2VudEFkanVzdG1lbnQoZmFtaWx5TmFtZS5nZXQoKSkpCi0gICAgICAgIGFzY2VudCAr
PSBzdGQ6OnJvdW5kKChhc2NlbnQgKyBkZXNjZW50KSAqIDAuMTVmKTsKLSNlbmRpZgotCi0gICAg
Ly8gQ29tcHV0ZSBsaW5lIHNwYWNpbmcgYmVmb3JlIHRoZSBsaW5lIG1ldHJpY3MgaGFja3MgYXJl
IGFwcGxpZWQuCi0gICAgZmxvYXQgbGluZVNwYWNpbmcgPSBscm91bmRmKGFzY2VudCkgKyBscm91
bmRmKGRlc2NlbnQpICsgbHJvdW5kZihsaW5lR2FwKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAvLyBIYWNrIEhpcmFnaW5vIGxpbmUgbWV0cmljcyB0byBhbGxvdyByb29tIGZvciBtYXJrZWQg
dGV4dCB1bmRlcmxpbmVzLgotICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81Mzg2MTgzPgotICAgIGlm
IChkZXNjZW50IDwgMyAmJiBsaW5lR2FwID49IDMgJiYgZmFtaWx5TmFtZSAmJiBDRlN0cmluZ0hh
c1ByZWZpeChmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiSGlyYWdpbm8iKSkpIHsKLSAgICAgICAg
bGluZUdhcCAtPSAzIC0gZGVzY2VudDsKLSAgICAgICAgZGVzY2VudCA9IDM7Ci0gICAgfQotI2Vu
ZGlmCi0gICAgCi0gICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9y
aWVudGF0aW9uOjpWZXJ0aWNhbCAmJiAhaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQotICAg
ICAgICBtX2hhc1ZlcnRpY2FsR2x5cGhzID0gZm9udEhhc1ZlcnRpY2FsR2x5cGhzKG1fcGxhdGZv
cm1EYXRhLmN0Rm9udCgpKTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgQ0dGbG9h
dCBhZGp1c3RtZW50ID0gc2hvdWxkVXNlQWRqdXN0bWVudChtX3BsYXRmb3JtRGF0YS5mb250KCkp
ID8gY2VpbCgoYXNjZW50ICsgZGVzY2VudCkgKiBrTGluZUhlaWdodEFkanVzdG1lbnQpIDogMDsK
LQotICAgIGxpbmVHYXAgPSBjZWlsZihsaW5lR2FwKTsKLSAgICBsaW5lU3BhY2luZyA9IGNlaWwo
YXNjZW50KSArIGFkanVzdG1lbnQgKyBjZWlsKGRlc2NlbnQpICsgbGluZUdhcDsKLSAgICBhc2Nl
bnQgPSBjZWlsZihhc2NlbnQgKyBhZGp1c3RtZW50KTsKLSAgICBkZXNjZW50ID0gY2VpbGYoZGVz
Y2VudCk7Ci0KLSAgICBtX3Nob3VsZE5vdEJlVXNlZEZvckFyYWJpYyA9IGZvbnRGYW1pbHlTaG91
bGROb3RCZVVzZWRGb3JBcmFiaWMoZmFtaWx5TmFtZS5nZXQoKSk7Ci0jZW5kaWYKLQotICAgIENH
RmxvYXQgeEhlaWdodCA9IDA7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnNpemUoKSkgewotICAg
ICAgICBpZiAocGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246
Okhvcml6b250YWwpIHsKLSAgICAgICAgICAgIC8vIE1lYXN1cmUgdGhlIGFjdHVhbCBjaGFyYWN0
ZXIgIngiLCBzaW5jZSBpdCdzIHBvc3NpYmxlIGZvciBpdCB0byBleHRlbmQgYmVsb3cgdGhlIGJh
c2VsaW5lLCBhbmQgd2UgbmVlZCB0aGUKLSAgICAgICAgICAgIC8vIHJlcG9ydGVkIHgtaGVpZ2h0
IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUgZ2x5cGggdGhhdCBpcyBhYm92ZSB0
aGUgYmFzZWxpbmUuCi0gICAgICAgICAgICBHbHlwaCB4R2x5cGggPSBnbHlwaEZvckNoYXJhY3Rl
cigneCcpOwotICAgICAgICAgICAgaWYgKHhHbHlwaCkKLSAgICAgICAgICAgICAgICB4SGVpZ2h0
ID0gLUNHUmVjdEdldE1pblkocGxhdGZvcm1Cb3VuZHNGb3JHbHlwaCh4R2x5cGgpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4SGVpZ2h0ID0gQ1RGb250R2V0WEhlaWdodCht
X3BsYXRmb3JtRGF0YS5mb250KCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHhIZWln
aHQgPSB2ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250KCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0
KCk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0p
OwotICAgIG1fZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmlj
cy5zZXREZXNjZW50KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0Q2FwSGVpZ2h0KGNh
cEhlaWdodCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1f
Zm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExp
bmVTcGFjaW5nKGxpbmVTcGFjaW5nKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVBv
c2l0aW9uKC1DVEZvbnRHZXRVbmRlcmxpbmVQb3NpdGlvbihtX3BsYXRmb3JtRGF0YS5mb250KCkp
KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFVuZGVybGluZVRoaWNrbmVzcyhDVEZvbnRHZXRVbmRl
cmxpbmVUaGlja25lc3MobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci19Ci0KLXZvaWQgRm9udDo6
cGxhdGZvcm1DaGFyV2lkdGhJbml0KCkKLXsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IDA7Ci0gICAg
bV9tYXhDaGFyV2lkdGggPSAwOwotCi0gICAgYXV0byBvczJUYWJsZSA9IGFkb3B0Q0YoQ1RGb250
Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9udFRhYmxlT1MyLCBrQ1RGb250
VGFibGVPcHRpb25Ob09wdGlvbnMpKTsKLSAgICBpZiAob3MyVGFibGUgJiYgQ0ZEYXRhR2V0TGVu
Z3RoKG9zMlRhYmxlLmdldCgpKSA+PSA0KSB7Ci0gICAgICAgIGNvbnN0IFVJbnQ4KiBvczIgPSBD
RkRhdGFHZXRCeXRlUHRyKG9zMlRhYmxlLmdldCgpKTsKLSAgICAgICAgU0ludDE2IG9zMkF2Z0No
YXJXaWR0aCA9IG9zMlsyXSAqIDI1NiArIG9zMlszXTsKLSAgICAgICAgbV9hdmdDaGFyV2lkdGgg
PSBzY2FsZUVtVG9Vbml0cyhvczJBdmdDaGFyV2lkdGgsIG1fZm9udE1ldHJpY3MudW5pdHNQZXJF
bSgpKSAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGhlYWRUYWJs
ZSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSwga0NURm9u
dFRhYmxlSGVhZCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Ci0gICAgaWYgKGhlYWRU
YWJsZSAmJiBDRkRhdGFHZXRMZW5ndGgoaGVhZFRhYmxlLmdldCgpKSA+PSA0MikgewotICAgICAg
ICBjb25zdCBVSW50OCogaGVhZCA9IENGRGF0YUdldEJ5dGVQdHIoaGVhZFRhYmxlLmdldCgpKTsK
LSAgICAgICAgdXNob3J0IHV4TWluID0gaGVhZFszNl0gKiAyNTYgKyBoZWFkWzM3XTsKLSAgICAg
ICAgdXNob3J0IHV4TWF4ID0gaGVhZFs0MF0gKiAyNTYgKyBoZWFkWzQxXTsKLSAgICAgICAgU0lu
dDE2IHhNaW4gPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWluKTsKLSAgICAgICAgU0ludDE2IHhN
YXggPSBzdGF0aWNfY2FzdDxTSW50MTY+KHV4TWF4KTsKLSAgICAgICAgZmxvYXQgZGlmZiA9IHN0
YXRpY19jYXN0PGZsb2F0Pih4TWF4IC0geE1pbik7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0g
c2NhbGVFbVRvVW5pdHMoZGlmZiwgbV9mb250TWV0cmljcy51bml0c1BlckVtKCkpICogbV9wbGF0
Zm9ybURhdGEuc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIGEgY3Jvc3MtcGxh
dGZvcm0gZXN0aW1hdGUsIHdoaWNoIHdpbGwgcG9wdWxhdGUgdGhlc2UgdmFsdWVzIGlmIHRoZXkg
YXJlIG5vbi1wb3NpdGl2ZS4KLSAgICBpbml0Q2hhcldpZHRocygpOwotfQotCi12b2lkIEZvbnQ6
OnBsYXRmb3JtRGVzdHJveSgpCi17Ci19Ci0KLWJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0
c0NoYXJhY3RlckZvclN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBV
Q2hhcjMyIGNoYXJhY3RlcikgY29uc3QKLXsKLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYg
VEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQotICAgIEdseXBoIGdseXBoID0gZ2x5cGhG
b3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICBpZiAoIWdseXBoKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKGZvbnRWYXJpYW50Q2FwcykgewotICAgIGNhc2UgRm9udFZh
cmlhbnRDYXBzOjpTbWFsbDogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBw
b3J0ZWRCeVNtYWxsQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGds
eXBoICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6UGV0aXRlOiB7Ci0gICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2FwcygpOwotICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBo
ICYmIHN1cHBvcnRlZC5nZXQoZ2x5cGgpOwotICAgIH0KLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fw
czo6QWxsU21hbGw6IHsKLSAgICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVk
QnlBbGxTbWFsbENhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlw
aCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgY2FzZSBGb250VmFyaWFudENh
cHM6OkFsbFBldGl0ZTogewotICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0
ZWRCeUFsbFBldGl0ZUNhcHMoKTsKLSAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBn
bHlwaCAmJiBzdXBwb3J0ZWQuZ2V0KGdseXBoKTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgLy8gU3ludGhlc2lzIG9ubHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlz
dGVkIGFib3ZlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShjaGFyYWN0ZXIpOwotCi0gICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKLSAg
ICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6U21hbGw6Ci0gICAgY2FzZSBGb250VmFyaWFudENhcHM6
OlBldGl0ZToKLSAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6Ci0gICAgY2FzZSBG
b250VmFyaWFudENhcHM6OkFsbFBldGl0ZToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIC8vIFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNh
cHMgdmFsdWVzIGxpc3RlZCBhYm92ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2Vu
ZGlmCi19Ci0KLSNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwg
UExBVEZPUk0oTUFDKQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fw
c09wZW5UeXBlRGljdGlvbmFyeShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKLXsKLSAg
ICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKLSAgICBD
RlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250T3Bl
blR5cGVGZWF0dXJlVmFsdWUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwgdmFs
dWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNU
cnVlVHlwZURpY3Rpb25hcnkoaW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQotewotICAgIFJldGFp
blB0cjxDRk51bWJlclJlZj4ga2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3S2V5KSk7Ci0gICAgUmV0YWluUHRyPENG
TnVtYmVyUmVmPiB2YWx1ZSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKSk7Ci0gICAgQ0ZUeXBlUmVmIGtleXNb
XSA9IHsga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVTZWxl
Y3RvcklkZW50aWZpZXJLZXkgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5nZXQo
KSwgdmFsdWUuZ2V0KCkgfTsKLSAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMp
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0b3Im
IHJlc3VsdCwgQ0ZCaXRWZWN0b3JSZWYgc291cmNlKQotewotICAgIENGSW5kZXggbGVuZ3RoID0g
Q0ZCaXRWZWN0b3JHZXRDb3VudChzb3VyY2UpOwotICAgIHJlc3VsdC5lbnN1cmVTaXplKGxlbmd0
aCk7Ci0gICAgQ0ZJbmRleCBtaW4gPSAwOwotICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsKLSAg
ICAgICAgQ0ZJbmRleCBuZXh0SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJpdChz
b3VyY2UsIENGUmFuZ2VNYWtlKG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7Ci0gICAgICAgIGlmIChu
ZXh0SW5kZXggPT0ga0NGTm90Rm91bmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmVz
dWx0LnNldChuZXh0SW5kZXgsIHRydWUpOwotICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAxOwot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmluZ1Jl
ZiBmZWF0dXJlLCBDVEZvbnRSZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCi17Ci0gICAgUmV0
YWluUHRyPENGQml0VmVjdG9yUmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENv
dmVyYWdlRm9yRmVhdHVyZShmb250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVhdHVy
ZSwgMSkuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkp
OwotfQotCi1zdGF0aWMgdm9pZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQg
c2VsZWN0b3IsIENURm9udFJlZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZCaXRWZWN0b3JSZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292
ZXJhZ2VGb3JGZWF0dXJlKGZvbnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBlLCBz
ZWxlY3RvcikuZ2V0KCkpKTsKLSAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0
KCkpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxD
YXBzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsK
LSAgICAgICAgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOwotICAg
ICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgp
LmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAg
aW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fw
c1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFs
bENhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5U21h
bGxDYXBzLnZhbHVlKCk7Ci19Ci0KLWNvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9y
dGVkQnlBbGxTbWFsbENhcHMoKSBjb25zdAotewotICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRC
eUFsbFNtYWxsQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
ID0gQml0VmVjdG9yKCk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNt
Y3AiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxD
YXBzLnZhbHVlKCkpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnNj
IiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fw
cy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlw
ZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1f
Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdFRy
dWVUeXBlQ292ZXJhZ2Uoa1VwcGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3Rv
ciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBz
LnZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxs
Q2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRl
ZEJ5UGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5UGV0
aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJpdFZl
Y3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBs
YXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUo
KSk7Ci0gICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dl
ckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNT
dXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX2dseXBo
c1N1cHBvcnRlZEJ5UGV0aXRlQ2Fwcy52YWx1ZSgpOwotfQotCi1jb25zdCBCaXRWZWN0b3ImIEZv
bnQ6OmdseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2FwcykgewotICAgICAgICBtX2dseXBoc1N1cHBv
cnRlZEJ5QWxsUGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOwotICAgICAgICBpbmplY3RPcGVuVHlw
ZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNT
dXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMudmFsdWUoKSk7Ci0gICAgICAgIGluamVjdE9wZW5UeXBl
Q292ZXJhZ2UoQ0ZTVFIoImMycGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1
cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVD
b3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxh
dGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1
ZSgpKTsKLSAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1Vw
cGVyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBo
c1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1f
Z2x5cGhzU3VwcG9ydGVkQnlBbGxQZXRpdGVDYXBzLnZhbHVlKCk7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIFJlZlB0cjxGb250PiBjcmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwgZmxv
YXQgc2l6ZSwgRm9udE9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0
cyBmb250VHJhaXRzLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQot
ewotICAgIGlmICghZm9udCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoc3lu
dGhldGljQm9sZCkKLSAgICAgICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OwotICAg
IGlmIChzeW50aGV0aWNJdGFsaWMpCi0gICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxp
Y1RyYWl0OwotCi0gICAgQ1RGb250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENU
Rm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpOwotCi0gICAgYm9vbCB1c2VkU3ludGhldGljQm9s
ZCA9IChmb250VHJhaXRzICYga0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRz
ICYga0NURm9udFRyYWl0Qm9sZCk7Ci0gICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9IChm
b250VHJhaXRzICYga0NURm9udEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBr
Q1RGb250VHJhaXRJdGFsaWMpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEo
Zm9udCwgc2l6ZSwgdXNlZFN5bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBvcmll
bnRhdGlvbik7Ci0KLSAgICByZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBm
ZWF0dXJlKQotewotICAgIHJldHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBr
Q1RGb250T3BlblR5cGVGZWF0dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0
dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgaXNUcnVlVHlwZUZlYXR1cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCi17Ci0gICAgcmV0
dXJuIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlk
ZW50aWZpZXJLZXkpICYmIENGRGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRG
ZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25h
bDxDRlN0cmluZ1JlZj4gb3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQot
ewotICAgIEFTU0VSVChpc09wZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7Ci0gICAgQ0ZTdHJpbmdS
ZWYgdGFnID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZl
YXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1cmVUYWcpKTsKLSAgICBpbnQgcmF3VmFsdWU7Ci0g
ICAgQ0ZOdW1iZXJSZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7Ci0gICAg
YXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlwZSwg
JnJhd1ZhbHVlKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgIHJl
dHVybiByYXdWYWx1ZSA/IE9wdGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxsb3B0
OwotfQotCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0dXJl
KENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQotewotICAgIEFTU0VSVChpc1RydWVUeXBlRmVhdHVy
ZShmZWF0dXJlKSk7Ci0gICAgaW50IHJhd1R5cGU7Ci0gICAgQ0ZOdW1iZXJSZWYgdHlwZSA9IHN0
YXRpY19jYXN0PENGTnVtYmVyUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RG
b250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7Ci0gICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1i
ZXJHZXRWYWx1ZSh0eXBlLCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7Ci0gICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKLSAgICBpbnQgcmF3U2VsZWN0b3I7Ci0gICAgQ0ZO
dW1iZXJSZWYgc2VsZWN0b3IgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5
R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsK
LSAgICBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50VHlw
ZSwgJnJhd1NlbGVjdG9yKTsKLSAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwot
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJl
KGludCBrZXksIENURm9udFJlZiBmb250KQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBm
ZWF0dXJlcyA9IGFkb3B0Q0YoQ1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKLSAgICBDRkluZGV4
IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAgZm9y
IChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKLSAgICAgICAgQ0ZEaWN0
aW9uYXJ5UmVmIGZlYXR1cmVUeXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGZlYXR1cmVzLmdldCgpLCBpKSk7Ci0gICAgICAgIENGTnVtYmVy
UmVmIGZlYXR1cmVLZXkgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAg
ICAgICAgaWYgKCFmZWF0dXJlS2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlu
dCByYXdGZWF0dXJlS2V5OwotICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXksIGtD
Rk51bWJlckludFR5cGUsICZyYXdGZWF0dXJlS2V5KTsKLSAgICAgICAgaWYgKHJhd0ZlYXR1cmVL
ZXkgIT0ga2V5KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgQ0ZBcnJheVJlZiBm
ZWF0dXJlU2VsZWN0b3JzID0gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZVR5cGUsIGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOwotICAg
ICAgICBpZiAoIWZlYXR1cmVTZWxlY3RvcnMpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgQ0ZJbmRleCBzZWxlY3RvcnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2VsZWN0
b3JzKTsKLSAgICAgICAgZm9yIChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7ICsr
aikgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0YXRp
Y19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlU2Vs
ZWN0b3JzLCBqKSk7Ci0gICAgICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBr
Q1RGb250RmVhdHVyZVNlbGVjdG9yRGVmYXVsdEtleSkpOwotICAgICAgICAgICAgaWYgKCFpc0Rl
ZmF1bHQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnQgcmF3SXNE
ZWZhdWx0OwotICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51bWJl
ckludFR5cGUsICZyYXdJc0RlZmF1bHQpOwotICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1bHQp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q0ZOdW1iZXJSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiByZW1vdmVkRmVhdHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250UmVm
IGZvbnQpCi17Ci0gICAgYm9vbCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVy
ZSk7Ci0gICAgYm9vbCBpc1RydWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7Ci0g
ICAgaWYgKCFpc09wZW5UeXBlICYmICFpc1RydWVUeXBlKQotICAgICAgICByZXR1cm4gZmVhdHVy
ZTsgLy8gV2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgotICAgIFJldGFpblB0
cjxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIGlmIChp
c09wZW5UeXBlKSB7Ci0gICAgICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVyZShm
ZWF0dXJlKTsKLSAgICAgICAgaWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRhZy52
YWx1ZSgpLCBDRlNUUigic21jcCIpKQotICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFn
LnZhbHVlKCksIENGU1RSKCJjMnNjIikpCi0gICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVU
YWcudmFsdWUoKSwgQ0ZTVFIoInBjYXAiKSkKLSAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVy
ZVRhZy52YWx1ZSgpLCBDRlNUUigiYzJwYyIpKSkpIHsKLSAgICAgICAgICAgIGludCByYXdaZXJv
ID0gMDsKLSAgICAgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJh
d1plcm8pKTsKLSAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwg
a0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKLSAgICAgICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVh
dHVyZVZhbHVlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRh
ZywgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRh
ZykpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RG
b250T3BlblR5cGVGZWF0dXJlVmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtD
VEZvbnRPcGVuVHlwZUZlYXR1cmVWYWx1ZSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChp
c1RydWVUeXBlKSB7Ci0gICAgICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVUeXBl
RmVhdHVyZShmZWF0dXJlKTsKLSAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3Qg
PT0ga0xvd2VyQ2FzZVR5cGUgJiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dl
ckNhc2VTbWFsbENhcHNTZWxlY3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBr
TG93ZXJDYXNlUGV0aXRlQ2Fwc1NlbGVjdG9yKSkgewotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5
QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBD
RkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVy
S2V5KSk7Ci0gICAgICAgICAgICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVm
YXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkKLSAg
ICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRG
ZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQo
KSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNlVHlw
ZSAmJiAodHJ1ZVR5cGVGZWF0dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fwc1Nl
bGVjdG9yIHx8IHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRpdGVD
YXBzU2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQu
Z2V0KCksIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZh
bHVlKGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKLSAgICAgICAg
ICAgIGlmIChDRk51bWJlclJlZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JU
cnVlVHlwZUZlYXR1cmUoa1VwcGVyQ2FzZVR5cGUsIGZvbnQpKQotICAgICAgICAgICAgICAgIENG
RGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3Rvcklk
ZW50aWZpZXJLZXksIGRlZmF1bHRTZWxlY3Rvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVy
ZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NU
Rm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1
cmVUeXBlSWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9u
dEZlYXR1cmVUeXBlSWRlbnRpZmllcktleSkpOwotICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwg
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50
aWZpZXJLZXkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1z
dGF0aWMgUmV0YWluUHRyPENURm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFi
bGVGZWF0dXJlcyhDVEZvbnRSZWYgZm9udCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
ZmVhdHVyZXMgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlBdHRy
aWJ1dGUoZm9udCwga0NURm9udEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKLSAgICBpZiAo
IWZlYXR1cmVzKQotICAgICAgICByZXR1cm4gZm9udDsKLSAgICBDRkluZGV4IGZlYXR1cmVDb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7Ci0gICAgUmV0YWluUHRyPENGTXV0
YWJsZUFycmF5UmVmPiBuZXdGZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSk7Ci0gICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKLSAg
ICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKLSAgICAgICAg
Q0ZBcnJheUFwcGVuZFZhbHVlKG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShmZWF0
dXJlLCBmb250KS5nZXQoKSk7Ci0gICAgfQotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZv
bnRGZWF0dXJlU2V0dGluZ3NBdHRyaWJ1dGUgfTsKLSAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7
IG5ld0ZlYXR1cmVzLmdldCgpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0
cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIFJl
dGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOwotICAg
IHJldHVybiBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBDVEZv
bnRHZXRTaXplKGZvbnQpLCBudWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Ci19Ci0KLVJl
ZlB0cjxGb250PiBGb250OjpjcmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygp
IGNvbnN0Ci17Ci0gICAgZmxvYXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBD
VEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMo
bV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQg
PSBjcmVhdGVDVEZvbnRXaXRob3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRh
LmZvbnQoKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwg
c2l6ZSwgbV9wbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9y
bURhdGEuc3ludGhldGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkp
OwotfQotCi1SZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGZsb2F0
IHNpemUgPSBtX3BsYXRmb3JtRGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKLSAgICBDVEZvbnRT
eW1ib2xpY1RyYWl0cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0
Zm9ybURhdGEuZm9udCgpKTsKLSAgICBhdXRvIGZvbnREZXNjcmlwdG9yID0gYWRvcHRDRihDVEZv
bnRDb3B5Rm9udERlc2NyaXB0b3IobV9wbGF0Zm9ybURhdGEuZm9udCgpKSk7Ci0gICAgUmV0YWlu
UHRyPENURm9udFJlZj4gc2NhbGVkRm9udCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlV2l0aEZvbnRE
ZXNjcmlwdG9yKGZvbnREZXNjcmlwdG9yLmdldCgpLCBzaXplLCBudWxscHRyKSk7Ci0KLSAgICBy
ZXR1cm4gY3JlYXRlRGVyaXZhdGl2ZUZvbnQoc2NhbGVkRm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0
Zm9ybURhdGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhl
dGljQm9sZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOwotfQotCi12b2lk
IEZvbnQ6OmFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGJlZ2lubmluZ0dseXBoSW5kZXgsIHVuc2lnbmVkIGJlZ2lubmluZ1N0cmluZ0luZGV4LCBib29s
IGVuYWJsZUtlcm5pbmcsIGJvb2wgcmVxdWlyZXNTaGFwaW5nLCBjb25zdCBBdG9tU3RyaW5nJiBs
b2NhbGUsIFN0cmluZ1ZpZXcgdGV4dCwgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uKSBjb25z
dAotewotICAgIFVOVVNFRF9QQVJBTShyZXF1aXJlc1NoYXBpbmcpOwotCi0gICAgLy8gRklYTUU6
IEltcGxlbWVudCBHbHlwaEJ1ZmZlciBpbml0aWFsIGFkdmFuY2UuCi0jaWYgVVNFKENURk9OVFNI
QVBFR0xZUEhTKQotICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZSYW5nZSByYW5nZSwgQ0dHbHlwaCoq
IG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFuY2VzUG9pbnRlciwgQ0dQb2ludCoq
IG5ld09mZnNldHNQb2ludGVyLCBDRkluZGV4KiogbmV3SW5kaWNlc1BvaW50ZXIpIHsKLSAgICAg
ICAgcmFuZ2UubG9jYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChyYW5nZS5sb2NhdGlvbiwgc3Rh
dGljX2Nhc3Q8Q0ZJbmRleD4oMCkpLCBzdGF0aWNfY2FzdDxDRkluZGV4PihnbHlwaEJ1ZmZlci5z
aXplKCkpKTsKLSAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA8IDApIHsKLSAgICAgICAgICAgIHJh
bmdlLmxlbmd0aCA9IHN0ZDo6bWluKHJhbmdlLmxvY2F0aW9uLCAtcmFuZ2UubGVuZ3RoKTsKLSAg
ICAgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gcmFuZ2UubG9jYXRpb24gLSByYW5nZS5sZW5ndGg7
Ci0gICAgICAgICAgICBnbHlwaEJ1ZmZlci5yZW1vdmUoYmVnaW5uaW5nR2x5cGhJbmRleCArIHJh
bmdlLmxvY2F0aW9uLCByYW5nZS5sZW5ndGgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGdseXBoQnVmZmVyLm1ha2VIb2xlKGJlZ2lubmluZ0dseXBoSW5kZXggKyByYW5nZS5sb2NhdGlv
biwgcmFuZ2UubGVuZ3RoLCB0aGlzKTsKLQotICAgICAgICAqbmV3R2x5cGhzUG9pbnRlciA9IGds
eXBoQnVmZmVyLmdseXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKLSAgICAgICAgKm5ld0FkdmFu
Y2VzUG9pbnRlciA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpOwot
ICAgICAgICAqbmV3T2Zmc2V0c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5vcmlnaW5zKGJlZ2lubmlu
Z0dseXBoSW5kZXgpOwotICAgICAgICAqbmV3SW5kaWNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5v
ZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleCk7Ci0gICAgfTsKLQotICAgIGF1dG8g
c3Vic3RyaW5nID0gdGV4dC5zdWJzdHJpbmcoYmVnaW5uaW5nU3RyaW5nSW5kZXgpOwotICAgIGF1
dG8gdXBjb252ZXJ0ZWRDaGFyYWN0ZXJzID0gc3Vic3RyaW5nLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOwotICAgIGF1dG8gbG9jYWxlU3RyaW5nID0gTG9jYWxlQ29jb2E6OmNhbm9uaWNhbExhbmd1
YWdlSWRlbnRpZmllckZyb21TdHJpbmcobG9jYWxlKS5zdHJpbmcoKS5jcmVhdGVDRlN0cmluZygp
OwotICAgIENURm9udFNoYXBlT3B0aW9ucyBvcHRpb25zID0ga0NURm9udFNoYXBlV2l0aENsdXN0
ZXJDb21wb3NpdGlvbgotICAgICAgICB8IChlbmFibGVLZXJuaW5nID8ga0NURm9udFNoYXBlV2l0
aEtlcm5pbmcgOiAwKQotICAgICAgICB8ICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246
OlJUTCA/IGtDVEZvbnRTaGFwZVJpZ2h0VG9MZWZ0IDogMCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsgKytp
KQotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRl
eClbaV0gLT0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSAgICBDVEZvbnRTaGFwZUdseXBocygK
LSAgICAgICAgbV9wbGF0Zm9ybURhdGEuY3RGb250KCksCi0gICAgICAgIGdseXBoQnVmZmVyLmds
eXBocyhiZWdpbm5pbmdHbHlwaEluZGV4KSwKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxDR1Np
emUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdHbHlwaEluZGV4KSksCi0gICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dQb2ludCo+KGdseXBoQnVmZmVyLm9yaWdpbnMoYmVnaW5uaW5n
R2x5cGhJbmRleCkpLAotICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5u
aW5nR2x5cGhJbmRleCksCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhcio+
KHVwY29udmVydGVkQ2hhcmFjdGVycy5nZXQoKSksCi0gICAgICAgIGdseXBoQnVmZmVyLnNpemUo
KSAtIGJlZ2lubmluZ0dseXBoSW5kZXgsCi0gICAgICAgIG9wdGlvbnMsCi0gICAgICAgIGxvY2Fs
ZVN0cmluZy5nZXQoKSwKLSAgICAgICAgaGFuZGxlcik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleDsgKytpKQot
ICAgICAgICBnbHlwaEJ1ZmZlci5vZmZzZXRzSW5TdHJpbmcoYmVnaW5uaW5nR2x5cGhJbmRleClb
aV0gKz0gYmVnaW5uaW5nU3RyaW5nSW5kZXg7Ci0KLSNlbHNlCi0KLSAgICBVTlVTRURfUEFSQU0o
YmVnaW5uaW5nU3RyaW5nSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShsb2NhbGUpOwotICAgIFVO
VVNFRF9QQVJBTSh0ZXh0KTsKLQotICAgIC8vIENURm9udFRyYW5zZm9ybUdseXBocygpIG9wZXJh
dGVzIGluIHZpc3VhbCBvcmRlciwgYnV0IFdpZHRoSXRlcmF0b3IgaXRlcmF0ZXMgaW4gbG9naWNh
bCBvcmRlci4KLSAgICAvLyBUZW1wb3JhcmlseSBwdXQgdXMgaW4gdmlzdWFsIG9yZGVyIGp1c3Qg
Zm9yIHRoZSBjYWxsLCB0aGVuIHB1dCB1cyBiYWNrIGludG8gbG9naWNhbCBvcmRlciB3aGVuCi0g
ICAgLy8gdGhlIGNhbGwgaXMgZG9uZS4KLSAgICAvLyBXZSBkb24ndCBoYXZlIGEgZ2xvYmFsIHZp
ZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlcjsgd2UncmUganVzdCBvcGVyYXRpbmcgb24gYSBz
aW5nbGUgY2h1bmsgb2YgaXQuCi0gICAgLy8gV2lkdGhJdGVyYXRvciBlbmNvdW50ZXJzIHRoZSBj
aHVua3Mgb3V0IGluIGxvZ2ljYWwgb3JkZXIsIHNvIHdlIGhhdmUgdG8gbWFpbnRhaW4gdGhhdCBp
bnZhcmlhbnQuCi0gICAgLy8gRXZlbnR1YWxseSwgRm9udENhc2NhZGU6OmxheW91dFNpbXBsZVRl
eHQoKSB3aWxsIHJldmVyc2UgdGhlIHdob2xlIGJ1ZmZlciB0byBwdXQgdGhlIGVudGlyZSB0aGlu
ZwotICAgIC8vIGluIHZpc3VhbCBvcmRlciwgYnV0IHRoYXQncyBva2F5IGJlY2F1c2UgaXQgaGFz
IGEgdmlldyBvZiB0aGUgZW50aXJlIEdseXBoQnVmZmVyLgotICAgIC8vIE9uIHRoZSBvdGhlciBo
YW5kLCBDVEZvbnRTaGFwZUdseXBocygpIGFjY2VwdHMgdGhlIGJ1ZmZlciBpbiBsb2dpY2FsIG9y
ZGVyIGJ1dCByZXR1cm5zIGl0IGluIHBoeXNpY2FsCi0gICAgLy8gb3JkZXIsIHdoaWNoIG1lYW5z
IHRoZSBzZWNvbmQgcmV2ZXJzZSgpIGluIHRoaXMgZnVuY3Rpb24gc3RpbGwgbmVlZHMgdG8gZXhl
Y3V0ZSB3aGVuCi0gICAgLy8gQ1RGb250U2hhcGVHbHlwaHMoKSBpcyBiZWluZyB1c2VkLgotICAg
IGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKLSAgICAgICAgZ2x5cGhC
dWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBi
ZWdpbm5pbmdHbHlwaEluZGV4KTsKLQotICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9u
cyA9IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAw
KSB8IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVNoYXBpbmc7Ci0gICAgQ1RGb250VHJhbnNmb3JtR2x5
cGhzKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5n
R2x5cGhJbmRleCksIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoYmVnaW5uaW5nR2x5cGhJbmRleCkpLCBnbHlwaEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdH
bHlwaEluZGV4LCBvcHRpb25zKTsKLSNlbmRpZgotCi0gICAgLy8gU2VlIHRoZSBjb21tZW50IGFi
b3ZlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgdGhlIG90aGVyIGNhbGwgdG8gcmV2ZXJzZSgpIGlz
LgotICAgIGlmICh0ZXh0RGlyZWN0aW9uID09IFRleHREaXJlY3Rpb246OlJUTCkKLSAgICAgICAg
Z2x5cGhCdWZmZXIucmV2ZXJzZShiZWdpbm5pbmdHbHlwaEluZGV4LCBnbHlwaEJ1ZmZlci5zaXpl
KCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4KTsKLX0KLQotc3RhdGljIGludCBleHRyYWN0TnVtYmVy
KENGTnVtYmVyUmVmIG51bWJlcikKLXsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBpZiAobnVt
YmVyKQotICAgICAgICBDRk51bWJlckdldFZhbHVlKG51bWJlciwga0NGTnVtYmVySW50VHlwZSwg
JnJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBGb250OjpkZXRlcm1pbmVQ
aXRjaCgpCi17Ci0gICAgQ1RGb250UmVmIGN0Rm9udCA9IG1fcGxhdGZvcm1EYXRhLmZvbnQoKTsK
LSAgICBBU1NFUlQoY3RGb250KTsKLQotICAgIC8vIFNwZWNpYWwgY2FzZSBPc2FrYS1Nb25vLgot
ICAgIC8vIEFjY29yZGluZyB0byA8cmRhcjovL3Byb2JsZW0vMzk5OTQ2Nz4sIHdlIHNob3VsZCB0
cmVhdCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgQXBw
S2l0IGRvZXMgbm90IHJlcG9ydCBPc2FrYS1Nb25vIGFzIGZpeGVkIHBpdGNoLgotCi0gICAgLy8g
U3BlY2lhbCBjYXNlIE1TLVBHb3RoaWMuCi0gICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJv
YmxlbS80MDMyOTM4Piwgd2Ugc2hvdWxkIG5vdCB0cmVhdCBNUy1QR290aGljIGFzIGZpeGVkIHBp
dGNoLgotICAgIC8vIE5vdGUgdGhhdCBBcHBLaXQgZG9lcyByZXBvcnQgTVMtUEdvdGhpYyBhcyBm
aXhlZCBwaXRjaC4KLQotICAgIC8vIFNwZWNpYWwgY2FzZSBNb25vdHlwZUNvcnNpdmEKLSAgICAv
LyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzU0NTQ3MDQ+LCB3ZSBzaG91bGQgbm90IHRy
ZWF0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLSAgICAvLyBOb3RlIHRoYXQgQXBw
S2l0IGRvZXMgcmVwb3J0IE1vbm90eXBlQ29yc2l2YSBhcyBmaXhlZCBwaXRjaC4KLQotICAgIGF1
dG8gZnVsbE5hbWUgPSBhZG9wdENGKENURm9udENvcHlGdWxsTmFtZShjdEZvbnQpKTsKLSAgICBh
dXRvIGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKGN0Rm9udCkpOwot
Ci0gICAgaW50IGZpeGVkUGl0Y2ggPSBleHRyYWN0TnVtYmVyKGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KENURm9udENvcHlBdHRyaWJ1dGUobV9wbGF0Zm9ybURhdGEuZm9udCgpLCBr
Q1RGb250Rml4ZWRBZHZhbmNlQXR0cmlidXRlKSkpLmdldCgpKTsKLSAgICBtX3RyZWF0QXNGaXhl
ZFBpdGNoID0gKENURm9udEdldFN5bWJvbGljVHJhaXRzKGN0Rm9udCkgJiBrQ1RGb250TW9ub1Nw
YWNlVHJhaXQpIHx8IGZpeGVkUGl0Y2ggfHwgKGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoZnVsbE5h
bWUuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikpIHx8IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUo
ZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNUy1QR290aGljIikpIHx8IGNhc2VJbnNlbnNpdGl2ZUNv
bXBhcmUoZnVsbE5hbWUuZ2V0KCksIENGU1RSKCJNb25vdHlwZUNvcnNpdmEiKSkpOwotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZl
Q29tcGFyZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiQ291cmllciBOZXciKSkpIHsKLSAgICAg
ICAgLy8gU3BlY2lhbCBjYXNlIENvdXJpZXIgTmV3IHRvIG5vdCBiZSB0cmVhdGVkIGFzIGZpeGVk
IHBpdGNoLCBhcyB0aGlzIHdpbGwgbWFrZSB1c2Ugb2YgYSBoYWNrZWQgc3BhY2Ugd2lkdGggd2hp
Y2ggaXMgdW5kZXNpcmVhYmxlIGZvciBpUGhvbmUgKHNlZSByZGFyOi8vNjI2OTc4MykuCi0gICAg
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotRmxv
YXRSZWN0IEZvbnQ6OnBsYXRmb3JtQm91bmRzRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17
Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgIGJvdW5kaW5nQm94ID0gQ1RGb250R2V0
Qm91bmRpbmdSZWN0c0ZvckdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgcGxhdGZvcm1E
YXRhKCkub3JpZW50YXRpb24oKSA9PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsID8ga0NURm9u
dE9yaWVudGF0aW9uVmVydGljYWwgOiBrQ1RGb250T3JpZW50YXRpb25Ib3Jpem9udGFsLCAmZ2x5
cGgsIDAsIDEpOwotICAgIGJvdW5kaW5nQm94LnNldFkoLWJvdW5kaW5nQm94Lm1heFkoKSk7Ci0g
ICAgaWYgKG1fc3ludGhldGljQm9sZE9mZnNldCkKLSAgICAgICAgYm91bmRpbmdCb3guc2V0V2lk
dGgoYm91bmRpbmdCb3gud2lkdGgoKSArIG1fc3ludGhldGljQm9sZE9mZnNldCk7Ci0KLSAgICBy
ZXR1cm4gYm91bmRpbmdCb3g7Ci19Ci0KLWZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlw
aChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBDR1NpemUgYWR2YW5jZSA9IENHU2l6ZVplcm87
Ci0KLSAgICBpZiAocGxhdGZvcm1EYXRhKCkuc2l6ZSgpKSB7Ci0gICAgICAgIGJvb2wgaG9yaXpv
bnRhbCA9IHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpI
b3Jpem9udGFsOwotICAgICAgICBDVEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGhvcml6
b250YWwgfHwgbV9pc0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrID8ga0NURm9udE9yaWVudGF0aW9u
SG9yaXpvbnRhbCA6IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsOwotI2lmIFVTRShDVEZPTlRH
RVRBRFZBTkNFU19XT1JLQVJPVU5EKQotICAgICAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHls
ZSA9IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdT
dHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1
YW50aXphdGlvbiB8IGtDR0ZvbnRBbnRpYWxpYXNpbmdTdHlsZVVuZmlsdGVyZWQ7Ci0gICAgICAg
IGlmICghQ1RGb250SXNBcHBsZUNvbG9yRW1vamkobV9wbGF0Zm9ybURhdGEuY3RGb250KCkpICYm
ICFtX3BsYXRmb3JtRGF0YS5oYXNWYXJpYXRpb25zKCkpCi0gICAgICAgICAgICBDVEZvbnRHZXRV
bnN1bW1lZEFkdmFuY2VzRm9yR2x5cGhzQW5kU3R5bGUobV9wbGF0Zm9ybURhdGEuY3RGb250KCks
IG9yaWVudGF0aW9uLCBzdHlsZSwgJmdseXBoLCAmYWR2YW5jZSwgMSk7Ci0gICAgICAgIGVsc2UK
LSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBo
cyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgb3JpZW50YXRpb24sICZnbHlwaCwgJmFkdmFuY2Us
IDEpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50
aGV0aWNCb2xkT2Zmc2V0OwotfQotCi1QYXRoIEZvbnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAotewotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRDRihDVEZvbnRDcmVh
dGVQYXRoRm9yR2x5cGgocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGdseXBoLCBudWxscHRyKSk7
Ci0gICAgYXV0byBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gdGhpcy0+c3ludGhldGljQm9sZE9mZnNl
dCgpOwotICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0KSB7Ci0gICAgICAgIGF1dG8gbmV3UGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKLSAgICAgICAgQ0dQYXRoQWRkUGF0
aChuZXdQYXRoLmdldCgpLCBudWxscHRyLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICBhdXRvIHRy
YW5zbGF0aW9uID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlVHJhbnNsYXRpb24oc3ludGhldGljQm9s
ZE9mZnNldCwgMCk7Ci0gICAgICAgIENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgJnRyYW5z
bGF0aW9uLCByZXN1bHQuZ2V0KCkpOwotICAgICAgICByZXR1cm4geyBXVEZNb3ZlKG5ld1BhdGgp
IH07Ci0gICAgfQotICAgIHJldHVybiB7IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZUNvcHko
cmVzdWx0LmdldCgpKSkgfTsKLX0KLQotYm9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBv
aW50KFVDaGFyMzIgY2hhcmFjdGVyLCBPcHRpb25hbDxVQ2hhcjMyPiB2YXJpYXRpb24pIGNvbnN0
Ci17Ci0gICAgaWYgKHZhcmlhdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVW5p
Q2hhciBjb2RlVW5pdHNbMl07Ci0gICAgQ0dHbHlwaCBnbHlwaHNbMl07Ci0gICAgQ0ZJbmRleCBj
b3VudCA9IDA7Ci0gICAgVTE2X0FQUEVORF9VTlNBRkUoY29kZVVuaXRzLCBjb3VudCwgY2hhcmFj
dGVyKTsKLSAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0Zm9ybURh
dGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNvdW50KTsKLX0KLQotYm9vbCBGb250
Ojppc1Byb2JhYmx5T25seVVzZWRUb1JlbmRlckljb25zKCkgY29uc3QKLXsKLSAgICBhdXRvIHBs
YXRmb3JtRm9udCA9IHBsYXRmb3JtRGF0YSgpLmZvbnQoKTsKLSAgICBpZiAoIXBsYXRmb3JtRm9u
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQWxsb3cgbW9zdCBub24taWNvbiBm
b250cyB0byBiYWlsIGVhcmx5IGhlcmUgYnkgdGVzdGluZyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ2En
LCB3aXRob3V0IGl0ZXJhdGluZyBvdmVyIGFsbCBiYXNpYyBsYXRpbiBjaGFyYWN0ZXJzLgotICAg
IFVuaUNoYXIgbG93ZXJjYXNlQUNoYXJhY3RlciA9ICdhJzsKLSAgICBDR0dseXBoIGxvd2VyY2Fz
ZUFHbHlwaDsKLSAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhwbGF0Zm9ybUZv
bnQsICZsb3dlcmNhc2VBQ2hhcmFjdGVyLCAmbG93ZXJjYXNlQUdseXBoLCAxKSkgewotICAgICAg
ICBpZiAoIUNHUmVjdElzRW1wdHkoQ1RGb250R2V0Qm91bmRpbmdSZWN0c0ZvckdseXBocyhwbGF0
Zm9ybUZvbnQsIGtDVEZvbnRPcmllbnRhdGlvbkRlZmF1bHQsICZsb3dlcmNhc2VBR2x5cGgsIG51
bGxwdHIsIDEpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdXRv
IHN1cHBvcnRlZENoYXJhY3RlcnMgPSBhZG9wdENGKENURm9udENvcHlDaGFyYWN0ZXJTZXQocGxh
dGZvcm1Gb250KSk7Ci0gICAgaWYgKENGQ2hhcmFjdGVyU2V0SGFzTWVtYmVySW5QbGFuZShzdXBw
b3J0ZWRDaGFyYWN0ZXJzLmdldCgpLCAxKSB8fCBDRkNoYXJhY3RlclNldEhhc01lbWJlckluUGxh
bmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMikpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIFRoaXMgZW5jb21wYXNzZXMgYWxsIGJhc2ljIExhdGluIG5vbi1jb250cm9sIGNo
YXJhY3RlcnMuCi0gICAgY29uc3RleHByIFVuaUNoYXIgZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgPSAn
ICc7Ci0gICAgY29uc3RleHByIFVuaUNoYXIgbGFzdENoYXJhY3RlclRvVGVzdCA9ICd+JzsKLSAg
ICBjb25zdGV4cHIgYXV0byBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QgPSBsYXN0Q2hhcmFjdGVy
VG9UZXN0IC0gZmlyc3RDaGFyYWN0ZXJUb1Rlc3QgKyAxOwotCi0gICAgVmVjdG9yPENHR2x5cGg+
IGdseXBoczsKLSAgICBnbHlwaHMuZmlsbCgwLCBudW1iZXJPZkNoYXJhY3RlcnNUb1Rlc3QpOwot
ICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlclJhbmdlKHBsYXRmb3JtRm9udCwgZ2x5cGhz
LmJlZ2luKCksIENGUmFuZ2VNYWtlKGZpcnN0Q2hhcmFjdGVyVG9UZXN0LCBudW1iZXJPZkNoYXJh
Y3RlcnNUb1Rlc3QpKTsKLSAgICBnbHlwaHMucmVtb3ZlQWxsKDApOwotCi0gICAgaWYgKGdseXBo
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxDR1JlY3Q+
IGJvdW5kaW5nUmVjdHM7Ci0gICAgYm91bmRpbmdSZWN0cy5maWxsKENHUmVjdFplcm8sIGdseXBo
cy5zaXplKCkpOwotICAgIENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMocGxhdGZvcm1G
b250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCBnbHlwaHMuYmVnaW4oKSwgYm91bmRpbmdS
ZWN0cy5iZWdpbigpLCBnbHlwaHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbm90Rm91bmQgPT0gYm91
bmRpbmdSZWN0cy5maW5kTWF0Y2hpbmcoW10oYXV0byYgcmVjdCkgewotICAgICAgICByZXR1cm4g
IUNHUmVjdElzRW1wdHkocmVjdCk7Ci0gICAgfSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0Zv
bnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbQppbmRleCBkYjFiNGZmNGExNmE0MjNmZTg2
M2NlNzNiNThjNjYyOGMxYjA4ZTY0Li5jOTdkNTBhNTI2YTJmZDcxOGRiOWNjNjIwMTZjMzI1ZWQ4
MWIzYjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tCkBAIC0zNSwzMyArMzUsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBm
b250KQotewotI2lmIEhBVkUoQ1RGT05USVNTWVNURU1VSUZPTlQpCi0gICAgcmV0dXJuIENURm9u
dElzU3lzdGVtVUlGb250KGZvbnQpOwotI2Vsc2UKLSAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRv
cklzU3lzdGVtVUlGb250KGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5n
ZXQoKSk7Ci0jZW5kaWYKLX0KLQotLy8gVGhlc2UgQ29yZVRleHQgVGV4dCBTcGFjaW5nIGZlYXR1
cmUgc2VsZWN0b3JzIGFyZSBub3QgZGVmaW5lZCBpbiBDb3JlVGV4dC4KLWVudW0gVGV4dFNwYWNp
bmdDVEZlYXR1cmVTZWxlY3RvciB7IFRleHRTcGFjaW5nUHJvcG9ydGlvbmFsLCBUZXh0U3BhY2lu
Z0Z1bGxXaWR0aCwgVGV4dFNwYWNpbmdIYWxmV2lkdGgsIFRleHRTcGFjaW5nVGhpcmRXaWR0aCwg
VGV4dFNwYWNpbmdRdWFydGVyV2lkdGggfTsKLQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBi
b29sIHN5bnRoZXRpY09ibGlxdWUsIEZvbnRPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgRm9udFdp
ZHRoVmFyaWFudCB3aWR0aFZhcmlhbnQsIFRleHRSZW5kZXJpbmdNb2RlIHRleHRSZW5kZXJpbmdN
b2RlKQotICAgIDogRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNPYmxpcXVlLCBvcmllbnRhdGlvbiwgd2lkdGhWYXJpYW50LCB0ZXh0UmVuZGVyaW5nTW9kZSkK
LXsKLSAgICBBU1NFUlRfQVJHKGZvbnQsIGZvbnQpOwotICAgIG1fZm9udCA9IGZvbnQ7Ci0gICAg
bV9pc0NvbG9yQml0bWFwRm9udCA9IENURm9udEdldFN5bWJvbGljVHJhaXRzKGZvbnQpICYga0NU
Rm9udFRyYWl0Q29sb3JHbHlwaHM7Ci0gICAgbV9pc1N5c3RlbUZvbnQgPSBXZWJDb3JlOjppc1N5
c3RlbUZvbnQobV9mb250LmdldCgpKTsKLSAgICBhdXRvIHZhcmlhdGlvbnMgPSBhZG9wdENGKHN0
YXRpY19jYXN0PENGRGljdGlvbmFyeVJlZj4oQ1RGb250Q29weUF0dHJpYnV0ZShmb250LCBrQ1RG
b250VmFyaWF0aW9uQXR0cmlidXRlKSkpOwotICAgIG1faGFzVmFyaWF0aW9ucyA9IHZhcmlhdGlv
bnMgJiYgQ0ZEaWN0aW9uYXJ5R2V0Q291bnQodmFyaWF0aW9ucy5nZXQoKSk7Ci0KLSNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIG1faXNFbW9qaSA9IENURm9udElzQXBwbGVDb2xvckVtb2pp
KG1fZm9udC5nZXQoKSk7Ci0jZW5kaWYKLX0KLQogdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6
aGFzaCgpIGNvbnN0CiB7CiAgICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8dWludHB0
cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKQEAgLTcxLDcg
KzQ0LDcgQEAgdW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiAgICAgICAg
IHwgbV9zeW50aGV0aWNCb2xkIDw8IDEKICAgICAgICAgfCBtX3N5bnRoZXRpY09ibGlxdWUpOwog
Ci0gICAgdWludHB0cl90IGZvbnRIYXNoID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KENG
SGFzaChtX2ZvbnQuZ2V0KCkpKTsKKyAgICB1aW50cHRyX3QgZm9udEhhc2ggPSBzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KENGSGFzaChtX2ZvbnQuZ2V0KCkpKTsKICAgICB1aW50cHRyX3QgaGFzaENv
ZGVzW10gPSB7IGZvbnRIYXNoLCBmbGFncyB9OwogICAgIHJldHVybiBTdHJpbmdIYXNoZXI6Omhh
c2hNZW1vcnk8c2l6ZW9mKGhhc2hDb2Rlcyk+KGhhc2hDb2Rlcyk7CiB9CkBAIC04MywxMTggKzU2
LDQgQEAgYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiAgICAgcmV0dXJuIENGRXF1YWwobV9mb250LmdldCgp
LCBvdGhlci5tX2ZvbnQuZ2V0KCkpOwogfQogCi1DVEZvbnRSZWYgRm9udFBsYXRmb3JtRGF0YTo6
cmVnaXN0ZXJlZEZvbnQoKSBjb25zdAotewotICAgIENURm9udFJlZiBwbGF0Zm9ybUZvbnQgPSBm
b250KCk7Ci0gICAgQVNTRVJUKHBsYXRmb3JtRm9udCk7Ci0gICAgaWYgKHBsYXRmb3JtRm9udCAm
JiBhZG9wdENGKENURm9udENvcHlBdHRyaWJ1dGUocGxhdGZvcm1Gb250LCBrQ1RGb250VVJMQXR0
cmlidXRlKSkpCi0gICAgICAgIHJldHVybiBwbGF0Zm9ybUZvbnQ7Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLWlubGluZSBpbnQgbWFwRm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0
b3IoRm9udFdpZHRoVmFyaWFudCB2YXJpYW50KQotewotICAgIHN3aXRjaCh2YXJpYW50KSB7Ci0g
ICAgY2FzZSBGb250V2lkdGhWYXJpYW50OjpSZWd1bGFyV2lkdGg6Ci0gICAgICAgIHJldHVybiBU
ZXh0U3BhY2luZ1Byb3BvcnRpb25hbDsKLQotICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6SGFs
ZldpZHRoOgotICAgICAgICByZXR1cm4gVGV4dFNwYWNpbmdIYWxmV2lkdGg7Ci0KLSAgICBjYXNl
IEZvbnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6Ci0gICAgICAgIHJldHVybiBUZXh0U3BhY2lu
Z1RoaXJkV2lkdGg7Ci0KLSAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OlF1YXJ0ZXJXaWR0aDoK
LSAgICAgICAgcmV0dXJuIFRleHRTcGFjaW5nUXVhcnRlcldpZHRoOwotICAgIH0KLQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBUZXh0U3BhY2luZ1Byb3BvcnRpb25hbDsK
LX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RSZXNv
cnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCi17Ci0gICAgYXV0byBsYXN0UmVzb3J0ID0gYWRvcHRD
RihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0UmVzb3J0
IiksIDApKTsKLQotICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVzb3J0Lmdl
dCgpIH07Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlfTEVOR1RI
KGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgQ0ZUeXBlUmVm
IGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07Ci0gICAgQ0ZUeXBlUmVm
IHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OwotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9M
RU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYg
Y2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpCi17Ci0gICAg
c3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENURm9udERlc2NyaXB0b3JD
cmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rpb25h
cnkoKS5nZXQoKSk7Ci0gICAgcmV0dXJuIGRlc2NyaXB0b3I7Ci19Ci0KLUNURm9udFJlZiBGb250
UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAotewotICAgIGlmIChtX2N0Rm9udCkKLSAgICAg
ICAgcmV0dXJuIG1fY3RGb250LmdldCgpOwotCi0gICAgQVNTRVJUKG1fZm9udCk7Ci0gICAgbV9j
dEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQuZ2V0
KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250
RGVzY3JpcHRvcigpKSk7Ci0KLSAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRoVmFy
aWFudDo6UmVndWxhcldpZHRoKSB7Ci0gICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0ga1Rl
eHRTcGFjaW5nVHlwZTsKLSAgICAgICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFwRm9u
dFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOwotICAgICAg
ICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7Ci0gICAgICAgIFJl
dGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlVHlwZVZhbHVl
KSk7Ci0gICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9yID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBl
LCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKLSAgICAgICAgUmV0YWluUHRyPENURm9udERlc2Ny
aXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVD
b3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUuZ2V0KCks
IGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOwotICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBu
ZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3RGVzY3Jp
cHRvci5nZXQoKSwgbV9zaXplLCAwKSk7Ci0KLSAgICAgICAgaWYgKG5ld0ZvbnQpCi0gICAgICAg
ICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY3RGb250Lmdl
dCgpOwotfQotCi1SZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1EYXRhOjpvYmplY3RG
b3JFcXVhbGl0eUNoZWNrKENURm9udFJlZiBjdEZvbnQpCi17Ci0gICAgYXV0byBmb250RGVzY3Jp
cHRvciA9IGFkb3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGN0Rm9udCkpOwotICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4NjgzIFRo
aXMgaXMgYSBzaGFsbG93IHBvaW50ZXIgY29tcGFyZSBmb3Igd2ViIGZvbnRzCi0gICAgLy8gYmVj
YXVzZSB0aGUgVVJMIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmb250LiBUaGlzIG1lYW5z
IHdlIG1pZ2h0IGVycm9uZW91c2x5IGdldCBmYWxzZSBuZWdhdGl2ZXMuCi0gICAgUmV0YWluUHRy
PENGVVJMUmVmPiB1cmwgPSBhZG9wdENGKHN0YXRpY19jYXN0PENGVVJMUmVmPihDVEZvbnREZXNj
cmlwdG9yQ29weUF0dHJpYnV0ZShmb250RGVzY3JpcHRvci5nZXQoKSwga0NURm9udFJlZmVyZW5j
ZVVSTEF0dHJpYnV0ZSkpKTsKLSAgICBBU1NFUlQoIXVybCB8fCBDRkdldFR5cGVJRCh1cmwuZ2V0
KCkpID09IENGVVJMR2V0VHlwZUlEKCkpOwotICAgIHJldHVybiB1cmw7Ci19Ci0KLVJldGFpblB0
cjxDRlR5cGVSZWY+IEZvbnRQbGF0Zm9ybURhdGE6Om9iamVjdEZvckVxdWFsaXR5Q2hlY2soKSBj
b25zdAotewotICAgIHJldHVybiBvYmplY3RGb3JFcXVhbGl0eUNoZWNrKGN0Rm9udCgpKTsKLX0K
LQotUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSh1
aW50MzJfdCB0YWJsZSkgY29uc3QKLXsKLSAgICBpZiAoUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0
YSA9IGFkb3B0Q0YoQ1RGb250Q29weVRhYmxlKGZvbnQoKSwgdGFibGUsIGtDVEZvbnRUYWJsZU9w
dGlvbk5vT3B0aW9ucykpKQotICAgICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0
YS5nZXQoKSk7Ci0gICAgCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLSNpZiAhTE9HX0RJU0FC
TEVECi0KLVN0cmluZyBGb250UGxhdGZvcm1EYXRhOjpkZXNjcmlwdGlvbigpIGNvbnN0Ci17Ci0g
ICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFkb3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9u
dCgpKSkuZ2V0KCkgfTsKLSAgICByZXR1cm4gbWFrZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcg
JywgbV9zaXplLAotICAgICAgICAobV9zeW50aGV0aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIg
OiAiIiksCi0gICAgICAgIChtX3N5bnRoZXRpY09ibGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVl
IiA6ICIiKSwKLSAgICAgICAgKG1fb3JpZW50YXRpb24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24iIDogIiIpKTsKLX0KLQotI2VuZGlmCi0KLVN0
cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlOYW1lKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENURm9udENv
cHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdldCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAK
aW5kZXggZDgxNTQ4YTMwYjlkMjJjYWZmOGFhNzg3MGRhYjRiZWZiMjM0YjkwNC4uOGFlYzJlYTNk
NGYxNzU5ZGY3Y2U2NDIzNmMzMmI2ODE1NjQ0ZGY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFy
c2VyV2ViTS5jcHAKQEAgLTUzLDkgKzUzLDYgQEAgV1RGX1dFQUtfTElOS19GT1JDRV9JTVBPUlQo
d2VibTo6c3dhcCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFJlbW92ZSB0
aGlzIG9uY2Uga0NNVmlkZW9Db2RlY1R5cGVfVlA5IGlzIGFkZGVkIHRvIENNRm9ybWF0RGVzY3Jp
cHRpb24uaAotY29uc3RleHByIENNVmlkZW9Db2RlY1R5cGUga0NNVmlkZW9Db2RlY1R5cGVfVlA5
IHsgJ3ZwMDknIH07Ci0KIHVzaW5nIG5hbWVzcGFjZSBQQUw7CiAKIHN0YXRpYyBib29sIGlzV2Vi
bVBhcnNlckF2YWlsYWJsZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2N0L0ZvbnRDYXNjYWRlQ29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyOGI1
MTI0M2U1Nzg1YTA2MmRmZWViYmU3NjM3ZTUzMDY2MDQ5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNw
cApAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMjAsIDIwMTYgQXBw
bGUgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKwor
I2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRhc2hBcnJheS5o
IgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dp
bi9Db3JlVGV4dFNQSVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
Q29uZnVzaW5nbHksIGV2ZW4gd2hlbiBDR0ZvbnRSZW5kZXJpbmdHZXRGb250U21vb3RoaW5nRGlz
YWJsZWQoKSByZXR1cm5zIHRydWUsIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKCkgc3Rp
bGwgaW1wYWN0cyB0ZXh0CisvLyByZW5kZXJpbmcsIHdoaWNoIGlzIHdoeSB0aGlzIGZ1bmN0aW9u
IHVzZXMgdGhlICJzdWJwaXhlbCBhbnRpYWxpYXNpbmciIHJhdGhlciB0aGFuICJzbW9vdGhpbmci
IHRlcm1pbm9sb2d5LgorYm9vbCBGb250Q2FzY2FkZTo6aXNTdWJwaXhlbEFudGlhbGlhc2luZ0F2
YWlsYWJsZSgpCit7CisjaWYgSEFWRShDR19GT05UX1JFTkRFUklOR19HRVRfRk9OVF9TTU9PVEhJ
TkdfRElTQUJMRUQpCisgICAgc3RhdGljIGJvb2wgc3VicGl4ZWxBbnRpYWxpYXNpbmdFbmFibGVk
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25j
ZShvbmNlRmxhZywgWyZdKCkgeworICAgICAgICBzdWJwaXhlbEFudGlhbGlhc2luZ0VuYWJsZWQg
PSAhQ0dGb250UmVuZGVyaW5nR2V0Rm9udFNtb290aGluZ0Rpc2FibGVkKCk7CisgICAgfSk7Cisg
ICAgcmV0dXJuIHN1YnBpeGVsQW50aWFsaWFzaW5nRW5hYmxlZDsKKyNlbGlmIFBMQVRGT1JNKE1B
QykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgZmlsbFZlY3RvcldpdGhIb3Jpem9udGFsR2x5cGhQb3NpdGlvbnMoVmVjdG9yPENH
UG9pbnQsIDI1Nj4mIHBvc2l0aW9ucywgQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENHU2l6
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIGNvdW50KQoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldFRleHRNYXRyaXgoY29u
dGV4dCkpOworICAgIHBvc2l0aW9uc1swXSA9IENHUG9pbnRaZXJvOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENHU2l6ZSBhZHZhbmNlID0gQ0dT
aXplQXBwbHlBZmZpbmVUcmFuc2Zvcm0oYWR2YW5jZXNbaSAtIDFdLCBtYXRyaXgpOworICAgICAg
ICBwb3NpdGlvbnNbaV0ueCA9IHBvc2l0aW9uc1tpIC0gMV0ueCArIGFkdmFuY2Uud2lkdGg7Cisg
ICAgICAgIHBvc2l0aW9uc1tpXS55ID0gcG9zaXRpb25zW2kgLSAxXS55ICsgYWR2YW5jZS5oZWln
aHQ7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkVXNlTGV0dGVycHJlc3NF
ZmZlY3QoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIEVOQUJMRShMRVRU
RVJQUkVTUykKKyAgICByZXR1cm4gY29udGV4dC50ZXh0RHJhd2luZ01vZGUoKS5jb250YWlucyhU
ZXh0RHJhd2luZ01vZGU6OkxldHRlcnByZXNzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzaG93
R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGb250JiBm
b250LCBDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ0dHbHlwaCogZ2x5cGhzLCBjb25zdCBD
R1NpemUqIGFkdmFuY2VzLCB1bnNpZ25lZCBjb3VudCkKK3sKKyAgICBpZiAoIWNvdW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY29udGV4dCwgcG9p
bnQueCgpLCBwb2ludC55KCkpOworCisgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZv
cm1EYXRhID0gZm9udC5wbGF0Zm9ybURhdGEoKTsKKyAgICBWZWN0b3I8Q0dQb2ludCwgMjU2PiBw
b3NpdGlvbnMoY291bnQpOworICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBG
b250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHJv
dGF0ZUxlZnRUcmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMCwgLTEsIDEsIDAsIDAs
IDApOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0ZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0
VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gcnVuTWF0cml4
ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodGV4dE1hdHJpeCwgcm90YXRlTGVmdFRyYW5zZm9y
bSk7CisgICAgICAgIFNjb3BlZFRleHRNYXRyaXggc2F2ZWRNYXRyaXgocnVuTWF0cml4LCBjb250
ZXh0KTsKKworICAgICAgICBWZWN0b3I8Q0dTaXplLCAyNTY+IHRyYW5zbGF0aW9ucyhjb3VudCk7
CisgICAgICAgIENURm9udEdldFZlcnRpY2FsVHJhbnNsYXRpb25zRm9yR2x5cGhzKHBsYXRmb3Jt
RGF0YS5jdEZvbnQoKSwgZ2x5cGhzLCB0cmFuc2xhdGlvbnMuZGF0YSgpLCBjb3VudCk7CisKKyAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZl
cnQoQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KSk7CisKKyAgICAgICAgQ0dQb2ludCBw
b3NpdGlvbiA9IEZsb2F0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBmb250LmZvbnRNZXRy
aWNzKCkuZmxvYXRBc2NlbnQoSWRlb2dyYXBoaWNCYXNlbGluZSkgLSBmb250LmZvbnRNZXRyaWNz
KCkuZmxvYXRBc2NlbnQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgICAgICBDR1NpemUgdHJhbnNsYXRpb24gPSBDR1NpemVBcHBseUFm
ZmluZVRyYW5zZm9ybSh0cmFuc2xhdGlvbnNbaV0sIHJvdGF0ZUxlZnRUcmFuc2Zvcm0pOworICAg
ICAgICAgICAgcG9zaXRpb25zW2ldID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKENHUG9p
bnRNYWtlKHBvc2l0aW9uLnggLSB0cmFuc2xhdGlvbi53aWR0aCwgcG9zaXRpb24ueSArIHRyYW5z
bGF0aW9uLmhlaWdodCksIHRyYW5zZm9ybSk7CisgICAgICAgICAgICBwb3NpdGlvbi54ICs9IGFk
dmFuY2VzW2ldLndpZHRoOworICAgICAgICAgICAgcG9zaXRpb24ueSArPSBhZHZhbmNlc1tpXS5o
ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgQ1RGb250RHJhd0dseXBocyhwbGF0Zm9ybURhdGEu
Y3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwgY291bnQsIGNvbnRleHQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGZpbGxWZWN0b3JXaXRoSG9yaXpvbnRhbEdseXBoUG9zaXRpb25z
KHBvc2l0aW9ucywgY29udGV4dCwgYWR2YW5jZXMsIGNvdW50KTsKKyAgICAgICAgQ1RGb250RHJh
d0dseXBocyhwbGF0Zm9ybURhdGEuY3RGb250KCksIGdseXBocywgcG9zaXRpb25zLmRhdGEoKSwg
Y291bnQsIGNvbnRleHQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0Q0dGb250UmVuZGVy
aW5nTW9kZShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2V0U2hv
dWxkQW50aWFsaWFzRm9udHMoY2dDb250ZXh0LCB0cnVlKTsKKworICAgIENHQWZmaW5lVHJhbnNm
b3JtIGNvbnRleHRUcmFuc2Zvcm0gPSBDR0NvbnRleHRHZXRDVE0oY2dDb250ZXh0KTsKKyAgICBi
b29sIGlzVHJhbnNsYXRpb25PckludGVncmFsU2NhbGUgPSBXVEY6OmlzSW50ZWdyYWwoY29udGV4
dFRyYW5zZm9ybS5hKSAmJiBXVEY6OmlzSW50ZWdyYWwoY29udGV4dFRyYW5zZm9ybS5kKSAmJiBj
b250ZXh0VHJhbnNmb3JtLmIgPT0gMC5mICYmIGNvbnRleHRUcmFuc2Zvcm0uYyA9PSAwLmY7Cisg
ICAgYm9vbCBpc1JvdGF0ZWQgPSAoKGNvbnRleHRUcmFuc2Zvcm0uYiB8fCBjb250ZXh0VHJhbnNm
b3JtLmMpICYmIChjb250ZXh0VHJhbnNmb3JtLmEgfHwgY29udGV4dFRyYW5zZm9ybS5kKSk7Cisg
ICAgYm9vbCBkb1N1YnBpeGVsUXVhbnRpemF0aW9uID0gaXNUcmFuc2xhdGlvbk9ySW50ZWdyYWxT
Y2FsZSB8fCAoIWlzUm90YXRlZCAmJiBjb250ZXh0LnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cygpKTsKKworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUG9zaXRpb25Gb250cyhjZ0Nv
bnRleHQsIHRydWUpOworICAgIENHQ29udGV4dFNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
cyhjZ0NvbnRleHQsIGRvU3VicGl4ZWxRdWFudGl6YXRpb24pOworfQorCit2b2lkIEZvbnRDYXNj
YWRlOjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSBzbW9vdGhpbmdNb2RlKQoreworICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRm
b3JtRGF0YSA9IGZvbnQucGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzID0gdHJ1
ZTsKKyAgICBib29sIHNob3VsZFNtb290aEZvbnRzID0gdHJ1ZTsKKworICAgIGlmICghZm9udC5h
bGxvd3NBbnRpYWxpYXNpbmcoKSkKKyAgICAgICAgc21vb3RoaW5nTW9kZSA9IEZvbnRTbW9vdGhp
bmdNb2RlOjpOb1Ntb290aGluZzsKKworICAgIHN3aXRjaCAoc21vb3RoaW5nTW9kZSkgeworICAg
IGNhc2UgRm9udFNtb290aGluZ01vZGU6OkFudGlhbGlhc2VkOgorICAgICAgICBzaG91bGRTbW9v
dGhGb250cyA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRTbW9vdGhpbmdN
b2RlOjpBdXRvU21vb3RoaW5nOgorICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6OlN1YnBpeGVs
QW50aWFsaWFzZWQ6CisgICAgICAgIHNob3VsZEFudGlhbGlhcyA9IHRydWU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOgorICAgICAgICBz
aG91bGRBbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFzaG91bGRVc2VTbW9vdGhpbmco
KSkKKyAgICAgICAgc2hvdWxkU21vb3RoRm9udHMgPSBmYWxzZTsKKworI2lmICFQTEFURk9STShJ
T1NfRkFNSUxZKQorICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gQ0dD
b250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KTsKKyAgICBpZiAoc2hvdWxkU21v
b3RoRm9udHMgIT0gb3JpZ2luYWxTaG91bGRVc2VGb250U21vb3RoaW5nKQorICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIHNob3VsZFNtb290aEZvbnRzKTsK
KyNlbmRpZgorCisgICAgYm9vbCBvcmlnaW5hbFNob3VsZEFudGlhbGlhcyA9IENHQ29udGV4dEdl
dFNob3VsZEFudGlhbGlhcyhjZ0NvbnRleHQpOworICAgIGlmIChzaG91bGRBbnRpYWxpYXMgIT0g
b3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhjZ0NvbnRleHQsIHNob3VsZEFudGlhbGlhcyk7CisKKyAgICBib29sIHVzZUxldHRlcnBy
ZXNzRWZmZWN0ID0gc2hvdWxkVXNlTGV0dGVycHJlc3NFZmZlY3QoY29udGV4dCk7CisgICAgVU5V
U0VEX1ZBUklBQkxFKHVzZUxldHRlcnByZXNzRWZmZWN0KTsKKyAgICBGbG9hdFBvaW50IHBvaW50
ID0gYW5jaG9yUG9pbnQ7CisKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmlu
ZVRyYW5zZm9ybUlkZW50aXR5OworICAgIGlmICghcGxhdGZvcm1EYXRhLmlzQ29sb3JCaXRtYXBG
b250KCkpCisgICAgICAgIG1hdHJpeCA9IENURm9udEdldE1hdHJpeChwbGF0Zm9ybURhdGEuZm9u
dCgpKTsKKyAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKKyAgICBtYXRyaXguZCA9IC1tYXRyaXgu
ZDsKKyAgICBpZiAocGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSkgeworICAgICAgICBz
dGF0aWMgZmxvYXQgb2JsaXF1ZVNrZXcgPSB0YW5mKHN5bnRoZXRpY09ibGlxdWVBbmdsZSgpICog
cGlGbG9hdCAvIDE4MCk7CisgICAgICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9
PSBGb250T3JpZW50YXRpb246OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBpZiAoZm9udC5pc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCisgICAgICAgICAgICAgICAgbWF0cml4ID0gQ0dBZmZp
bmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgb2JsaXF1
ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3Jt
TWFrZSgxLCAtb2JsaXF1ZVNrZXcsIDAsIDEsIDAsIDApKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5l
VHJhbnNmb3JtTWFrZSgxLCAwLCAtb2JsaXF1ZVNrZXcsIDEsIDAsIDApKTsKKyAgICB9CisgICAg
U2NvcGVkVGV4dE1hdHJpeCByZXN0b3JlcihtYXRyaXgsIGNnQ29udGV4dCk7CisKKyAgICBzZXRD
R0ZvbnRSZW5kZXJpbmdNb2RlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNn
Q29udGV4dCwgcGxhdGZvcm1EYXRhLnNpemUoKSk7CisKKyAgICBGbG9hdFNpemUgc2hhZG93T2Zm
c2V0OworICAgIGZsb2F0IHNoYWRvd0JsdXI7CisgICAgQ29sb3Igc2hhZG93Q29sb3I7CisgICAg
Y29udGV4dC5nZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dCbHVyLCBzaGFkb3dDb2xvcik7
CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY29udGV4dENUTSA9IGNvbnRleHQuZ2V0Q1RNKCk7Cisg
ICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
OworICAgIGlmIChzeW50aGV0aWNCb2xkT2Zmc2V0ICYmICFjb250ZXh0Q1RNLmlzSWRlbnRpdHlP
clRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpIHsKKyAgICAgICAgRmxvYXRTaXplIGhvcml6b250YWxV
bml0U2l6ZUluRGV2aWNlUGl4ZWxzID0gY29udGV4dENUTS5tYXBTaXplKEZsb2F0U2l6ZSgxLCAw
KSk7CisgICAgICAgIGZsb2F0IGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMgPSBz
cXJ0Zihob3Jpem9udGFsVW5pdFNpemVJbkRldmljZVBpeGVscy53aWR0aCgpICogaG9yaXpvbnRh
bFVuaXRTaXplSW5EZXZpY2VQaXhlbHMud2lkdGgoKSArIGhvcml6b250YWxVbml0U2l6ZUluRGV2
aWNlUGl4ZWxzLmhlaWdodCgpICogaG9yaXpvbnRhbFVuaXRTaXplSW5EZXZpY2VQaXhlbHMuaGVp
Z2h0KCkpOworICAgICAgICBpZiAoaG9yaXpvbnRhbFVuaXRMZW5ndGhJbkRldmljZVBpeGVscykg
eworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYSBzY2FsZWQgZG93biBjb250ZXh0IHdv
bid0IGJsb3cgdXAgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnbHlwaHMuCisgICAgICAgICAgICBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gc3RkOjptaW4oc3ludGhldGljQm9sZE9mZnNldCwgc3ludGhldGlj
Qm9sZE9mZnNldCAvIGhvcml6b250YWxVbml0TGVuZ3RoSW5EZXZpY2VQaXhlbHMpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGJvb2wgaGFzU2ltcGxlU2hhZG93ID0gY29udGV4dC50ZXh0RHJh
d2luZ01vZGUoKSA9PSBUZXh0RHJhd2luZ01vZGU6OkZpbGwgJiYgc2hhZG93Q29sb3IuaXNWYWxp
ZCgpICYmICFzaGFkb3dCbHVyICYmICFwbGF0Zm9ybURhdGEuaXNDb2xvckJpdG1hcEZvbnQoKSAm
JiAoIWNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjb250ZXh0Q1RNLmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpICYmICFjb250ZXh0LmlzSW5UcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIGlmIChoYXNTaW1wbGVTaGFkb3cpIHsKKyAgICAgICAgLy8gUGFpbnQg
c2ltcGxlIHNoYWRvd3Mgb3Vyc2VsdmVzIGluc3RlYWQgb2YgcmVseWluZyBvbiBDRyBzaGFkb3dz
LCB0byBhdm9pZCBsb3Npbmcgc3VicGl4ZWwgYW50aWFsaWFzaW5nLgorICAgICAgICBjb250ZXh0
LmNsZWFyU2hhZG93KCk7CisgICAgICAgIENvbG9yIGZpbGxDb2xvciA9IGNvbnRleHQuZmlsbENv
bG9yKCk7CisgICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9y
V2l0aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7CisgICAgICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKHNoYWRvd0ZpbGxDb2xvcik7CisgICAgICAgIGZsb2F0IHNo
YWRvd1RleHRYID0gcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgICAgIC8v
IElmIHNoYWRvd3MgYXJlIGlnbm9yaW5nIHRyYW5zZm9ybXMsIHRoZW4gd2UgaGF2ZW4ndCBhcHBs
aWVkIHRoZSBZIGNvb3JkaW5hdGUgZmxpcCB5ZXQsIHNvIGRvd24gaXMgbmVnYXRpdmUuCisgICAg
ICAgIGZsb2F0IHNoYWRvd1RleHRZID0gcG9pbnQueSgpICsgc2hhZG93T2Zmc2V0LmhlaWdodCgp
ICogKGNvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSA/IC0xIDogMSk7CisgICAgICAg
IHNob3dHbHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChzaGFkb3dUZXh0WCwgc2hhZG93VGV4
dFkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgICAgIGlmIChzeW50aGV0aWNCb2xk
T2Zmc2V0KQorICAgICAgICAgICAgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhGbG9hdFBvaW50KHNo
YWRvd1RleHRYICsgc3ludGhldGljQm9sZE9mZnNldCwgc2hhZG93VGV4dFkpLCBmb250LCBjZ0Nv
bnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJv
bSksIG51bUdseXBocyk7CisgICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7
CisgICAgfQorCisjaWYgRU5BQkxFKExFVFRFUlBSRVNTKQorICAgIGlmICh1c2VMZXR0ZXJwcmVz
c0VmZmVjdCkKKyAgICAgICAgc2hvd0xldHRlcnByZXNzZWRHbHlwaHNXaXRoQWR2YW5jZXMocG9p
bnQsIGZvbnQsIGNvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAg
ICAgICBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKHBvaW50LCBmb250LCBjZ0NvbnRleHQsIGdseXBo
QnVmZmVyLmdseXBocyhmcm9tKSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBo
cyk7CisgICAgfQorCisgICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIHNob3dH
bHlwaHNXaXRoQWR2YW5jZXMoRmxvYXRQb2ludChwb2ludC54KCkgKyBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBwb2ludC55KCkpLCBmb250LCBjZ0NvbnRleHQsIGdseXBoQnVmZmVyLmdseXBocyhmcm9t
KSwgZ2x5cGhCdWZmZXIuYWR2YW5jZXMoZnJvbSksIG51bUdseXBocyk7CisKKyAgICBpZiAoaGFz
U2ltcGxlU2hhZG93KQorICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKKworI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAg
IGlmIChzaG91bGRTbW9vdGhGb250cyAhPSBvcmlnaW5hbFNob3VsZFVzZUZvbnRTbW9vdGhpbmcp
CisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgb3JpZ2lu
YWxTaG91bGRVc2VGb250U21vb3RoaW5nKTsKKyNlbmRpZgorCisgICAgaWYgKHNob3VsZEFudGlh
bGlhcyAhPSBvcmlnaW5hbFNob3VsZEFudGlhbGlhcykKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hv
dWxkQW50aWFsaWFzKGNnQ29udGV4dCwgb3JpZ2luYWxTaG91bGRBbnRpYWxpYXMpOworfQorCiti
b29sIEZvbnRDYXNjYWRlOjpwcmltYXJ5Rm9udElzU3lzdGVtRm9udCgpIGNvbnN0Cit7CisgICAg
Y29uc3QgYXV0byYgZm9udERhdGEgPSBwcmltYXJ5Rm9udCgpOworICAgIHJldHVybiBpc1N5c3Rl
bUZvbnQoZm9udERhdGEucGxhdGZvcm1EYXRhKCkuY3RGb250KCkpOworfQorCisvLyBGSVhNRTog
VXNlIHRoaXMgb24gYWxsIHBvcnRzLgorY29uc3QgRm9udCogRm9udENhc2NhZGU6OmZvbnRGb3JD
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90
IGxlbmd0aCkgY29uc3QKK3sKKyAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0ZXI7CisgICAgc2l6ZV90
IGJhc2VDaGFyYWN0ZXJMZW5ndGggPSAwOworICAgIFUxNl9ORVhUKGNoYXJhY3RlcnMsIGJhc2VD
aGFyYWN0ZXJMZW5ndGgsIGxlbmd0aCwgYmFzZUNoYXJhY3Rlcik7CisKKyAgICBHbHlwaERhdGEg
YmFzZUNoYXJhY3RlckdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihiYXNlQ2hhcmFj
dGVyLCBmYWxzZSwgTm9ybWFsVmFyaWFudCk7CisKKyAgICBpZiAoIWJhc2VDaGFyYWN0ZXJHbHlw
aERhdGEuZ2x5cGgpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGxlbmd0aCA9
PSBiYXNlQ2hhcmFjdGVyTGVuZ3RoKQorICAgICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBo
RGF0YS5mb250OworCisgICAgYm9vbCB0cmllZEJhc2VDaGFyYWN0ZXJGb250ID0gZmFsc2U7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZmFsbGJhY2tSYW5nZXNBdChpKS5pc051bGwoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBmYWxsYmFja1Jhbmdlc0F0KGkpLmZv
bnRGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAgICAgIGlmICghZm9udCkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgIGlmIChi
YXNlQ2hhcmFjdGVyID49IDB4MDYwMCAmJiBiYXNlQ2hhcmFjdGVyIDw9IDB4MDZmZiAmJiBmb250
LT5zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworI2Vu
ZGlmCisgICAgICAgIGlmIChmb250LT5wbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZv
bnRPcmllbnRhdGlvbjo6VmVydGljYWwpIHsKKyAgICAgICAgICAgIGlmIChpc0NKS0lkZW9ncmFw
aE9yU3ltYm9sKGJhc2VDaGFyYWN0ZXIpICYmICFmb250LT5oYXNWZXJ0aWNhbEdseXBocygpKQor
ICAgICAgICAgICAgICAgIGZvbnQgPSAmZm9udC0+YnJva2VuSWRlb2dyYXBoRm9udCgpOworICAg
ICAgICAgICAgZWxzZSBpZiAobV9mb250RGVzY3JpcHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlv
bigpID09IE5vbkNKS0dseXBoT3JpZW50YXRpb246Ok1peGVkKSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgRm9udCYgdmVydGljYWxSaWdodEZvbnQgPSBmb250LT52ZXJ0aWNhbFJpZ2h0T3JpZW50
YXRpb25Gb250KCk7CisgICAgICAgICAgICAgICAgR2x5cGggdmVydGljYWxSaWdodEdseXBoID0g
dmVydGljYWxSaWdodEZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoYmFzZUNoYXJhY3Rlcik7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRHbHlwaCA9PSBiYXNlQ2hhcmFjdGVyR2x5cGhE
YXRhLmdseXBoKQorICAgICAgICAgICAgICAgICAgICBmb250ID0gJnZlcnRpY2FsUmlnaHRGb250
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGb250JiB1cHJp
Z2h0Rm9udCA9IGZvbnQtPnVwcmlnaHRPcmllbnRhdGlvbkZvbnQoKTsKKyAgICAgICAgICAgICAg
ICBHbHlwaCB1cHJpZ2h0R2x5cGggPSB1cHJpZ2h0Rm9udC5nbHlwaEZvckNoYXJhY3RlcihiYXNl
Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgICAgICBpZiAodXByaWdodEdseXBoICE9IGJhc2VDaGFy
YWN0ZXJHbHlwaERhdGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgICAgIGZvbnQgPSAmdXByaWdo
dEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZm9udCA9PSBi
YXNlQ2hhcmFjdGVyR2x5cGhEYXRhLmZvbnQpCisgICAgICAgICAgICB0cmllZEJhc2VDaGFyYWN0
ZXJGb250ID0gdHJ1ZTsKKworICAgICAgICBpZiAoZm9udC0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiBm
b250OworICAgIH0KKworICAgIGlmICghdHJpZWRCYXNlQ2hhcmFjdGVyRm9udCAmJiBiYXNlQ2hh
cmFjdGVyR2x5cGhEYXRhLmZvbnQgJiYgYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250LT5jYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjaGFyYWN0ZXJzLCBsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gYmFzZUNoYXJhY3RlckdseXBoRGF0YS5mb250OworCisgICAgcmV0dXJuIEZv
bnQ6OnN5c3RlbUZhbGxiYWNrKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2N0L0ZvbnRDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllMjI1MWQ2
YWRhOWEwZWEwYzQ4MTJmN2M1NTYzN2Y5ZjA5NDg5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jdC9Gb250Q29yZVRleHQuY3BwCkBAIC0wLDAg
KzEsNzcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKwor
I2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9u
dENhY2hlLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKKyNpbmNsdWRlICJPcGVuVHlwZUNHLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgor
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIkxvY2FsZUNvY29hLmgiCisjaW5jbHVkZSA8cGFsL3NwaS9jb2Nv
YS9Db3JlVGV4dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQ
SVdpbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBi
b29sIGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoQ0ZTdHJpbmdSZWYgYSwgQ0ZTdHJpbmdSZWYgYikK
K3sKKyAgICByZXR1cm4gYSAmJiBDRlN0cmluZ0NvbXBhcmUoYSwgYiwga0NGQ29tcGFyZUNhc2VJ
bnNlbnNpdGl2ZSkgPT0ga0NGQ29tcGFyZUVxdWFsVG87Cit9CisKK3N0YXRpYyBib29sIGZvbnRI
YXNWZXJ0aWNhbEdseXBocyhDVEZvbnRSZWYgZm9udCkKK3sKKyAgICByZXR1cm4gZm9udEhhc0Vp
dGhlclRhYmxlKGZvbnQsIGtDVEZvbnRUYWJsZVZoZWEsIGtDVEZvbnRUYWJsZVZPUkcpOworfQor
CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2Jvb2wgZm9udEZhbWlseVNob3VsZE5vdEJlVXNl
ZEZvckFyYWJpYyhDRlN0cmluZ1JlZiBmb250RmFtaWx5TmFtZSkKK3sKKyAgICBpZiAoIWZvbnRG
YW1pbHlOYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaW1lcyBOZXcgUm9t
YW4gYW5kIEFyaWFsIGFyZSBub3QgcGVyZm9ybWFudCBlbm91Z2ggdG8gdXNlLiA8cmRhcjovL3By
b2JsZW0vMjEzMzMzMjY+CisgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1PiBy
ZW1vdmUgdGhpcyBmdW5jdGlvbiBvbmNlIHRoZSBhYm92ZSBidWcgaXMgZml4ZWQuCisgICAgcmV0
dXJuIChDRlN0cmluZ0NvbXBhcmUoQ0ZTVFIoIlRpbWVzIE5ldyBSb21hbiIpLCBmb250RmFtaWx5
TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgIHx8IChDRlN0cmluZ0NvbXBh
cmUoQ0ZTVFIoIkFyaWFsIiksIGZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxU
byk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBrTGluZUhlaWdodEFkanVzdG1lbnQgPSAwLjE1
ZjsKKworc3RhdGljIGJvb2wgc2hvdWxkVXNlQWRqdXN0bWVudChDVEZvbnRSZWYgZm9udCkKK3sK
KyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGZhbWlseU5hbWUgPSBhZG9wdENGKENURm9udENv
cHlGYW1pbHlOYW1lKGZvbnQpKTsKKworICAgIGlmICghZmFtaWx5TmFtZSB8fCAhQ0ZTdHJpbmdH
ZXRMZW5ndGgoZmFtaWx5TmFtZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0KCksIENGU1RSKCJU
aW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRpdmVDb21wYXJlKGZhbWlseU5hbWUuZ2V0
KCksIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2FzZUluc2Vuc2l0aXZlQ29tcGFy
ZShmYW1pbHlOYW1lLmdldCgpLCBDRlNUUigiLkhlbHZldGljYSBOZXVlVUkiKSk7Cit9CisKKyNl
bHNlCisKK3N0YXRpYyBib29sIG5lZWRzQXNjZW50QWRqdXN0bWVudChDRlN0cmluZ1JlZiBmYW1p
bHlOYW1lKQoreworICAgIHJldHVybiBmYW1pbHlOYW1lICYmIChjYXNlSW5zZW5zaXRpdmVDb21w
YXJlKGZhbWlseU5hbWUsIENGU1RSKCJUaW1lcyIpKQorICAgICAgICB8fCBjYXNlSW5zZW5zaXRp
dmVDb21wYXJlKGZhbWlseU5hbWUsIENGU1RSKCJIZWx2ZXRpY2EiKSkKKyAgICAgICAgfHwgY2Fz
ZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1pbHlOYW1lLCBDRlNUUigiQ291cmllciIpKSk7Cit9CisK
KyNlbmRpZgorCitzdGF0aWMgYm9vbCBpc0FoZW1Gb250KENGU3RyaW5nUmVmIGZhbWlseU5hbWUp
Cit7CisgICAgcmV0dXJuIGZhbWlseU5hbWUgJiYgY2FzZUluc2Vuc2l0aXZlQ29tcGFyZShmYW1p
bHlOYW1lLCBDRlNUUigiQWhlbSIpKTsKK30KKworYm9vbCBmb250SGFzVGFibGUoQ1RGb250UmVm
IGN0Rm9udCwgdW5zaWduZWQgdGFibGVUYWcpCit7CisgICAgYXV0byB0YWJsZVRhZ3MgPSBhZG9w
dENGKENURm9udENvcHlBdmFpbGFibGVUYWJsZXMoY3RGb250LCBrQ1RGb250VGFibGVPcHRpb25O
b09wdGlvbnMpKTsKKyAgICBpZiAoIXRhYmxlVGFncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIENGSW5kZXggbnVtVGFibGVzID0gQ0ZBcnJheUdldENvdW50KHRhYmxlVGFncy5nZXQoKSk7
CisgICAgZm9yIChDRkluZGV4IGluZGV4ID0gMDsgaW5kZXggPCBudW1UYWJsZXM7ICsraW5kZXgp
IHsKKyAgICAgICAgYXV0byB0YWcgPSBzdGF0aWNfY2FzdDxDVEZvbnRUYWJsZVRhZz4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgodGFibGVUYWdzLmdl
dCgpLCBpbmRleCkpKTsKKyAgICAgICAgaWYgKHRhZyA9PSB0YWJsZVRhZykKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgZm9udEhh
c0VpdGhlclRhYmxlKENURm9udFJlZiBjdEZvbnQsIHVuc2lnbmVkIHRhYmxlVGFnMSwgdW5zaWdu
ZWQgdGFibGVUYWcyKQoreworICAgIGF1dG8gdGFibGVUYWdzID0gYWRvcHRDRihDVEZvbnRDb3B5
QXZhaWxhYmxlVGFibGVzKGN0Rm9udCwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7Cisg
ICAgaWYgKCF0YWJsZVRhZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBDRkluZGV4IG51
bVRhYmxlcyA9IENGQXJyYXlHZXRDb3VudCh0YWJsZVRhZ3MuZ2V0KCkpOworICAgIGZvciAoQ0ZJ
bmRleCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVGFibGVzOyArK2luZGV4KSB7CisgICAgICAgIGF1
dG8gdGFnID0gc3RhdGljX2Nhc3Q8Q1RGb250VGFibGVUYWc+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihDRkFycmF5R2V0VmFsdWVBdEluZGV4KHRhYmxlVGFncy5nZXQoKSwgaW5kZXgpKSk7
CisgICAgICAgIGlmICh0YWcgPT0gdGFibGVUYWcxIHx8IHRhZyA9PSB0YWJsZVRhZzIpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IEZvbnQ6OnBsYXRmb3JtSW5pdCgpCit7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBt
X3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkgPyBj
ZWlsZihtX3BsYXRmb3JtRGF0YS5zaXplKCkgLyAyNC4wZikgOiAwLmY7CisjZWxzZQorICAgIG1f
c3ludGhldGljQm9sZE9mZnNldCA9IG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY0JvbGQoKSA/IDEu
MGYgOiAwLmY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBtX3NjcmlwdENhY2hl
ID0gMDsKKyAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzID0gbnVsbHB0cjsKKyAgICBpZiAobV9w
bGF0Zm9ybURhdGEudXNlR0RJKCkpCisgICAgICAgIHJldHVybiBpbml0R0RJRm9udCgpOworI2Vu
ZGlmCisKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gQ1RGb250R2V0VW5pdHNQZXJFbShtX3Bs
YXRmb3JtRGF0YS5mb250KCkpOworICAgIGZsb2F0IHBvaW50U2l6ZSA9IG1fcGxhdGZvcm1EYXRh
LnNpemUoKTsKKyAgICBDR0Zsb2F0IGNhcEhlaWdodCA9IHBvaW50U2l6ZSA/IENURm9udEdldENh
cEhlaWdodChtX3BsYXRmb3JtRGF0YS5mb250KCkpIDogMDsKKyAgICBDR0Zsb2F0IGxpbmVHYXAg
PSBwb2ludFNpemUgPyBDVEZvbnRHZXRMZWFkaW5nKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkgOiAw
OworICAgIENHRmxvYXQgYXNjZW50ID0gcG9pbnRTaXplID8gQ1RGb250R2V0QXNjZW50KG1fcGxh
dGZvcm1EYXRhLmZvbnQoKSkgOiAwOworICAgIENHRmxvYXQgZGVzY2VudCA9IHBvaW50U2l6ZSA/
IENURm9udEdldERlc2NlbnQobV9wbGF0Zm9ybURhdGEuZm9udCgpKSA6IDA7CisKKyAgICAvLyBU
aGUgT3BlbiBGb250IEZvcm1hdCBkZXNjcmliZXMgdGhlIE9TLzIgVVNFX1RZUE9fTUVUUklDUyBm
bGFnIGFzIGZvbGxvd3M6CisgICAgLy8gIklmIHNldCwgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5k
ZWQgdG8gdXNlIE9TLzIuc1R5cG9Bc2NlbmRlciAtIE9TLzIuc1R5cG9EZXNjZW5kZXIrIE9TLzIu
c1R5cG9MaW5lR2FwIGFzIGEgdmFsdWUgZm9yIGRlZmF1bHQgbGluZSBzcGFjaW5nIGZvciB0aGlz
IGZvbnQuIgorICAgIC8vIE9uIE9TIFgsIHdlIG9ubHkgYXBwbHkgdGhpcyBydWxlIGluIHRoZSBp
bXBvcnRhbnQgY2FzZSBvZiBmb250cyB3aXRoIGEgTUFUSCB0YWJsZS4KKyAgICBpZiAoZm9udEhh
c1RhYmxlKG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLCBrQ1RGb250VGFibGVNQVRIKSkgeworICAg
ICAgICBzaG9ydCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXA7CisgICAgICAg
IGlmIChPcGVuVHlwZTo6dHJ5R2V0VHlwb01ldHJpY3MobV9wbGF0Zm9ybURhdGEuZm9udCgpLCB0
eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXApKSB7CisgICAgICAgICAgICBhc2Nl
bnQgPSBzY2FsZUVtVG9Vbml0cyh0eXBvQXNjZW50LCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsK
KyAgICAgICAgICAgIGRlc2NlbnQgPSAtc2NhbGVFbVRvVW5pdHModHlwb0Rlc2NlbnQsIHVuaXRz
UGVyRW0pICogcG9pbnRTaXplOworICAgICAgICAgICAgbGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRz
KHR5cG9MaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGF1dG8gZmFtaWx5TmFtZSA9IGFkb3B0Q0YoQ1RGb250Q29weUZhbWlseU5hbWUobV9w
bGF0Zm9ybURhdGEuZm9udCgpKSk7CisKKyAgICAvLyBEaXNhYmxlIGFudGlhbGlhc2luZyB3aGVu
IHJlbmRlcmluZyB3aXRoIEFoZW0gYmVjYXVzZSBtYW55IHRlc3RzIHJlcXVpcmUgdGhpcy4KKyAg
ICBpZiAoaXNBaGVtRm9udChmYW1pbHlOYW1lLmdldCgpKSkKKyAgICAgICAgbV9hbGxvd3NBbnRp
YWxpYXNpbmcgPSBmYWxzZTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAvLyBXZSBuZWVkIHRv
IGFkanVzdCBUaW1lcywgSGVsdmV0aWNhLCBhbmQgQ291cmllciB0byBjbG9zZWx5IG1hdGNoIHRo
ZQorICAgIC8vIHZlcnRpY2FsIG1ldHJpY3Mgb2YgdGhlaXIgTWljcm9zb2Z0IGNvdW50ZXJwYXJ0
cyB0aGF0IGFyZSB0aGUgZGUgZmFjdG8KKyAgICAvLyB3ZWIgc3RhbmRhcmQuIFRoZSBBcHBLaXQg
YWRqdXN0bWVudCBvZiAyMCUgaXMgdG9vIGJpZyBhbmQgaXMKKyAgICAvLyBpbmNvcnJlY3RseSBh
ZGRlZCB0byBsaW5lIHNwYWNpbmcsIHNvIHdlIHVzZSBhIDE1JSBhZGp1c3RtZW50IGluc3RlYWQK
KyAgICAvLyBhbmQgYWRkIGl0IHRvIHRoZSBhc2NlbnQuCisgICAgaWYgKG9yaWdpbigpID09IE9y
aWdpbjo6TG9jYWwgJiYgbmVlZHNBc2NlbnRBZGp1c3RtZW50KGZhbWlseU5hbWUuZ2V0KCkpKQor
ICAgICAgICBhc2NlbnQgKz0gc3RkOjpyb3VuZCgoYXNjZW50ICsgZGVzY2VudCkgKiAwLjE1Zik7
CisjZW5kaWYKKworICAgIC8vIENvbXB1dGUgbGluZSBzcGFjaW5nIGJlZm9yZSB0aGUgbGluZSBt
ZXRyaWNzIGhhY2tzIGFyZSBhcHBsaWVkLgorICAgIGZsb2F0IGxpbmVTcGFjaW5nID0gbHJvdW5k
Zihhc2NlbnQpICsgbHJvdW5kZihkZXNjZW50KSArIGxyb3VuZGYobGluZUdhcCk7CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgLy8gSGFjayBIaXJhZ2lubyBsaW5lIG1ldHJpY3MgdG8gYWxsb3cg
cm9vbSBmb3IgbWFya2VkIHRleHQgdW5kZXJsaW5lcy4KKyAgICAvLyA8cmRhcjovL3Byb2JsZW0v
NTM4NjE4Mz4KKyAgICBpZiAoZGVzY2VudCA8IDMgJiYgbGluZUdhcCA+PSAzICYmIGZhbWlseU5h
bWUgJiYgQ0ZTdHJpbmdIYXNQcmVmaXgoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkhpcmFnaW5v
IikpKSB7CisgICAgICAgIGxpbmVHYXAgLT0gMyAtIGRlc2NlbnQ7CisgICAgICAgIGRlc2NlbnQg
PSAzOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIGlmIChwbGF0Zm9ybURhdGEoKS5vcmllbnRh
dGlvbigpID09IEZvbnRPcmllbnRhdGlvbjo6VmVydGljYWwgJiYgIWlzVGV4dE9yaWVudGF0aW9u
RmFsbGJhY2soKSkKKyAgICAgICAgbV9oYXNWZXJ0aWNhbEdseXBocyA9IGZvbnRIYXNWZXJ0aWNh
bEdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIENHRmxvYXQgYWRqdXN0bWVudCA9IHNob3VsZFVzZUFkanVzdG1lbnQobV9wbGF0
Zm9ybURhdGEuZm9udCgpKSA/IGNlaWwoKGFzY2VudCArIGRlc2NlbnQpICoga0xpbmVIZWlnaHRB
ZGp1c3RtZW50KSA6IDA7CisKKyAgICBsaW5lR2FwID0gY2VpbGYobGluZUdhcCk7CisgICAgbGlu
ZVNwYWNpbmcgPSBjZWlsKGFzY2VudCkgKyBhZGp1c3RtZW50ICsgY2VpbChkZXNjZW50KSArIGxp
bmVHYXA7CisgICAgYXNjZW50ID0gY2VpbGYoYXNjZW50ICsgYWRqdXN0bWVudCk7CisgICAgZGVz
Y2VudCA9IGNlaWxmKGRlc2NlbnQpOworCisgICAgbV9zaG91bGROb3RCZVVzZWRGb3JBcmFiaWMg
PSBmb250RmFtaWx5U2hvdWxkTm90QmVVc2VkRm9yQXJhYmljKGZhbWlseU5hbWUuZ2V0KCkpOwor
I2VuZGlmCisKKyAgICBDR0Zsb2F0IHhIZWlnaHQgPSAwOworICAgIGlmIChtX3BsYXRmb3JtRGF0
YS5zaXplKCkpIHsKKyAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0g
Rm9udE9yaWVudGF0aW9uOjpIb3Jpem9udGFsKSB7CisgICAgICAgICAgICAvLyBNZWFzdXJlIHRo
ZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXh0
ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAvLyBy
ZXBvcnRlZCB4LWhlaWdodCB0byBvbmx5IGluY2x1ZGUgdGhlIHBvcnRpb24gb2YgdGhlIGdseXBo
IHRoYXQgaXMgYWJvdmUgdGhlIGJhc2VsaW5lLgorICAgICAgICAgICAgR2x5cGggeEdseXBoID0g
Z2x5cGhGb3JDaGFyYWN0ZXIoJ3gnKTsKKyAgICAgICAgICAgIGlmICh4R2x5cGgpCisgICAgICAg
ICAgICAgICAgeEhlaWdodCA9IC1DR1JlY3RHZXRNaW5ZKHBsYXRmb3JtQm91bmRzRm9yR2x5cGgo
eEdseXBoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeEhlaWdodCA9IENU
Rm9udEdldFhIZWlnaHQobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB4SGVpZ2h0ID0gdmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udCgpLmZvbnRN
ZXRyaWNzKCkueEhlaWdodCgpOworICAgIH0KKworICAgIG1fZm9udE1ldHJpY3Muc2V0VW5pdHNQ
ZXJFbSh1bml0c1BlckVtKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOwor
ICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKKyAgICBtX2ZvbnRNZXRyaWNz
LnNldENhcEhlaWdodChjYXBIZWlnaHQpOworICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChs
aW5lR2FwKTsKKyAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhlaWdodCk7CisgICAgbV9m
b250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7CisgICAgbV9mb250TWV0cmlj
cy5zZXRVbmRlcmxpbmVQb3NpdGlvbigtQ1RGb250R2V0VW5kZXJsaW5lUG9zaXRpb24obV9wbGF0
Zm9ybURhdGEuZm9udCgpKSk7CisgICAgbV9mb250TWV0cmljcy5zZXRVbmRlcmxpbmVUaGlja25l
c3MoQ1RGb250R2V0VW5kZXJsaW5lVGhpY2tuZXNzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSkpOwor
fQorCit2b2lkIEZvbnQ6OnBsYXRmb3JtQ2hhcldpZHRoSW5pdCgpCit7CisgICAgbV9hdmdDaGFy
V2lkdGggPSAwOworICAgIG1fbWF4Q2hhcldpZHRoID0gMDsKKworICAgIGF1dG8gb3MyVGFibGUg
PSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0YS5mb250KCksIGtDVEZvbnRU
YWJsZU9TMiwga0NURm9udFRhYmxlT3B0aW9uTm9PcHRpb25zKSk7CisgICAgaWYgKG9zMlRhYmxl
ICYmIENGRGF0YUdldExlbmd0aChvczJUYWJsZS5nZXQoKSkgPj0gNCkgeworICAgICAgICBjb25z
dCBVSW50OCogb3MyID0gQ0ZEYXRhR2V0Qnl0ZVB0cihvczJUYWJsZS5nZXQoKSk7CisgICAgICAg
IFNJbnQxNiBvczJBdmdDaGFyV2lkdGggPSBvczJbMl0gKiAyNTYgKyBvczJbM107CisgICAgICAg
IG1fYXZnQ2hhcldpZHRoID0gc2NhbGVFbVRvVW5pdHMob3MyQXZnQ2hhcldpZHRoLCBtX2ZvbnRN
ZXRyaWNzLnVuaXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisg
ICAgYXV0byBoZWFkVGFibGUgPSBhZG9wdENGKENURm9udENvcHlUYWJsZShtX3BsYXRmb3JtRGF0
YS5mb250KCksIGtDVEZvbnRUYWJsZUhlYWQsIGtDVEZvbnRUYWJsZU9wdGlvbk5vT3B0aW9ucykp
OworICAgIGlmIChoZWFkVGFibGUgJiYgQ0ZEYXRhR2V0TGVuZ3RoKGhlYWRUYWJsZS5nZXQoKSkg
Pj0gNDIpIHsKKyAgICAgICAgY29uc3QgVUludDgqIGhlYWQgPSBDRkRhdGFHZXRCeXRlUHRyKGhl
YWRUYWJsZS5nZXQoKSk7CisgICAgICAgIHVuc2lnbmVkIHV4TWluID0gaGVhZFszNl0gKiAyNTYg
KyBoZWFkWzM3XTsKKyAgICAgICAgdW5zaWduZWQgdXhNYXggPSBoZWFkWzQwXSAqIDI1NiArIGhl
YWRbNDFdOworICAgICAgICBTSW50MTYgeE1pbiA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNaW4p
OworICAgICAgICBTSW50MTYgeE1heCA9IHN0YXRpY19jYXN0PFNJbnQxNj4odXhNYXgpOworICAg
ICAgICBmbG9hdCBkaWZmID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHhNYXggLSB4TWluKTsKKyAgICAg
ICAgbV9tYXhDaGFyV2lkdGggPSBzY2FsZUVtVG9Vbml0cyhkaWZmLCBtX2ZvbnRNZXRyaWNzLnVu
aXRzUGVyRW0oKSkgKiBtX3BsYXRmb3JtRGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8gRmFs
bGJhY2sgdG8gYSBjcm9zcy1wbGF0Zm9ybSBlc3RpbWF0ZSwgd2hpY2ggd2lsbCBwb3B1bGF0ZSB0
aGVzZSB2YWx1ZXMgaWYgdGhleSBhcmUgbm9uLXBvc2l0aXZlLgorICAgIGluaXRDaGFyV2lkdGhz
KCk7Cit9CisKK2Jvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZvclN5bnRo
ZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDYXBzLCBVQ2hhcjMyIGNoYXJhY3Rlcikg
Y29uc3QKK3sKKyNpZiAoUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwg
UExBVEZPUk0oTUFDKQorICAgIEdseXBoIGdseXBoID0gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKKyAgICBpZiAoIWdseXBoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0
Y2ggKGZvbnRWYXJpYW50Q2FwcykgeworICAgIGNhc2UgRm9udFZhcmlhbnRDYXBzOjpTbWFsbDog
eworICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeVNtYWxsQ2Fwcygp
OworICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5n
ZXQoZ2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6UGV0aXRlOiB7Cisg
ICAgICAgIGF1dG8mIHN1cHBvcnRlZCA9IGdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpOwor
ICAgICAgICByZXR1cm4gc3VwcG9ydGVkLnNpemUoKSA+IGdseXBoICYmIHN1cHBvcnRlZC5nZXQo
Z2x5cGgpOworICAgIH0KKyAgICBjYXNlIEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6IHsKKyAg
ICAgICAgYXV0byYgc3VwcG9ydGVkID0gZ2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMoKTsK
KyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQuZ2V0
KGdseXBoKTsKKyAgICB9CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFsbFBldGl0ZTogewor
ICAgICAgICBhdXRvJiBzdXBwb3J0ZWQgPSBnbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0ZUNhcHMo
KTsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRlZC5zaXplKCkgPiBnbHlwaCAmJiBzdXBwb3J0ZWQu
Z2V0KGdseXBoKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gU3ludGhlc2lzIG9u
bHkgc3VwcG9ydHMgdGhlIHZhcmlhbnQtY2FwcyB2YWx1ZXMgbGlzdGVkIGFib3ZlLgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjaGFyYWN0ZXIp
OworCisgICAgc3dpdGNoIChmb250VmFyaWFudENhcHMpIHsKKyAgICBjYXNlIEZvbnRWYXJpYW50
Q2Fwczo6U21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OlBldGl0ZToKKyAgICBjYXNl
IEZvbnRWYXJpYW50Q2Fwczo6QWxsU21hbGw6CisgICAgY2FzZSBGb250VmFyaWFudENhcHM6OkFs
bFBldGl0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8v
IFN5bnRoZXNpcyBvbmx5IHN1cHBvcnRzIHRoZSB2YXJpYW50LWNhcHMgdmFsdWVzIGxpc3RlZCBh
Ym92ZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCit9CisKKyNpZiAoUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgVEFSR0VUX09TX0lPUykgfHwgUExBVEZPUk0oTUFDKQorc3Rh
dGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHNtYWxsQ2Fwc09wZW5UeXBlRGljdGlvbmFy
eShDRlN0cmluZ1JlZiBrZXksIGludCByYXdWYWx1ZSkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZOdW1i
ZXJSZWY+IHZhbHVlID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcmF3VmFsdWUpKTsKKyAgICBDRlR5cGVSZWYga2V5c1tdID0g
eyBrQ1RGb250T3BlblR5cGVGZWF0dXJlVGFnLCBrQ1RGb250T3BlblR5cGVGZWF0dXJlVmFsdWUg
fTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleSwgdmFsdWUuZ2V0KCkgfTsKKyAgICBy
ZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5
cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzbWFsbENhcHNUcnVlVHlwZURpY3Rpb25hcnko
aW50IHJhd0tleSwgaW50IHJhd1ZhbHVlKQoreworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4g
a2V5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJJbnRUeXBlLCAmcmF3S2V5KSk7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB2YWx1ZSA9
IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50
VHlwZSwgJnJhd1ZhbHVlKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsga0NURm9udEZlYXR1
cmVUeXBlSWRlbnRpZmllcktleSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkg
fTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IGtleS5nZXQoKSwgdmFsdWUuZ2V0KCkgfTsK
KyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga2V5cywgdmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisK
K3N0YXRpYyB2b2lkIHVuaW9uQml0VmVjdG9ycyhCaXRWZWN0b3ImIHJlc3VsdCwgQ0ZCaXRWZWN0
b3JSZWYgc291cmNlKQoreworICAgIENGSW5kZXggbGVuZ3RoID0gQ0ZCaXRWZWN0b3JHZXRDb3Vu
dChzb3VyY2UpOworICAgIHJlc3VsdC5lbnN1cmVTaXplKGxlbmd0aCk7CisgICAgQ0ZJbmRleCBt
aW4gPSAwOworICAgIHdoaWxlIChtaW4gPCBsZW5ndGgpIHsKKyAgICAgICAgQ0ZJbmRleCBuZXh0
SW5kZXggPSBDRkJpdFZlY3RvckdldEZpcnN0SW5kZXhPZkJpdChzb3VyY2UsIENGUmFuZ2VNYWtl
KG1pbiwgbGVuZ3RoIC0gbWluKSwgMSk7CisgICAgICAgIGlmIChuZXh0SW5kZXggPT0ga0NGTm90
Rm91bmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmVzdWx0LnNldChuZXh0SW5kZXgs
IHRydWUpOworICAgICAgICBtaW4gPSBuZXh0SW5kZXggKyAxOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgaW5qZWN0T3BlblR5cGVDb3ZlcmFnZShDRlN0cmluZ1JlZiBmZWF0dXJlLCBDVEZvbnRS
ZWYgZm9udCwgQml0VmVjdG9yJiByZXN1bHQpCit7CisgICAgUmV0YWluUHRyPENGQml0VmVjdG9y
UmVmPiBzb3VyY2UgPSBhZG9wdENGKENURm9udENvcHlHbHlwaENvdmVyYWdlRm9yRmVhdHVyZShm
b250LCBzbWFsbENhcHNPcGVuVHlwZURpY3Rpb25hcnkoZmVhdHVyZSwgMSkuZ2V0KCkpKTsKKyAg
ICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9p
ZCBpbmplY3RUcnVlVHlwZUNvdmVyYWdlKGludCB0eXBlLCBpbnQgc2VsZWN0b3IsIENURm9udFJl
ZiBmb250LCBCaXRWZWN0b3ImIHJlc3VsdCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZCaXRWZWN0b3JS
ZWY+IHNvdXJjZSA9IGFkb3B0Q0YoQ1RGb250Q29weUdseXBoQ292ZXJhZ2VGb3JGZWF0dXJlKGZv
bnQsIHNtYWxsQ2Fwc1RydWVUeXBlRGljdGlvbmFyeSh0eXBlLCBzZWxlY3RvcikuZ2V0KCkpKTsK
KyAgICB1bmlvbkJpdFZlY3RvcnMocmVzdWx0LCBzb3VyY2UuZ2V0KCkpOworfQorCitjb25zdCBC
aXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMpIHsKKyAgICAgICAgbV9nbHlwaHNT
dXBwb3J0ZWRCeVNtYWxsQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlw
ZUNvdmVyYWdlKENGU1RSKCJzbWNwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNT
dXBwb3J0ZWRCeVNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3Zl
cmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yLCBwbGF0Zm9y
bURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlTbWFsbENhcHMudmFsdWUoKSk7Cisg
ICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5U21hbGxDYXBzLnZhbHVlKCk7Cit9
CisKK2NvbnN0IEJpdFZlY3RvciYgRm9udDo6Z2x5cGhzU3VwcG9ydGVkQnlBbGxTbWFsbENhcHMo
KSBjb25zdAoreworICAgIGlmICghbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcykgewor
ICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzID0gQml0VmVjdG9yKCk7Cisg
ICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoInNtY3AiKSwgcGxhdGZvcm1EYXRh
KCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAg
ICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJjMnNjIiksIHBsYXRmb3JtRGF0YSgp
LmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpKTsKKyAgICAg
ICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNlVHlwZSwga0xvd2VyQ2FzZVNtYWxs
Q2Fwc1NlbGVjdG9yLCBwbGF0Zm9ybURhdGEoKS5mb250KCksIG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxTbWFsbENhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdFRydWVUeXBlQ292ZXJhZ2Uoa1Vw
cGVyQ2FzZVR5cGUsIGtVcHBlckNhc2VTbWFsbENhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCku
Zm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsU21hbGxDYXBzLnZhbHVlKCkpOworICAgIH0K
KyAgICByZXR1cm4gbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFNtYWxsQ2Fwcy52YWx1ZSgpOworfQor
Citjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcygpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcykgeworICAgICAg
ICBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRlQ2FwcyA9IEJpdFZlY3RvcigpOworICAgICAgICBp
bmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJwY2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQo
KSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVj
dFRydWVUeXBlQ292ZXJhZ2Uoa0xvd2VyQ2FzZVR5cGUsIGtMb3dlckNhc2VQZXRpdGVDYXBzU2Vs
ZWN0b3IsIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeVBldGl0ZUNh
cHMudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBtX2dseXBoc1N1cHBvcnRlZEJ5UGV0aXRl
Q2Fwcy52YWx1ZSgpOworfQorCitjb25zdCBCaXRWZWN0b3ImIEZvbnQ6OmdseXBoc1N1cHBvcnRl
ZEJ5QWxsUGV0aXRlQ2FwcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX2dseXBoc1N1cHBvcnRlZEJ5
QWxsUGV0aXRlQ2FwcykgeworICAgICAgICBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fw
cyA9IEJpdFZlY3RvcigpOworICAgICAgICBpbmplY3RPcGVuVHlwZUNvdmVyYWdlKENGU1RSKCJw
Y2FwIiksIHBsYXRmb3JtRGF0YSgpLmZvbnQoKSwgbV9nbHlwaHNTdXBwb3J0ZWRCeUFsbFBldGl0
ZUNhcHMudmFsdWUoKSk7CisgICAgICAgIGluamVjdE9wZW5UeXBlQ292ZXJhZ2UoQ0ZTVFIoImMy
cGMiKSwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRl
Q2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5qZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrTG93ZXJDYXNl
VHlwZSwga0xvd2VyQ2FzZVBldGl0ZUNhcHNTZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgp
LCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICAgICAgaW5q
ZWN0VHJ1ZVR5cGVDb3ZlcmFnZShrVXBwZXJDYXNlVHlwZSwga1VwcGVyQ2FzZVBldGl0ZUNhcHNT
ZWxlY3RvciwgcGxhdGZvcm1EYXRhKCkuZm9udCgpLCBtX2dseXBoc1N1cHBvcnRlZEJ5QWxsUGV0
aXRlQ2Fwcy52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZ2x5cGhzU3VwcG9ydGVkQnlB
bGxQZXRpdGVDYXBzLnZhbHVlKCk7Cit9CisjZW5kaWYKKworc3RhdGljIFJlZlB0cjxGb250PiBj
cmVhdGVEZXJpdmF0aXZlRm9udChDVEZvbnRSZWYgZm9udCwgZmxvYXQgc2l6ZSwgRm9udE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250VHJhaXRzLCBib29s
IHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQoreworICAgIGlmICghZm9udCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoc3ludGhldGljQm9sZCkKKyAgICAg
ICAgZm9udFRyYWl0cyB8PSBrQ1RGb250Qm9sZFRyYWl0OworICAgIGlmIChzeW50aGV0aWNJdGFs
aWMpCisgICAgICAgIGZvbnRUcmFpdHMgfD0ga0NURm9udEl0YWxpY1RyYWl0OworCisgICAgQ1RG
b250U3ltYm9saWNUcmFpdHMgc2NhbGVkRm9udFRyYWl0cyA9IENURm9udEdldFN5bWJvbGljVHJh
aXRzKGZvbnQpOworCisgICAgYm9vbCB1c2VkU3ludGhldGljQm9sZCA9IChmb250VHJhaXRzICYg
a0NURm9udEJvbGRUcmFpdCkgJiYgIShzY2FsZWRGb250VHJhaXRzICYga0NURm9udFRyYWl0Qm9s
ZCk7CisgICAgYm9vbCB1c2VkU3ludGhldGljT2JsaXF1ZSA9IChmb250VHJhaXRzICYga0NURm9u
dEl0YWxpY1RyYWl0KSAmJiAhKHNjYWxlZEZvbnRUcmFpdHMgJiBrQ1RGb250VHJhaXRJdGFsaWMp
OworICAgIEZvbnRQbGF0Zm9ybURhdGEgc2NhbGVkRm9udERhdGEoZm9udCwgc2l6ZSwgdXNlZFN5
bnRoZXRpY0JvbGQsIHVzZWRTeW50aGV0aWNPYmxpcXVlLCBvcmllbnRhdGlvbik7CisKKyAgICBy
ZXR1cm4gRm9udDo6Y3JlYXRlKHNjYWxlZEZvbnREYXRhKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGlzT3BlblR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIHJl
dHVybiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5cGVGZWF0
dXJlVGFnKSAmJiBDRkRpY3Rpb25hcnlDb250YWluc0tleShmZWF0dXJlLCBrQ1RGb250T3BlblR5
cGVGZWF0dXJlVmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUcnVlVHlwZUZlYXR1
cmUoQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmUpCit7CisgICAgcmV0dXJuIENGRGljdGlvbmFyeUNv
bnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpICYmIENG
RGljdGlvbmFyeUNvbnRhaW5zS2V5KGZlYXR1cmUsIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVu
dGlmaWVyS2V5KTsKK30KKworc3RhdGljIGlubGluZSBPcHRpb25hbDxDRlN0cmluZ1JlZj4gb3Bl
blR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBmZWF0dXJlKQoreworICAgIEFTU0VSVChpc09w
ZW5UeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAgQ0ZTdHJpbmdSZWYgdGFnID0gc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVu
VHlwZUZlYXR1cmVUYWcpKTsKKyAgICBpbnQgcmF3VmFsdWU7CisgICAgQ0ZOdW1iZXJSZWYgdmFs
dWUgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVy
ZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlKSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZO
dW1iZXJHZXRWYWx1ZSh2YWx1ZSwga0NGTnVtYmVySW50VHlwZSwgJnJhd1ZhbHVlKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiByYXdWYWx1ZSA/IE9w
dGlvbmFsPENGU3RyaW5nUmVmPih0YWcpIDogV1RGOjpudWxsb3B0OworfQorCitzdGF0aWMgaW5s
aW5lIHN0ZDo6cGFpcjxpbnQsIGludD4gdHJ1ZVR5cGVGZWF0dXJlKENGRGljdGlvbmFyeVJlZiBm
ZWF0dXJlKQoreworICAgIEFTU0VSVChpc1RydWVUeXBlRmVhdHVyZShmZWF0dXJlKSk7CisgICAg
aW50IHJhd1R5cGU7CisgICAgQ0ZOdW1iZXJSZWYgdHlwZSA9IHN0YXRpY19jYXN0PENGTnVtYmVy
UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVu
dGlmaWVyS2V5KSk7CisgICAgYXV0byBzdWNjZXNzID0gQ0ZOdW1iZXJHZXRWYWx1ZSh0eXBlLCBr
Q0ZOdW1iZXJJbnRUeXBlLCAmcmF3VHlwZSk7CisgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKKyAgICBpbnQgcmF3U2VsZWN0b3I7CisgICAgQ0ZOdW1iZXJSZWYgc2VsZWN0b3Ig
PSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwg
a0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICBzdWNjZXNzID0gQ0ZO
dW1iZXJHZXRWYWx1ZShzZWxlY3Rvciwga0NGTnVtYmVySW50VHlwZSwgJnJhd1NlbGVjdG9yKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihyYXdUeXBlLCByYXdTZWxlY3Rvcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ0ZOdW1i
ZXJSZWYgZGVmYXVsdFNlbGVjdG9yRm9yVHJ1ZVR5cGVGZWF0dXJlKGludCBrZXksIENURm9udFJl
ZiBmb250KQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBmZWF0dXJlcyA9IGFkb3B0Q0Yo
Q1RGb250Q29weUZlYXR1cmVzKGZvbnQpKTsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENG
QXJyYXlHZXRDb3VudChmZWF0dXJlcy5nZXQoKSk7CisgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVU
eXBlID0gc3RhdGljX2Nhc3Q8Q0ZEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4
KGZlYXR1cmVzLmdldCgpLCBpKSk7CisgICAgICAgIENGTnVtYmVyUmVmIGZlYXR1cmVLZXkgPSBz
dGF0aWNfY2FzdDxDRk51bWJlclJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUs
IGtDVEZvbnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgaWYgKCFmZWF0dXJl
S2V5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludCByYXdGZWF0dXJlS2V5Owor
ICAgICAgICBDRk51bWJlckdldFZhbHVlKGZlYXR1cmVLZXksIGtDRk51bWJlckludFR5cGUsICZy
YXdGZWF0dXJlS2V5KTsKKyAgICAgICAgaWYgKHJhd0ZlYXR1cmVLZXkgIT0ga2V5KQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgQ0ZBcnJheVJlZiBmZWF0dXJlU2VsZWN0b3JzID0g
c3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVR5cGUs
IGtDVEZvbnRGZWF0dXJlVHlwZVNlbGVjdG9yc0tleSkpOworICAgICAgICBpZiAoIWZlYXR1cmVT
ZWxlY3RvcnMpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQ0ZJbmRleCBzZWxlY3Rv
cnNDb3VudCA9IENGQXJyYXlHZXRDb3VudChmZWF0dXJlU2VsZWN0b3JzKTsKKyAgICAgICAgZm9y
IChDRkluZGV4IGogPSAwOyBqIDwgc2VsZWN0b3JzQ291bnQ7ICsraikgeworICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5UmVmIGZlYXR1cmVTZWxlY3RvciA9IHN0YXRpY19jYXN0PENGRGljdGlvbmFy
eVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChmZWF0dXJlU2VsZWN0b3JzLCBqKSk7CisgICAg
ICAgICAgICBDRk51bWJlclJlZiBpc0RlZmF1bHQgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
Q0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZVNlbGVjdG9yLCBrQ1RGb250RmVhdHVyZVNlbGVj
dG9yRGVmYXVsdEtleSkpOworICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHQpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnQgcmF3SXNEZWZhdWx0OworICAgICAgICAg
ICAgQ0ZOdW1iZXJHZXRWYWx1ZShpc0RlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZyYXdJc0Rl
ZmF1bHQpOworICAgICAgICAgICAgaWYgKCFyYXdJc0RlZmF1bHQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KENG
RGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmVTZWxlY3Rvciwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworc3RhdGljIGlubGluZSBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiByZW1vdmVkRmVh
dHVyZShDRkRpY3Rpb25hcnlSZWYgZmVhdHVyZSwgQ1RGb250UmVmIGZvbnQpCit7CisgICAgYm9v
bCBpc09wZW5UeXBlID0gaXNPcGVuVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgYm9vbCBpc1Ry
dWVUeXBlID0gaXNUcnVlVHlwZUZlYXR1cmUoZmVhdHVyZSk7CisgICAgaWYgKCFpc09wZW5UeXBl
ICYmICFpc1RydWVUeXBlKQorICAgICAgICByZXR1cm4gZmVhdHVyZTsgLy8gV2UgZG9uJ3QgdW5k
ZXJzdGFuZCB0aGlzIGZvbnQgZm9ybWF0LgorICAgIFJldGFpblB0cjxDRk11dGFibGVEaWN0aW9u
YXJ5UmVmPiByZXN1bHQgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGlmIChpc09wZW5UeXBlKSB7CisgICAg
ICAgIGF1dG8gZmVhdHVyZVRhZyA9IG9wZW5UeXBlRmVhdHVyZShmZWF0dXJlKTsKKyAgICAgICAg
aWYgKGZlYXR1cmVUYWcgJiYgKENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNUUigic21j
cCIpKQorICAgICAgICAgICAgfHwgQ0ZFcXVhbChmZWF0dXJlVGFnLnZhbHVlKCksIENGU1RSKCJj
MnNjIikpCisgICAgICAgICAgICB8fCBDRkVxdWFsKGZlYXR1cmVUYWcudmFsdWUoKSwgQ0ZTVFIo
InBjYXAiKSkKKyAgICAgICAgICAgIHx8IENGRXF1YWwoZmVhdHVyZVRhZy52YWx1ZSgpLCBDRlNU
UigiYzJwYyIpKSkpIHsKKyAgICAgICAgICAgIGludCByYXdaZXJvID0gMDsKKyAgICAgICAgICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gemVybyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnJhd1plcm8pKTsKKyAgICAgICAg
ICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVh
dHVyZVRhZywgZmVhdHVyZVRhZy52YWx1ZSgpKTsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVZhbHVlLCB6ZXJvLmdl
dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZywgQ0ZEaWN0aW9uYXJ5R2V0
VmFsdWUoZmVhdHVyZSwga0NURm9udE9wZW5UeXBlRmVhdHVyZVRhZykpOworICAgICAgICAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250T3BlblR5cGVGZWF0dXJl
VmFsdWUsIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZvbnRPcGVuVHlwZUZlYXR1
cmVWYWx1ZSkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpc1RydWVUeXBlKSB7CisgICAg
ICAgIGF1dG8gdHJ1ZVR5cGVGZWF0dXJlUGFpciA9IHRydWVUeXBlRmVhdHVyZShmZWF0dXJlKTsK
KyAgICAgICAgaWYgKHRydWVUeXBlRmVhdHVyZVBhaXIuZmlyc3QgPT0ga0xvd2VyQ2FzZVR5cGUg
JiYgKHRydWVUeXBlRmVhdHVyZVBhaXIuc2Vjb25kID09IGtMb3dlckNhc2VTbWFsbENhcHNTZWxl
Y3RvciB8fCB0cnVlVHlwZUZlYXR1cmVQYWlyLnNlY29uZCA9PSBrTG93ZXJDYXNlUGV0aXRlQ2Fw
c1NlbGVjdG9yKSkgeworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0Lmdl
dCgpLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5LCBDRkRpY3Rpb25hcnlHZXRWYWx1
ZShmZWF0dXJlLCBrQ1RGb250RmVhdHVyZVR5cGVJZGVudGlmaWVyS2V5KSk7CisgICAgICAgICAg
ICBpZiAoQ0ZOdW1iZXJSZWYgZGVmYXVsdFNlbGVjdG9yID0gZGVmYXVsdFNlbGVjdG9yRm9yVHJ1
ZVR5cGVGZWF0dXJlKGtMb3dlckNhc2VUeXBlLCBmb250KSkKKyAgICAgICAgICAgICAgICBDRkRp
Y3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0dXJlU2VsZWN0b3JJZGVu
dGlmaWVyS2V5LCBkZWZhdWx0U2VsZWN0b3IpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVT
ZWxlY3RvcklkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlU2VsZWN0b3JJZGVudGlmaWVyS2V5KSk7CisgICAgICAgIH0gZWxzZSBpZiAodHJ1
ZVR5cGVGZWF0dXJlUGFpci5maXJzdCA9PSBrVXBwZXJDYXNlVHlwZSAmJiAodHJ1ZVR5cGVGZWF0
dXJlUGFpci5zZWNvbmQgPT0ga1VwcGVyQ2FzZVNtYWxsQ2Fwc1NlbGVjdG9yIHx8IHRydWVUeXBl
RmVhdHVyZVBhaXIuc2Vjb25kID09IGtVcHBlckNhc2VQZXRpdGVDYXBzU2VsZWN0b3IpKSB7Cisg
ICAgICAgICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShyZXN1bHQuZ2V0KCksIGtDVEZvbnRGZWF0
dXJlVHlwZUlkZW50aWZpZXJLZXksIENGRGljdGlvbmFyeUdldFZhbHVlKGZlYXR1cmUsIGtDVEZv
bnRGZWF0dXJlVHlwZUlkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgICAgIGlmIChDRk51bWJlclJl
ZiBkZWZhdWx0U2VsZWN0b3IgPSBkZWZhdWx0U2VsZWN0b3JGb3JUcnVlVHlwZUZlYXR1cmUoa1Vw
cGVyQ2FzZVR5cGUsIGZvbnQpKQorICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXksIGRlZmF1
bHRTZWxlY3Rvcik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUocmVzdWx0LmdldCgpLCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmll
cktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3Rv
cklkZW50aWZpZXJLZXkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGRGljdGlv
bmFyeUFkZFZhbHVlKHJlc3VsdC5nZXQoKSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRpZmllcktl
eSwgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVUeXBlSWRlbnRp
ZmllcktleSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUocmVzdWx0LmdldCgp
LCBrQ1RGb250RmVhdHVyZVNlbGVjdG9ySWRlbnRpZmllcktleSwgQ0ZEaWN0aW9uYXJ5R2V0VmFs
dWUoZmVhdHVyZSwga0NURm9udEZlYXR1cmVTZWxlY3RvcklkZW50aWZpZXJLZXkpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUmV0YWluUHRyPENU
Rm9udFJlZj4gY3JlYXRlQ1RGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcyhDVEZvbnRS
ZWYgZm9udCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZmVhdHVyZXMgPSBhZG9wdENG
KHN0YXRpY19jYXN0PENGQXJyYXlSZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9u
dEZlYXR1cmVTZXR0aW5nc0F0dHJpYnV0ZSkpKTsKKyAgICBpZiAoIWZlYXR1cmVzKQorICAgICAg
ICByZXR1cm4gZm9udDsKKyAgICBDRkluZGV4IGZlYXR1cmVDb3VudCA9IENGQXJyYXlHZXRDb3Vu
dChmZWF0dXJlcy5nZXQoKSk7CisgICAgUmV0YWluUHRyPENGTXV0YWJsZUFycmF5UmVmPiBuZXdG
ZWF0dXJlcyA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgZmVhdHVyZUNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChDRklu
ZGV4IGkgPSAwOyBpIDwgZmVhdHVyZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5
UmVmIGZlYXR1cmUgPSBzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1
ZUF0SW5kZXgoZmVhdHVyZXMuZ2V0KCksIGkpKTsKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KG5ld0ZlYXR1cmVzLmdldCgpLCByZW1vdmVkRmVhdHVyZShmZWF0dXJlLCBmb250KS5nZXQoKSk7
CisgICAgfQorICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRGZWF0dXJlU2V0dGluZ3NB
dHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IG5ld0ZlYXR1cmVzLmdldCgp
IH07CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RG
X0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFJldGFpblB0cjxDVEZvbnREZXNj
cmlwdG9yUmVmPiBuZXdEZXNjcmlwdG9yID0gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRl
V2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAgIHJldHVybiBhZG9wdENGKENU
Rm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhmb250LCBDVEZvbnRHZXRTaXplKGZvbnQpLCBu
dWxscHRyLCBuZXdEZXNjcmlwdG9yLmdldCgpKSk7Cit9CisKK1JlZlB0cjxGb250PiBGb250Ojpj
cmVhdGVGb250V2l0aG91dFN5bnRoZXNpemFibGVGZWF0dXJlcygpIGNvbnN0Cit7CisgICAgZmxv
YXQgc2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0
cyBmb250VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9u
dCgpKTsKKyAgICBSZXRhaW5QdHI8Q1RGb250UmVmPiBjdEZvbnQgPSBjcmVhdGVDVEZvbnRXaXRo
b3V0U3ludGhlc2l6YWJsZUZlYXR1cmVzKG1fcGxhdGZvcm1EYXRhLmZvbnQoKSk7CisgICAgcmV0
dXJuIGNyZWF0ZURlcml2YXRpdmVGb250KGN0Rm9udC5nZXQoKSwgc2l6ZSwgbV9wbGF0Zm9ybURh
dGEub3JpZW50YXRpb24oKSwgZm9udFRyYWl0cywgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljQm9s
ZCgpLCBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNPYmxpcXVlKCkpOworfQorCitSZWZQdHI8Rm9u
dD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYs
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAoreworICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3Jt
RGF0YS5zaXplKCkgKiBzY2FsZUZhY3RvcjsKKyAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyBmb250
VHJhaXRzID0gQ1RGb250R2V0U3ltYm9saWNUcmFpdHMobV9wbGF0Zm9ybURhdGEuZm9udCgpKTsK
KyAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gZm9udERlc2NyaXB0b3IgPSBhZG9w
dENGKENURm9udENvcHlGb250RGVzY3JpcHRvcihtX3BsYXRmb3JtRGF0YS5mb250KCkpKTsKKyAg
ICBSZXRhaW5QdHI8Q1RGb250UmVmPiBzY2FsZWRGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVX
aXRoRm9udERlc2NyaXB0b3IoZm9udERlc2NyaXB0b3IuZ2V0KCksIHNpemUsIG51bGxwdHIpKTsK
KworICAgIHJldHVybiBjcmVhdGVEZXJpdmF0aXZlRm9udChzY2FsZWRGb250LmdldCgpLCBzaXpl
LCBtX3BsYXRmb3JtRGF0YS5vcmllbnRhdGlvbigpLCBmb250VHJhaXRzLCBtX3BsYXRmb3JtRGF0
YS5zeW50aGV0aWNCb2xkKCksIG1fcGxhdGZvcm1EYXRhLnN5bnRoZXRpY09ibGlxdWUoKSk7Cit9
CisKK3ZvaWQgRm9udDo6YXBwbHlUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwg
dW5zaWduZWQgYmVnaW5uaW5nR2x5cGhJbmRleCwgdW5zaWduZWQgYmVnaW5uaW5nU3RyaW5nSW5k
ZXgsIGJvb2wgZW5hYmxlS2VybmluZywgYm9vbCByZXF1aXJlc1NoYXBpbmcsIGNvbnN0IEF0b21T
dHJpbmcmIGxvY2FsZSwgU3RyaW5nVmlldyB0ZXh0LCBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24pIGNvbnN0Cit7CisgICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisKKyAgICAv
LyBGSVhNRTogSW1wbGVtZW50IEdseXBoQnVmZmVyIGluaXRpYWwgYWR2YW5jZS4KKyNpZiBVU0Uo
Q1RGT05UU0hBUEVHTFlQSFMpCisgICAgYXV0byBoYW5kbGVyID0gXihDRlJhbmdlIHJhbmdlLCBD
R0dseXBoKiogbmV3R2x5cGhzUG9pbnRlciwgQ0dTaXplKiogbmV3QWR2YW5jZXNQb2ludGVyLCBD
R1BvaW50KiogbmV3T2Zmc2V0c1BvaW50ZXIsIENGSW5kZXgqKiBuZXdJbmRpY2VzUG9pbnRlcikK
KyAgICB7CisgICAgICAgIHJhbmdlLmxvY2F0aW9uID0gc3RkOjptaW4oc3RkOjptYXgocmFuZ2Uu
bG9jYXRpb24sIHN0YXRpY19jYXN0PENGSW5kZXg+KDApKSwgc3RhdGljX2Nhc3Q8Q0ZJbmRleD4o
Z2x5cGhCdWZmZXIuc2l6ZSgpKSk7CisgICAgICAgIGlmIChyYW5nZS5sZW5ndGggPCAwKSB7Cisg
ICAgICAgICAgICByYW5nZS5sZW5ndGggPSBzdGQ6Om1pbihyYW5nZS5sb2NhdGlvbiwgLXJhbmdl
Lmxlbmd0aCk7CisgICAgICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHJhbmdlLmxvY2F0aW9uIC0g
cmFuZ2UubGVuZ3RoOworICAgICAgICAgICAgZ2x5cGhCdWZmZXIucmVtb3ZlKGJlZ2lubmluZ0ds
eXBoSW5kZXggKyByYW5nZS5sb2NhdGlvbiwgcmFuZ2UubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5tYWtlSG9sZShiZWdpbm5pbmdHbHlwaEluZGV4ICsg
cmFuZ2UubG9jYXRpb24sIHJhbmdlLmxlbmd0aCwgdGhpcyk7CisKKyAgICAgICAgKm5ld0dseXBo
c1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCk7CisgICAg
ICAgICpuZXdBZHZhbmNlc1BvaW50ZXIgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhiZWdpbm5pbmdH
bHlwaEluZGV4KTsKKyAgICAgICAgKm5ld09mZnNldHNQb2ludGVyID0gZ2x5cGhCdWZmZXIub3Jp
Z2lucyhiZWdpbm5pbmdHbHlwaEluZGV4KTsKKyAgICAgICAgKm5ld0luZGljZXNQb2ludGVyID0g
Z2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpOworICAgIH07
CisKKyAgICBhdXRvIHN1YnN0cmluZyA9IHRleHQuc3Vic3RyaW5nKGJlZ2lubmluZ1N0cmluZ0lu
ZGV4KTsKKyAgICBhdXRvIHVwY29udmVydGVkQ2hhcmFjdGVycyA9IHN1YnN0cmluZy51cGNvbnZl
cnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGxvY2FsZVN0cmluZyA9IExvY2FsZUNvY29hOjpj
YW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXJGcm9tU3RyaW5nKGxvY2FsZSkuc3RyaW5nKCkuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyAgICBDVEZvbnRTaGFwZU9wdGlvbnMgb3B0aW9ucyA9IGtDVEZvbnRT
aGFwZVdpdGhDbHVzdGVyQ29tcG9zaXRpb24KKyAgICAgICAgfCAoZW5hYmxlS2VybmluZyA/IGtD
VEZvbnRTaGFwZVdpdGhLZXJuaW5nIDogMCkKKyAgICAgICAgfCAodGV4dERpcmVjdGlvbiA9PSBU
ZXh0RGlyZWN0aW9uOjpSVEwgPyBrQ1RGb250U2hhcGVSaWdodFRvTGVmdCA6IDApOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0ds
eXBoSW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lu
bmluZ0dseXBoSW5kZXgpW2ldIC09IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisgICAgQ1RGb250
U2hhcGVHbHlwaHMoCisgICAgICAgIG1fcGxhdGZvcm1EYXRhLmN0Rm9udCgpLAorICAgICAgICBn
bHlwaEJ1ZmZlci5nbHlwaHMoYmVnaW5uaW5nR2x5cGhJbmRleCksCisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8Q0dTaXplKj4oZ2x5cGhCdWZmZXIuYWR2YW5jZXMoYmVnaW5uaW5nR2x5cGhJbmRl
eCkpLAorICAgICAgICByZWludGVycHJldF9jYXN0PENHUG9pbnQqPihnbHlwaEJ1ZmZlci5vcmln
aW5zKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0lu
U3RyaW5nKGJlZ2lubmluZ0dseXBoSW5kZXgpLAorICAgICAgICByZWludGVycHJldF9jYXN0PGNv
bnN0IFVuaUNoYXIqPih1cGNvbnZlcnRlZENoYXJhY3RlcnMuZ2V0KCkpLAorICAgICAgICBnbHlw
aEJ1ZmZlci5zaXplKCkgLSBiZWdpbm5pbmdHbHlwaEluZGV4LAorICAgICAgICBvcHRpb25zLAor
ICAgICAgICBsb2NhbGVTdHJpbmcuZ2V0KCksCisgICAgICAgIGhhbmRsZXIpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKSAtIGJlZ2lubmluZ0dseXBo
SW5kZXg7ICsraSkKKyAgICAgICAgZ2x5cGhCdWZmZXIub2Zmc2V0c0luU3RyaW5nKGJlZ2lubmlu
Z0dseXBoSW5kZXgpW2ldICs9IGJlZ2lubmluZ1N0cmluZ0luZGV4OworCisjZWxzZQorCisgICAg
VU5VU0VEX1BBUkFNKGJlZ2lubmluZ1N0cmluZ0luZGV4KTsKKyAgICBVTlVTRURfUEFSQU0obG9j
YWxlKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisKKyAgICAvLyBDVEZvbnRUcmFuc2Zvcm1H
bHlwaHMoKSBvcGVyYXRlcyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCBXaWR0aEl0ZXJhdG9yIGl0ZXJh
dGVzIGluIGxvZ2ljYWwgb3JkZXIuCisgICAgLy8gVGVtcG9yYXJpbHkgcHV0IHVzIGluIHZpc3Vh
bCBvcmRlciBqdXN0IGZvciB0aGUgY2FsbCwgdGhlbiBwdXQgdXMgYmFjayBpbnRvIGxvZ2ljYWwg
b3JkZXIgd2hlbgorICAgIC8vIHRoZSBjYWxsIGlzIGRvbmUuCisgICAgLy8gV2UgZG9uJ3QgaGF2
ZSBhIGdsb2JhbCB2aWV3IG9mIHRoZSBlbnRpcmUgR2x5cGhCdWZmZXI7IHdlJ3JlIGp1c3Qgb3Bl
cmF0aW5nIG9uIGEgc2luZ2xlIGNodW5rIG9mIGl0LgorICAgIC8vIFdpZHRoSXRlcmF0b3IgZW5j
b3VudGVycyB0aGUgY2h1bmtzIG91dCBpbiBsb2dpY2FsIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIG1h
aW50YWluIHRoYXQgaW52YXJpYW50LgorICAgIC8vIEV2ZW50dWFsbHksIEZvbnRDYXNjYWRlOjps
YXlvdXRTaW1wbGVUZXh0KCkgd2lsbCByZXZlcnNlIHRoZSB3aG9sZSBidWZmZXIgdG8gcHV0IHRo
ZSBlbnRpcmUgdGhpbmcKKyAgICAvLyBpbiB2aXN1YWwgb3JkZXIsIGJ1dCB0aGF0J3Mgb2theSBi
ZWNhdXNlIGl0IGhhcyBhIHZpZXcgb2YgdGhlIGVudGlyZSBHbHlwaEJ1ZmZlci4KKyAgICAvLyBP
biB0aGUgb3RoZXIgaGFuZCwgQ1RGb250U2hhcGVHbHlwaHMoKSBhY2NlcHRzIHRoZSBidWZmZXIg
aW4gbG9naWNhbCBvcmRlciBidXQgcmV0dXJucyBpdCBpbiBwaHlzaWNhbAorICAgIC8vIG9yZGVy
LCB3aGljaCBtZWFucyB0aGUgc2Vjb25kIHJldmVyc2UoKSBpbiB0aGlzIGZ1bmN0aW9uIHN0aWxs
IG5lZWRzIHRvIGV4ZWN1dGUgd2hlbgorICAgIC8vIENURm9udFNoYXBlR2x5cGhzKCkgaXMgYmVp
bmcgdXNlZC4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpSVEwpCisg
ICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5cGhCdWZm
ZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7CisKKyAgICBDVEZvbnRUcmFuc2Zvcm1P
cHRpb25zIG9wdGlvbnMgPSAoZW5hYmxlS2VybmluZyA/IGtDVEZvbnRUcmFuc2Zvcm1BcHBseVBv
c2l0aW9uaW5nIDogMCkgfCBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nOworICAgIENURm9u
dFRyYW5zZm9ybUdseXBocyhtX3BsYXRmb3JtRGF0YS5jdEZvbnQoKSwgZ2x5cGhCdWZmZXIuZ2x5
cGhzKGJlZ2lubmluZ0dseXBoSW5kZXgpLCByZWludGVycHJldF9jYXN0PENHU2l6ZSo+KGdseXBo
QnVmZmVyLmFkdmFuY2VzKGJlZ2lubmluZ0dseXBoSW5kZXgpKSwgZ2x5cGhCdWZmZXIuc2l6ZSgp
IC0gYmVnaW5uaW5nR2x5cGhJbmRleCwgb3B0aW9ucyk7CisjZW5kaWYKKworICAgIC8vIFNlZSB0
aGUgY29tbWVudCBhYm92ZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHRoZSBvdGhlciBjYWxsIHRv
IHJldmVyc2UoKSBpcy4KKyAgICBpZiAodGV4dERpcmVjdGlvbiA9PSBUZXh0RGlyZWN0aW9uOjpS
VEwpCisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UoYmVnaW5uaW5nR2x5cGhJbmRleCwgZ2x5
cGhCdWZmZXIuc2l6ZSgpIC0gYmVnaW5uaW5nR2x5cGhJbmRleCk7Cit9CisKK3N0YXRpYyBpbnQg
ZXh0cmFjdE51bWJlcihDRk51bWJlclJlZiBudW1iZXIpCit7CisgICAgaW50IHJlc3VsdCA9IDA7
CisgICAgaWYgKG51bWJlcikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXIsIGtDRk51
bWJlckludFR5cGUsICZyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgRm9u
dDo6ZGV0ZXJtaW5lUGl0Y2goKQoreworICAgIENURm9udFJlZiBjdEZvbnQgPSBtX3BsYXRmb3Jt
RGF0YS5mb250KCk7CisgICAgQVNTRVJUKGN0Rm9udCk7CisKKyAgICAvLyBTcGVjaWFsIGNhc2Ug
T3Nha2EtTW9uby4KKyAgICAvLyBBY2NvcmRpbmcgdG8gPHJkYXI6Ly9wcm9ibGVtLzM5OTk0Njc+
LCB3ZSBzaG91bGQgdHJlYXQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIEFwcEtpdCBkb2VzIG5vdCByZXBvcnQgT3Nha2EtTW9ubyBhcyBmaXhlZCBwaXRj
aC4KKworICAgIC8vIFNwZWNpYWwgY2FzZSBNUy1QR290aGljLgorICAgIC8vIEFjY29yZGluZyB0
byA8cmRhcjovL3Byb2JsZW0vNDAzMjkzOD4sIHdlIHNob3VsZCBub3QgdHJlYXQgTVMtUEdvdGhp
YyBhcyBmaXhlZCBwaXRjaC4KKyAgICAvLyBOb3RlIHRoYXQgQXBwS2l0IGRvZXMgcmVwb3J0IE1T
LVBHb3RoaWMgYXMgZml4ZWQgcGl0Y2guCisKKyAgICAvLyBTcGVjaWFsIGNhc2UgTW9ub3R5cGVD
b3JzaXZhCisgICAgLy8gQWNjb3JkaW5nIHRvIDxyZGFyOi8vcHJvYmxlbS81NDU0NzA0Piwgd2Ug
c2hvdWxkIG5vdCB0cmVhdCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0Y2guCisgICAgLy8g
Tm90ZSB0aGF0IEFwcEtpdCBkb2VzIHJlcG9ydCBNb25vdHlwZUNvcnNpdmEgYXMgZml4ZWQgcGl0
Y2guCisKKyAgICBhdXRvIGZ1bGxOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RnVsbE5hbWUoY3RG
b250KSk7CisgICAgYXV0byBmYW1pbHlOYW1lID0gYWRvcHRDRihDVEZvbnRDb3B5RmFtaWx5TmFt
ZShjdEZvbnQpKTsKKworICAgIGludCBmaXhlZFBpdGNoID0gZXh0cmFjdE51bWJlcihhZG9wdENG
KHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPihDVEZvbnRDb3B5QXR0cmlidXRlKG1fcGxhdGZvcm1E
YXRhLmZvbnQoKSwga0NURm9udEZpeGVkQWR2YW5jZUF0dHJpYnV0ZSkpKS5nZXQoKSk7CisgICAg
bV90cmVhdEFzRml4ZWRQaXRjaCA9IChDVEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhjdEZvbnQpICYg
a0NURm9udE1vbm9TcGFjZVRyYWl0KSB8fCBmaXhlZFBpdGNoIHx8IChjYXNlSW5zZW5zaXRpdmVD
b21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpKSB8fCBjYXNlSW5zZW5z
aXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTVMtUEdvdGhpYyIpKSB8fCBjYXNl
SW5zZW5zaXRpdmVDb21wYXJlKGZ1bGxOYW1lLmdldCgpLCBDRlNUUigiTW9ub3R5cGVDb3JzaXZh
IikpKTsKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGlmIChmYW1pbHlOYW1lICYmIGNh
c2VJbnNlbnNpdGl2ZUNvbXBhcmUoZmFtaWx5TmFtZS5nZXQoKSwgQ0ZTVFIoIkNvdXJpZXIgTmV3
IikpKSB7CisgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBDb3VyaWVyIE5ldyB0byBub3QgYmUgdHJl
YXRlZCBhcyBmaXhlZCBwaXRjaCwgYXMgdGhpcyB3aWxsIG1ha2UgdXNlIG9mIGEgaGFja2VkIHNw
YWNlIHdpZHRoIHdoaWNoIGlzIHVuZGVzaXJlYWJsZSBmb3IgaVBob25lIChzZWUgcmRhcjovLzYy
Njk3ODMpLgorICAgICAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gZmFsc2U7CisgICAgfQorI2Vu
ZGlmCit9CisKK0Zsb2F0UmVjdCBGb250OjpwbGF0Zm9ybUJvdW5kc0ZvckdseXBoKEdseXBoIGds
eXBoKSBjb25zdAoreworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBib3VuZGluZ0Jv
eCA9IENURm9udEdldEJvdW5kaW5nUmVjdHNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250
KCksIHBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0
aWNhbCA/IGtDVEZvbnRPcmllbnRhdGlvblZlcnRpY2FsIDoga0NURm9udE9yaWVudGF0aW9uSG9y
aXpvbnRhbCwgJmdseXBoLCAwLCAxKTsKKyAgICBib3VuZGluZ0JveC5zZXRZKC1ib3VuZGluZ0Jv
eC5tYXhZKCkpOworICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCisgICAgICAgIGJvdW5k
aW5nQm94LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZz
ZXQpOworCisgICAgcmV0dXJuIGJvdW5kaW5nQm94OworfQorCitmbG9hdCBGb250OjpwbGF0Zm9y
bVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgQ0dTaXplIGFkdmFuY2Ug
PSBDR1NpemVaZXJvOworCisgICAgaWYgKHBsYXRmb3JtRGF0YSgpLnNpemUoKSkgeworICAgICAg
ICBib29sIGhvcml6b250YWwgPSBwbGF0Zm9ybURhdGEoKS5vcmllbnRhdGlvbigpID09IEZvbnRP
cmllbnRhdGlvbjo6SG9yaXpvbnRhbDsKKyAgICAgICAgQ1RGb250T3JpZW50YXRpb24gb3JpZW50
YXRpb24gPSBob3Jpem9udGFsIHx8IG1faXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayA/IGtDVEZv
bnRPcmllbnRhdGlvbkhvcml6b250YWwgOiBrQ1RGb250T3JpZW50YXRpb25WZXJ0aWNhbDsKKyNp
ZiBVU0UoQ1RGT05UR0VUQURWQU5DRVNfV09SS0FST1VORCkKKyAgICAgICAgQ0dGb250UmVuZGVy
aW5nU3R5bGUgc3R5bGUgPSBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmcgfCBrQ0dG
b250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFBvc2l0aW9uaW5nIHwga0NHRm9udFJlbmRlcmluZ1N0
eWxlU3VicGl4ZWxRdWFudGl6YXRpb24gfCBrQ0dGb250QW50aWFsaWFzaW5nU3R5bGVVbmZpbHRl
cmVkOworICAgICAgICBpZiAoIUNURm9udElzQXBwbGVDb2xvckVtb2ppKG1fcGxhdGZvcm1EYXRh
LmN0Rm9udCgpKSAmJiAhbV9wbGF0Zm9ybURhdGEuaGFzVmFyaWF0aW9ucygpKQorICAgICAgICAg
ICAgQ1RGb250R2V0VW5zdW1tZWRBZHZhbmNlc0ZvckdseXBoc0FuZFN0eWxlKG1fcGxhdGZvcm1E
YXRhLmN0Rm9udCgpLCBvcmllbnRhdGlvbiwgc3R5bGUsICZnbHlwaCwgJmFkdmFuY2UsIDEpOwor
ICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgQ1RGb250R2V0QWR2
YW5jZXNGb3JHbHlwaHMobV9wbGF0Zm9ybURhdGEuY3RGb250KCksIG9yaWVudGF0aW9uLCAmZ2x5
cGgsICZhZHZhbmNlLCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYWR2YW5jZS53
aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKK30KKworUGF0aCBGb250OjpwbGF0Zm9ybVBh
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0
Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKHBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBnbHlw
aCwgbnVsbHB0cikpOworICAgIGF1dG8gc3ludGhldGljQm9sZE9mZnNldCA9IHRoaXMtPnN5bnRo
ZXRpY0JvbGRPZmZzZXQoKTsKKyAgICBpZiAoc3ludGhldGljQm9sZE9mZnNldCkgeworICAgICAg
ICBhdXRvIG5ld1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CisgICAgICAg
IENHUGF0aEFkZFBhdGgobmV3UGF0aC5nZXQoKSwgbnVsbHB0ciwgcmVzdWx0LmdldCgpKTsKKyAg
ICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZVRyYW5zbGF0aW9u
KHN5bnRoZXRpY0JvbGRPZmZzZXQsIDApOworICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGgu
Z2V0KCksICZ0cmFuc2xhdGlvbiwgcmVzdWx0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIHsgV1RG
TW92ZShuZXdQYXRoKSB9OworICAgIH0KKyAgICByZXR1cm4geyBhZG9wdENGKENHUGF0aENyZWF0
ZU11dGFibGVDb3B5KHJlc3VsdC5nZXQoKSkpIH07Cit9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1T
dXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyIGNoYXJhY3RlciwgT3B0aW9uYWw8VUNoYXIzMj4gdmFy
aWF0aW9uKSBjb25zdAoreworICAgIGlmICh2YXJpYXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFVuaUNoYXIgY29kZVVuaXRzWzJdOworICAgIENHR2x5cGggZ2x5cGhzWzJdOwor
ICAgIENGSW5kZXggY291bnQgPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0cywg
Y291bnQsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJhY3Rl
cnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7Cit9
CisKK2Jvb2wgRm9udDo6aXNQcm9iYWJseU9ubHlVc2VkVG9SZW5kZXJJY29ucygpIGNvbnN0Cit7
CisgICAgYXV0byBwbGF0Zm9ybUZvbnQgPSBwbGF0Zm9ybURhdGEoKS5mb250KCk7CisgICAgaWYg
KCFwbGF0Zm9ybUZvbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFsbG93IG1v
c3Qgbm9uLWljb24gZm9udHMgdG8gYmFpbCBlYXJseSBoZXJlIGJ5IHRlc3RpbmcgYSBzaW5nbGUg
Y2hhcmFjdGVyICdhJywgd2l0aG91dCBpdGVyYXRpbmcgb3ZlciBhbGwgYmFzaWMgbGF0aW4gY2hh
cmFjdGVycy4KKyAgICBVbmlDaGFyIGxvd2VyY2FzZUFDaGFyYWN0ZXIgPSAnYSc7CisgICAgQ0dH
bHlwaCBsb3dlcmNhc2VBR2x5cGg7CisgICAgaWYgKENURm9udEdldEdseXBoc0ZvckNoYXJhY3Rl
cnMocGxhdGZvcm1Gb250LCAmbG93ZXJjYXNlQUNoYXJhY3RlciwgJmxvd2VyY2FzZUFHbHlwaCwg
MSkpIHsKKyAgICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KENURm9udEdldEJvdW5kaW5nUmVjdHNG
b3JHbHlwaHMocGxhdGZvcm1Gb250LCBrQ1RGb250T3JpZW50YXRpb25EZWZhdWx0LCAmbG93ZXJj
YXNlQUdseXBoLCBudWxscHRyLCAxKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgYXV0byBzdXBwb3J0ZWRDaGFyYWN0ZXJzID0gYWRvcHRDRihDVEZvbnRDb3B5Q2hh
cmFjdGVyU2V0KHBsYXRmb3JtRm9udCkpOworICAgIGlmIChDRkNoYXJhY3RlclNldEhhc01lbWJl
ckluUGxhbmUoc3VwcG9ydGVkQ2hhcmFjdGVycy5nZXQoKSwgMSkgfHwgQ0ZDaGFyYWN0ZXJTZXRI
YXNNZW1iZXJJblBsYW5lKHN1cHBvcnRlZENoYXJhY3RlcnMuZ2V0KCksIDIpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBUaGlzIGVuY29tcGFzc2VzIGFsbCBiYXNpYyBMYXRpbiBu
b24tY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIGNvbnN0ZXhwciBVbmlDaGFyIGZpcnN0Q2hhcmFj
dGVyVG9UZXN0ID0gJyAnOworICAgIGNvbnN0ZXhwciBVbmlDaGFyIGxhc3RDaGFyYWN0ZXJUb1Rl
c3QgPSAnfic7CisgICAgY29uc3RleHByIGF1dG8gbnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0ID0g
bGFzdENoYXJhY3RlclRvVGVzdCAtIGZpcnN0Q2hhcmFjdGVyVG9UZXN0ICsgMTsKKworICAgIFZl
Y3RvcjxDR0dseXBoPiBnbHlwaHM7CisgICAgZ2x5cGhzLmZpbGwoMCwgbnVtYmVyT2ZDaGFyYWN0
ZXJzVG9UZXN0KTsKKyAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJSYW5nZShwbGF0Zm9y
bUZvbnQsIGdseXBocy5iZWdpbigpLCBDRlJhbmdlTWFrZShmaXJzdENoYXJhY3RlclRvVGVzdCwg
bnVtYmVyT2ZDaGFyYWN0ZXJzVG9UZXN0KSk7CisgICAgZ2x5cGhzLnJlbW92ZUFsbCgwKTsKKwor
ICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBW
ZWN0b3I8Q0dSZWN0PiBib3VuZGluZ1JlY3RzOworICAgIGJvdW5kaW5nUmVjdHMuZmlsbChDR1Jl
Y3RaZXJvLCBnbHlwaHMuc2l6ZSgpKTsKKyAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5
cGhzKHBsYXRmb3JtRm9udCwga0NURm9udE9yaWVudGF0aW9uRGVmYXVsdCwgZ2x5cGhzLmJlZ2lu
KCksIGJvdW5kaW5nUmVjdHMuYmVnaW4oKSwgZ2x5cGhzLnNpemUoKSk7CisgICAgcmV0dXJuIG5v
dEZvdW5kID09IGJvdW5kaW5nUmVjdHMuZmluZE1hdGNoaW5nKFtdKGF1dG8mIHJlY3QpIHsKKyAg
ICAgICAgcmV0dXJuICFDR1JlY3RJc0VtcHR5KHJlY3QpOworICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jdC9Gb250UGxhdGZvcm1EYXRhQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0YUNvcmVUZXh0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NDViMGU4NTAxMjE1OWY2MDEzZmY1MjI5ZGIyNDBhMjdlNjI4MGNiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3QvRm9udFBsYXRmb3JtRGF0
YUNvcmVUZXh0LmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCisjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaD4KKyNlbHNlCisjaW5jbHVkZSA8
cGFsL3NwaS93aW4vQ29yZVRleHRTUElXaW4uaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoQ1RGb250UmVmIGZvbnQs
IGZsb2F0IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNPYmxpcXVlLCBG
b250T3JpZW50YXRpb24gb3JpZW50YXRpb24sIEZvbnRXaWR0aFZhcmlhbnQgd2lkdGhWYXJpYW50
LCBUZXh0UmVuZGVyaW5nTW9kZSB0ZXh0UmVuZGVyaW5nTW9kZSkKKyAgICA6IEZvbnRQbGF0Zm9y
bURhdGEoc2l6ZSwgc3ludGhldGljQm9sZCwgc3ludGhldGljT2JsaXF1ZSwgb3JpZW50YXRpb24s
IHdpZHRoVmFyaWFudCwgdGV4dFJlbmRlcmluZ01vZGUpCit7CisgICAgQVNTRVJUX0FSRyhmb250
LCBmb250KTsKKyAgICBtX2ZvbnQgPSBmb250OworICAgIG1faXNDb2xvckJpdG1hcEZvbnQgPSBD
VEZvbnRHZXRTeW1ib2xpY1RyYWl0cyhmb250KSAmIGtDVEZvbnRDb2xvckdseXBoc1RyYWl0Owor
ICAgIG1faXNTeXN0ZW1Gb250ID0gV2ViQ29yZTo6aXNTeXN0ZW1Gb250KG1fZm9udC5nZXQoKSk7
CisgICAgYXV0byB2YXJpYXRpb25zID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDRkRpY3Rpb25hcnlS
ZWY+KENURm9udENvcHlBdHRyaWJ1dGUoZm9udCwga0NURm9udFZhcmlhdGlvbkF0dHJpYnV0ZSkp
KTsKKyAgICBtX2hhc1ZhcmlhdGlvbnMgPSB2YXJpYXRpb25zICYmIENGRGljdGlvbmFyeUdldENv
dW50KHZhcmlhdGlvbnMuZ2V0KCkpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBt
X2lzRW1vamkgPSBDVEZvbnRJc0FwcGxlQ29sb3JFbW9qaShtX2ZvbnQuZ2V0KCkpOworI2VuZGlm
Cit9CisKK2Jvb2wgaXNTeXN0ZW1Gb250KENURm9udFJlZiBmb250KQoreworI2lmIEhBVkUoQ1RG
T05USVNTWVNURU1VSUZPTlQpCisgICAgcmV0dXJuIENURm9udElzU3lzdGVtVUlGb250KGZvbnQp
OworI2Vsc2UKKyAgICByZXR1cm4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KGFkb3B0
Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKGZvbnQpKS5nZXQoKSk7CisjZW5kaWYKK30KKwor
Q1RGb250UmVmIEZvbnRQbGF0Zm9ybURhdGE6OnJlZ2lzdGVyZWRGb250KCkgY29uc3QKK3sKKyAg
ICBDVEZvbnRSZWYgcGxhdGZvcm1Gb250ID0gZm9udCgpOworICAgIEFTU0VSVChwbGF0Zm9ybUZv
bnQpOworICAgIGlmIChwbGF0Zm9ybUZvbnQgJiYgYWRvcHRDRihDVEZvbnRDb3B5QXR0cmlidXRl
KHBsYXRmb3JtRm9udCwga0NURm9udFVSTEF0dHJpYnV0ZSkpKQorICAgICAgICByZXR1cm4gcGxh
dGZvcm1Gb250OworICAgIHJldHVybiBudWxscHRyOworfQorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CitpbmxpbmUgaW50IG1hcEZvbnRXaWR0aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKEZvbnRX
aWR0aFZhcmlhbnQgdmFyaWFudCkKK3sKKyAgICBzd2l0Y2ggKHZhcmlhbnQpIHsKKyAgICBjYXNl
IEZvbnRXaWR0aFZhcmlhbnQ6OlJlZ3VsYXJXaWR0aDoKKyAgICAgICAgcmV0dXJuIGtQcm9wb3J0
aW9uYWxUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZvbnRXaWR0aFZhcmlhbnQ6OkhhbGZXaWR0
aDoKKyAgICAgICAgcmV0dXJuIGtIYWxmV2lkdGhUZXh0U2VsZWN0b3I7CisKKyAgICBjYXNlIEZv
bnRXaWR0aFZhcmlhbnQ6OlRoaXJkV2lkdGg6CisgICAgICAgIHJldHVybiBrVGhpcmRXaWR0aFRl
eHRTZWxlY3RvcjsKKworICAgIGNhc2UgRm9udFdpZHRoVmFyaWFudDo6UXVhcnRlcldpZHRoOgor
ICAgICAgICByZXR1cm4ga1F1YXJ0ZXJXaWR0aFRleHRTZWxlY3RvcjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1Byb3BvcnRpb25hbFRleHRTZWxlY3Rv
cjsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RS
ZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSgpCit7CisgICAgYXV0byBsYXN0UmVzb3J0ID0gYWRv
cHRDRihDVEZvbnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0UmVz
b3J0IiksIDApKTsKKworICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVzb3J0
LmdldCgpIH07CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlfTEVO
R1RIKGRlc2NyaXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAgQ0ZUeXBl
UmVmIGtleXNbXSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07CisgICAgQ0ZUeXBl
UmVmIHZhbHVlc1tdID0geyBhcnJheS5nZXQoKSB9OworICAgIHJldHVybiBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJB
WV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVE
aWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIENURm9udERlc2NyaXB0b3JS
ZWYgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNGb250RGVzY3JpcHRvcigpCit7Cisg
ICAgc3RhdGljIENURm9udERlc2NyaXB0b3JSZWYgZGVzY3JpcHRvciA9IENURm9udERlc2NyaXB0
b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhjYXNjYWRlVG9MYXN0UmVzb3J0QXR0cmlidXRlc0RpY3Rp
b25hcnkoKS5nZXQoKSk7CisgICAgcmV0dXJuIGRlc2NyaXB0b3I7Cit9CisKK0NURm9udFJlZiBG
b250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBjb25zdAoreworICAgIGlmIChtX2N0Rm9udCkKKyAg
ICAgICAgcmV0dXJuIG1fY3RGb250LmdldCgpOworCisgICAgQVNTRVJUKG1fZm9udCk7CisgICAg
bV9jdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZUNvcHlXaXRoQXR0cmlidXRlcyhtX2ZvbnQu
Z2V0KCksIG1fc2l6ZSwgbnVsbHB0ciwgY2FzY2FkZVRvTGFzdFJlc29ydEFuZFZhcmlhdGlvbnNG
b250RGVzY3JpcHRvcigpKSk7CisKKyAgICBpZiAobV93aWR0aFZhcmlhbnQgIT0gRm9udFdpZHRo
VmFyaWFudDo6UmVndWxhcldpZHRoKSB7CisgICAgICAgIGludCBmZWF0dXJlVHlwZVZhbHVlID0g
a1RleHRTcGFjaW5nVHlwZTsKKyAgICAgICAgaW50IGZlYXR1cmVTZWxlY3RvclZhbHVlID0gbWFw
Rm9udFdpZHRoVmFyaWFudFRvQ1RGZWF0dXJlU2VsZWN0b3IobV93aWR0aFZhcmlhbnQpOworICAg
ICAgICBSZXRhaW5QdHI8Q1RGb250RGVzY3JpcHRvclJlZj4gc291cmNlRGVzY3JpcHRvciA9IGFk
b3B0Q0YoQ1RGb250Q29weUZvbnREZXNjcmlwdG9yKG1fY3RGb250LmdldCgpKSk7CisgICAgICAg
IFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVR5cGUgPSBhZG9wdENGKENGTnVtYmVyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZmZWF0dXJlVHlwZVZh
bHVlKSk7CisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gZmVhdHVyZVNlbGVjdG9yID0g
YWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRU
eXBlLCAmZmVhdHVyZVNlbGVjdG9yVmFsdWUpKTsKKyAgICAgICAgUmV0YWluUHRyPENURm9udERl
c2NyaXB0b3JSZWY+IG5ld0Rlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVh
dGVDb3B5V2l0aEZlYXR1cmUoc291cmNlRGVzY3JpcHRvci5nZXQoKSwgZmVhdHVyZVR5cGUuZ2V0
KCksIGZlYXR1cmVTZWxlY3Rvci5nZXQoKSkpOworICAgICAgICBSZXRhaW5QdHI8Q1RGb250UmVm
PiBuZXdGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoRm9udERlc2NyaXB0b3IobmV3RGVz
Y3JpcHRvci5nZXQoKSwgbV9zaXplLCAwKSk7CisKKyAgICAgICAgaWYgKG5ld0ZvbnQpCisgICAg
ICAgICAgICBtX2N0Rm9udCA9IG5ld0ZvbnQ7CisgICAgfQorCisgICAgcmV0dXJuIG1fY3RGb250
LmdldCgpOworfQorI2Vsc2UKK0NURm9udFJlZiBGb250UGxhdGZvcm1EYXRhOjpjdEZvbnQoKSBj
b25zdAoreworICAgIHJldHVybiBmb250KCk7Cit9CisjZW5kaWYKKworUmV0YWluUHRyPENGVHlw
ZVJlZj4gRm9udFBsYXRmb3JtRGF0YTo6b2JqZWN0Rm9yRXF1YWxpdHlDaGVjayhDVEZvbnRSZWYg
Y3RGb250KQoreworICAgIGF1dG8gZm9udERlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udENvcHlG
b250RGVzY3JpcHRvcihjdEZvbnQpKTsKKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODY4MyBUaGlzIGlzIGEgc2hhbGxvdyBwb2ludGVyIGNv
bXBhcmUgZm9yIHdlYiBmb250cworICAgIC8vIGJlY2F1c2UgdGhlIFVSTCBjb250YWlucyB0aGUg
YWRkcmVzcyBvZiB0aGUgZm9udC4gVGhpcyBtZWFucyB3ZSBtaWdodCBlcnJvbmVvdXNseSBnZXQg
ZmFsc2UgbmVnYXRpdmVzLgorICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsID0gYWRvcHRDRihz
dGF0aWNfY2FzdDxDRlVSTFJlZj4oQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZm9udERl
c2NyaXB0b3IuZ2V0KCksIGtDVEZvbnRSZWZlcmVuY2VVUkxBdHRyaWJ1dGUpKSk7CisgICAgQVNT
RVJUKCF1cmwgfHwgQ0ZHZXRUeXBlSUQodXJsLmdldCgpKSA9PSBDRlVSTEdldFR5cGVJRCgpKTsK
KyAgICByZXR1cm4gdXJsOworfQorCitSZXRhaW5QdHI8Q0ZUeXBlUmVmPiBGb250UGxhdGZvcm1E
YXRhOjpvYmplY3RGb3JFcXVhbGl0eUNoZWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gb2JqZWN0
Rm9yRXF1YWxpdHlDaGVjayhjdEZvbnQoKSk7Cit9CisKK1JlZlB0cjxTaGFyZWRCdWZmZXI+IEZv
bnRQbGF0Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Cit7Cisg
ICAgaWYgKFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEgPSBhZG9wdENGKENURm9udENvcHlUYWJs
ZShmb250KCksIHRhYmxlLCBrQ1RGb250VGFibGVPcHRpb25Ob09wdGlvbnMpKSkKKyAgICAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEuZ2V0KCkpOworCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVECisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRh
OjpkZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgU3RyaW5nIGZvbnREZXNjcmlwdGlvbiB7IGFk
b3B0Q0YoQ0ZDb3B5RGVzY3JpcHRpb24oZm9udCgpKSkuZ2V0KCkgfTsKKyAgICByZXR1cm4gbWFr
ZVN0cmluZyhmb250RGVzY3JpcHRpb24sICcgJywgbV9zaXplLAorICAgICAgICAobV9zeW50aGV0
aWNCb2xkID8gIiBzeW50aGV0aWMgYm9sZCIgOiAiIiksCisgICAgICAgIChtX3N5bnRoZXRpY09i
bGlxdWUgPyAiIHN5bnRoZXRpYyBvYmxpcXVlIiA6ICIiKSwKKyAgICAgICAgKG1fb3JpZW50YXRp
b24gPT0gRm9udE9yaWVudGF0aW9uOjpWZXJ0aWNhbCA/ICIgdmVydGljYWwgb3JpZW50YXRpb24i
IDogIiIpKTsKK30KKworI2VuZGlmCisKK1N0cmluZyBGb250UGxhdGZvcm1EYXRhOjpmYW1pbHlO
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBwbGF0Zm9ybUZvbnQgPSBmb250KCkpCisgICAg
ICAgIHJldHVybiBhZG9wdENGKENURm9udENvcHlGYW1pbHlOYW1lKHBsYXRmb3JtRm9udCkpLmdl
dCgpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNvcmVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2N0L0dseXBoUGFnZUNv
cmVUZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMzhlZTM2ZGM2Yjg1YzQzYTNkNWI5Y2Q5NTRlYzRlMTM3
YmVmNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY3QvR2x5cGhQYWdlQ29yZVRleHQuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVk
ZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9Db3JlVGV4
dFNQSS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgc2hvdWxkRmlsbFdp
dGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgaWYgKCFmb250Lmhhc1ZlcnRpY2FsR2x5cGhz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnVmZmVyTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKCFGb250Q2FzY2FkZTo6aXNDSktJZGVv
Z3JhcGgoYnVmZmVyW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBjb25zdGV4cHIgQ0dHbHlwaCBkZWxldGVk
R2x5cGggPSAweEZGRkY7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVu
c2lnbmVkIGJ1ZmZlckxlbmd0aCkKK3sKKyAgICBBU1NFUlQoYnVmZmVyTGVuZ3RoID09IEdseXBo
UGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAg
ICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOworICAgIFZlY3RvcjxDR0dseXBoLCA1
MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOworICAgIHVuc2lnbmVkIGdseXBoU3RlcCA9IGJ1ZmZl
ckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKKworICAgIGlmIChzaG91bGRGaWxsV2l0aFZlcnRp
Y2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKKyAgICAgICAgQ1RGb250R2V0
VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZl
ckxlbmd0aCk7CisgICAgZWxzZQorICAgICAgICBDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJz
KGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+
KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CisKKyAgICBib29sIGhhdmVH
bHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpz
aXplOyArK2kpIHsKKyAgICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBoc1tpICogZ2x5cGhTdGVw
XTsKKyAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRlbGV0ZWRHbHlwaCkgewor
ICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7CisgICAgICAgICAgICBo
YXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gaGF2ZUdseXBo
czsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZTNhNTM1ZGM0MDNlNDMyNDNhYjgxM2M2YzE0ZmRlY2FkNjdlOGRlZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFn
ZS5oIgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL0NvcmVUZXh0U1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wg
c2hvdWxkRmlsbFdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBVQ2hhciogYnVmZmVyLCB1bnNpZ25l
ZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCi17Ci0gICAgaWYgKCFmb250Lmhhc1Zl
cnRpY2FsR2x5cGhzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKCFGb250Q2FzY2Fk
ZTo6aXNDSktJZGVvZ3JhcGgoYnVmZmVyW2ldKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBjb25zdCBjb25zdGV4cHIgQ0dH
bHlwaCBkZWxldGVkR2x5cGggPSAweEZGRkY7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKLXsKLSAgICBBU1NFUlQoYnVmZmVyTGVu
Z3RoID09IEdseXBoUGFnZTo6c2l6ZSB8fCBidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6
c2l6ZSk7Ci0KLSAgICBjb25zdCBGb250JiBmb250ID0gdGhpcy0+Zm9udCgpOwotICAgIFZlY3Rv
cjxDR0dseXBoLCA1MTI+IGdseXBocyhidWZmZXJMZW5ndGgpOwotICAgIHVuc2lnbmVkIGdseXBo
U3RlcCA9IGJ1ZmZlckxlbmd0aCAvIEdseXBoUGFnZTo6c2l6ZTsKLQotICAgIGlmIChzaG91bGRG
aWxsV2l0aFZlcnRpY2FsR2x5cGhzKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KSkKLSAgICAg
ICAgQ1RGb250R2V0VmVydGljYWxHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRh
KCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nhc3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5k
YXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0gICAgZWxzZQotICAgICAgICBDVEZvbnRHZXRHbHlwaHNG
b3JDaGFyYWN0ZXJzKGZvbnQucGxhdGZvcm1EYXRhKCkuY3RGb250KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8VW5pQ2hhcio+KGJ1ZmZlciksIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7Ci0KLSAg
ICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byB0aGVHbHlwaCA9IGdseXBoc1tp
ICogZ2x5cGhTdGVwXTsKLSAgICAgICAgaWYgKHRoZUdseXBoICYmIHRoZUdseXBoICE9IGRlbGV0
ZWRHbHlwaCkgewotICAgICAgICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCB0aGVHbHlwaCk7Ci0g
ICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gaGF2ZUdseXBoczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGFlOTI0Y2NjMzYyNDlkNWFkM2M3OTQzNjZhMzYyZWNmNGYz
ZWI2Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDQ2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDksIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udC5o
IgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIK
LSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBDR0Zs
b2F0IHRvQ0dGbG9hdChGSVhFRCBmKQotewotICAgIHJldHVybiBmLnZhbHVlICsgZi5mcmFjdCAv
IENHRmxvYXQoNjU1MzYuMCk7Ci19Ci0KLXN0YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckds
eXBoKEhEQyBoZGMsIEdseXBoIGdseXBoKQotewotICAgIENHTXV0YWJsZVBhdGhSZWYgcGF0aCA9
IENHUGF0aENyZWF0ZU11dGFibGUoKTsKLQotICAgIHN0YXRpYyBjb25zdCBNQVQyIGlkZW50aXR5
ID0geyAwLCAxLCAgMCwgMCwgIDAsIDAsICAwLCAxIH07Ci0gICAgR0xZUEhNRVRSSUNTIGdseXBo
TWV0cmljczsKLSAgICAvLyBHR09fTkFUSVZFIG1hdGNoZXMgdGhlIG91dGxpbmUgcGVyZmVjdGx5
IHdoZW4gV2luZG93cyBmb250IHNtb290aGluZyBpcyBvZmYuCi0gICAgLy8gR0dPX05BVElWRSB8
IEdHT19VTkhJTlRFRCBkb2VzIG5vdCBtYXRjaCBwZXJmZWN0bHkgZWl0aGVyIHdoZW4gV2luZG93
cyBmb250IHNtb290aGluZyBpcyBvbiBvciBvZmYuCi0gICAgRFdPUkQgb3V0bGluZUxlbmd0aCA9
IEdldEdseXBoT3V0bGluZShoZGMsIGdseXBoLCBHR09fR0xZUEhfSU5ERVggfCBHR09fTkFUSVZF
LCAmZ2x5cGhNZXRyaWNzLCAwLCAwLCAmaWRlbnRpdHkpOwotICAgIEFTU0VSVChvdXRsaW5lTGVu
Z3RoID49IDApOwotICAgIGlmIChvdXRsaW5lTGVuZ3RoIDwgMCkKLSAgICAgICAgcmV0dXJuIHBh
dGg7Ci0KLSAgICBWZWN0b3I8VUludDg+IG91dGxpbmUob3V0bGluZUxlbmd0aCk7Ci0gICAgR2V0
R2x5cGhPdXRsaW5lKGhkYywgZ2x5cGgsIEdHT19HTFlQSF9JTkRFWCB8IEdHT19OQVRJVkUsICZn
bHlwaE1ldHJpY3MsIG91dGxpbmVMZW5ndGgsIG91dGxpbmUuZGF0YSgpLCAmaWRlbnRpdHkpOwot
Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gMDsKLSAgICB3aGlsZSAob2Zmc2V0IDwgb3V0bGluZUxl
bmd0aCkgewotICAgICAgICBMUFRUUE9MWUdPTkhFQURFUiBzdWJwYXRoID0gcmVpbnRlcnByZXRf
Y2FzdDxMUFRUUE9MWUdPTkhFQURFUj4ob3V0bGluZS5kYXRhKCkgKyBvZmZzZXQpOwotICAgICAg
ICBBU1NFUlQoc3VicGF0aC0+ZHdUeXBlID09IFRUX1BPTFlHT05fVFlQRSk7Ci0gICAgICAgIGlm
IChzdWJwYXRoLT5kd1R5cGUgIT0gVFRfUE9MWUdPTl9UWVBFKQotICAgICAgICAgICAgcmV0dXJu
IHBhdGg7Ci0KLSAgICAgICAgQ0dQYXRoTW92ZVRvUG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHN1
YnBhdGgtPnBmeFN0YXJ0LngpLCB0b0NHRmxvYXQoc3VicGF0aC0+cGZ4U3RhcnQueSkpOwotCi0g
ICAgICAgIHVuc2lnbmVkIHN1YnBhdGhPZmZzZXQgPSBzaXplb2YoKnN1YnBhdGgpOwotICAgICAg
ICB3aGlsZSAoc3VicGF0aE9mZnNldCA8IHN1YnBhdGgtPmNiKSB7Ci0gICAgICAgICAgICBMUFRU
UE9MWUNVUlZFIHNlZ21lbnQgPSByZWludGVycHJldF9jYXN0PExQVFRQT0xZQ1VSVkU+KHJlaW50
ZXJwcmV0X2Nhc3Q8VUludDgqPihzdWJwYXRoKSArIHN1YnBhdGhPZmZzZXQpOwotICAgICAgICAg
ICAgc3dpdGNoIChzZWdtZW50LT53VHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgVFRfUFJJ
TV9MSU5FOgotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2Vn
bWVudC0+Y3BmeDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgQ0dQYXRoQWRkTGluZVRv
UG9pbnQocGF0aCwgMCwgdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0ueCksIHRvQ0dGbG9hdChz
ZWdtZW50LT5hcGZ4W2ldLnkpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIFRUX1BSSU1fUVNQTElORToKLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNlZ21lbnQtPmNwZng7IGkrKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaV0ueCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDR0Zsb2F0IHkgPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBm
eFtpXS55KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENHRmxvYXQgY3B4OwotICAgICAgICAg
ICAgICAgICAgICAgICAgQ0dGbG9hdCBjcHk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpID09IHNlZ21lbnQtPmNwZnggLSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3B4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLngpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNweSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweCA9ICh0b0NHRmxvYXQoc2Vn
bWVudC0+YXBmeFtpXS54KSArIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS54KSkgLyAy
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNweSA9ICh0b0NHRmxvYXQoc2VnbWVudC0+
YXBmeFtpXS55KSArIHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4W2kgKyAxXS55KSkgLyAyOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhB
ZGRRdWFkQ3VydmVUb1BvaW50KHBhdGgsIDAsIHgsIHksIGNweCwgY3B5KTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAg
IGNhc2UgVFRfUFJJTV9DU1BMSU5FOgotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2VnbWVudC0+Y3BmeDsgaSArPSAzKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBDR0Zsb2F0IGNwMXggPSB0b0NHRmxvYXQoc2VnbWVudC0+YXBmeFtpXS54KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENHRmxvYXQgY3AxeSA9IHRvQ0dGbG9hdChzZWdtZW50LT5hcGZ4
W2ldLnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCBjcDJ4ID0gdG9DR0Zsb2F0
KHNlZ21lbnQtPmFwZnhbaSArIDFdLngpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9h
dCBjcDJ5ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDFdLnkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dGbG9hdCB4ID0gdG9DR0Zsb2F0KHNlZ21lbnQtPmFwZnhbaSArIDJdLngp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0dGbG9hdCB5ID0gdG9DR0Zsb2F0KHNlZ21lbnQt
PmFwZnhbaSArIDJdLnkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBDR1BhdGhBZGRDdXJ2
ZVRvUG9pbnQocGF0aCwgMCwgY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN1YnBhdGhPZmZzZXQgKz0gc2l6ZW9mKCpzZWdtZW50KSArIChzZWdtZW50LT5jcGZ4
IC0gMSkgKiBzaXplb2Yoc2VnbWVudC0+YXBmeFswXSk7Ci0gICAgICAgIH0KLSAgICAgICAgQ0dQ
YXRoQ2xvc2VTdWJwYXRoKHBhdGgpOwotICAgICAgICBvZmZzZXQgKz0gc3VicGF0aC0+Y2I7Ci0g
ICAgfQotICAgIHJldHVybiBwYXRoOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgc21v
b3RoaW5nTW9kZSkKLXsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9
IFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCk7Ci0KLSAgICBzd2l0Y2ggKHNtb290aGlu
Z01vZGUpIHsKLSAgICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpBbnRpYWxpYXNlZDogewotICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHRydWUpOwotICAgICAgICBz
aG91bGRVc2VGb250U21vb3RoaW5nID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBjYXNlIEZvbnRTbW9vdGhpbmdNb2RlOjpTdWJwaXhlbEFudGlhbGlhc2VkOiB7Ci0gICAgICAg
IGdyYXBoaWNzQ29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXModHJ1ZSk7Ci0gICAgICAgIHNob3Vs
ZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc6IHsKLSAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldFNob3VsZEFudGlhbGlhcyhmYWxzZSk7Ci0gICAgICAgIHNob3VsZFVzZUZvbnRTbW9v
dGhpbmcgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRm9udFNtb290
aGluZ01vZGU6OkF1dG9TbW9vdGhpbmc6IHsKLSAgICAgICAgLy8gRm9yIHRoZSBBdXRvU21vb3Ro
IGNhc2UsIGRvbid0IGRvIGFueXRoaW5nISBLZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzLgotICAg
ICAgICBicmVhazsgCi0gICAgfQotICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBvbGRGb250U21vb3RoaW5nU3R5bGUgPSBG
b250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCwgc2hvdWxkVXNlRm9u
dFNtb290aGluZyk7Ci0KLSAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEg
PSBmb250LnBsYXRmb3JtRGF0YSgpOwotCi0gICAgQ0dDb250ZXh0U2V0Rm9udChjZ0NvbnRleHQs
IHBsYXRmb3JtRGF0YS5jZ0ZvbnQoKSk7Ci0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OwotICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwot
ICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwotCi0gICAgaWYgKHBsYXRmb3JtRGF0YS5zeW50aGV0
aWNPYmxpcXVlKCkpIHsKLSAgICAgICAgc3RhdGljIGZsb2F0IHNrZXcgPSAtdGFuZihzeW50aGV0
aWNPYmxpcXVlQW5nbGUoKSAqIHBpRmxvYXQgLyAxODAuMGYpOwotICAgICAgICBtYXRyaXggPSBD
R0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAw
LCBza2V3LCAxLCAwLCAwKSk7Ci0gICAgfQotCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gc2F2ZWRN
YXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KGNnQ29udGV4dCk7Ci0gICAgQ0dDb250ZXh0
U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIG1hdHJpeCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGb250
U2l6ZShjZ0NvbnRleHQsIHBsYXRmb3JtRGF0YS5zaXplKCkpOwotICAgIEZvbnRDYXNjYWRlOjpz
ZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoY2dDb250ZXh0LCBmb250LnBsYXRmb3JtRGF0
YSgpLmlzU3lzdGVtRm9udCgpLCBmYWxzZSwgZm9udC5wbGF0Zm9ybURhdGEoKS51c2VHREkoKSk7
Ci0KLSAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IHNoYWRvd0JsdXI7Ci0g
ICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd0JsdXIsIHNoYWRvd0NvbG9yKTsKLQotICAgIGJvb2wgaGFzU2ltcGxl
U2hhZG93ID0gZ3JhcGhpY3NDb250ZXh0LnRleHREcmF3aW5nTW9kZSgpID09IFRleHREcmF3aW5n
TW9kZTo6RmlsbCAmJiBzaGFkb3dDb2xvci5pc1ZhbGlkKCkgJiYgIXNoYWRvd0JsdXIgJiYgKCFn
cmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBncmFwaGljc0NvbnRl
eHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgaWYg
KGhhc1NpbXBsZVNoYWRvdykgewotICAgICAgICAvLyBQYWludCBzaW1wbGUgc2hhZG93cyBvdXJz
ZWx2ZXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIENHIHNoYWRvd3MsIHRvIGF2b2lkIGxvc2luZyBz
dWJwaXhlbCBhbnRpYWxpYXNpbmcuCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclNoYWRv
dygpOwotICAgICAgICBDb2xvciBmaWxsQ29sb3IgPSBncmFwaGljc0NvbnRleHQuZmlsbENvbG9y
KCk7Ci0gICAgICAgIENvbG9yIHNoYWRvd0ZpbGxDb2xvciA9IHNoYWRvd0NvbG9yLmNvbG9yV2l0
aEFscGhhTXVsdGlwbGllZEJ5KGZpbGxDb2xvci5hbHBoYUFzRmxvYXQoKSk7Ci0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5zZXRGaWxsQ29sb3Ioc2hhZG93RmlsbENvbG9yKTsKLSAgICAgICAgZmxv
YXQgc2hhZG93VGV4dFggPSBwb2ludC54KCkgKyBzaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAgICAg
ICAgLy8gSWYgc2hhZG93cyBhcmUgaWdub3JpbmcgdHJhbnNmb3JtcywgdGhlbiB3ZSBoYXZlbid0
IGFwcGxpZWQgdGhlIFkgY29vcmRpbmF0ZSBmbGlwIHlldCwgc28gZG93biBpcyBuZWdhdGl2ZS4K
LSAgICAgICAgZmxvYXQgc2hhZG93VGV4dFkgPSBwb2ludC55KCkgKyBzaGFkb3dPZmZzZXQuaGVp
Z2h0KCkgKiAoZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgPyAtMSA6
IDEpOwotICAgICAgICBDR0NvbnRleHRTZXRUZXh0UG9zaXRpb24oY2dDb250ZXh0LCBzaGFkb3dU
ZXh0WCwgc2hhZG93VGV4dFkpOwotICAgICAgICBDR0NvbnRleHRTaG93R2x5cGhzV2l0aEFkdmFu
Y2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pLCBzdGF0aWNfY2FzdDxjb25z
dCBDR1NpemUqPihnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSksIG51bUdseXBocyk7Ci0gICAg
ICAgIGlmIChmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSkgewotICAgICAgICAgICAgQ0dDb250
ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpICsgc2hhZG93T2Zmc2V0Lndp
ZHRoKCkgKyBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKSwgcG9pbnQueSgpICsgc2hhZG93T2Zm
c2V0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5j
ZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0
IENHU2l6ZSo+KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICAg
ICAgfQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Ci0g
ICAgfQotCi0gICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgp
LCBwb2ludC55KCkpOwotICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250
ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+
KGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICBpZiAoZm9udC5z
eW50aGV0aWNCb2xkT2Zmc2V0KCkpIHsKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dFBvc2l0aW9u
KGNnQ29udGV4dCwgcG9pbnQueCgpICsgZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCksIHBvaW50
LnkoKSk7Ci0gICAgICAgIENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0
LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSksIHN0YXRpY19jYXN0PGNvbnN0IENHU2l6ZSo+KGds
eXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pKSwgbnVtR2x5cGhzKTsKLSAgICB9Ci0KLSAgICBpZiAo
aGFzU2ltcGxlU2hhZG93KQotICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwotCi0gICAgRm9udENhc2NhZGU6OnNl
dEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIG9sZEZvbnRTbW9vdGhpbmdTdHlsZSk7Ci0g
ICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjZ0NvbnRleHQsIHNhdmVkTWF0cml4KTsKLX0KLQot
Y29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0
KTsKLWNvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8
IDQpOwotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgz
IDw8IDQpOwotY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0g
KDQgPDwgNCk7Ci0KLWNvbnN0ZXhwciBpbnQgZm9udFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsK
LWNvbnN0ZXhwciBDR0Zsb2F0IGFudGlhbGlhc2luZ0dhbW1hID0gMi4zOwotCi1kb3VibGUgRm9u
dENhc2NhZGU6OnNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gMjsKLXVpbnQzMl90IEZvbnRDYXNj
YWRlOjpzX2ZvbnRTbW9vdGhpbmdUeXBlID0ga0NHRm9udFNtb290aGluZ1N0eWxlTWVkaXVtOwot
aW50IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZl
bE1lZGl1bTsKLWJvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7
Ci11aW50MzJfdCBGb250Q2FzY2FkZTo6c19zeXN0ZW1Gb250U21vb3RoaW5nVHlwZTsKLWJvb2wg
Rm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290aGluZ1NldDsKLQotdm9pZCBGb250Q2FzY2Fk
ZTo6c2V0Rm9udFNtb290aGluZ0xldmVsKGludCBsZXZlbCkKLXsKLSAgICBjb25zdCB1aW50MzJf
dCBzbW9vdGhpbmdUeXBlW10gPSB7IAotICAgICAgICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0
YW5kYXJkCi0gICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3Ro
aW5nVHlwZUxpZ2h0Ci0gICAgICAgIGtDR0ZvbnRTbW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9u
dFNtb290aGluZ1R5cGVNZWRpdW0KLSAgICAgICAga0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnks
IC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Ryb25nCi0gICAgfTsKLQotICAgIGlmIChsZXZlbCA8IDAg
fHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZXZlbCkgPiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHNfZm9udFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdU
eXBlW2xldmVsXTsKLSAgICBzX2ZvbnRTbW9vdGhpbmdMZXZlbCA9IGxldmVsOwotfQotCi1zdGF0
aWMgdm9pZCBzZXRDR0ZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1
aW50MzJfdCBzbW9vdGhpbmdUeXBlLCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQot
ewotICAgIGlmIChzbW9vdGhpbmdUeXBlKSB7Ci0gICAgICAgIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKGNnQ29udGV4dCwgZm9udEFsbG93c1Ntb290aGluZyk7Ci0gICAgICAgIENHQ29u
dGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0NvbnRleHQsIHNtb290aGluZ1R5cGUpOwotICAg
IH0gZWxzZQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQs
IGZhbHNlKTsKLX0KLQotdWludDMyX3QgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHls
ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29sIGZvbnRBbGxvd3NTbW9vdGhpbmcpCi17Ci0g
ICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0eWxlID0gMDsKLSAgICBpZiAoQ0dDb250ZXh0
R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0KSkKLSAgICAgICAgb2xkRm9udFNtb290aGlu
Z1N0eWxlID0gQ0dDb250ZXh0R2V0Rm9udFNtb290aGluZ1N0eWxlKGNnQ29udGV4dCk7Ci0gICAg
c2V0Q0dGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBm
b250QWxsb3dzU21vb3RoaW5nKTsKLQotICAgIHJldHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7
Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OnNldEZvbnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0
IGNvbnRyYXN0KQotewotICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Ci19
Ci0KLXN0YXRpYyBmbG9hdCBjbGVhclR5cGVDb250cmFzdCgpCi17Ci0gICAgY29uc3QgV0NIQVIg
cmVmZXJlbmNlQ2hhcmFjdGVyID0gJ1xcJzsKLSAgICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3Qg
PSAyMDAwOwotICAgIHN0YXRpYyBmbG9hdCBnYW1tYSA9IDI7Ci0gICAgVUlOVCBjb250cmFzdDsK
LQotICAgIGlmICghU3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05U
UkFTVCwgMCwgJmNvbnRyYXN0LCAwKSB8fCBjb250cmFzdCA9PSBsYXN0Q29udHJhc3QpCi0gICAg
ICAgIHJldHVybiBnYW1tYTsKLQotICAgIGxhc3RDb250cmFzdCA9IGNvbnRyYXN0OwotCi0gICAg
YXV0byBkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKDApKTsKLQotICAg
IEhHRElPQkogb2xkSEZPTlQgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmpl
Y3QoREVGQVVMVF9HVUlfRk9OVCkpOwotICAgIEdMWVBITUVUUklDUyBnbHlwaE1ldHJpY3M7Ci0K
LSAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAg
MCwgMSB9OwotICAgIGlmICg6OkdldEdseXBoT3V0bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hh
cmFjdGVyLCBHR09fTUVUUklDUywgJmdseXBoTWV0cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBH
RElfRVJST1IpCi0gICAgICAgIHJldHVybiBjb250cmFzdCAvIDEwMDAuMGY7Ci0KLSAgICBCSVRN
QVBJTkZPIGJpdG1hcEluZm87Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6
ZW9mKEJJVE1BUElORk9IRUFERVIpOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVz
ID0gMTsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOwot
ICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6ZUltYWdlID0gMDsKLSAgICBiaXRtYXBJbmZv
LmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVy
LmJpWVBlbHNQZXJNZXRlciA9IDA7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBv
cnRhbnQgPSAwOwotICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJp
Y3MuZ21CbGFja0JveFg7Ci0gICAgYml0bWFwSW5mby5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3Rh
dGljX2Nhc3Q8aW50PihnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkpOwotICAgIGJpdG1hcEluZm8u
Ym1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKLSAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNs
clVzZWQgPSAwOwotCi0gICAgdWludDhfdCogcGl4ZWxzID0gbnVsbHB0cjsKLSAgICBhdXRvIGJp
dG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlRElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywg
RElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkp
OwotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOwot
Ci0gICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNlbGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFw
LmdldCgpKTsKLQotICAgIEJJVE1BUCBibXBJbmZvOwotICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5n
ZXQoKSwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5mbyk7Ci0gICAgbWVtc2V0KHBpeGVscywgMCwg
Z2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICogYm1wSW5mby5ibVdpZHRoQnl0ZXMpOwotCi0gICAg
OjpTZXRCa01vZGUoZGMuZ2V0KCksIE9QQVFVRSk7Ci0gICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0
KCksIFRBX0xFRlQgfCBUQV9UT1ApOwotCi0gICAgOjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJH
QigyNTUsIDI1NSwgMjU1KSk7Ci0gICAgOjpTZXRCa0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwg
MCkpOwotICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VD
aGFyYWN0ZXIsIDEsIDApOwotCi0gICAgdWludDhfdCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRy
OwotICAgIHVpbnQ4X3Qgd2hpdGVSZWZlcmVuY2VWYWx1ZSA9IDA7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyAr
K2kpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdt
QmxhY2tCb3hYOyArK2opIHsKLSAgICAgICAgICAgIHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhl
bHNbaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzICsgal07Ci0gICAgICAgICAgICAvLyBMb29rIGZv
ciBhIHBpeGVsIHZhbHVlIGluIHRoZSByYW5nZSB0aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQot
ICAgICAgICAgICAgLy8gZ2FtbWEgd2l0aGluIDAuMSB3aXRob3V0IGFuIGVycm9yLgotICAgICAg
ICAgICAgaWYgKHdoaXRlUmVmZXJlbmNlVmFsdWUgPiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVl
IDwgMjQwKSB7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICog
Ym1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7Ci0g
ICAgICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOwotICAgICAgICA6
OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7Ci0gICAgICAgIDo6RXh0
VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDAp
OwotICAgICAgICB1aW50OF90IGJsYWNrUmVmZXJlbmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7
Ci0KLSAgICAgICAgZmxvYXQgbWluRGVsdGEgPSAxOwotICAgICAgICBmb3IgKGZsb2F0IGcgPSAx
OyBnIDwgMi4zZjsgZyArPSAwLjFmKSB7Ci0gICAgICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMo
cG93Zigod2hpdGVSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZl
cmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpIC0gMSk7Ci0gICAgICAgICAgICBpZiAoZGVsdGEgPCBt
aW5EZWx0YSkgewotICAgICAgICAgICAgICAgIG1pbkRlbHRhID0gZGVsdGE7Ci0gICAgICAgICAg
ICAgICAgZ2FtbWEgPSBnOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGdhbW1hID0gY29udHJhc3QgLyAxMDAwLjBmOwotCi0gICAgOjpTZWxlY3RPYmplY3Qo
ZGMuZ2V0KCksIG9sZEJpdG1hcCk7Ci0gICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhG
T05UKTsKLQotICAgIHJldHVybiBnYW1tYTsKLX0KLQotdm9pZCBGb250Q2FzY2FkZTo6c3lzdGVt
Rm9udFNtb290aGluZ0NoYW5nZWQoKQotewotICAgIDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJ
X0dFVEZPTlRTTU9PVEhJTkcsIDAsICZzX3N5c3RlbUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsK
LSAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQSV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwg
JnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUsIDApOwotICAgIHNfZm9udFNtb290aGluZ0NvbnRy
YXN0ID0gY2xlYXJUeXBlQ29udHJhc3QoKTsKLSAgICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQg
PSB0cnVlOwotfQotCi12b2lkIEZvbnRDYXNjYWRlOjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5n
U3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwgYm9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLypp
c1ByaW50ZXJGb250Ki8sIGJvb2wgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpCi17Ci0gICAgYm9v
bCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOwotICAgIGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9
IHRydWU7Ci0gICAgQ0dGbG9hdCBjb250cmFzdCA9IDI7Ci0gICAgaWYgKHVzZVBsYXRmb3JtTmF0
aXZlR2x5cGhzKSB7Ci0gICAgICAgIC8vIDxyZGFyOi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBp
eGVsLXBvc2l0aW9uLCBzbyBkb24ndCBib3RoZXIgYXNraW5nLgotICAgICAgICBtYXlTdWJwaXhl
bFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0
KQotICAgICAgICAgICAgc3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKTsKLSAgICAgICAgY29u
dHJhc3QgPSBzX2ZvbnRTbW9vdGhpbmdDb250cmFzdDsKLSAgICAgICAgc2hvdWxkQW50aWFsaWFz
ID0gc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxlZDsKLSAgICAgICAgaWYgKHNfc3lzdGVtRm9u
dFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNNT09USElOR1NUQU5EQVJEKSB7Ci0gICAgICAgICAg
ICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nU3R5bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3Ro
aW5nU3R5bGVNaW5pbXVtKTsKLSAgICAgICAgICAgIGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2Ft
bWE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRy
YXN0KGNnQ29udGV4dCwgY29udHJhc3QpOwotICAgIENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRm
b3JtTmF0aXZlR2x5cGhzKGNnQ29udGV4dCwgdXNlUGxhdGZvcm1OYXRpdmVHbHlwaHMpOwotICAg
IENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0ZvbnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFs
aWFzKTsKLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjb250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0
R2V0Q1RNKGNnQ29udGV4dCk7Ci0gICAgYm9vbCBpc1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRU
cmFuc2Zvcm0uYSA9PSAxICYmIChjb250ZXh0VHJhbnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJh
bnNmb3JtLmQgPT0gLTEpICYmICFjb250ZXh0VHJhbnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zv
cm0uYzsKLSAgICBDR0NvbnRleHRTZXRTaG91bGRTdWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250
ZXh0LCBtYXlTdWJwaXhlbFBvc2l0aW9uICYmIChpc1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5z
bGF0aW9uKSk7Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNn
Q29udGV4dCwgaXNQdXJlVHJhbnNsYXRpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIENHRm9udFJl
bmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlRm9yRm9udChib29sIGlzU3lzdGVtRm9udCwgYm9v
bCBpc1ByaW50ZXJGb250KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5p
bXVtIGFudGlhbGlhc2VkIGZvbnQgc2l6ZS4KLQotICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQ
cmludGVyRm9udCkKLSAgICAgICAgcmV0dXJuIGtDR0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlh
c2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250
UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXphdGlvbjsKLQotICAgIHJldHVybiBrQ0dGb250
UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Ci19Ci0KLXZvaWQgRm9udENhc2NhZGU6OmdldFBs
YXRmb3JtR2x5cGhBZHZhbmNlcyhDR0ZvbnRSZWYgZm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zv
cm0mIG0sIGJvb2wgaXNTeXN0ZW1Gb250LCBib29sIGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5
cGgsIENHU2l6ZSYgYWR2YW5jZSkKLXsKLSAgICBDR0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9
IHJlbmRlcmluZ1N0eWxlRm9yRm9udChpc1N5c3RlbUZvbnQsIGlzUHJpbnRlckZvbnQpOwotICAg
IENHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHlsZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwg
MSwgJmFkdmFuY2UpOwotCi0gICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkg
YmFjayBlbmQgaW4gQ29yZSBHcmFwaGljcyBzb21ldGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0
Ci0gICAgLy8gZGlmZmVyIGZyb20gd2hhdCB0aGUgZm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVz
LiBUaGUgZm9sbG93aW5nIGNvZGUgY29ycmVjdHMgdGhhdC4KLSAgICBDRkRhdGFSZWYgaG10eFRh
YmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdobXR4Jyk7Ci0gICAgaWYgKCFobXR4
VGFibGUpCi0gICAgICAgIHJldHVybjsKLSAgICBDRkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250
Q29weVRhYmxlRm9yVGFnKGZvbnQsICdoaGVhJyk7Ci0gICAgaWYgKCFoaGVhVGFibGUpIHsKLSAg
ICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBjb25zdCBDRkluZGV4IGhoZWFUYWJsZVNpemUgPSAzNjsKLSAgICBjb25zdCBwdHJkaWZmX3Qg
aGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCA9IDM0OwotICAgIGlmIChDRkRhdGFHZXRM
ZW5ndGgoaGhlYVRhYmxlKSA8IGhoZWFUYWJsZVNpemUpIHsKLSAgICAgICAgQ0ZSZWxlYXNlKGht
dHhUYWJsZSk7Ci0gICAgICAgIENGUmVsZWFzZShoaGVhVGFibGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2hvcnQgbnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFi
bGUpICsgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNldCk7Ci0gICAgbnVtYmVyT2ZITWV0
cmljcyA9ICgobnVtYmVyT2ZITWV0cmljcyAmIDB4RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJp
Y3MgPj4gOCk7Ci0gICAgaWYgKCFudW1iZXJPZkhNZXRyaWNzKSB7Ci0gICAgICAgIENGUmVsZWFz
ZShobXR4VGFibGUpOwotICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChnbHlwaCA+PSBudW1iZXJPZkhNZXRyaWNzKQotICAgICAg
ICBnbHlwaCA9IG51bWJlck9mSE1ldHJpY3MgLSAxOwotCi0gICAgaWYgKENGRGF0YUdldExlbmd0
aChobXR4VGFibGUpIDwgNCAqIChnbHlwaCArIDEpKSB7Ci0gICAgICAgIENGUmVsZWFzZShobXR4
VGFibGUpOwotICAgICAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHVuc2lnbmVkIHNob3J0IGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhU
YWJsZSkgKyA0ICogZ2x5cGgpOwotICAgIGFkdmFuY2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNl
SW5EZXNpZ25Vbml0cyAmIDB4RkYpIDw8IDgpIHwgKGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgp
OwotICAgIENHU2l6ZSBob3Jpem9udGFsQWR2YW5jZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8
Q0dGbG9hdD4oYWR2YW5jZUluRGVzaWduVW5pdHMpIC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250
KSwgMCk7Ci0gICAgaG9yaXpvbnRhbEFkdmFuY2UgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9y
bShob3Jpem9udGFsQWR2YW5jZSwgbSk7Ci0gICAgYWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxB
ZHZhbmNlLndpZHRoOwotICAgIGlmICghKHN0eWxlICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3Vi
cGl4ZWxQb3NpdGlvbmluZykpCi0gICAgICAgIGFkdmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5j
ZS53aWR0aCk7Ci0KLSAgICBDRlJlbGVhc2UoaGhlYVRhYmxlKTsKLSAgICBDRlJlbGVhc2UoaG10
eFRhYmxlKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q2FjaGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKaW5kZXggMmI0YjU1NzJhNGQ4MDhi
ODNiNGIwZjRhYTY0Zjk2Yzk2MzgyZjYxMy4uMDhjYjRkNTFlYmJkYmI3Zjk1NWU2Nzc3ZDZmODAy
YzJiOTIxN2U5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDYWNoZVdpbi5jcHAKQEAgLTY3NSw3ICs2NzUsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8Rm9udFBsYXRmb3JtRGF0YT4gRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZQogICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZTxGb250UGxhdGZvcm1EYXRh
PihXVEZNb3ZlKGhmb250KSwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5
bnRoZXNpemVCb2xkLCBzeW50aGVzaXplSXRhbGljLCB1c2VHREkpOwogCiAjaWYgVVNFKENHKQot
ICAgIGJvb2wgZm9udENyZWF0aW9uRmFpbGVkID0gIXJlc3VsdC0+Y2dGb250KCk7CisgICAgYm9v
bCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5mb250KCk7CiAjZWxpZiBVU0UoRElSRUNU
MkQpCiAgICAgYm9vbCBmb250Q3JlYXRpb25GYWlsZWQgPSAhcmVzdWx0LT5kd0ZvbnQoKTsKICNl
bGlmIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9Gb250Q2FzY2FkZUNHV2luLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGRjM2VjMTIxY2Mw
MjIwN2I4Y2IxNjgyNzEzZDZiYjhkOWY2ZDVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDYXNjYWRlQ0dXaW4uY3BwCkBAIC0wLDAg
KzEsMjg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDksIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisj
aW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIldlYkNvcmVUZXh0UmVuZGVyZXIuaCIKKyNpbmNsdWRlIDxw
YWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3RleHByIHVpbnQzMl90IGtDR0ZvbnRTbW9v
dGhpbmdTdHlsZU1pbmltdW0gPSAoMSA8PCA0KTsKK2NvbnN0ZXhwciB1aW50MzJfdCBrQ0dGb250
U21vb3RoaW5nU3R5bGVMaWdodCA9ICgyIDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtDR0Zv
bnRTbW9vdGhpbmdTdHlsZU1lZGl1bSA9ICgzIDw8IDQpOworY29uc3RleHByIHVpbnQzMl90IGtD
R0ZvbnRTbW9vdGhpbmdTdHlsZUhlYXZ5ID0gKDQgPDwgNCk7CisKK2NvbnN0ZXhwciBpbnQgZm9u
dFNtb290aGluZ0xldmVsTWVkaXVtID0gMjsKK2NvbnN0ZXhwciBDR0Zsb2F0IGFudGlhbGlhc2lu
Z0dhbW1hID0gMi4zOworCitkb3VibGUgRm9udENhc2NhZGU6OnNfZm9udFNtb290aGluZ0NvbnRy
YXN0ID0gMjsKK3VpbnQzMl90IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhpbmdUeXBlID0ga0NH
Rm9udFNtb290aGluZ1N0eWxlTWVkaXVtOworaW50IEZvbnRDYXNjYWRlOjpzX2ZvbnRTbW9vdGhp
bmdMZXZlbCA9IGZvbnRTbW9vdGhpbmdMZXZlbE1lZGl1bTsKK2Jvb2wgRm9udENhc2NhZGU6OnNf
c3lzdGVtRm9udFNtb290aGluZ0VuYWJsZWQ7Cit1aW50MzJfdCBGb250Q2FzY2FkZTo6c19zeXN0
ZW1Gb250U21vb3RoaW5nVHlwZTsKK2Jvb2wgRm9udENhc2NhZGU6OnNfc3lzdGVtRm9udFNtb290
aGluZ1NldDsKKwordm9pZCBGb250Q2FzY2FkZTo6c2V0Rm9udFNtb290aGluZ0xldmVsKGludCBs
ZXZlbCkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlW10gPSB7IAorICAgICAg
ICAwLCAvLyBGb250U21vb3RoaW5nVHlwZVN0YW5kYXJkCisgICAgICAgIGtDR0ZvbnRTbW9vdGhp
bmdTdHlsZUxpZ2h0LCAvLyBGb250U21vb3RoaW5nVHlwZUxpZ2h0CisgICAgICAgIGtDR0ZvbnRT
bW9vdGhpbmdTdHlsZU1lZGl1bSwgLy8gRm9udFNtb290aGluZ1R5cGVNZWRpdW0KKyAgICAgICAg
a0NHRm9udFNtb290aGluZ1N0eWxlSGVhdnksIC8vIEZvbnRTbW9vdGhpbmdUeXBlU3Ryb25nCisg
ICAgfTsKKworICAgIGlmIChsZXZlbCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZXZlbCkg
PiBBUlJBWVNJWkUoc21vb3RoaW5nVHlwZSkpCisgICAgICAgIHJldHVybjsKKworICAgIHNfZm9u
dFNtb290aGluZ1R5cGUgPSBzbW9vdGhpbmdUeXBlW2xldmVsXTsKKyAgICBzX2ZvbnRTbW9vdGhp
bmdMZXZlbCA9IGxldmVsOworfQorCitzdGF0aWMgdm9pZCBzZXRDR0ZvbnRTbW9vdGhpbmdTdHls
ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCB1aW50MzJfdCBzbW9vdGhpbmdUeXBlLCBib29sIGZv
bnRBbGxvd3NTbW9vdGhpbmcgPSB0cnVlKQoreworICAgIGlmIChzbW9vdGhpbmdUeXBlKSB7Cisg
ICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgZm9udEFsbG93
c1Ntb290aGluZyk7CisgICAgICAgIENHQ29udGV4dFNldEZvbnRTbW9vdGhpbmdTdHlsZShjZ0Nv
bnRleHQsIHNtb290aGluZ1R5cGUpOworICAgIH0gZWxzZQorICAgICAgICBDR0NvbnRleHRTZXRT
aG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQsIGZhbHNlKTsKK30KKwordWludDMyX3QgRm9udENh
c2NhZGU6OnNldEZvbnRTbW9vdGhpbmdTdHlsZShDR0NvbnRleHRSZWYgY2dDb250ZXh0LCBib29s
IGZvbnRBbGxvd3NTbW9vdGhpbmcpCit7CisgICAgdWludDMyX3Qgb2xkRm9udFNtb290aGluZ1N0
eWxlID0gMDsKKyAgICBpZiAoQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMoY2dDb250ZXh0
KSkKKyAgICAgICAgb2xkRm9udFNtb290aGluZ1N0eWxlID0gQ0dDb250ZXh0R2V0Rm9udFNtb290
aGluZ1N0eWxlKGNnQ29udGV4dCk7CisgICAgc2V0Q0dGb250U21vb3RoaW5nU3R5bGUoY2dDb250
ZXh0LCBzX2ZvbnRTbW9vdGhpbmdUeXBlLCBmb250QWxsb3dzU21vb3RoaW5nKTsKKworICAgIHJl
dHVybiBvbGRGb250U21vb3RoaW5nU3R5bGU7Cit9CisKK3ZvaWQgRm9udENhc2NhZGU6OnNldEZv
bnRTbW9vdGhpbmdDb250cmFzdChDR0Zsb2F0IGNvbnRyYXN0KQoreworICAgIHNfZm9udFNtb290
aGluZ0NvbnRyYXN0ID0gY29udHJhc3Q7Cit9CisKK3N0YXRpYyBmbG9hdCBjbGVhclR5cGVDb250
cmFzdCgpCit7CisgICAgY29uc3QgV0NIQVIgcmVmZXJlbmNlQ2hhcmFjdGVyID0gJ1xcJzsKKyAg
ICBzdGF0aWMgVUlOVCBsYXN0Q29udHJhc3QgPSAyMDAwOworICAgIHN0YXRpYyBmbG9hdCBnYW1t
YSA9IDI7CisgICAgVUlOVCBjb250cmFzdDsKKworICAgIGlmICghU3lzdGVtUGFyYW1ldGVyc0lu
Zm8oU1BJX0dFVEZPTlRTTU9PVEhJTkdDT05UUkFTVCwgMCwgJmNvbnRyYXN0LCAwKSB8fCBjb250
cmFzdCA9PSBsYXN0Q29udHJhc3QpCisgICAgICAgIHJldHVybiBnYW1tYTsKKworICAgIGxhc3RD
b250cmFzdCA9IGNvbnRyYXN0OworCisgICAgYXV0byBkYyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3Jl
YXRlQ29tcGF0aWJsZURDKDApKTsKKworICAgIEhHRElPQkogb2xkSEZPTlQgPSA6OlNlbGVjdE9i
amVjdChkYy5nZXQoKSwgR2V0U3RvY2tPYmplY3QoREVGQVVMVF9HVUlfRk9OVCkpOworICAgIEdM
WVBITUVUUklDUyBnbHlwaE1ldHJpY3M7CisKKyAgICBzdGF0aWMgY29uc3QgTUFUMiBpZGVudGl0
eSA9IHsgMCwgMSwgIDAsIDAsICAwLCAwLCAgMCwgMSB9OworICAgIGlmICg6OkdldEdseXBoT3V0
bGluZShkYy5nZXQoKSwgcmVmZXJlbmNlQ2hhcmFjdGVyLCBHR09fTUVUUklDUywgJmdseXBoTWV0
cmljcywgMCwgMCwgJmlkZW50aXR5KSA9PSBHRElfRVJST1IpCisgICAgICAgIHJldHVybiBjb250
cmFzdCAvIDEwMDAuMGY7CisKKyAgICBCSVRNQVBJTkZPIGJpdG1hcEluZm87CisgICAgYml0bWFw
SW5mby5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOworICAgIGJp
dG1hcEluZm8uYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRl
ci5iaUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpU2l6
ZUltYWdlID0gMDsKKyAgICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaVhQZWxzUGVyTWV0ZXIgPSAw
OworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpWVBlbHNQZXJNZXRlciA9IDA7CisgICAgYml0
bWFwSW5mby5ibWlIZWFkZXIuYmlDbHJJbXBvcnRhbnQgPSAwOworICAgIGJpdG1hcEluZm8uYm1p
SGVhZGVyLmJpV2lkdGggPSBnbHlwaE1ldHJpY3MuZ21CbGFja0JveFg7CisgICAgYml0bWFwSW5m
by5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtc3RhdGljX2Nhc3Q8aW50PihnbHlwaE1ldHJpY3MuZ21C
bGFja0JveFkpOworICAgIGJpdG1hcEluZm8uYm1pSGVhZGVyLmJpQml0Q291bnQgPSAzMjsKKyAg
ICBiaXRtYXBJbmZvLmJtaUhlYWRlci5iaUNsclVzZWQgPSAwOworCisgICAgdWludDhfdCogcGl4
ZWxzID0gbnVsbHB0cjsKKyAgICBhdXRvIGJpdG1hcCA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRl
RElCU2VjdGlvbigwLCAmYml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmcGl4ZWxzKSwgMCwgMCkpOworICAgIGlmICghYml0bWFwKQorICAgICAgICBy
ZXR1cm4gY29udHJhc3QgLyAxMDAwLjBmOworCisgICAgSEdESU9CSiBvbGRCaXRtYXAgPSA6OlNl
bGVjdE9iamVjdChkYy5nZXQoKSwgYml0bWFwLmdldCgpKTsKKworICAgIEJJVE1BUCBibXBJbmZv
OworICAgIDo6R2V0T2JqZWN0KGJpdG1hcC5nZXQoKSwgc2l6ZW9mKGJtcEluZm8pLCAmYm1wSW5m
byk7CisgICAgbWVtc2V0KHBpeGVscywgMCwgZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hZICogYm1w
SW5mby5ibVdpZHRoQnl0ZXMpOworCisgICAgOjpTZXRCa01vZGUoZGMuZ2V0KCksIE9QQVFVRSk7
CisgICAgOjpTZXRUZXh0QWxpZ24oZGMuZ2V0KCksIFRBX0xFRlQgfCBUQV9UT1ApOworCisgICAg
OjpTZXRUZXh0Q29sb3IoZGMuZ2V0KCksIFJHQigyNTUsIDI1NSwgMjU1KSk7CisgICAgOjpTZXRC
a0NvbG9yKGRjLmdldCgpLCBSR0IoMCwgMCwgMCkpOworICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0
KCksIDAsIDAsIDAsIDAsICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOworCisgICAgdWludDhf
dCogcmVmZXJlbmNlUGl4ZWwgPSBudWxscHRyOworICAgIHVpbnQ4X3Qgd2hpdGVSZWZlcmVuY2VW
YWx1ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaE1ldHJpY3MuZ21CbGFj
a0JveFkgJiYgIXJlZmVyZW5jZVBpeGVsOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCA0ICogZ2x5cGhNZXRyaWNzLmdtQmxhY2tCb3hYOyArK2opIHsKKyAgICAgICAgICAg
IHdoaXRlUmVmZXJlbmNlVmFsdWUgPSBwaXhlbHNbaSAqIGJtcEluZm8uYm1XaWR0aEJ5dGVzICsg
al07CisgICAgICAgICAgICAvLyBMb29rIGZvciBhIHBpeGVsIHZhbHVlIGluIHRoZSByYW5nZSB0
aGF0IGFsbG93cyB1cyB0byBlc3RpbWF0ZQorICAgICAgICAgICAgLy8gZ2FtbWEgd2l0aGluIDAu
MSB3aXRob3V0IGFuIGVycm9yLgorICAgICAgICAgICAgaWYgKHdoaXRlUmVmZXJlbmNlVmFsdWUg
PiAzMiAmJiB3aGl0ZVJlZmVyZW5jZVZhbHVlIDwgMjQwKSB7CisgICAgICAgICAgICAgICAgcmVm
ZXJlbmNlUGl4ZWwgPSBwaXhlbHMgKyBpICogYm1wSW5mby5ibVdpZHRoQnl0ZXMgKyBqOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaWYgKHJlZmVyZW5jZVBpeGVsKSB7CisgICAgICAgIDo6U2V0VGV4dENvbG9yKGRjLmdldCgp
LCBSR0IoMCwgMCwgMCkpOworICAgICAgICA6OlNldEJrQ29sb3IoZGMuZ2V0KCksIFJHQigyNTUs
IDI1NSwgMjU1KSk7CisgICAgICAgIDo6RXh0VGV4dE91dFcoZGMuZ2V0KCksIDAsIDAsIDAsIDAs
ICZyZWZlcmVuY2VDaGFyYWN0ZXIsIDEsIDApOworICAgICAgICB1aW50OF90IGJsYWNrUmVmZXJl
bmNlVmFsdWUgPSAqcmVmZXJlbmNlUGl4ZWw7CisKKyAgICAgICAgZmxvYXQgbWluRGVsdGEgPSAx
OworICAgICAgICBmb3IgKGZsb2F0IGcgPSAxOyBnIDwgMi4zZjsgZyArPSAwLjFmKSB7CisgICAg
ICAgICAgICBmbG9hdCBkZWx0YSA9IGZhYnMocG93Zigod2hpdGVSZWZlcmVuY2VWYWx1ZSAvIDI1
NS4wZiksIGcpICsgcG93ZigoYmxhY2tSZWZlcmVuY2VWYWx1ZSAvIDI1NS4wZiksIGcpIC0gMSk7
CisgICAgICAgICAgICBpZiAoZGVsdGEgPCBtaW5EZWx0YSkgeworICAgICAgICAgICAgICAgIG1p
bkRlbHRhID0gZGVsdGE7CisgICAgICAgICAgICAgICAgZ2FtbWEgPSBnOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGdhbW1hID0gY29udHJhc3QgLyAxMDAw
LjBmOworCisgICAgOjpTZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEJpdG1hcCk7CisgICAgOjpT
ZWxlY3RPYmplY3QoZGMuZ2V0KCksIG9sZEhGT05UKTsKKworICAgIHJldHVybiBnYW1tYTsKK30K
Kwordm9pZCBGb250Q2FzY2FkZTo6c3lzdGVtRm9udFNtb290aGluZ0NoYW5nZWQoKQoreworICAg
IDo6U3lzdGVtUGFyYW1ldGVyc0luZm8oU1BJX0dFVEZPTlRTTU9PVEhJTkcsIDAsICZzX3N5c3Rl
bUZvbnRTbW9vdGhpbmdFbmFibGVkLCAwKTsKKyAgICA6OlN5c3RlbVBhcmFtZXRlcnNJbmZvKFNQ
SV9HRVRGT05UU01PT1RISU5HVFlQRSwgMCwgJnNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUsIDAp
OworICAgIHNfZm9udFNtb290aGluZ0NvbnRyYXN0ID0gY2xlYXJUeXBlQ29udHJhc3QoKTsKKyAg
ICBzX3N5c3RlbUZvbnRTbW9vdGhpbmdTZXQgPSB0cnVlOworfQorCit2b2lkIEZvbnRDYXNjYWRl
OjpzZXRDR0NvbnRleHRGb250UmVuZGVyaW5nU3R5bGUoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCwg
Ym9vbCBpc1N5c3RlbUZvbnQsIGJvb2wgLyppc1ByaW50ZXJGb250Ki8sIGJvb2wgdXNlUGxhdGZv
cm1OYXRpdmVHbHlwaHMpCit7CisgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSB0cnVlOworICAg
IGJvb2wgbWF5U3VicGl4ZWxQb3NpdGlvbiA9IHRydWU7CisgICAgQ0dGbG9hdCBjb250cmFzdCA9
IDI7CisgICAgaWYgKHVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKSB7CisgICAgICAgIC8vIDxyZGFy
Oi8vNjU2NDUwMT4gR0RJIGNhbid0IHN1YnBpeGVsLXBvc2l0aW9uLCBzbyBkb24ndCBib3RoZXIg
YXNraW5nLgorICAgICAgICBtYXlTdWJwaXhlbFBvc2l0aW9uID0gZmFsc2U7CisgICAgICAgIGlm
ICghc19zeXN0ZW1Gb250U21vb3RoaW5nU2V0KQorICAgICAgICAgICAgc3lzdGVtRm9udFNtb290
aGluZ0NoYW5nZWQoKTsKKyAgICAgICAgY29udHJhc3QgPSBzX2ZvbnRTbW9vdGhpbmdDb250cmFz
dDsKKyAgICAgICAgc2hvdWxkQW50aWFsaWFzID0gc19zeXN0ZW1Gb250U21vb3RoaW5nRW5hYmxl
ZDsKKyAgICAgICAgaWYgKHNfc3lzdGVtRm9udFNtb290aGluZ1R5cGUgPT0gRkVfRk9OVFNNT09U
SElOR1NUQU5EQVJEKSB7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRGb250U21vb3RoaW5nU3R5
bGUoY2dDb250ZXh0LCBrQ0dGb250U21vb3RoaW5nU3R5bGVNaW5pbXVtKTsKKyAgICAgICAgICAg
IGNvbnRyYXN0ID0gYW50aWFsaWFzaW5nR2FtbWE7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dD
b250ZXh0U2V0Rm9udFNtb290aGluZ0NvbnRyYXN0KGNnQ29udGV4dCwgY29udHJhc3QpOworICAg
IENHQ29udGV4dFNldFNob3VsZFVzZVBsYXRmb3JtTmF0aXZlR2x5cGhzKGNnQ29udGV4dCwgdXNl
UGxhdGZvcm1OYXRpdmVHbHlwaHMpOworICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhc0Zv
bnRzKGNnQ29udGV4dCwgc2hvdWxkQW50aWFsaWFzKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBj
b250ZXh0VHJhbnNmb3JtID0gQ0dDb250ZXh0R2V0Q1RNKGNnQ29udGV4dCk7CisgICAgYm9vbCBp
c1B1cmVUcmFuc2xhdGlvbiA9IGNvbnRleHRUcmFuc2Zvcm0uYSA9PSAxICYmIChjb250ZXh0VHJh
bnNmb3JtLmQgPT0gMSB8fCBjb250ZXh0VHJhbnNmb3JtLmQgPT0gLTEpICYmICFjb250ZXh0VHJh
bnNmb3JtLmIgJiYgIWNvbnRleHRUcmFuc2Zvcm0uYzsKKyAgICBDR0NvbnRleHRTZXRTaG91bGRT
dWJwaXhlbFBvc2l0aW9uRm9udHMoY2dDb250ZXh0LCBtYXlTdWJwaXhlbFBvc2l0aW9uICYmIChp
c1N5c3RlbUZvbnQgfHwgIWlzUHVyZVRyYW5zbGF0aW9uKSk7CisgICAgQ0dDb250ZXh0U2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGNnQ29udGV4dCwgaXNQdXJlVHJhbnNsYXRpb24pOwor
fQorCitzdGF0aWMgaW5saW5lIENHRm9udFJlbmRlcmluZ1N0eWxlIHJlbmRlcmluZ1N0eWxlRm9y
Rm9udChib29sIGlzU3lzdGVtRm9udCwgYm9vbCBpc1ByaW50ZXJGb250KQoreworICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIHN1cHBvcnQgYSBtaW5pbXVtIGFudGlhbGlhc2VkIGZvbnQgc2l6ZS4KKwor
ICAgIGlmIChpc1N5c3RlbUZvbnQgfHwgaXNQcmludGVyRm9udCkKKyAgICAgICAgcmV0dXJuIGtD
R0ZvbnRSZW5kZXJpbmdTdHlsZUFudGlhbGlhc2luZyB8IGtDR0ZvbnRSZW5kZXJpbmdTdHlsZVN1
YnBpeGVsUG9zaXRpb25pbmcgfCBrQ0dGb250UmVuZGVyaW5nU3R5bGVTdWJwaXhlbFF1YW50aXph
dGlvbjsKKworICAgIHJldHVybiBrQ0dGb250UmVuZGVyaW5nU3R5bGVBbnRpYWxpYXNpbmc7Cit9
CisKK3ZvaWQgRm9udENhc2NhZGU6OmdldFBsYXRmb3JtR2x5cGhBZHZhbmNlcyhDR0ZvbnRSZWYg
Zm9udCwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0mIG0sIGJvb2wgaXNTeXN0ZW1Gb250LCBib29s
IGlzUHJpbnRlckZvbnQsIENHR2x5cGggZ2x5cGgsIENHU2l6ZSYgYWR2YW5jZSkKK3sKKyAgICBD
R0ZvbnRSZW5kZXJpbmdTdHlsZSBzdHlsZSA9IHJlbmRlcmluZ1N0eWxlRm9yRm9udChpc1N5c3Rl
bUZvbnQsIGlzUHJpbnRlckZvbnQpOworICAgIENHRm9udEdldEdseXBoQWR2YW5jZXNGb3JTdHls
ZShmb250LCAmbSwgc3R5bGUsICZnbHlwaCwgMSwgJmFkdmFuY2UpOworCisgICAgLy8gPHJkYXI6
Ly9wcm9ibGVtLzc3NjExNjU+IFRoZSBHREkgYmFjayBlbmQgaW4gQ29yZSBHcmFwaGljcyBzb21l
dGltZXMgcmV0dXJucyBhZHZhbmNlcyB0aGF0CisgICAgLy8gZGlmZmVyIGZyb20gd2hhdCB0aGUg
Zm9udCdzIGhtdHggdGFibGUgc3BlY2lmaWVzLiBUaGUgZm9sbG93aW5nIGNvZGUgY29ycmVjdHMg
dGhhdC4KKyAgICBDRkRhdGFSZWYgaG10eFRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZv
bnQsICdobXR4Jyk7CisgICAgaWYgKCFobXR4VGFibGUpCisgICAgICAgIHJldHVybjsKKyAgICBD
RkRhdGFSZWYgaGhlYVRhYmxlID0gQ0dGb250Q29weVRhYmxlRm9yVGFnKGZvbnQsICdoaGVhJyk7
CisgICAgaWYgKCFoaGVhVGFibGUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBDRkluZGV4IGhoZWFUYWJsZVNpemUg
PSAzNjsKKyAgICBjb25zdCBwdHJkaWZmX3QgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmljc09mZnNl
dCA9IDM0OworICAgIGlmIChDRkRhdGFHZXRMZW5ndGgoaGhlYVRhYmxlKSA8IGhoZWFUYWJsZVNp
emUpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGhtdHhUYWJsZSk7CisgICAgICAgIENGUmVsZWFzZSho
aGVhVGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdW5zaWduZWQgc2hvcnQg
bnVtYmVyT2ZITWV0cmljcyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oQ0ZEYXRhR2V0Qnl0ZVB0cihoaGVhVGFibGUpICsgaGhlYVRhYmxlTnVtYmVyT2ZITWV0cmlj
c09mZnNldCk7CisgICAgbnVtYmVyT2ZITWV0cmljcyA9ICgobnVtYmVyT2ZITWV0cmljcyAmIDB4
RkYpIDw8IDgpIHwgKG51bWJlck9mSE1ldHJpY3MgPj4gOCk7CisgICAgaWYgKCFudW1iZXJPZkhN
ZXRyaWNzKSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAgICAgICBDRlJlbGVh
c2UoaGhlYVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChnbHlwaCA+
PSBudW1iZXJPZkhNZXRyaWNzKQorICAgICAgICBnbHlwaCA9IG51bWJlck9mSE1ldHJpY3MgLSAx
OworCisgICAgaWYgKENGRGF0YUdldExlbmd0aChobXR4VGFibGUpIDwgNCAqIChnbHlwaCArIDEp
KSB7CisgICAgICAgIENGUmVsZWFzZShobXR4VGFibGUpOworICAgICAgICBDRlJlbGVhc2UoaGhl
YVRhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIHNob3J0IGFk
dmFuY2VJbkRlc2lnblVuaXRzID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihDRkRhdGFHZXRCeXRlUHRyKGhtdHhUYWJsZSkgKyA0ICogZ2x5cGgpOworICAgIGFkdmFu
Y2VJbkRlc2lnblVuaXRzID0gKChhZHZhbmNlSW5EZXNpZ25Vbml0cyAmIDB4RkYpIDw8IDgpIHwg
KGFkdmFuY2VJbkRlc2lnblVuaXRzID4+IDgpOworICAgIENHU2l6ZSBob3Jpem9udGFsQWR2YW5j
ZSA9IENHU2l6ZU1ha2Uoc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oYWR2YW5jZUluRGVzaWduVW5pdHMp
IC8gQ0dGb250R2V0VW5pdHNQZXJFbShmb250KSwgMCk7CisgICAgaG9yaXpvbnRhbEFkdmFuY2Ug
PSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShob3Jpem9udGFsQWR2YW5jZSwgbSk7CisgICAg
YWR2YW5jZS53aWR0aCA9IGhvcml6b250YWxBZHZhbmNlLndpZHRoOworICAgIGlmICghKHN0eWxl
ICYga0NHRm9udFJlbmRlcmluZ1N0eWxlU3VicGl4ZWxQb3NpdGlvbmluZykpCisgICAgICAgIGFk
dmFuY2Uud2lkdGggPSByb3VuZGYoYWR2YW5jZS53aWR0aCk7CisKKyAgICBDRlJlbGVhc2UoaGhl
YVRhYmxlKTsKKyAgICBDRlJlbGVhc2UoaG10eFRhYmxlKTsKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAppbmRleCAxNDBlYzE2ZWIxNWQ2ZmM5ZmRhNDBiY2I1
MWJiYTBmZjBhYzMzYjM2Li5hZmFmMGU3Mzc0MWEzOTI3NGE0MTYwNGYwMTFjYTJkMmQxYTJjM2M3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNp
ZiBVU0UoQ0cpCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNs
dWRlIDxwYWwvc3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgogI2VuZGlmCiAKICNpZiBVU0UoRElS
RUNUMkQpCkBAIC04Myw4ICs4NCw5IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mCiAKICAgICBh
dXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVGb250SW5kaXJlY3QoJmxvZ0ZvbnQp
KTsKICNpZiBVU0UoQ0cpCi0gICAgUmV0YWluUHRyPENHRm9udFJlZj4gY2dGb250ID0gYWRvcHRD
RihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dGb250KSk7Ci0gICAgcmV0dXJuIEZv
bnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGNnRm9udC5nZXQoKSwgc2l6ZSwgYm9sZCwg
aXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwor
ICAgIGF1dG8gY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZs
b2dGb250KSk7CisgICAgYXV0byBjdEZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFw
aGljc0ZvbnQoY2dGb250LmdldCgpLCBzaXplLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0
dXJuIEZvbnRQbGF0Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIGN0Rm9udC5nZXQoKSwgc2l6ZSwg
Ym9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5h
dGUpOwogI2Vsc2UKICAgICBhdXRvIGZvbnQgPSBEaXJlY3RXcml0ZTo6Y3JlYXRlV2l0aFBsYXRm
b3JtRm9udChsb2dGb250KTsKICAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShXVEZNb3ZlKGhm
b250KSwgV1RGTW92ZShmb250KSwgc2l6ZSwgYm9sZCwgaXRhbGljLCByZW5kZXJpbmdNb2RlID09
IEZvbnRSZW5kZXJpbmdNb2RlOjpBbHRlcm5hdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFDR1dpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNw
cAppbmRleCAxMTJiZjk1Y2M5YWRiZjk5ZTQ2YjVjYjUxZGVjYTQwZDY0YjVlMTQxLi5iNWMxNGJj
MTIyNWRiY2QxOTVjMDAxZTQzODFlNmI0MTI5YzkwOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNHV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YUNH
V2luLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2hhcmVkR0RJT2JqZWN0Lmgi
CiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDxwYWwv
c3BpL3dpbi9Db3JlVGV4dFNQSVdpbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTExMywz
MCArMTE0LDQ2IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cGxhdGZvcm1EYXRhSW5pdChIRk9O
VCBmb250LCBmbG9hdCBzaXplLCBIREMgaGRjLCBXQ0hBUioKIHsKICAgICBMT0dGT05UIGxvZ2Zv
bnQ7CiAgICAgR2V0T2JqZWN0KGZvbnQsIHNpemVvZihsb2dmb250KSwgJmxvZ2ZvbnQpOwotICAg
IG1fY2dGb250ID0gYWRvcHRDRihDR0ZvbnRDcmVhdGVXaXRoUGxhdGZvcm1Gb250KCZsb2dmb250
KSk7CisgICAgYXV0byBjZ0ZvbnQgPSBhZG9wdENGKENHRm9udENyZWF0ZVdpdGhQbGF0Zm9ybUZv
bnQoJmxvZ2ZvbnQpKTsKKyAgICBtX2ZvbnQgPSBhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFw
aGljc0ZvbnQoY2dGb250LmdldCgpLCBzaXplLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgCiAg
ICAgaWYgKCFtX3VzZUdESSkKICAgICAgICAgbV9pc1N5c3RlbUZvbnQgPSAhd2NzY21wKGZhY2VO
YW1lLCBMIkx1Y2lkYSBHcmFuZGUiKTsKIH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDR0ZvbnRSZWYgZm9udCwgZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQorRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShHRElPYmplY3Q8SEZPTlQ+IGhmb250LCBDVEZvbnRSZWYgZm9u
dCwgZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQogICAg
IDogbV9zeW50aGV0aWNCb2xkKGJvbGQpCiAgICAgLCBtX3N5bnRoZXRpY09ibGlxdWUob2JsaXF1
ZSkKICAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9mb250KFNoYXJlZEdESU9iamVjdDxIRk9O
VD46OmNyZWF0ZShXVEZNb3ZlKGhmb250KSkpCi0gICAgLCBtX2NnRm9udChmb250KQorICAgICwg
bV9oRm9udChTaGFyZWRHRElPYmplY3Q8SEZPTlQ+OjpjcmVhdGUoV1RGTW92ZShoZm9udCkpKQor
ICAgICwgbV9mb250KGZvbnQpCiAgICAgLCBtX3VzZUdESSh1c2VHREkpCiB7CiB9CiAKIHVuc2ln
bmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAogewotICAgIHJldHVybiBtX2ZvbnQg
PyBtX2ZvbnQtPmhhc2goKSA6IDA7CisgICAgdWludHB0cl90IGZsYWdzID0gc3RhdGljX2Nhc3Q8
dWludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV93aWR0aFZhcmlhbnQpIDw8IDYKKyAg
ICAgICAgfCBtX2lzSGFzaFRhYmxlRGVsZXRlZFZhbHVlIDw8IDUKKyAgICAgICAgfCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV90ZXh0UmVuZGVyaW5nTW9kZSkgPDwgMworICAgICAgICB8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX29yaWVudGF0aW9uKSA8PCAyCisgICAgICAgIHwgbV9zeW50aGV0
aWNCb2xkIDw8IDEKKyAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zeW50aGV0aWNP
YmxpcXVlKSk7CisKKyAgICB1aW50cHRyX3QgZm9udEhhc2gxID0gc3RhdGljX2Nhc3Q8dWludHB0
cl90PihDRkhhc2gobV9mb250LmdldCgpKSk7CisgICAgdWludHB0cl90IGZvbnRIYXNoMiA9IHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4obV9oRm9udCA/IG1faEZvbnQtPmhhc2goKSA6IDApOworICAg
IHVpbnRwdHJfdCBoYXNoQ29kZXNbXSA9IHsgZm9udEhhc2gxLCBmb250SGFzaDIsIGZsYWdzIH07
CisgICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4o
aGFzaENvZGVzKTsKIH0KIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpwbGF0Zm9ybUlzRXF1YWwo
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZm9u
dCA9PSBvdGhlci5tX2ZvbnQKLSAgICAgICAgJiYgbV9jZ0ZvbnQgPT0gb3RoZXIubV9jZ0ZvbnQK
KyAgICBpZiAoIW1fZm9udCB8fCAhb3RoZXIubV9mb250KQorICAgICAgICByZXR1cm4gbV9mb250
ID09IG90aGVyLm1fZm9udDsKKworICAgIHJldHVybiBDRkVxdWFsKG1fZm9udC5nZXQoKSwgb3Ro
ZXIubV9mb250LmdldCgpKSAKKyAgICAgICAgJiYgbV9oRm9udCA9PSBvdGhlci5tX2hGb250Cisg
ICAgICAgICYmIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQKICAgICAgICAgJiYgbV91c2VHREkgPT0g
b3RoZXIubV91c2VHREk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250UGxhdGZvcm1EYXRhV2luLmNwcAppbmRleCBlNTM3M2M3
YzZlYzQ4NzU0MGMxNjFkMmFiMTlkNjgxYmU4MThmMWExLi5mZWMxYTMyMjg2YTE0NTI1NDYzZGVk
MmM1NTBjM2MwYTY4OTc4NTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRm9udFBsYXRmb3JtRGF0YVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRQbGF0Zm9ybURhdGFXaW4uY3BwCkBAIC00Miw3ICs0
Miw3IEBAIHVzaW5nIHN0ZDo6bWluOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKEdESU9iamVjdDxIRk9OVD4gZm9udCwgZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGJvb2wgdXNlR0RJKQotICAgIDogbV9mb250KFNo
YXJlZEdESU9iamVjdDxIRk9OVD46OmNyZWF0ZShXVEZNb3ZlKGZvbnQpKSkKKyAgICA6IG1faEZv
bnQoU2hhcmVkR0RJT2JqZWN0PEhGT05UPjo6Y3JlYXRlKFdURk1vdmUoZm9udCkpKQogICAgICwg
bV9zaXplKHNpemUpCiAgICAgLCBtX3N5bnRoZXRpY0JvbGQoYm9sZCkKICAgICAsIG1fc3ludGhl
dGljT2JsaXF1ZShvYmxpcXVlKQpAQCAtNTEsMzggKzUxLDEzIEBAIEZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEoR0RJT2JqZWN0PEhGT05UPiBmb250LCBmbG9hdCBzaXplLCBib29s
IGJvbGQsCiAgICAgSFduZERDIGhkYygwKTsKICAgICBTYXZlREMoaGRjKTsKICAgICAKLSAgICA6
OlNlbGVjdE9iamVjdChoZGMsIG1fZm9udC0+Z2V0KCkpOworICAgIDo6U2VsZWN0T2JqZWN0KGhk
YywgbV9oRm9udC0+Z2V0KCkpOwogCiAgICAgd2NoYXJfdCBmYWNlTmFtZVtMRl9GQUNFU0laRV07
CiAgICAgR2V0VGV4dEZhY2UoaGRjLCBMRl9GQUNFU0laRSwgZmFjZU5hbWUpOwotICAgIHBsYXRm
b3JtRGF0YUluaXQobV9mb250LT5nZXQoKSwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CisgICAgcGxh
dGZvcm1EYXRhSW5pdChtX2hGb250LT5nZXQoKSwgc2l6ZSwgaGRjLCBmYWNlTmFtZSk7CiAKICAg
ICBSZXN0b3JlREMoaGRjLCAtMSk7CiB9CiAKLVJlZlB0cjxTaGFyZWRCdWZmZXI+IEZvbnRQbGF0
Zm9ybURhdGE6Om9wZW5UeXBlVGFibGUodWludDMyX3QgdGFibGUpIGNvbnN0Ci17Ci0gICAgSFdu
ZERDIGhkYygwKTsKLSAgICBIR0RJT0JKIG9sZEZvbnQgPSBTZWxlY3RPYmplY3QoaGRjLCBoZm9u
dCgpKTsKLQotICAgIERXT1JEIHNpemUgPSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAwLCAw
KTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7Ci0gICAgaWYgKHNpemUgIT0gR0RJ
X0VSUk9SKSB7Ci0gICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhKHNpemUpOwotICAgICAgICBEV09S
RCByZXN1bHQgPSBHZXRGb250RGF0YShoZGMsIHRhYmxlLCAwLCAoUFZPSUQpZGF0YS5kYXRhKCks
IHNpemUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ID09IHNpemUpOwot
ICAgICAgICBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGRhdGEpKTsKLSAg
ICB9Ci0KLSAgICBTZWxlY3RPYmplY3QoaGRjLCBvbGRGb250KTsKLSAgICByZXR1cm4gYnVmZmVy
OwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2Ny
aXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFn
ZVRyZWVOb2RlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2ZDRiMGRjOTc0NjkyZGQyOTQyNDkzZDYyODkzZGFkY2VlZTE4MGVjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9v
bCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoKQot
ewotICAgIC8vIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVk
IG51bWJlciBvZiBnbHlwaHMgaWYgdGhlIGJ1ZmZlciBjb250YWlucyBzdXJyb2dhdGUgcGFpcnMu
Ci0gICAgLy8gV2Ugd29uJ3Qgc3VwcG9ydCB0aGlzIGZvciBub3cuCi0gICAgaWYgKGJ1ZmZlckxl
bmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgRm9udCYgZm9udCA9IHRoaXMtPmZvbnQoKTsKLSAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxz
ZTsKLSAgICBDR0dseXBoIGxvY2FsR2x5cGhCdWZmZXJbR2x5cGhQYWdlOjpzaXplXTsKLSAgICBD
R0ZvbnRHZXRHbHlwaHNGb3JVbmljaGFycyhmb250LnBsYXRmb3JtRGF0YSgpLmNnRm9udCgpLCBy
ZWludGVycHJldF9jYXN0PGNvbnN0IFVuaUNoYXIqPihidWZmZXIpLCBsb2NhbEdseXBoQnVmZmVy
LCBidWZmZXJMZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6
OnNpemU7IGkrKykgewotICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJbaV07
Ci0gICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIDAp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgp
OwotICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIGhhdmVHbHlwaHM7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDR1dpbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYWI0Y2RjZmQwMzhiZjRkN2FkNDBh
MzA4NTQzOWVjOGQzYmE0YjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnRE
YXRhQ0dXaW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkdseXBo
UGFnZS5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIk9wZW5UeXBlQ0cuaCIKLSNp
bmNsdWRlIDxtbGFuZy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvd2luL0NvcmVUZXh0U1BJV2luLmg+
Ci0jaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4K
LSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udDo6cGxhdGZvcm1Jbml0KCkKLXsKLSAg
ICBtX3N5bnRoZXRpY0JvbGRPZmZzZXQgPSBtX3BsYXRmb3JtRGF0YS5zeW50aGV0aWNCb2xkKCkg
PyAxLjBmIDogMC5mOwotICAgIG1fc2NyaXB0Q2FjaGUgPSAwOwotICAgIG1fc2NyaXB0Rm9udFBy
b3BlcnRpZXMgPSAwOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdESSgpKQotICAgICAg
ICByZXR1cm4gaW5pdEdESUZvbnQoKTsKLQotICAgIENHRm9udFJlZiBmb250ID0gbV9wbGF0Zm9y
bURhdGEuY2dGb250KCk7Ci0gICAgaW50IGlBc2NlbnQgPSBDR0ZvbnRHZXRBc2NlbnQoZm9udCk7
Ci0gICAgaW50IGlEZXNjZW50ID0gQ0dGb250R2V0RGVzY2VudChmb250KTsKLSAgICBpbnQgaUxp
bmVHYXAgPSBDR0ZvbnRHZXRMZWFkaW5nKGZvbnQpOwotICAgIGludCBpQ2FwSGVpZ2h0ID0gQ0dG
b250R2V0Q2FwSGVpZ2h0KGZvbnQpOwotCi0gICAgLy8gVGhlIE9wZW4gRm9udCBGb3JtYXQgZGVz
Y3JpYmVzIHRoZSBPUy8yIFVTRV9UWVBPX01FVFJJQ1MgZmxhZyBhcyBmb2xsb3dzOgotICAgIC8v
ICJJZiBzZXQsIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIHVzZSBPUy8yLnNUeXBvQXNj
ZW5kZXIgLSBPUy8yLnNUeXBvRGVzY2VuZGVyKyBPUy8yLnNUeXBvTGluZUdhcCBhcyBhIHZhbHVl
IGZvciBkZWZhdWx0IGxpbmUgc3BhY2luZyBmb3IgdGhpcyBmb250LiIKLSAgICBzaG9ydCB0eXBv
QXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXA7Ci0gICAgaWYgKE9wZW5UeXBlOjp0cnlH
ZXRUeXBvTWV0cmljcyhhZG9wdENGKENURm9udENyZWF0ZVdpdGhHcmFwaGljc0ZvbnQobV9wbGF0
Zm9ybURhdGEuY2dGb250KCksIG1fcGxhdGZvcm1EYXRhLnNpemUoKSwgbnVsbHB0ciwgbnVsbHB0
cikpLmdldCgpLCB0eXBvQXNjZW50LCB0eXBvRGVzY2VudCwgdHlwb0xpbmVHYXApKSB7Ci0gICAg
ICAgIGlBc2NlbnQgPSB0eXBvQXNjZW50OwotICAgICAgICBpRGVzY2VudCA9IHR5cG9EZXNjZW50
OwotICAgICAgICBpTGluZUdhcCA9IHR5cG9MaW5lR2FwOwotICAgIH0KLQotICAgIHVuc2lnbmVk
IHVuaXRzUGVyRW0gPSBDR0ZvbnRHZXRVbml0c1BlckVtKGZvbnQpOwotICAgIGZsb2F0IHBvaW50
U2l6ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBmbG9hdCBmQXNjZW50ID0gc2NhbGVF
bVRvVW5pdHMoaUFzY2VudCwgdW5pdHNQZXJFbSkgKiBwb2ludFNpemU7Ci0gICAgZmxvYXQgZkRl
c2NlbnQgPSAtc2NhbGVFbVRvVW5pdHMoaURlc2NlbnQsIHVuaXRzUGVyRW0pICogcG9pbnRTaXpl
OwotICAgIGZsb2F0IGZDYXBIZWlnaHQgPSBzY2FsZUVtVG9Vbml0cyhpQ2FwSGVpZ2h0LCB1bml0
c1BlckVtKSAqIHBvaW50U2l6ZTsKLSAgICBmbG9hdCBmTGluZUdhcCA9IHNjYWxlRW1Ub1VuaXRz
KGlMaW5lR2FwLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZTsKLQotICAgIGlmIChvcmlnaW4oKSA9
PSBPcmlnaW46OkxvY2FsKSB7Ci0gICAgICAgIEhXbmREQyBkYygwKTsKLSAgICAgICAgSEdESU9C
SiBvbGRGb250ID0gU2VsZWN0T2JqZWN0KGRjLCBtX3BsYXRmb3JtRGF0YS5oZm9udCgpKTsKLSAg
ICAgICAgaW50IGZhY2VMZW5ndGggPSBHZXRUZXh0RmFjZShkYywgMCwgMCk7Ci0gICAgICAgIFZl
Y3RvcjxXQ0hBUj4gZmFjZU5hbWUoZmFjZUxlbmd0aCk7Ci0gICAgICAgIEdldFRleHRGYWNlKGRj
LCBmYWNlTGVuZ3RoLCBmYWNlTmFtZS5kYXRhKCkpOwotICAgICAgICBTZWxlY3RPYmplY3QoZGMs
IG9sZEZvbnQpOwotCi0gICAgICAgIGZBc2NlbnQgPSBhc2NlbnRDb25zaWRlcmluZ01hY0FzY2Vu
dEhhY2soZmFjZU5hbWUuZGF0YSgpLCBmQXNjZW50LCBmRGVzY2VudCk7Ci0gICAgfQotCi0gICAg
bV9mb250TWV0cmljcy5zZXRBc2NlbnQoZkFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRE
ZXNjZW50KGZEZXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldENhcEhlaWdodChmQ2FwSGVp
Z2h0KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldExpbmVHYXAoZkxpbmVHYXApOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0TGluZVNwYWNpbmcobHJvdW5kZihmQXNjZW50KSArIGxyb3VuZGYoZkRlc2Nl
bnQpICsgbHJvdW5kZihmTGluZUdhcCkpOwotCi0gICAgR2x5cGggeEdseXBoID0gZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKCd4JykuZ2x5cGg7Ci0gICAgaWYgKHhHbHlwaCkgewotICAgICAgICAvLyBN
ZWFzdXJlIHRoZSBhY3R1YWwgY2hhcmFjdGVyICJ4Iiwgc2luY2UgaXQncyBwb3NzaWJsZSBmb3Ig
aXQgdG8gZXh0ZW5kIGJlbG93IHRoZSBiYXNlbGluZSwgYW5kIHdlIG5lZWQgdGhlCi0gICAgICAg
IC8vIHJlcG9ydGVkIHgtaGVpZ2h0IHRvIG9ubHkgaW5jbHVkZSB0aGUgcG9ydGlvbiBvZiB0aGUg
Z2x5cGggdGhhdCBpcyBhYm92ZSB0aGUgYmFzZWxpbmUuCi0gICAgICAgIENHUmVjdCB4Qm94Owot
ICAgICAgICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhmb250LCAmeEdseXBoLCAxLCAmeEJveCk7Ci0g
ICAgICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodChzY2FsZUVtVG9Vbml0cyhDR1JlY3RHZXRN
YXhZKHhCb3gpLCB1bml0c1BlckVtKSAqIHBvaW50U2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaW50IGlYSGVpZ2h0ID0gQ0dGb250R2V0WEhlaWdodChmb250KTsKLSAgICAgICAgbV9mb250
TWV0cmljcy5zZXRYSGVpZ2h0KHNjYWxlRW1Ub1VuaXRzKGlYSGVpZ2h0LCB1bml0c1BlckVtKSAq
IHBvaW50U2l6ZSk7Ci0gICAgfQotCi0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVu
aXRzUGVyRW0pOwotfQotCi1GbG9hdFJlY3QgRm9udDo6cGxhdGZvcm1Cb3VuZHNGb3JHbHlwaChH
bHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBpZiAoIXBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdE
SSgpKQotICAgICAgICByZXR1cm4gYm91bmRzRm9yR0RJR2x5cGgoZ2x5cGgpOwotCi0gICAgQ0dS
ZWN0IGJveDsKLSAgICBDR0ZvbnRHZXRHbHlwaEJCb3hlcyhtX3BsYXRmb3JtRGF0YS5jZ0ZvbnQo
KSwgJmdseXBoLCAxLCAmYm94KTsKLSAgICBmbG9hdCBwb2ludFNpemUgPSBtX3BsYXRmb3JtRGF0
YS5zaXplKCk7Ci0gICAgQ0dGbG9hdCBzY2FsZSA9IHBvaW50U2l6ZSAvIGZvbnRNZXRyaWNzKCku
dW5pdHNQZXJFbSgpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IENHUmVjdEFwcGx5QWZm
aW5lVHJhbnNmb3JtKGJveCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoc2NhbGUsIC1zY2Fs
ZSkpOwotICAgIGlmIChtX3N5bnRoZXRpY0JvbGRPZmZzZXQpCi0gICAgICAgIGJvdW5kaW5nQm94
LnNldFdpZHRoKGJvdW5kaW5nQm94LndpZHRoKCkgKyBtX3N5bnRoZXRpY0JvbGRPZmZzZXQpOwot
Ci0gICAgcmV0dXJuIGJvdW5kaW5nQm94OwotfQotCi1mbG9hdCBGb250OjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17Ci0gICAgaWYgKCFwbGF0Zm9ybURhdGEoKS5z
aXplKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLnVzZUdE
SSgpKQotICAgICAgICByZXR1cm4gd2lkdGhGb3JHRElHbHlwaChnbHlwaCk7Ci0KLSAgICBDR0Zv
bnRSZWYgZm9udCA9IG1fcGxhdGZvcm1EYXRhLmNnRm9udCgpOwotICAgIGZsb2F0IHBvaW50U2l6
ZSA9IG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBDR1NpemUgYWR2YW5jZTsKLSAgICBDR0Fm
ZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUocG9pbnRTaXplLCBw
b2ludFNpemUpOwotIAotICAgIGJvb2wgaXNQcmludGVyRm9udCA9IGZhbHNlOwotICAgIEZvbnRD
YXNjYWRlOjpnZXRQbGF0Zm9ybUdseXBoQWR2YW5jZXMoZm9udCwgbSwgbV9wbGF0Zm9ybURhdGEu
aXNTeXN0ZW1Gb250KCksIGlzUHJpbnRlckZvbnQsIGdseXBoLCBhZHZhbmNlKTsKLQotICAgIHJl
dHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xkT2Zmc2V0OwotfQotCi1QYXRoIEZv
bnQ6OnBsYXRmb3JtUGF0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAotewotICAgIGF1dG8g
Y3RGb250ID0gYWRvcHRDRihDVEZvbnRDcmVhdGVXaXRoR3JhcGhpY3NGb250KHBsYXRmb3JtRGF0
YSgpLmNnRm9udCgpLCBwbGF0Zm9ybURhdGEoKS5zaXplKCksIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0Q0YoQ1RGb250Q3JlYXRlUGF0aEZvckdseXBoKGN0Rm9u
dC5nZXQoKSwgZ2x5cGgsIG51bGxwdHIpKTsKLSAgICBhdXRvIHN5bnRoZXRpY0JvbGRPZmZzZXQg
PSB0aGlzLT5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0gICAgaWYgKHN5bnRoZXRpY0JvbGRPZmZz
ZXQpIHsKLSAgICAgICAgYXV0byBuZXdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxl
KCkpOwotICAgICAgICBDR1BhdGhBZGRQYXRoKG5ld1BhdGguZ2V0KCksIG51bGxwdHIsIHJlc3Vs
dC5nZXQoKSk7Ci0gICAgICAgIGF1dG8gdHJhbnNsYXRpb24gPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2VUcmFuc2xhdGlvbihzeW50aGV0aWNCb2xkT2Zmc2V0LCAwKTsKLSAgICAgICAgQ0dQYXRoQWRk
UGF0aChuZXdQYXRoLmdldCgpLCAmdHJhbnNsYXRpb24sIHJlc3VsdC5nZXQoKSk7Ci0gICAgICAg
IHJldHVybiBuZXdQYXRoOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlQ29weShyZXN1bHQuZ2V0KCkpKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFX
aW4uY3BwCmluZGV4IGVjYTMzMmFmNjUwNmYzODRjZTNkNzczYzNjY2EyZWNiYzg3ZmIwZTIuLjlk
YzI2ZmZkN2NmM2I2MjNjNjE1NzFiMTc1MTJlNDdhZTk5YjZmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhV2lu
LmNwcApAQCAtMTA2LDU2ICsxMDYsMTIgQEAgdm9pZCBGb250Ojppbml0R0RJRm9udCgpCiAgICAg
U2VsZWN0T2JqZWN0KGhkYywgb2xkRm9udCk7CiB9CiAKLXZvaWQgRm9udDo6cGxhdGZvcm1DaGFy
V2lkdGhJbml0KCkKLXsKLSAgICAvLyBHREkgRm9udHMgaW5pdCBjaGFyd2lkdGhzIGluIGluaXRH
RElGb250LgotICAgIGlmICghbV9wbGF0Zm9ybURhdGEudXNlR0RJKCkpIHsKLSAgICAgICAgbV9h
dmdDaGFyV2lkdGggPSAwLmY7Ci0gICAgICAgIG1fbWF4Q2hhcldpZHRoID0gMC5mOwotICAgICAg
ICBpbml0Q2hhcldpZHRocygpOwotICAgIH0KLX0KLQogdm9pZCBGb250OjpwbGF0Zm9ybURlc3Ry
b3koKQogewogICAgIFNjcmlwdEZyZWVDYWNoZSgmbV9zY3JpcHRDYWNoZSk7CiAgICAgZGVsZXRl
IG1fc2NyaXB0Rm9udFByb3BlcnRpZXM7CiB9CiAKLVJlZlB0cjxGb250PiBGb250OjpwbGF0Zm9y
bUNyZWF0ZVNjYWxlZEZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGZsb2F0IHNjYWxlRmFjdG9yKSBjb25zdAotewotICAgIGZsb2F0IHNjYWxlZFNpemUgPSBzY2Fs
ZUZhY3RvciAqIG1fcGxhdGZvcm1EYXRhLnNpemUoKTsKLSAgICBpZiAob3JpZ2luKCkgPT0gT3Jp
Z2luOjpSZW1vdGUpCi0gICAgICAgIHJldHVybiBGb250OjpjcmVhdGUoRm9udFBsYXRmb3JtRGF0
YTo6Y2xvbmVXaXRoU2l6ZShtX3BsYXRmb3JtRGF0YSwgc2NhbGVkU2l6ZSksIEZvbnQ6Ok9yaWdp
bjo6UmVtb3RlKTsKLQotICAgIExPR0ZPTlQgd2luZm9udDsKLSAgICBHZXRPYmplY3QobV9wbGF0
Zm9ybURhdGEuaGZvbnQoKSwgc2l6ZW9mKExPR0ZPTlQpLCAmd2luZm9udCk7Ci0gICAgd2luZm9u
dC5sZkhlaWdodCA9IC1scm91bmRmKHNjYWxlZFNpemUgKiAobV9wbGF0Zm9ybURhdGEudXNlR0RJ
KCkgPyAxIDogMzIpKTsKLSAgICBhdXRvIGhmb250ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVG
b250SW5kaXJlY3QoJndpbmZvbnQpKTsKLSAgICByZXR1cm4gRm9udDo6Y3JlYXRlKEZvbnRQbGF0
Zm9ybURhdGEoV1RGTW92ZShoZm9udCksIHNjYWxlZFNpemUsIG1fcGxhdGZvcm1EYXRhLnN5bnRo
ZXRpY0JvbGQoKSwgbV9wbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSgpLCBtX3BsYXRmb3Jt
RGF0YS51c2VHREkoKSksIG9yaWdpbigpKTsKLX0KLQotdm9pZCBGb250OjpkZXRlcm1pbmVQaXRj
aCgpCi17Ci0gICAgaWYgKG9yaWdpbigpID09IE9yaWdpbjo6UmVtb3RlKSB7Ci0gICAgICAgIG1f
dHJlYXRBc0ZpeGVkUGl0Y2ggPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFRFWFRNRVRSSUNTIGhhdmUgdGhpcy4gIFNldCBtX3RyZWF0QXNGaXhlZFBpdGNoIGJhc2Vk
IG9mZiB0aGF0LgotICAgIEhXbmREQyBkYygwKTsKLSAgICBTYXZlREMoZGMpOwotICAgIFNlbGVj
dE9iamVjdChkYywgbV9wbGF0Zm9ybURhdGEuaGZvbnQoKSk7Ci0KLSAgICAvLyBZZXMsIHRoaXMg
bG9va3MgYmFja3dhcmRzLCBidXQgdGhlIGZpeGVkIHBpdGNoIGJpdCBpcyBhY3R1YWxseSBzZXQg
aWYgdGhlIGZvbnQKLSAgICAvLyBpcyAqbm90KiBmaXhlZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBi
dXQgdHJ1ZS4KLSAgICBURVhUTUVUUklDIHRtOwotICAgIEdldFRleHRNZXRyaWNzKGRjLCAmdG0p
OwotICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSAoKHRtLnRtUGl0Y2hBbmRGYW1pbHkgJiBUTVBG
X0ZJWEVEX1BJVENIKSA9PSAwKTsKLQotICAgIFJlc3RvcmVEQyhkYywgLTEpOwotfQotCiBGbG9h
dFJlY3QgRm9udDo6Ym91bmRzRm9yR0RJR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0CiB7CiAgICAg
SFduZERDIGhkYygwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVXaW4u
Y21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc0FwcGxlV2luLmNtYWtlCmluZGV4IDk5MmUyMzVi
YzJmNDNjMDNiYjMwMWExNzc4YTc0NWE1ZTU1YmUwODYuLmE4MmJiZmFjMWMyMjhkMjZjNDU3ZTI3
ZTNhMmMxM2FhZDAwMmM0ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zQXBwbGVX
aW4uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5jbWFrZQpAQCAtNDgs
NiArNDgsNyBAQCBpZiAoJHtVU0VfRElSRUNUMkR9KQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9DQSBPTikKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
Q0cgT04pCisgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0NUIE9OKQogCiAgICAgc2V0
KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7V0VCS0lUX0xJQlJBUklFU19JTkNMVURFX0RJUn0p
CiAgICAgc2V0KENNQUtFX1JFUVVJUkVEX0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9n
IGIvQ2hhbmdlTG9nCmluZGV4IGIxMDk5N2YxMmZjYzE1YTkzMWQwOWY3MjUzY2QzZDM5NTk4NDhk
YjcuLjU1MzFmYjkxODY1ODlmMWUzZTNjZmZlY2YxODk3N2UwZjNlZGY1NDUgMTAwNjQ0Ci0tLSBh
L0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wOS0xMCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5d
IE1pZ3JhdGUgdGhlIEFwcGxlIFdpbiBwb3J0J3MgZm9udCBjb2RlIHRvIENvcmUgVGV4dCBmcm9t
IENvcmUgR3JhcGhpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxNjM1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNBcHBsZVdpbi5jbWFrZToKKwogMjAyMC0wOS0x
MCAgQWRyaWFuIFBlcmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtDTWFrZV0gVXNlIGltcG9ydGVkIHRhcmdldHMgaW4gZmluZCBtb2R1bGUgZm9yIGxpYnNlY2Nv
bXAK
</data>
<flag name="commit-queue"
          id="423942"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>